Cronos V1.0 Pre-Release Notes
With Cronos moved out of beta, we are getting ready to launch Cronos v1.0. The Cronos V1.0 pre-release is now available, and the chain upgrade dry-run has been successfully completed by Cronos validators. The Cronos V1.0 mainnet timeline and guide will be published soon ahead of the actual upgrade in early 2023.
This blog post recaps the improvements that users and developers can expect from Cronos v1.0. Key expected improvements are as follows:
Mempool prioritization to scale TPS even further;
Optimized node storage: 30% less storage for full nodes;
Generalized reduction of node start-up time by ~50%, and other node performance improvements;
New Cosmos functionalities to pave the way for greater EVM/Cosmos interoperability (IBC incentivization, IBC token transfer memo field).
Prioritized Mempool
Like Cronos binary v0.9.0, Cronos mainnet v1.0 enables mempool prioritization, sorting Ethereum and Cosmos transactions according to EIP1559.
From the standpoint of Cronos end-users and dApp developers, the priority fee is set in the same way as on Ethereum mainnet.
The mempool implementation of Cronos V1.0 enables setting a priority fee for each transaction during CheckTx
. The highest priority transactions will then be prioritized by block proposers. The priority level is determined according to the effective priority fee calculated by EIP1559 feemarket.
Priority mempool and feemarket introduce more customization options when it comes to transaction fees and gas price. With the ExtensionOptionDynamicFeeTx extension option, users can specify a max_priority_price
for Cosmos transactions. Specifically, the gas price computed with the current fee field is used as the feeCap
, and the tipFeeCap
value is required to be provided with the ExtensionOptionDynamicFeeTx
. The tipFeeCap
defaults to max int/value without the extension option.
The corresponding patch to Hermes (the Rust version of the IBC relayer) has been applied. It now supports custom extension options, allowing users to specify the max_priority_price
in Ethermint dynamic fee tx. To enable this feature, validators need to use the priority v1 mempool by setting mempool.version
to “v1
” in config.toml
. Please note that the priority mempool only processes one SDK transaction per sender in the new proposed block at this stage. More details are available here.
Custom Tx Indexer
The custom Ethereum tx indexer has been implemented since v0.9.0, which reduces the size of the transaction indexing data to save disk space.
Based on our testing on Cronos data, the indexing data space savings are around ~90% for Cronos mainnet and ~96% for Cronos testnet (reduction from from 44GB to 1.7GB). In terms of overall storage savings, the impact is around ~15% reduction (2.5T) of total storage space for an archive node and ~27% reduction (935GB) for a full node.
As mentioned in the previous release notes, full nodes will need to enable the custom tx indexer in app.toml
via the json-rpc.enable-indexer
field. To avoid resyncing from scratch, the existing node will need to run the command cronosd index-eth-tx
to manually index the legacy blocks. We recommend checking if the JSON RPC endpoint of the node is still running as usual after enabling the new custom tx indexer.
IBC Incentivisation
A new update of IBC incentivisation allows the sender to set an optional gas fee for the relayer when the sender initiates an IBC transfer. The relayer can optionally choose to receive the fee when the transfer is successfully performed. This update can only be used on a new channel for the time being. It will be available for existing channels at a later date.
IBC Token Transfer Memo Field
An optional memo field is introduced to the IBC token transfer package data to allow arbitrary data to be passed along with any token transfer. This creates a new mechanism to provide extra information about the transfer. This upgrade sets the ground for interesting future use cases such as the bundling of multiple user actions in one single transfer or the enabling of memo-based deposit, once this is fully integrated with the EVM.
IBC Improvements and Bug Fixes
Several improvements and bug fixes have been introduced in the latest IBC v5.1.0 release and are incorporated into this Cronos upgrade. For example, new events are emitted on channel closure, and extra information is emitted from IBC transfers and in the response. Denom tracing gRPC also accepts IBC denom as a query parameter. These changes, together with many other enhancements, will make 3rd party integration easier than ever.
Gas Refund Logic Updates
A new gas refund logic has been implemented since v0.9, instituting a minimum gas charge of 50% of the gas limit. Compared with the previous fee-charging logic which refunds all unused gas fees, this new gas refund logic results in users paying higher fees when they set an unrealistic gas limit for a specific transaction.
The goal of this change is to incentivize users and dApp developers to provide accurate gas limit estimates together with their transactions, which enables the Cronos chain to maximize the number of transactions included in each block.
More details about the new gas refund logic can be found in the V0.9.0 upgrade notes.
GRPC Queries Run Concurrently
We discovered that the execution of GRPC queries was not concurrent and could block the consensus state machine. The Ethermint dependency has been updated to allow running GRPC queries concurrently to increase efficiency. This helps to fix several performance issues in the blockchain.
Cosmos-SDK upgrade
The Cronos v1.0 binary is based on Cosmos-SDK v0.46.5 and Ibc-go v5.1.0.
Cosmos-SDK v0.46.5 introduced a number of new features and API-breaking changes.
Starting from Cosmos-SDK v0.46, group and governance proposals are msg-based. The two CLI commands, tx gov submit-proposal
and tx group submit-proposal
, take a microformat JSON as input, parse it, and submit it as a proposal on chain. However, there is no tooling provided for creating those JSONs. Additionally, the CLI commands assume that the JSON are created beforehand. Thus, this binary has added the transaction group draft-proposal command for generating proposal JSONs.
Also, in the previous binary version, the owner had to input their master password for every key that they owned when they were running keys list
with keyring-backend=os
required. This could be time-consuming for users, especially during the testing process. Cronos V1.0 reduces the user’s password prompts in half when calling the keyring List()
function.
Regarding API updates, the rollback command did not have a rollback state if the block store had an additional block, which then failed to perform its function under the app hash mismatch scenario. This binary includes a fix for the rollback command and allows the block store to be rolled back if such a scenario occurs.
More details are available in the Cosmos-SDK v0.46.x Changelog.
Other Updates
We have added option iavl-disable-fastnode to disable iavl fastnode indexing migration and remedy slow migration speeds.
Additional updates include:
Updating Tendermint to
0.34.23
, which enables caching of some RPC responses;Integrating the file state streamer;
Fixing previous JSON-RPC errors when querying for blocks;
Both
rocksdb
andgoleveldb
are supported in one single binary (which can be configured in theapp.toml
with theapp-db-backend field
).
Next steps
The Cronos v1.0 upgrade guide will be released soon, ahead of the Cronos v1.0 mainnet upgrade in early 2023.
If you would like to test out new features ahead of the mainnet upgrade, please download the Cronos testnet v1.0.0 binary.
If you have any questions or comments about this upgrade, please reach out to the development team via the #cronos-mainnet-beta channel on the Cronos Discord server.
Cronos team