Releases: iotexproject/iotex-core
v2.4.0: fix: nil-safe tracer hooks and exclude system actions from block traces
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 0x0b–0x11 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:
-
Request — The candidate owner calls
CandidateDeactivate(OpRequest). The self-stake bucket is locked (cannot be unstaked) andDeactivatedAtis set to a sentinel value indicating the exit has been requested. -
Schedule — At each epoch boundary, the protocol automatically scans for pending requests. At most one candidate is admitted per
ExitAdmissionIntervalepochs (default: 24 epochs). When admitted, the protocol generates a systemScheduleCandidateDeactivationaction and setsDeactivatedAtto a specific future block height (currentHeight + ExitAdmissionInterval × blocksPerEpoch). -
Confirm — Once
currentHeight >= DeactivatedAt, the candidate owner callsCandidateDeactivate(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
ExitAdmissionIntervalepochs is admitted into the queue, preventing a rush of simultaneous exits. - The request cannot be cancelled once submitted.
ScheduleCandidateDeactivationis a zero-gas system action, not callable by users.
Fix
- Fixed
CandidateDeactivateOpConfirmswallowing errors due to:=shadowing - Fixed
GetStorageRootpolluting contract cache - Fixed contract staking index checking
- Fixed candidate BLS public key update by operator
- Fixed
CandsMapnot 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.3.7: fix(ioswarm): rename jsonCodec to avoid overriding default proto codec
v2.3.6
Full Changelog: v2.3.5...v2.3.6
v2.3.5
v2.3.4
Full Changelog: v2.3.3...v2.3.4
v2.3.4-rc1
Full Changelog: v2.3.4-rc0...v2.3.4-rc1
v2.3.4-rc0
Full Changelog: v2.3.3...v2.3.4-rc0
v2.3.3
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 yourconfig.yamlhasenableStakingIndexer: 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
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