Skip to content

Releases: iotexproject/iotex-core

v2.4.0: fix: nil-safe tracer hooks and exclude system actions from block traces

07 May 23:21

Choose a tag to compare

Summary

v2.4.0 is a mandatory release. It activates at block 48985561, ETA Sun, 07 Jun 2026 23:52:19 +UTC, which brings the Pectra EVM upgrade (IIP-60) and the candidate exit queue mechanism to IoTeX.

Changes

Feat: Pectra EVM Upgrade

Implements four EIPs from the Ethereum Pectra upgrade. All features are activated at yapHeight.

EIP-7702: Set EOA Account Code

Introduces transaction type 0x04, allowing an EOA to temporarily delegate its code execution to a smart contract by signing authorization tuples. Each authorization costs 12,500 gas; creating a new delegated account costs 25,000 gas. Delegated accounts are identified by the prefix 0xef0100 || address. An abuse-prevention blacklist is applied on top of the standard Ethereum behavior.

EIP-7623: Increase Calldata Cost

Raises the cost floor for data-heavy transactions to reduce the maximum possible block size. IoTeX sets TX_COST_FLOOR_PER_TOKEN = 250 instead of Ethereum's value of 40, reflecting IoTeX's existing calldata baseline of 100 gas/byte versus Ethereum's 16 gas/byte, so that the relative cost increase is proportional.

EIP-2935: Historical Block Hashes from State

Stores the most recent 8,191 block hashes in a system contract at 0x0000F90827F1C53a10cb7A02335B175320002935, extending hash accessibility beyond the standard 256-block EVM window. Useful for rollups and cross-chain applications that need to reference older block hashes.

EIP-2537: BLS12-381 Precompiles

Adds seven precompile operations at addresses 0x0b0x11 for BLS12-381 curve operations, enabling efficient on-chain BLS signature verification with 120+ bits of security. Primarily benefits bridges and cross-chain protocols.


Feat: Candidate Exit Queue

Replaces the previous immediate-deactivation model with a queue-based mechanism that enforces a notice period before a candidate can fully exit. The change is designed to give the network visibility into upcoming validator exits and prevent sudden stake withdrawals.

Three-stage lifecycle:

  1. Request — The candidate owner calls CandidateDeactivate(OpRequest). The self-stake bucket is locked (cannot be unstaked) and DeactivatedAt is set to a sentinel value indicating the exit has been requested.

  2. Schedule — At each epoch boundary, the protocol automatically scans for pending requests. At most one candidate is admitted per ExitAdmissionInterval epochs (default: 24 epochs). When admitted, the protocol generates a system ScheduleCandidateDeactivation action and sets DeactivatedAt to a specific future block height (currentHeight + ExitAdmissionInterval × blocksPerEpoch).

  3. Confirm — Once currentHeight >= DeactivatedAt, the candidate owner calls CandidateDeactivate(OpConfirm). The self-stake is cleared (set to 0), the self-stake bucket index is removed from the candidate record, and the candidate is fully deactivated. The former self-stake bucket reverts to a regular vote bucket.

Key constraints:

  • The self-stake bucket cannot be unstaked between request and confirmation.
  • Only one candidate per ExitAdmissionInterval epochs is admitted into the queue, preventing a rush of simultaneous exits.
  • The request cannot be cancelled once submitted.
  • ScheduleCandidateDeactivation is a zero-gas system action, not callable by users.

Fix

  • Fixed CandidateDeactivateOpConfirm swallowing errors due to := shadowing
  • Fixed GetStorageRoot polluting contract cache
  • Fixed contract staking index checking
  • Fixed candidate BLS public key update by operator
  • Fixed CandsMap not saved during full sync
  • Fixed WebSocket double-close

Upgrade Priority

v2.4.0 is a mandatory release for all node types.

Node type Action
Delegate Mandatory
Fullnode Mandatory
API node Mandatory

Commits

v2.3.8...v2.4.0

v2.3.8

30 Mar 02:03

Choose a tag to compare

v2.3.7: fix(ioswarm): rename jsonCodec to avoid overriding default proto codec

24 Mar 08:15

Choose a tag to compare

v2.3.6

20 Mar 04:25

Choose a tag to compare

Full Changelog: v2.3.5...v2.3.6

v2.3.5

02 Mar 07:45

Choose a tag to compare

v2.3.4

23 Feb 09:14

Choose a tag to compare

Full Changelog: v2.3.3...v2.3.4

v2.3.4-rc1

23 Feb 04:38

Choose a tag to compare

v2.3.4-rc1 Pre-release
Pre-release

Full Changelog: v2.3.4-rc0...v2.3.4-rc1

v2.3.4-rc0

22 Feb 03:59

Choose a tag to compare

v2.3.4-rc0 Pre-release
Pre-release

Full Changelog: v2.3.3...v2.3.4-rc0

v2.3.3

25 Dec 07:42

Choose a tag to compare

Summary

v2.3.3 is a major maintenance release that introduces official support for Archive Mode and Prune Mode, providing flexible storage options for different node types. This release also includes significant block synchronization improvements, API enhancements, and critical bug fixes to improve the stability and performance of the IoTeX network.

Note:
There's no change to the mainnet config.yaml and genesis.yaml. You only need to
restart your node with the new v2.3.3 image.

  • Snapshot update: the bundled snapshot no longer contains the legacy stakingindex. If your config.yaml has enableStakingIndexer: true, please remove that entry before starting the node.

Key Features and Enhancements

1. Archive Mode Support

v2.3.3 officially introduces Archive Mode, which stores complete historical state data for all blocks. This mode is essential for applications that need to query historical blockchain states at any point in time.

To enable archive mode, set chain.historyIndexPath in config.yaml to the directory where historical state files will be stored.

2. Prune Mode Support

v2.3.3 introduces Prune Mode, which maintains only the most recent 256 blocks of historical state data. This mode significantly reduces storage requirements while still providing recent state access for most operational needs.

To enable prune mode, first enable archive mode, then set chain.historyBlockRetention in config.yaml to the number of recent blocks whose state you want to retain.

3. Block Synchronization Optimization

Significant improvements have been made to the block synchronization mechanism to enhance sync speed, reliability, and network efficiency.

4. API and Compatibility Enhancements

Enhanced API support and EVM compatibility to improve developer experience and integration capabilities.

  • Web3 API for RollDPoS Protocol: Added comprehensive Web3 API support for the RollDPoS (Roll-Delegated Proof of Stake) protocol, enabling developers to interact with consensus-related data through standard Web3 interfaces.
  • Web3 API for Poll Protocol: Implemented ETH ABI compatibility for the poll protocol, allowing seamless integration with Ethereum tools and improving interoperability with EVM-based services.

5. Bug Fixes

Critical bug fixes to improve system stability and reliability.

  • WebSocket Connection Stability: Fixed a double-close issue in WebSocket connections that could lead to connection instability and unexpected disconnections for clients using WebSocket subscriptions.
  • Query Range Limits: Implemented configurable query range limitations to prevent excessive resource consumption and improve API response times.

Upgrade Priority

v2.3.3 is a maintenance release, so nodes are recommended to upgrade for better performance and stability.

Node type Action
Delegate Recommended
Fullnode Recommended
API node Recommended

Commits

v2.3.2...v2.3.3

v2.3.2

17 Nov 12:27

Choose a tag to compare

This is a maintenance release, Fixing an issue that the contract staking indexer failed to catch up when it fell behind the chain height.

We recommend you upgrade at your convenience to fix the catch up issues.

Full Changelog: v2.3.1...v2.3.2