docs/30_release-notes/99_v2.1.0-rc1.md
This is a RELEASE CANDIDATE for version 2.1.0.
While EOSIO has always been innovative and highly-performant, this release focuses on making it easier to build large-scale applications on the platform, and to maintain them once they’re deployed. It is a reflection of our commitment to abstract away some of the complexities of blockchain development and make it approachable to a broader audience.
EOSIO 2.1.0-rc1 marks the first time we’re releasing a feature that is specifically intended for private blockchains only, with the the ability to remove Context-Free Data. This feature will provide a way for private blockchain administrators to delete a specifically designated section of data, without compromising the integrity of the chain.
The EOSIO 2.1.0-rc1 also includes additional features that optimize blockchain data storage, simplify table management, and provide clustering options for system administrators.
We encourage developers to test the additional features in the EOSIO 2.1.0-rc1, and provide us with feedback. If you would like to offer feedback on the release candidate of EOSIO 2.1.0 and work more closely with our team to improve EOSIO for developers, you can contact our developer relations team at [email protected].
New protocol feature: ACTION_RETURN_VALUE. When activated, this feature provides a way to get return values which are strongly committed to in block headers from actions into external processes without having to rely on get_table or using the debug console via print statements. This allows smart contract developers to be able to process the return value from an action directly; further streamlining the smart contract development process. An example can be seen here.
New protocol feature: CONFIGURABLE_WASM_LIMITS. When activated, this feature allows privileged contracts to set the constraints on WebAssembly code.
The basic means of manipulating consensus parameters for an EOSIO blockchain has been a pair of intrinsic functions: get_blockchain_parameters_packed and set_blockchain_parameters_packed. These intrinsics are tied to a specific and inflexible definition of blockchain parameters and include no convenient means to version the set of parameters; which is an inconvenience to add/remove/modify in future consensus upgrades.
To alleviate this, Nodeos now has a new protocol feature: BLOCKCHAIN_PARAMETERS. When activated, this protocol feature is intended to eventually supplant the existing intrinsics and provide greater flexibility for future consensus upgrades. When activated it will allow contracts to link to the new intrinsics.
Nodeos now has added support for a separate logger to the state history plugin and add some additional logging messages for receiving requests and sending replies. In addition, the trace and chain state log can now be split in the state history plugin as well.
Nodeos now supports integration with Zipkin, an open source distributed tracing system. This will enable system administrators to optimize Nodeos execution for performance-critical applications.
New protocol feature: KV_DATABASE. When activated, this feature provides a Key Value API. This new API is a more flexible, simplified way for developers to create and search on-chain tables. Developers can also modify the table structure after it has been created, which is currently impossible with multi-index tables.
Developers will also be able to split up tables they have already written. An example of this is in the case where the developer has a table that stores a user’s first and last name along with other information. The developer could now decide to split the original table into two separate tables, one containing the first names and one containing the last names.
As with the existing db api, contracts can flexibly specify which authorizing account provides the RAM resources for this data.
An example can be seen here. You can follow the instructions here to quickly create a test chain with Key Value support.
From inception, EOSIO has supported the concept of Context-Free Data, or data that may be removed without affecting the integrity of the chain. This release enables administrators to designate specific data as Context-Free and subsequently remove, or prune, that data from the blockchain while maintaining system stability.
Once this data has been pruned, full validation is no longer possible, only light validation, which requires implicit trust in the block producers. Due to this factor, the Prune Context-Free Data feature is only suitable for a private blockchain as part a larger privacy, security, or regulatory compliance solution.
EOSIO now supports Ubuntu 20.04, CentOS 7.x, and CentOS 8, in addition to previous releases supporting Amazon Linux 2, CentOS 7, Ubuntu 16.04, Ubuntu 18.04 and MacOS 10.14 (Mojave).
Nodoes now features an upgraded version of chainbase using intrusive instead of multi_index. This makes chainbase more performant and features per container memory pools, full exception safety, lighter weight representation of the undo stack, and avl trees instead of rb trees.
Nodeos now supports clustering for the block producer node, enabling blockchain administrators to implement industry standard disaster recovery architectures. Two or more nodes may be deployed as a single logical producer. If the primary node goes down, a system properly configured to leverage this solution can attain similar data recovery guarantees to that of industry leading database and cloud services, with minimal service disruption.
While this feature increases resiliency for block production on public networks, it also provides particular value for private chains running with a single logical producer. Single-producer chains can use it to provide immediate finality with tools to mitigate the risk of a single point of failure.
To use this feature, nodeos must be configured as a producer with the appropriate --block-vault-backend option specified. For example:
nodeos --plugin eosio::producer_plugin --producer-name myproducera --plugin eosio::blockvault_client_plugin --block-vault-backend postgresql://user:[email protected]
For more information on using this feature please see the README.md file in directory ~/eos/plugins/blockvault_client_plugin/README.md.
This feature is being released as a "developer preview" and is not yet ready for production usage. We look forward to community feedback to further develop and harden this feature.
RocksDB is now supported as a storage option behind either the DB or Key Value APIs. This gives blockchain system administrators the flexibility to choose between RAM or RocksDB to optimize Nodeos performance for their workloads.
To use this feature, nodeos must specify which backing store to use by passing the flag --backing-store=rocksdb.
For more information on using this feature please see the 10_how-to-configure-state-storage.md file in directory ~/eos/docs/01_nodeos/02_usage/60_how-to-guides/10_how-to-configure-state-storage.md.
This feature is being released as a "developer preview" and is not yet ready for production usage. We look forward to community feedback to further develop and harden this feature.
A known issue exists with accessing the right version of libpq.so on Centos 7.x, Amazon Linux 2, and Ubuntu 16.04 when running with the prebuilt binaries attached to the v2.1.0-rc1 release notes in Github (binaries located at the bottom of this page). On those platforms please build EOSIO from source using the provided ~/eos/scripts/eosio_build.sh script using the instructions provided here to overcome the issue (you will need to perform a git checkout v2.1.0-rc1 followed by a git submodule update --init --recursive before running the script)
Node operators running version v2.0.x should be able to upgrade to v2.1.0-rc1 using a snapshot. In addition, moving from a chainbase-backed node to a RocksDB-backed node or the reverse will also require a snapshot to migrate.
develop)eosio.version.hppsigned_block_v0 binary format for SHiPfc/src/log/console_appender.cppSpecial thanks to the community contributors that submitted patches for this release: