EOSIO v2.0.0 Release Notes

This release contains security, stability, and miscellaneous fixes.

This release also includes an EOSIO consensus upgrade. Please see the "Consensus Protocol Upgrades" section below for details. These protocol upgrades necessitate a change to the state database structure which requires a nodeos upgrade process that involves more steps than in the case of most minor release upgrades. For details on the upgrade process, see the "Upgrading from previous versions of EOSIO" section below.

Security bug fixes

Consolidated Security Fixes for 2.0.0 (#8420)

  • Limit size of response to API requests
  • EOS VM fixes

Note: These security fixes are relevant to all nodes on EOSIO blockchain networks.

The above is in addition to the other security fixes that were introduced in prior release candidates for 2.0.0:

  • (#8195) Consolidated Security Fixes for 2.0.0-rc2
  • (#8344) Consolidated Security Fixes for 2.0.0-rc3

Stability bug fixes

  • (#8399) Net plugin sync check - 2.0

This above is in addition to the other stability fixes that were introduced in prior release candidates for 2.0.0:

  • (#8084) Net plugin remove read delays - 2.0
  • (#8099) net_plugin remove sync w/peer check - 2.0
  • (#8120) Net plugin sync fix - 2.0
  • (#8229) Net plugin sync
  • (#8285) Net plugin handshake
  • (#8298) net_plugin lib sync
  • (#8303) net_plugin boost asio error handling
  • (#8305) net_plugin thread protection peer logging variables
  • (#8311) Fix race in fc::message_buffer and move message_buffer_tests to fc.
  • (#8307) reset the new handler

Changes

EOS VM: New High Performance WASM Runtimes (#7974, #7975)

Three new WASM runtimes are available in this release: EOS VM Interpreter, EOS VM Just In Time Compiler (JIT), and EOS VM Optimized Compiler.

EOS VM Interpreter is a low latency interpreter and is included to enable future support for smart contract debuggers. EOS VM JIT is a low latency single pass compiler for x86_64 platforms. To use EOS VM Interpreter or EOS VM JIT, set the wasm-runtime to either eos-vm or eos-vm-jit respectively

EOS VM Optimized Compiler is a high performance WASM tier-up runtime available on the x86_64 Linux platform that works in conjunction with the configured baseline runtime (such as EOS VM JIT). When enabled via eos-vm-oc-enable, actions on a contract are initially dispatched to the baseline runtime while EOS VM Optimized Compiler does an optimized compilation in the background. Up to the configured eos-vm-oc-compile-threads compilations can be ongoing simultaneously. Once the background compilation is complete, actions on that contract will then be run with the optimized compiled code from then on. This optimized compile can take a handful of seconds but since it is performed in the background it does not cause delays. Optimized compilations are also saved to a new data file (code_cache.bin in the data directory) so when restarting nodeos there is no need to recompile previously compiled contracts.

None of the EOS VM runtimes require a replay nor activation of any consensus protocol upgrades. They can be switched between (including enabling and disabling EOS VM Optimized Compiler) at will.

At this time, block producers should consider all running EOS VM JIT as the WASM runtime on their block producing nodes. Other non-producing nodes should feel free to use the faster EOS VM Optimized Compiler runtime instead.

Consensus Protocol Upgrades

Refer to this section on the Upgrade Guide: Consensus Protocol Upgrades.

Multi-threaded net_plugin

We have added multi-threading support to net_plugin. Almost all processing in the net_plugin (block propagation, transaction processing, block/transaction packing/unpacking etc.) are now handled by separate threads distinct from the main application thread. This significantly improves transaction processing and block processing performance on multi-producer EOSIO networks. The net-threads arg (defaults to 2) controls the number of worker threads in net_plugin thread pool.(#6845, #7598, #7392, #7786 and related optimizations are available in: #7686, #7785, #7721, #7825, and #7756).

Chain API Enhancements (#7530)

The uint128 and int128 ABI types are now represented as decimal numbers rather than the old little-endian hexadecimal representation. This means that the JSON representation of table rows returned by the get_table_rows RPC will represent fields using this type differently than in prior versions. It also means that the lower_bound and upper_bound fields for get_table_rows RPC requests that search using a uint128 secondary index will need to use the new decimal representation. This change makes the ABI serialization for uint128 and int128 ABI types consistent with eosjs and abieos.

The get_table_rows RPC when used with secondary index types like sha256, i256, and ripemd160 had bugs that scrambled the bytes in the lower_bound and upper_bound input field. This release now fixes these issues allowing clients to properly search for tables rows using these index types.

A new field next_key has been added to the response of the get_table_rows RPC which represents the key of the next row (in the same format as lower_bound and upper_bound) that was not able to be returned in the response due to timeout limitations or the user-specified limit. The value of the next_key can be used as the lower_bound input for subsequent requests in order to retrieve a range of a large number of rows that could not be retrieved within just a single request.

Upgrading from previous versions of EOSIO

Refer to this section on the Upgrade Guide: Upgrading from previous versions of EOSIO.

Deprecation and Removal Notices

WAVM removed (#8407)

The WAVM WebAssembly runtime was deprecated several months ago with the release of EOSIO v2.0.0-rc1 which introduced EOS VM. Now with the release of a stable version 2.0.0, EOS VM (JIT or Optimized Compiler variants) can be used instead of WAVM. So WAVM has now been removed as a WASM runtime option from nodeos.

Deprecation notice reminder

Please refer to the Consolidated EOSIO Deprecations List for the currently active set of deprecation notices.

Other Changes

  • (#7247) Change default log level from debug to info. - develop
  • (#7238) Remove unused cpack bits; these are not being used
  • (#7248) Pass env to build script installs
  • (#6913) Block log util#6884
  • (#7249) Http configurable logging
  • (#7255) Move Test Metrics Code to Agent
  • (#7217) Created Universal Pipeline Configuration File
  • (#7264) use protocol-features-sync-nodes branch for LRT pipeline - develop
  • (#7207) Optimize mongodb plugin
  • (#7276) correct net_plugin's win32 check
  • (#7279) build unittests in c++17, not c++14
  • (#7282) Fix cleos REX help - develop
  • (#7284) remove boost asio string_view workaround
  • (#7286) chainbase uniqueness violation fixes
  • (#7287) restrict range of error codes that contracts are allowed to emit
  • (#7278) simplify openssl setup in cmakelists
  • (#7288) Changes for Boost 1_70_0
  • (#7285) Use of Mac Anka Fleet instead of iMac fleet
  • (#7293) Update EosioTester.cmake.in (develop)
  • (#7290) Block log util test
  • (#6845) Net plugin multithread
  • (#7295) Modify the pipeline control file for triggered builds
  • (#7305) Eliminating trigger to allow for community PR jobs to run again
  • (#7306) when unable to find mongo driver stop cmake
  • (#7309) add debug_mode to state history plugin - develop
  • (#7310) Switched to git checkout of commit + supporting forked repo
  • (#7291) add DB guard check for nodeos_under_min_avail_ram.py
  • (#7240) add signal tests
  • (#7315) Add REX balance info to cleos get account command
  • (#7304) transaction_metadata thread safety
  • (#7321) Only call init if system contract is loaded
  • (#7275) remove win32 from CMakeLists.txt
  • (#7322) Fix under min avail ram test
  • (#7327) fix block serialization order in fork_database::close - develop
  • (#7331) Use debug level logging for --verbose
  • (#7325) Look in both lib and lib64 for CMake modules when building EOSIO Tester
  • (#7337) correct signed mismatch warning in http_plugin
  • (#7348) Anka develop fix
  • (#7320) Add test for various chainbase objects which contain fields that require dynamic allocation
  • (#7350) correct signed mismatch warning in chain controller
  • (#7356) Fixes for Boost 1.70 to compile with our current CMake
  • (#7359) update to use boost 1.70
  • (#7341) Add Version Check for Package Builder
  • (#7367) Fix exception #
  • (#7342) Update to appbase max priority on main thread
  • (#7336) (softfloat sync) clean up strict-aliasing rules warnings
  • (#7371) Adds configuration for replay test pipeline
  • (#7370) Fix -b flag for cleos get table subcommand
  • (#7369) Add boost/asio/io_context.hpp header to transaction_metadata.hpp for branch develop
  • (#7385) Ship: port #7383 and #7384 to develop
  • (#7377) Allow aliases of variants in ABI
  • (#7316) Explicit name
  • (#7389) Fix develop merge
  • (#7379) transaction deadline cleanup
  • (#7380) Producer incoming-transaction-queue-size-mb
  • (#7391) Allow for EOS clone to be a submodule
  • (#7390) port db_modes_test to python
  • (#7399) throw error if trying to create non R1 key on SE or YubiHSM wallet
  • (#7394) (fc sync) static_variant improvements & fix certificate trust when trust settings is empty
  • (#7405) Centralize EOSIO Pipeline
  • (#7401) state database versioning
  • (#7392) Trx blk connections
  • (#7433) use imported targets for boost & cleanup fc/appbase/chainbase standalone usage
  • (#7434) (chainbase) don’t keep file mapping active when in heap/locked mode
  • (#7432) No need to start keosd for cleos command which doesn't need keosd
  • (#7430) Add option for cleos sign subcommand to ask keosd for signing
  • (#7425) txn json to file
  • (#7440) Fix #7436 SIGSEGV - develop
  • (#7461) Name txn_test_gen threads
  • (#7442) Enhance cleos error message when parsing JSON argument
  • (#7451) set initial costs for expensive parallel unit tests
  • (#7366) BATS bash tests for build scripts + various other improvements and fixes
  • (#7467) Pipeline Configuration File Update
  • (#7476) Various improvements from pull/7458
  • (#7488) Various BATS fixes to fix CI/CD
  • (#7489) Fix Incorrectly Resolved and Untested Merge Conflicts in Pipeline Configuration File
  • (#7474) fix copy_bin() for win32 builds
  • (#7478) remove stray SIGUSR1
  • (#7475) guard unix socket support in http_plugin depending on platform support
  • (#7492) Enabled helpers for unpinned builds.
  • (#7482) Let delete-all-blocks option to only remove the contents instead of the directory itself
  • (#7502) [develop] Versioned images (prep for hashing)
  • (#7507) use create_directories in initialize_protocol_features - develop
  • (#7484) return zero exit status for nodeos version, help, fixed reversible, and extracted genesis
  • (#7468) Versioning library
  • (#7486) [develop] Ensure we're in repo root
  • (#7515) Custom path support for eosio installation.
  • (#7516) on supported platforms build with system clang by default
  • (#7519) [develop] Removed lrt from pipeline.jsonc
  • (#7525) [develop] Readlink quick fix and BATS test fixes
  • (#7532) [develop] BASE IMAGE Fixes
  • (#7535) Add -j option to print JSON format for cleos get currency balance.
  • (#7537) connection via listen needs to start in connecting mode
  • (#7497) properly add single quotes for parameter with spaces in logs output
  • (#7544) restore usage of devtoolset-8 on centos7
  • (#7547) Sighup logging
  • (#7421) WebAuthn key and signature support
  • (#7572) [develop] Don't create mongo folders unless ENABLE_MONGO is true
  • (#7576) [develop] Better found/not found messages for clarity
  • (#7545) add nodiscard attribute to tester's push_action
  • (#7581) Update to fc with logger fix
  • (#7558) [develop] Ability to set *_DIR on CLI
  • (#7553) [develop] CMAKE version check before dependencies are installed
  • (#7584) fix hash<>::result_type deprecation spam
  • (#7588) [develop] Various BATS test fixes
  • (#7578) [develop] -i support for relative paths
  • (#7449) add accurate checktime timer for macOS
  • (#7591) [develop] SUDO_COMMAND -> NEW_SUDO_COMMAND (base fixed)
  • (#7594) [develop] Install location fix
  • (#7586) Modify transaction_ack to process bcast_transaction and rejected_transaction correctly
  • (#7585) Enhance cleos to enable new RPC send_transaction
  • (#7599) Use updated sync nodes for sync tests
  • (#7608) indicate in brew bottle mojave is required
  • (#7615) Change hardcoded currency symbol in testnet.template into a variable
  • (#7610) use explicit billing for unapplied and deferred transactions in tester - develop
  • (#7621) Call resolve on connection strand
  • (#7623) additional wasm unittests around max depth
  • (#7607) Improve nodeos make-index speeds
  • (#7598) Net plugin block id notification
  • (#7624) bios-boot-tutorial.py: bugfix, SYS hardcoded instead of using command…
  • (#7632) [develop] issues/7627: Install script missing !
  • (#7634) fix fc::temp_directory usage in tester
  • (#7642) remove stale warning about dirty metadata
  • (#7640) fix win32 build of eosio-blocklog
  • (#7643) remove unused dlfcn.h include; troublesome for win32
  • (#7645) add eosio-blocklog to base install component
  • (#7651) Port #7619 to develop
  • (#7652) remove raise() in keosd in favor of simple appbase quit (de-posix it)
  • (#7453) Refactor unapplied transaction queue
  • (#7657) (chainbase sync) print name of DB causing failure condition & win32 fixes
  • (#7663) Fix path error in cleos set code/abi
  • (#7633) Small optimization to move more trx processing off application thread
  • (#7662) fix fork resolve in special case
  • (#7667) fix 7600 double confirm after changing sign key
  • (#7625) Fix flaky tests - mainly net_plugin fixes
  • (#7672) Fix memory leak
  • (#7676) Remove unused code
  • (#7677) Commas go outside the quotes...
  • (#7675) wasm unit test with an imported function as start function
  • (#7678) Issue 3516 fix
  • (#7404) wtmsig block production
  • (#7686) Unapplied transaction queue performance
  • (#7685) Integration Test descriptions and timeout fix
  • (#7691) Fix nodeos 1.8.x to > 1.7.x peering issue (allowed-connection not equal to "any")
  • (#7250) wabt: reduce redundant memset
  • (#7702) fix producer_plugin watermark tracking - develop
  • (#7477) Fix abi_serializer to encode optional non-built_in types
  • (#7703) return flat_multimap from transaction::validate_and_extract_extensions
  • (#7720) Fix bug to make sed -i work properly on Mac
  • (#7716) [TRAVIS POC] develop Support passing in JOBS for docker/kube multi-tenancy
  • (#7707) add softfloat only injection mode
  • (#7725) Fix increment in test
  • (#7729) Fix db_modes_test
  • (#7734) Fix db exhaustion
  • (#7487) Enable extended_asset to be encoded from array
  • (#7736) unit test ensuring that OOB table init allowed on set code; fails on action
  • (#7744) (appbase) update to get non-option fix & unique_ptr tweak
  • (#7746) (chainbase sync) fix build with boost 1.71
  • (#7721) Improve signature recovery
  • (#7757) remove stale license headers
  • (#7756) block_log performance improvement, and misc.
  • (#7654) exclusively use timer for checktime
  • (#7763) Use fc::cfile instead of std::fstream for state_history
  • (#7770) Net plugin sync fix
  • (#7717) Support for v2 snapshots with pending producer schedules
  • (#7795) Hardcode initial eosio ABI: #7794
  • (#7792) Restore default logging if logging.json is removed when SIGHUP.
  • (#7791) Producer plugin
  • (#7786) Remove redundant work from net plugin
  • (#7785) Optimize block log usage
  • (#7812) Add IMPORTANT file and update README - develop
  • (#7820) rename IMPORTANT to IMPORTANT.md - develop
  • (#7809) Correct cpu_usage calculation when more than one signature
  • (#7803) callback support for checktime timer expiry
  • (#7838) Bandwidth - develop
  • (#7845) Deprecate network version match - develop
  • (#7700) [develop] Travis CI + Buildkite 3.0
  • (#7825) apply_block optimization
  • (#7849) Increase Contracts Builder Timeout + Fix $SKIP_MAC
  • (#7854) Net plugin sync
  • (#7860) [develop] Ensure release flag is added to all builds.
  • (#7873) [develop] Mac Builder Boost Fix
  • (#7868) cleos get actions
  • (#7774) update WAVM to be compatible with LLVM 7 through 9
  • (#7864) Add output of build info on nodeos startup
  • (#7881) [develop] Ensure Artfacts Upload on Failed Tests
  • (#7886) promote read-only disablement log from net_plugin to warn level
  • (#7887) print unix socket path when there is an error starting unix socket server
  • (#7889) Update docker builder tag
  • (#7891) Fix exit crash - develop
  • (#7877) Create Release Build Test
  • (#7883) Add Support for eosio-test-stability Pipeline
  • (#7903) adds support for builder priority queues
  • (#7853) change behavior of recover_key to better support variable length keys
  • (#7901) [develop] Add Trigger for LRTs and Multiversion Tests Post PR
  • (#7914) [Develop] Forked PR fix
  • (#7923) return error when attempting to remove key from YubiHSM wallet
  • (#7910) [Develop] Updated anka plugin, added failover for registries, and added sleep fix for git clone/networking bug
  • (#7926) Better error check in test
  • (#7919) decouple wavm runtime from being required & initial support for platform specific wasm runtimes
  • (#7927) Fix Release Build Type for macOS on Travis CI
  • (#7931) Fix intermittent crash on exit when port already in use - develop
  • (#7930) use -fdiagnostics-color=always even for clang
  • (#7933) [Develop] Support all BK/Travis cases in Submodule Regression Script
  • (#7943) Change eosio-launcher enable-gelf-logging argument default to false.
  • (#7946) Forked chain test error statement - develop
  • (#7948) net_plugin correctly handle unknown_block_exception - develop
  • (#7954) remove bad semicolon (in unused but compiled code)
  • (#7952) Unable to Create Block Log Index #7865
  • (#7953) Refactor producer plugin start_block - develop
  • (#7841) 7646 chain id in blog
  • (#7958) [develop] Fix Mac builds on Travis
  • (#7962) set immutable chain_id during construction of controller
  • (#7957) Upgrade to Boost 1.71.0
  • (#7971) Net plugin unexpected block - develop
  • (#7967) support unix socket HTTP server for nodeos
  • (#7947) Function body code size test
  • (#7955) EOSIO WASM Spec tests
  • (#7978) use the LLVM 7 library provided by SCL on CentOS7
  • (#7983) port consolidated security fixes for 1.8.4 to develop; add unit tests associated with consolidated security fixes for 1.8.1
  • (#7986) Remove unnecessary comment
  • (#7985) more bug fixes with chain_id in state changes
  • (#7974) Experimental/wb2 jit
  • (#7989) Correct designator order for field of get_table_rows_params
  • (#7992) move wasm_allocator from wasm_interface to controller
  • (#7995) new timeout to handle when two jobs on the same host are maxing their…
  • (#7993) update eos-vm to latest develop, fix issues with instantiation limit …
  • (#7991) missing block log chain id unit tests
  • (#8001) Net plugin trx progress - develop
  • (#8003) update eos-vm ref
  • (#7988) Net plugin version match
  • (#8004) bump version
  • (#7975) EOS-VM Optimized Compiler
  • (#8007) disallow WAVM with EOS-VM OC
  • (#8010) Change log level of index write
  • (#8009) pending incoming order on subjective failure
  • (#8013) ensure eos-vm-oc headers get installed
  • (#8008) Increase stability of nodeos_under_min_avail_ram.py - develop
  • (#8015) two fixes for eosio tester cmake modules
  • (#8019) [Develop] Change submodule script to see stderr for git commands
  • (#8014) Retain persisted trx until expired on speculative nodes
  • (#8024) Add optional ability to disable WASM Spec Tests
  • (#8023) Make subjective_cpu_leeway a config option
  • (#8025) Fix build script LLVM symlinking
  • (#8026) update EOS VM Optimized Compiler naming convention
  • (#8012) 7939 trim block log v3 support
  • (#8029) update eos-vm ref and install eos-vm license
  • (#8033) net_plugin better error for unknown block
  • (#8034) EOS VM OC license updates
  • (#8042) [2.0.x] dockerhub | eosio/producer -> eosio/ci
  • (#8050) Add greylist limit - v2.0.x
  • (#8060) #8054: fix commas in ship abi
  • (#8072) nodeos & keosd version reporting - 2.0
  • (#8071) Update cleos to support new producer schedule - 2.0
  • (#8070) don't rebuild llvm unnecessarily during pinned builds - 2.0
  • (#8074) [2.0.x] Upgrade mac anka template to 10.14.6
  • (#8076) Handle cases where version_* not specified in CMakeLists.txt - 2.0
  • (#8088) [2.0.x] Linux build fleet update
  • (#8091) report block extensions_type contents in RPC and eosio-blocklog tool - 2.0
  • (#8105) Modify --print-default-config to exit with success - 2.0
  • (#8113) [2.0.x] WASM Spec Test Step in CI
  • (#8114) [2.0.x] Mac OSX steps need a min of 1 hour
  • (#8127) [2.0.x] Move the ensure step into the build step, eliminating the need for templaters
  • (#8144) fix pinned builds on fresh macOS install - 2.0
  • (#8149) [2.0.x] CI platform directories
  • (#8155) Post State history callback as medium priority - 2.0
  • (#8173) ensure GMP is always dynamically linked - 2.0
  • (#8175) [2.0.x] Unpinned and WASM test fixes
  • (#8168) add harden flags to cicd & pinned builds - 2.0
  • (#8180) [2.0.x] 10 second sleep to address heavy usage wait-network bug in Anka
  • (#8192) Reduce logging - 2.0
  • (#8367) Add Sync from Genesis Test
  • (#8363) Fix linking OpenSSL (branch release/2.0.x)
  • (#8383) Escape BUILDKITE_COMMIT to generate tag properly
  • (#8385) Propagate exceptions out push_block - 2.0
  • (#8391) Add eosio-resume-from-state Test
  • (#8393) Make multiversion protocol test conditional.
  • (#8402) fix EOS VM OC monitor thread name - 2.0
  • (#8406) [2.0.x] Modified Amazon and Centos to use yum install ccache
  • (#8414) Add better logging of exceptions in emit - 2.0
  • (#8328) Fix bios boot python script due to 2.0.x changes
  • (#8293) Add nodeos/cleos/keosd docs from develop, update README
  • (#8425) fix discovery of openssl in tester cmake when OPENSSL_ROOT_DIR not set - 2.0

Thanks!

Special thanks to the community contributors that submitted patches for this release:

  • @UMU618
  • @conr2d
  • @YordanPavlov
  • @baegjae
  • @olexiybuyanskyy
  • @spartucus
  • @rdewilder