Skip to content

Mandel v3.1.0-rc3 Release Notes

Pre-release
Pre-release
Compare
Choose a tag to compare
@arhag arhag released this 05 Aug 22:15
· 551 commits to main since this release
v3.1.0-rc3
f63346e

This 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

  • (#739) [3.1] Add subjective limit to mod_exp host function
  • (#749) [3.1] Use more flexible subjective limits on mod_exp


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

PRs

  • (#654) [3.1] Use signed transaction for PUSH_CREATE action deep-mind logging


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.

  1. 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"]}'
  1. 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
  1. 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