Mandel v3.1.0-rc3 Release Notes
Pre-releaseThis is a RELEASE CANDIDATE for version 3.1.0. The latest STABLE release is v2.0.14.
This release adds subjective limits to the mod_exp
host function along with several bug fixes and documentation updates.
Read on for details.
Host function updates
Subjective limit for mod_exp
PRs
With the introduction of host functions to support EVM it was necessary to set limits to big integer modular exponentiation, mod_exp
, to prevent transactions from being delayed too much beyond the intended deadline timeout.
Note that this is not a change to the protocol since the limits are enforced at block producer nodes when evaluating whether to include a transaction into a block.
Bug fixes
Deep-mind writing packed transactions instead of signed transactions for PUSH_CREATE
In testing, it was discovered deep-mind plug-in was writing the packed transactions into the dmlog on PUSH_CREATE
, which is only appropriate for the MODIFY_CREATE
action. An update was made to match the behavior of the version integrated with EOSIO v2.1, which writes signed transactions instead.
Unexpected behavior in mandel-dev.deb
PRs
- (618) [3.1] ensure an empty llvm-dev dep doesn't make its way to mandel-dev .deb
- (#646) [3.1] make fc::read_file_contents() check for errors instead of silently returning empty string
- (#648) [3.1] more cleanup to EosioTester.cmake to use CMAKE_INSTALL_FULL_LIBDIR instead
- (#680) embed contracts required for native contract unit testing in to libtester
Integration with mandel-dev.deb, mandel-contracts, mandel.cdt, and DUNE revealed unexpected behavior, which required some code cleanup for better error checking.
Building, compatibility, and upgrading
New build procedure
The shell scripts previously recommended for building the software have been removed in favor of a build process entirely driven by CMake. Those wishing to build from source are now responsible for installing the necessary dependencies. The list of dependencies and the recommended build procedure are in the README.md
file. Instructions are also included for efficiently running the tests.
Ubuntu 18.04, 20.04, and 22.04 are the only build platforms that are supported. Other distributions, compilers, and platforms are known to work. Your mileage may vary.
Activating protocol features
The instructions below walk through how to activate the protocol features introduced in the 3.0 and 3.1 releases on a new EOSIO blockchain, e.g. a new local test blockchain. Step 3 does not include the other protocol features introduced in prior releases that you can also activate; simply add additional cleos calls to activate them by the appropriate digest in a suitable order.
If activating the new protocol features on an existing blockchain, you will likely be able to jump ahead to step 3.
- Activate special protocol feature:
PREACTIVATE_FEATURE
All protocol features require a special protocol feature called PREACTIVATE_FEATURE
. If this has not already been activated, then first activate it by running:
curl --request POST \
--url http://<RPC_ENDPOINT_IP_PORT>/v1/producer/schedule_protocol_feature_activations \
-d '{"protocol_features_to_activate": ["0ec7e080177b2c02b278d5088611686b49d739925a92d9bfcacd7fc6b74053bd"]}'
- Install eosio.boot system contract
Activating other protocol features requires a privileged contract to call the appropriate host function to pre-activate the protocol feature. If the contract deployed on the eosio
account already has an activate
action, you will likely be able to skip this step and just use that action in the next step.
If you do not have any contract deployed on the eosio
account, as would be the case for a new blockchain, then you are recommended to deploy the system smart contract eosio.boot
to the eosio
account. To do this, run:
./cleos set contract eosio <EOSIO_SYSTEM_CONTRACTS_DIRECTORY>/contracts/eosio.boot/ eosio.boot.wasm eosio.boot.abi
- Activate remaining protocol features
Call the activate
action on the contract deployed on the eosio
account with a protocol feature's digest as an input to activate that protocol feature. Repeat this in the appropriate order for as many protocol features you wish to activate.
To get the a list of the digests of protocol features, run
curl -X POST http://<RPC_ENDPOINT_IP_PORT>/v1/producer/get_supported_protocol_features | jq .
and then look for feature_digest
field for each protocol feature.
New protocol features introduced in versions 3.0 and 3.1 do not have dependencies on other protocol features or each other. You can use any order to activate them. For example:
# ACTION_RETURN_VALUE
./cleos push action eosio activate '["c3a6138c5061cf291310887c0b5c71fcaffeab90d5deb50d3b9e687cead45071"]' -p eosio
# CONFIGURABLE_WASM_LIMITS2
./cleos push action eosio activate '["d528b9f6e9693f45ed277af93474fd473ce7d831dae2180cca35d907bd10cb40"]' -p eosio
# BLOCKCHAIN_PARAMETERS
./cleos push action eosio activate '["5443fcf88330c586bc0e5f3dee10e7f63c76c00249c87fe4fbf7f38c082006b4"]' -p eosio
# GET_CODE_HASH
./cleos push action eosio activate '["bcd2a26394b36614fd4894241d3c451ab0f6fd110958c3423073621a70826e99"]' -p eosio
# CRYPTO_PRIMITIVES
./cleos push action eosio activate '["6bcb40a24e49c26d0a60513b6aeb8551d264e4717f306b81a37a5afb3b47cedc"]' -p eosio
# GET_BLOCK_NUM
./cleos push action eosio activate '["35c2186cc36f7bb4aeaf4487b36e57039ccf45a9136aa856a5d569ecca55ef2b"]' -p eosio
Deprecations, removals, and dropped support
Dropped support
Ubuntu 16.04, Centos, and macOS
The only officially supported platforms are Ubuntu 18.04, 20.04 and 22.04. All others have been removed from binary package support and/or code level changes.
Developers using cleos
, nodeos
, etc. should look at DUNE which supports Windows 10 and 11, macOS, and any Linux that supports Docker.
Further details on changes since last release
Contributors
Special thanks to the contributors that submitted patches for this release:
Full list of changes since last release
PRs
- (618) [3.1] ensure an empty llvm-dev dep doesn't make its way to mandel-dev .deb
- (627) [3.1] Fix for block producer stuck in coma state
- (633) [3.1] spelling fixes in p2p log messages
- (646) [3.1] make fc::read_file_contents() check for errors instead of silently returning empty string
- (654) [3.1] Use signed transaction for PUSH_CREATE action deep-mind logging.
- (679) [3.1] Fix trx_finality_status_test
- (648) [3.1] more cleanup to EosioTester.cmake to use CMAKE_INSTALL_FULL_LIBDIR instead
- (680) embed contracts required for native contract unit testing in to libtester
- (702) [3.1] remove broad 'using namespace boost' causing float128_t conflict; fixes builds w/ boost 1.80
- (739) [3.1] Add subjective limit to mod_exp host function
- (718) [3.1] set prune logs at debug level except for the initial log when enabling pruning
- (749) [3.1] Use more flexible subjective limits on mod_exp.
- (752) [3.1] bump version to 3.1.0-rc3
- (756) [3.1] Attempt connection retries for duplicate connections
Full Changelog: v3.1.0-rc2...v3.1.0-rc3