0xPolygon/bor - v2.11.0 New

Published: Nov 5, 2026

Release Summary

Bor version v2.11.0 has been released. This is a crucial hardfork, security, and stability update. It is the public version of v2.11.0-priv, which has already been deployed by validators and major RPC providers.

Uburu Hardfork is Live
The main feature is the Uburu hardfork, which is already active on Mainnet at block 96787900 and on Amoy at block 51978200. This hardfork updates the StateReceiver contract, fundamentally changing how state syncs are executed and recorded.

IMPORTANT: Nodes running version v2.10.3 or older are no longer syncing with the network. You must upgrade to v2.11.0 immediately to continue following the chain.

Highlights & Key Changes

Consensus and State Sync: State sync records are now fetched from Heimdall one page at a time. A failed fetch will now cause the entire block to fail, a critical change that prevents nodes from importing blocks without state syncs and diverging from the network.

Execution Stability: The BlockSTM parallel execution engine now has bounds on speculative work per block. If this limit is reached, it safely falls back to serial execution, improving node stability.

RPC and Indexer Fixes: A bug that could crash eth_feeHistory has been fixed. The log indexer has been made more robust by guarding against two reorg/rewind panics and ensuring that cancelled eth_getLogs searches release resources promptly.

Statelessness: To improve network health, witness messages are now bounded on receive, and any import failures caused by a witness are correctly charged to the peer that served it.

Operator Notes

Conditional Transactions Disabled by Default: PIP-15 conditional transactions are now off by default. Operators who serve the bor_sendRawTransactionConditional RPC method must enable it in their configuration by setting [txpool] conditional = true.

Heimdall Connectivity: A node that cannot reach Heimdall will now stall at sprint-end blocks until the connection is restored. This new behavior prevents the node from diverging from the correct chain state.

Release Notes

v2.11.0 is a hardfork, security and stability release on top of `v2.10.3`. It's the public release of `v2.11.0-priv`, which validators and major RPC providers already run.

## Uburu hardfork

Already active on both networks:

| Network | Fork block |
| --- | --- |
| Amoy | `51978200` |
| Mainnet | `96787900` |

Uburu updates the StateReceiver genesis contract (`0x…1001`) at the fork block. It changes how state syncs are executed and recorded.

- Operators on `v2.11.0-priv`: same code, switch to `v2.11.0` at your next maintenance window.
- Nodes still on `v2.10.3` or older stopped following the chain at the fork block. Upgrade immediately.

## Highlights

- **Consensus and state sync**: state-sync records are fetched from Heimdall one page at a time, as the per-block budget admits them. A failed fetch now fails the block, where before it committed it without state syncs. Span lookups by block number follow Heimdall's rule (the highest-id span containing the block). Locally sealed blocks are checked against whitelisted milestones before they're written. Header verification bounds block numbers and base fees on every import path.
- **Execution**: BlockSTM bounds speculative work per block and falls back to serial execution when the bound is hit.
- **Stateless / witnesses**: witness messages are bounded on receive, and witness-caused import failures are charged to the peer that served the witness.
- **State serving**: snap range serving and state iterators no longer read superseded state layers.
- **Txpool**: PIP-15 conditional transactions are off by default. Overdraft checks count queued transactions that will be promoted.
- **RPC and log index**: `eth_feeHistory` no longer crashes on chains with blob fields but no blob schedule, and returns header base fees for historical blocks. Two reorg/rewind panics in the log indexer are guarded. Cancelled `eth_getLogs` searches release the log indexer promptly.
- **Networking**: discv4 only uses bonded peers for endpoint prediction.
- **Go toolchain 1.26.10**.

## Operator notes

- **`[txpool] conditional`** (default `false`): `bor_sendRawTransactionConditional` is refused unless enabled. Set `conditional = true` if you serve it. When enabled, `conditionallifetime` (default `5m`) and `conditionalslots` (default `10000`) bound the conditional txs in the pool.
- A node that can't reach Heimdall now stalls at sprint-end blocks until Heimdall answers. Before, it imported them without state syncs and then diverged.
- At startup, Bor indexes the post-Rio spans in the background. On mainnet that's about 3.1k sequential `GetSpan` calls, and gRPC clients log one "Fetching span" line each.


## What's Changed
* v2.11.0 candidate by @marcello33 in https://github.com/0xPolygon/bor/pull/2527


**Full Changelog**: https://github.com/0xPolygon/bor/compare/v2.10.3...v2.11.0

Links

Back to 0xPolygon/bor releases