Mainnet activation epoch for the Bloom hardfork 🌸️ and its bundled features to epoch 2964 (July 13 2026, 05:58:57 UTC).
Validator and Explorer/RPC nodes are strongly encouraged to upgrade, because this release contains a significant amount of code changes across p2p startup, stream sync, consensus timestamp handling, RPC/tracing, EVM compatibility, node configuration.
Caution
Validator operators must update hmy cli with this release to the latest v1-v2026.1.0-0-g6d31426 version, follow the official validator hmy cli guide: https://docs.harmony.one/home/network/validators/node-setup/hmy-cli-download
Caution
Validator operators must configure Chrony before running this release, follow the official validator Chrony setup guide: https://docs.harmony.one/home/network/validators/node-setup/0.-recommended-chrony-setup-for-validator-nodes.
The released version: v2026.1.0-db22d511d4fb
Set of changes for the hardfork:
High level features overview
| Feature | Description |
|---|---|
| Bloom hardfork | Umbrella activation for the bundled feature set below. |
| Leader Rotation V2 | Updated leader rotation behavior for block proposal. |
| Timestamp Validation | Incremental block timestamp. |
| Duplicate Cross-Link Handling | Rejects duplicate (shardID, blockNum) cross-link entries in beacon block headers. |
| Shard State Validation | Additional shard state validation during header verification. |
| Reject Shard-0 Cross-Link | Rejects shard-0 cross-links in beacon header cross-link lists. |
| Cross-Shard Merkle Proof Binding | Binds cross-shard receipt merkle proofs to authenticated source headers. |
| Cross-Shard Receipt Rollback | Rolls back cross-shard receipts when the creating EVM frame reverts. |
| EIP-2537 Precompiles | BLS12-381 curve operation precompiles. |
| EIP-1153 Transient Storage | TLOAD / TSTORE transient storage opcodes. |
| EIP-7939 CLZ | CLZ (count leading zeros) opcode. |
| EIP-5656 MCOPY | MCOPY memory-copy opcode. |
| EIP-3855 PUSH0 | PUSH0 opcode. |
| EIP-3860 Initcode Metering | Limits and meters contract initcode size/cost. |
| EIP-6780 SELFDESTRUCT | Restricts SELFDESTRUCT semantics to same-transaction creation. |
| EIP-8024 Stack Opcodes | DUPN, SWAPN, and EXCHANGE opcodes. |
| Validator Wrapper Address Bind | Requires validator wrapper RLP address fields to match the storing account. |
| External Stake Slash Denominator | Uses snapshot self-stake in the external-delegator slash denominator. |
| Slash Evidence Uniqueness | Applies stricter canonical uniqueness rules to beacon header slash payloads. |
| Slash Group Ordering | Applies slash groups in canonical lexicographic order during finalization. |
| BLS Proof Binding | Binds BLS proof-of-possession signatures to the validator address and rejects duplicate BLS keys created earlier in the same block. |
| Slash Ballot Signer Verification | Requires ballot signer keys to match the double-sign intersection during verification. |
| Beacon Header Slash Verification | Validates beacon header slash records before block finalization. |
Features overview in details
Harmony CI & Release Modernization
- Migrates CI/release flow from legacy Travis-style behavior to hardened GitHub Actions.
- Pins GitHub Actions by full SHA and limits workflow permissions.
- Removes broken/deprecated release and notification actions.
- Adds full
amd64andarm64build, test, and release coverage with GitHub-hosted runners. - Runs build, unit, RPC, and pyhmy test flows on ARM64 as well, giving users confidence that ARM64 binaries and Docker images are actually tested.
- Builds
harmonyandbootnodeonce, then reuses them in RPC and pyhmy tests via artifacts. - Updates release flow to build binaries, publish Docker images, sign artifacts, generate checksums, and create draft releases.
- Adds zizmor-based GitHub Actions security analysis.
- Reduces duplicated builds, CI noise, and release risk.
Consensus Timestamp Safety
- Adds stricter block timestamp validation rules behind chain configuration.
- Ensures new block timestamps are strictly greater than the parent block timestamp.
- Adds future-time bounds to reduce acceptance of blocks with excessive local-clock skew.
- Updates proposal flow to pass the current local time explicitly into block creation.
- Fixes cascading block-time skew by capping proposer waiting behavior when local time is behind the parent block timestamp.
- Prevents validators from hanging indefinitely while waiting for local wall-clock time to catch up.
- Improves view-change behavior when timestamp skew would otherwise stall proposal flow.
- Adds tests covering strict parent timestamp checks, future timestamp bounds, catch-up behavior, and view-change safety.
Important
This is a consensus-safety and liveness improvement. Validators should upgrade because this release improves timestamp validation and prevents proposer stalls caused by block-time skew.
Time Synchronization / Mandatory Chrony Setup
- Validator nodes must use accurate system time to avoid block timestamp skew and proposer stalls.
- Operators are required to configure Chrony on validator nodes before upgrading.
- Chrony setup is mandatory for validators because this release improves timestamp validation and relies on correct local system time.
- Follow the official validator Chrony setup guide: https://docs.harmony.one/home/network/validators/node-setup/0.-recommended-chrony-setup-for-validator-nodes
Important
Chrony setup is mandatory for validator nodes. Incorrect local time may cause block proposal delays, future-block validation failures, or view-change instability.
Stream Sync & P2P Startup Reliability
- Adds
SetEnoughStreamsCallbacksupport toStreamManager, allowing the sync pipeline to leave startup mode as soon as enough valid streams are available. - Improves startup-mode behavior by reducing unnecessary waiting during peer discovery.
- Optimizes peer discovery timing, DHT request limits, and target valid peer thresholds.
- Adds deterministic and race-safe startup-mode state handling.
- Adds a stream discovery watchdog to prevent nodes from waiting indefinitely when not enough streams are discovered.
- Adds recovery logic to reset stream-manager runtime state without resetting staged sync progress.
- Improves stream lifecycle cleanup and reduces aggressive stream removal in recoverable cases.
- Adds and updates test coverage for startup mode, advertise behavior, stream discovery, DHT request limits, and watchdog recovery.
Important
This improves node startup and sync recovery behavior. It does not require a hardfork activation by itself.
RPC, Tracer & Explorer Compatibility
- Reorganizes block tracer code for readability and maintainability.
- Moves Parity block tracer implementation into the native tracer package.
- Removes deprecated
block_tracer.goandblock_tracer_storage.gofiles. - Renames tracer tests for package consistency.
- Adds JavaScript
callTracerimplementation with asset loading. - Updates tracer gas context handling to use the dynamic gas value instead of the original gas limit.
- Removes debug output from tracer execution paths.
- Improves legacy
structLogJSON encoding compatibility. - Improves trace-result encoding compatibility for older clients and explorer tooling.
- Adds sentinel error handling for ABI event signature mismatches.
- Verifies event signature topics before unpacking ABI logs.
- Adds rate limiting support for auth trace APIs.
- Adds rate-limiter guard logic so invalid non-positive limits do not break RPC startup.
- Separates auth HTTP and WebSocket server tracking.
- Caches method-filter regex compilation for auth RPC filtering.
Important
Explorer/RPC operators should upgrade because this release includes trace API compatibility fixes and rate-limiting safeguards for expensive RPC paths.
EVM / Ethereum Compatibility Groundwork
- Adds EIP-7939
CLZopcode support and chain-rule plumbing. - Adds EIP-5656
MCOPYopcode support and rule checks. - Adds EIP-6780
SELFDESTRUCTbehavior rule plumbing. - Adds EIP-3860 initcode size limit and initcode gas-metering support.
- Adds EIP-3855
PUSH0opcode support. - Adds Prague fork configuration and rule plumbing.
- Adds EIP-2935 block hash history support under Prague-related rules.
- Adds EIP-8024 support, including new stack-manipulation opcode plumbing.
- Adds automatic epoch-based EIP activation checks where applicable.
- Adds tests for EIP activation boundaries, disabled-rule behavior, gas accounting, opcode availability, and fork-rule configuration.
Important
This section documents code support and EVM compatibility groundwork.
Mainnet hardfork activation details are intentionally not included here and should be added by the dedicated hardfork PR.
Node Configuration, BLS Keys & Runtime Safety
- Updates default
BLSKeys.MaxKeysfrom10to11. - Bumps config handling for the new BLS key limit.
- Uses read locks for decider read paths to reduce unnecessary lock contention.
- Improves method-filter handling for authenticated RPC servers.
- Improves startup and shutdown behavior in stream and RPC-related services.
- Adds tests for config migration, decider access, RPC auth server behavior, and rate-limiter edge cases.
Docker image
docker pull harmonyone/harmony:v2026.1.0Docker Hub:
https://hub.docker.com/r/harmonyone/harmony/tags?name=v2026.1.0
Verify release binaries
GPG signing key fingerprint:
539910B02B5BAC637F6615C9799ACE3A9B83DF60
gpg --import RELEASE_SIGNING_KEY.asc
gpg --verify harmony-amd64.sig harmony-amd64
gpg --verify harmony-arm64.sig harmony-arm64
sha256sum -c harmony-amd64.sha256
sha256sum -c harmony-arm64.sha256What's Changed
- refactor(ci): remove discontinued macos-13 by @mur-me in #5012
- Fix for rpc for 2026.0.0 release by @Frozen in #5018
- Optimize Stream Sync Peer Discovery: Reduce Startup Time to Seconds by @GheisMohammadi in #4937
- refactor(config): update default BLSKeys MaxKeys to 11 by @mur-me in #5015
- consensus: reduce decider lock contention with RLock by @GheisMohammadi in #5023
- fix(rpc): track auth HTTP/WS servers separately; cache method-filter … by @GheisMohammadi in #5024
- Add RPC Auth Rate Limit by @GheisMohammadi in #5026
- Fix RPC rate limiter configuration handling by @GheisMohammadi in #5025
- Add timestamp checks for block header validation by @GheisMohammadi in #5020
- sync: add stream watchdog recovery reset by @GheisMohammadi in #5011
- add sentinel error for event signature mismatches by @GheisMohammadi in #5032
- EIP-7939: CLZ opcode by @GheisMohammadi in #4997
- EIP-5656: MCOPY opcode support by @GheisMohammadi in #4991
- EIP-6780: SELFDESTRUCT only in same transaction by @GheisMohammadi in #4994
- fix legacy structLog JSON encoding by @GheisMohammadi in #5031
- Implement NTP offset updates for block timestamps every minute by @Frozen in #5028
- Activate ntp time on devnet by @Frozen in #5034
- fix(ntp): move activation epoch to the 47190 epoch by @mur-me in #5036
- EIP-3860: Limit and meter initcode by @GheisMohammadi in #4993
- EIP-3855: Add PUSH0 OpCode by @GheisMohammadi in #4975
- EIP-2935: Block Hash History by @GheisMohammadi in #4970
- Eip-8024: Backward compatible SWAPN, DUPN, EXCHANGE by @GheisMohammadi in #4998
- Remove NTP configurations and functionality by @Frozen in #5042
- Add call tracer js implementation by @Frozen in #5022
- Fix EIPs activations by @GheisMohammadi in #5038
- Testnet activation epoch by @Frozen in #5045
- consensus: fix cascading block-time skew with stall-safe timestamp caps by @GheisMohammadi in #5048
- ci: Migrate CI from Travis to GitHub Actions by @Frozen in #5029
- core: tighten cross-shard receipt proof consistency checks by @GheisMohammadi in #5039
- core: Beacon cross-link validation hardening by @GheisMohammadi in #5040
- core: beacon slash header validation by @GheisMohammadi in #5041
- core: fix cross-link signature verifier cache key to include shard ID by @GheisMohammadi in #5043
- core: duplicate cross-link rejection by @GheisMohammadi in #5046
- core: Fix double-sign external slash denominator to use snapshot self-stake by @GheisMohammadi in #5050
- Staking: bind validator wrapper RLP address to storing account by @GheisMohammadi in #5051
- core: Canonical slash group ordering for beacon finalization by @GheisMohammadi in #5054
- slash: bind double-sign evidence epoch to block height by @GheisMohammadi in #5055
- staking: bind BLS proof-of-possession to validator address by @GheisMohammadi in #5059
- Add CXReceiptStateRollbackEpoch for cross-shard receipt handling by @Frozen in #5063
- Fix slash verification to use double-sign key intersection only by @GheisMohammadi in #5065
- refactor(github_ci): enhance release flow by @mur-me in #5061
- Reject shard state on non-last blocks and add tests by @Frozen in #5064
- Verify beacon header slash records during block processing by @GheisMohammadi in #5068
- feat(github_ci): speed up test runs with one binary build by @mur-me in #5067
- Refactor configuration to update epoch values for features and fixes by @Frozen in #5058
- Update epoch values for testnet parameters by @Frozen in #5069
- feat(github_ci): enable pyhmy tests on arm architecture by @mur-me in #5070
- [refactor] - fix the proto.Docker and github CI, enable zizmor linter by @mur-me in #5071
- Decouple EIP-1153, CLZ, and MCOPY activation and fix testnet/devnet replay compatibility by @GheisMohammadi in #5072
- [fix] - switch unit tests to the new proto image, enable unit tests on the arm64 by @mur-me in #5073
- Add Bloom hardfork for bundled mainnet feature activation by @GheisMohammadi in #5075
- fix(consensus): harden NthNextValidatorV2 against missing slot entries by @GheisMohammadi in #5076
- localnet: activate Bloom hardfork and bundled features at epoch 5 by @GheisMohammadi in #5077
- testnet: move Bloom hardfork activation to epoch 7414 by @GheisMohammadi in #5078
- fix(unit_test): fix the TestBloomEpochConfigured, epoch for the testnet should be 7414 by @mur-me in #5079
- fix(unit_test): fix the TestBloomEpochConfigured, the smallest epoch should be choosen by @mur-me in #5080
- Activate Bloom hardfork on mainnet (epoch 2964) by @GheisMohammadi in #5081
- Dev fix main conflicts by @GheisMohammadi in #5082
- Release Candidate 2026.1.0 (dev -> main) aka Bloom 🌸️ by @mur-me in #5053
Full Changelog: v2026.0.0...v2026.1.0