Releases: 0xPolygon/bor
v2.7.0
This release contains several improvements and includes changes planned for the upcoming Giugliano Hard Fork.
The Giugliano Hard Fork on Mainnet is scheduled for block number 85268500, which is expected to occur on April 8, 2026, 2 PM UTC. Make sure to update all your Mainnet nodes before this time.
Note:
- The
--log-levelflag is deprecated, use--verbosityflag going forward. - The
--rpc.batchlimitflag is renamed to-rpc.batch-request-limit.
What's Changed
Features
- (feat): preconf + private tx relay by @manav2401 in #2004
- (feat): re-enable snap sync by @manav2401 in #2077
- Prefetch Transactions from Pool & PIP-66 Back by @lucca30 in #2031
- Dynamic Target Gas for stable prices by @lucca30 in #2085
- consensus, core, eth, internal, miner, rpc, tests: implement additional rpc methods by @marcello33 in #2063
- core/rawdb: added filesystem based witness storage (with --witness.filestore flag) by @pratikspatil024 in #2098
- consensus, ethapi: embed gas target and base fee params in block header extra field (post Giugliano HF) by @pratikspatil024 in #2135
- Giugliano HF by @lucca30 in #2099
- core/vm: add kzg precompile back for madhugiri forks by @manav2401 in #2140
- consensus/bor, eth: add Heimdall HTTP/gRPC/WS failover with health recovery by @pratikspatil024 in #2050
- feat: add network diagnostics and state dump action by @kamuikatsurgi in #2051
Performance
- added rate limiting to address biased trie cache preloading by @pratikspatil024 in #2029
- core/state: reduce lock contention in triePrefetcher.used() by @cffls in #2049
- blockstm: replace O(n²) UpdateDeps with inverted-index DepsBuilder by @kamuikatsurgi in #2094
- core/txpool: use reheap snapshot to avoid duplicate entries in heap by @manav2401 in #2095
- eth/protocols/wit: remove peer lock held across p2p.Send to prevent broadcast stalls by @pratikspatil024 in #2120
- Use PGO when building binaries by @cffls in #2138
- eth/p2p: raise default tx announcement queue limit from 4096 to 16384 by @lucca30 in #2151
Bug Fixes
- Fix more race conditions detected by -race by @cffls in #2042
- Fix formatting of static-nodes in config.toml by @adamdossa in #2048
- fix root hash calculation during reorgs by @marcello33 in #2080
- eth/handler: fix issue 55 by @marcello33 in #2084
- Clean up lastRebroadcast on transaction rejection by @LarryArnault45 in #2038
- core/vm, core, miner: fix interrupt propagation to nested EVM calls by @lucca30 in #2092
- consensus/bor: prevent empty blocks when remaining build time is insufficient by @cffls in #2093
- Improve scenario of timestamp check in Rio hardfork by @lucca30 in #2091
- fix(server): wire Identity config to node.UserIdent in buildNode by @minhd-vu in #2105
- eth: fix overflow impacting milestone lock and syncing by @marcello33 in #2111
- Fix more race conditions by @cffls in #2104
- Fix SDK regression by @adamdossa in #2121
- Fix SDK regression part deux by @adamdossa in #2122
- Fix SDK regression part 3 by @adamdossa in #2124
- Fix SDK regression part 4 by @adamdossa in #2125
- core: fix finalStateDB pointing to backupStateDB (block-stm) by @pratikspatil024 in #2137
- core/rawdb, p2p, eth: fix graceful shutdown of pruner and dial scheduler by @kamuikatsurgi in #2079
- disable eth_simulateV1 by @marcello33 in #2161
Observability & Metrics
- Sync metrics by @avalkov in #1928
- core, eth, miner: add metrics to track block creation and write pipeline latency by @pratikspatil024 in #2097
- Add prefetcher timer by @cffls in #2115
- Slow TX Observability, Per-TX Latency Metric, and Timeout-Interrupt Diagnostics by @lucca30 in #2134
- metrics: add more go runtime metrics by @manav2401 in #2109
- Including Missing Metrics from Import Blocks path into Production by @lucca30 in #2139
- eth/protocols/wit: added witness broadcast metrics by @pratikspatil024 in #2120
Configuration & CLI
- internal/cli, packaging, docs: add config.toml updater, refresh templates, and document workflow by @kamuikatsurgi in #2100
- internal/cli, node, rpc: port missing geth flags by @kamuikatsurgi in #2106
- internal/cli/server: wire txpool.locals flag to txpool config by @manav2401 in #2114
- eth/filters, rpc: add --rpc.rangelimit flag and fix filter config pass-through by @lucca30 in #2149
- eth/ethconfig: remove redundant RPCLogQueryLimit field by @lucca30 in #2154
- witness: disable filestore by default by @pratikspatil024 in #2144
- docs/cli: update the docs with --witness.filestore flag by @pratikspatil024 in #2108
- chore: reuse bor dumpconfig by @kamuikatsurgi in #2117
- Change log level of commit interrupt on non-BP nodes by @cffls in #2133
Chain Config
- added giugliano block for amoy by @pratikspatil024 in #2141
- added giugliano block for mainnet by @pratikspatil024 in #2164
Testing
- consensus/bor: add test coverage by @cffls in #2046
- fix flaky TestPrivateTxSubmissionRetry timing races by @lucca30 in #2089
CI, Build & Chores
- refactor: ci by @kamuikatsurgi in #2044
- Bump go version to 1.25.7 by @lucca30 in #2045
- fix: configure Docker daemon min API version for Pumba compatibility by @kamuikatsurgi in #2052
- backport: master to develop by @kamuikatsurgi in #2066
- (chore): bump go version to 1.26 by @manav2401 in #2067
- disabling provenance/SBOM for those per-arch docker build by @sreevalsanmr in #2071
- Backmerge master into develop by @manav2401 in #2072
- (chore): correct go version to 1.26.0 by @manav2401 in #2074
- chore: remove pumba compatibility step from stateless e2e by @kamuikatsurgi in #2083
- fix govuln by @marcello33 in #2081
- build(deps): bump github.com/pion/dtls/v3 from 3.0.10 to 3.0.11 by @dependabot in #2086
- build(deps): bump filippo.io/edwards25519 from 1.1.0 to 1.1.1 by @dependabot in #2069
- fix: avoid mirror.gcr.io images by @kamuikatsurgi in #2102
- Allow claude PR comments by @marcello33 in #2101
- (chore): bump claude code actions to v1.0.69 by @manav2401 in #2103
- Clean up Claude config by @adamdossa in #2127
- Add Claude Code security review rules for Bor codebase by @mt-polygon-technology in #2110
- Update Claude Settings by @adamdossa in #2130
- Remove Geth references from README.md and remove Claude full output by @adamdossa in #2132
- Adding workflow to publish the docker image on GHCR by @0xsajal in #2123
- Bump to go1.26.1 by @lucca30 in #2119
New Contributors
- @LarryArnault45 made their first contribution in #2038
- @minhd-vu made their first contribution in #2105
- @mt-polygon-technology made their first contribution in #2110
Full Changelog: v2.6.0...v2.7.0
v2.7.0-beta5
Full Changelog: v2.7.0-beta4...v2.7.0-beta5
v2.7.0-beta4
What's Changed
- eth/ethconfig: remove redundant RPCLogQueryLimit field by @lucca30 in #2154
- eth/p2p: raise default tx announcement queue limit from 4096 to 16384 by @lucca30 in #2151
Full Changelog: v2.7.0-beta3...v2.7.0-beta4
v2.7.0-beta3
What's Changed
- witness: disable filestore by default by @pratikspatil024 in #2144
- eth/filters, rpc: add --rpc.rangelimit flag and fix filter config pass-through by @lucca30 in #2149
- core/vm: add kzg precompile back for madhugiri forks by @manav2401 in #2140
- gomemlimit fix: additional changes for configs / fix gomemlimit by @marcello33 in 155fe5e
Full Changelog: v2.7.0-beta2...v2.7.0-beta3
v2.6.5
What's Changed
Full Changelog: v2.6.3...v2.6.5
v2.7.0-beta2
This release schedules the Giugliano Hard Fork for Amoy.
The Giugliano Hard Fork on Amoy is scheduled for block number 35573500. Which is expected to hit at Mar-23-2026 2 PM UTC. Make sure to update all your Amoy nodes before this time.
What's Changed
- added giugliano block for amoy by @pratikspatil024 in #2141
Full Changelog: v2.7.0-beta...v2.7.0-beta2
v2.7.0-beta
This release contains several improvements and includes changes planned for the upcoming Giugliano Hard Fork.
Note:
- The hard fork is not activated yet. A follow-up release with the Amoy hard fork block number will be published next week.
- The
--log-levelflag is deprecated, use--verbosityflag going forward. - The
--rpc.batchlimitflag is renamed to-rpc.batch-request-limit.
What's Changed
Features
- Giugliano Hard Fork by @lucca30 in #2099
- consensus, ethapi: embed gas target and base fee params in block header extra field (post Giugliano HF) by @pratikspatil024 in #2135
- Dynamic target gas for stable prices by @lucca30 in #2085
- (feat): preconf + private tx relay by @manav2401 in #2004
- (feat): re-enable snap sync by @manav2401 in #2077
- Prefetch transactions from pool & PIP-66 back by @lucca30 in #2031
- feat: add network diagnostics and state dump action by @kamuikatsurgi in #2051
- consensus, core, eth, internal, miner, rpc, tests: implement additional RPC methods by @marcello33 in #2063
- core/rawdb: added filesystem-based witness storage (with --witness.filestore flag) by @pratikspatil024 in #2098
- consensus/bor, eth: add Heimdall HTTP/gRPC/WS failover with health recovery by @pratikspatil024 in #2050
Performance
- blockstm: replace O(n²) UpdateDeps with inverted-index DepsBuilder by @kamuikatsurgi in #2094
- core/state: reduce lock contention in triePrefetcher.used() by @cffls in #2049
- Added rate limiting to address biased trie cache preloading by @pratikspatil024 in #2029
- Use PGO when building binaries by @cffls in #2138
- Add prefetcher timer by @cffls in #2115
Bug Fixes
- Fix more race conditions detected by -race by @cffls in #2042
- Fix more race conditions by @cffls in #2104
- Fix root hash calculation during reorgs by @marcello33 in #2080
- eth/handler: fix issue 55 by @marcello33 in #2084
- eth: fix overflow impacting milestone lock and syncing by @marcello33 in #2111
- core/vm, core, miner: fix interrupt propagation to nested EVM calls by @lucca30 in #2092
- core: fix finalStateDB pointing to backupStateDB (block-stm) by @pratikspatil024 in #2137
- consensus/bor: prevent empty blocks when remaining build time is insufficient by @cffls in #2093
- Improve scenario of timestamp check in Rio hardfork by @lucca30 in #2091
- Fix formatting of static-nodes in config.toml by @adamdossa in #2048
- fix(server): wire Identity config to node.UserIdent in buildNode by @minhd-vu in #2105
- Fix SDK regression (parts 1–4) by @adamdossa in #2121, #2122, #2124, #2125
- Clean up lastRebroadcast on transaction rejection by @LarryArnault45 in #2038
- core/txpool: use reheap snapshot to avoid duplicate entries in heap by @manav2401 in #2095
- core/rawdb, p2p, eth: fix graceful shutdown of pruner and dial scheduler by @kamuikatsurgi in #2079
- eth/protocols/wit: remove peer lock held across p2p.Send to prevent broadcast stalls by @pratikspatil024 in #2120
- fix flaky TestPrivateTxSubmissionRetry timing races by @lucca30 in #2089
Observability & Metrics
- Sync metrics by @avalkov in #1928
- core, eth, miner: add metrics to track block creation and write pipeline latency by @pratikspatil024 in #2097
- metrics: add more go runtime metrics by @manav2401 in #2109
- Slow TX observability, per-TX latency metric, and timeout-interrupt diagnostics by @lucca30 in #2134
- Including missing metrics from import blocks path into production by @lucca30 in #2139
- Change log level of commit interrupt on non-BP nodes by @cffls in #2133
Configuration & CLI
- internal/cli, packaging, docs: add config.toml updater, refresh templates, and document workflow by @kamuikatsurgi in #2100
- internal/cli, node, rpc: port missing geth flags by @kamuikatsurgi in #2106
- internal/cli/server: wire txpool.locals flag to txpool config by @manav2401 in #2114
- docs/cli: update the docs with --witness.filestore flag by @pratikspatil024 in #2108
CI, Build & Chores
- refactor: ci by @kamuikatsurgi in #2044
- Bump go version to 1.25.7 by @lucca30 in #2045
- (chore): bump go version to 1.26.0 by @manav2401 in #2067, #2074
- Bump to go1.26.1 by @lucca30 in #2119
- consensus/bor: add test coverage by @cffls in #2046
- fix: configure Docker daemon min API version for Pumba compatibility by @kamuikatsurgi in #2052
- chore: remove pumba compatibility step from stateless e2e by @kamuikatsurgi in #2083
- fix: avoid mirror.gcr.io images by @kamuikatsurgi in #2102
- fix govuln by @marcello33 in #2081
- disabling provenance/SBOM for per-arch docker builds by @sreevalsanmr in #2071
- Adding workflow to publish the docker image on GHCR by @0xsajal in #2123
- chore: reuse bor dumpconfig by @kamuikatsurgi in #2117
- build(deps): bump github.com/pion/dtls/v3 from 3.0.10 to 3.0.11 by @dependabot[bot] in #2086
- build(deps): bump filippo.io/edwards25519 from 1.1.0 to 1.1.1 by @dependabot[bot] in #2069
- backport: master to develop by @kamuikatsurgi in #2066
- Backmerge master into develop by @manav2401 in #2072
- Remove Geth references from README.md by @adamdossa in #2132
- Add Claude Code security review rules by @mt-polygon-technology in #2110
- Allow claude PR comments by @marcello33 in #2101
- Clean up Claude config by @adamdossa in #2127
- Update Claude Settings by @adamdossa in #2130
- (chore): bump claude code actions to v1.0.69 by @manav2401 in #2103
New Contributors
- @LarryArnault45 made their first contribution in #2038
- @minhd-vu made their first contribution in #2105
- @mt-polygon-technology made their first contribution in #2110
Full Changelog: v2.6.0...v2.7.0-beta
v2.6.3
This release introduces Dynamic Target Gas (--miner.enableDynamicTargetGas), a new mechanism that allows Polygon PoS blocks to deliver full gas limit capacity while keeping BaseFee stable.
The existing Dynamic Gas Limit mechanism controlled BaseFee by shrinking the block gas limit, effective at price stabilisation, but at the cost of capacity. Reduced capacity makes the network more susceptible to priority fee spikes, since fewer transactions fit per block.
Dynamic Target Gas takes a different approach: the block gas limit stays at 100%, and only the EIP-1559 fill target percentage moves. When BaseFee is below the target, the fill target rises, allowing blocks to be fuller. When BaseFee climbs above the target, the fill target drops, applying just enough downward pressure to bring the price back, without ever reducing the actual block capacity available to users.
| Flag | Description |
|---|---|
--miner.enableDynamicTargetGas |
Enable dynamic EIP-1559 target gas adjustment (post-Lisovo, mutually exclusive with enableDynamicGasLimit) |
--miner.targetBaseFee |
Target base fee in wei the mechanism tries to hold (e.g. 30000000000 for 30 gwei) |
--miner.targetGasMinPercentage |
Minimum target gas percentage (1–100) the mechanism can set |
--miner.targetGasMaxPercentage |
Maximum target gas percentage (1–100) the mechanism can set |
This release also includes a number of bug fixes and minor improvements, see the full changelog below.
What's Changed
Bug Fixes
- eth: fix overflow impacting milestone lock and syncing by @marcello33 in #2111
- eth/handler: fix issue 55 by @ marcello33 in #2084
- fix root hash calculation during reorgs by @ marcello33 in #2080
- core/rawdb, p2p, eth: fix graceful shutdown of pruner and dial scheduler by @kamuikatsurgi in #2079
- fix(server): wire Identity config to node.UserIdent in buildNode by @minhd-vu in #2105
- internal/cli/server: wire txpool.locals flag to txpool config by @manav2401 in #2114
- Clean up lastRebroadcast on transaction rejection by @LarryArnault45 in #2038
- fix govuln by @ marcello33 in #2081
Features
- Dynamic Target Gas for stable prices by @lucca30 in #2085
- Sync metrics by @avalkov in #1928
- metrics: add more go runtime metrics by @manav2401 in #2109
Dependencies
- build(deps): bump github.com/pion/dtls/v3 from 3.0.10 to 3.0.11 by @dependabot in #2086
- build(deps): bump filippo.io/edwards25519 from 1.1.0 to 1.1.1 by @dependabot in #2069
CI / Infra
- fix: avoid mirror.gcr.io images by @kamuikatsurgi in #2102
- chore: remove pumba compatibility step from stateless e2e by @kamuikatsurgi in #2083
- Adding workflow to publish the docker image on GHCR by @0xsajal in #2123
Full Changelog: v2.6.2...v2.6.3
v2.6.3-beta3
What's Changed
#2123 Adding workflow to publish the docker image on GHCR
Full Changelog: v2.6.2-beta2...v2.6.3-beta3
v2.6.3-beta2
This release includes additional observability for bor system metrics.
What's Changed
Observability
- metrics: add more go runtime metrics by @manav2401 in #2109
Full Changelog: v2.6.3-beta...v2.6.3-beta2