Description
This release ships the BEP-675 BidBlock (mev_sendBidBlock) MEV path, in which builders submit fully-built blocks rather than bid bundles, together with a state-root correctness fix that affects the Pasteur hardfork transition, and the move to the bnb-chain/reth v0.1.2 dependency release.
Pasteur itself was implemented in v0.1.0 and scheduled for BSC mainnet in v0.1.1 at 2026-08-25 02:30:00 AM UTC (unix 1787625000). That timing is unchanged here.
⚠️ Note
- Pasteur transition state root. Four sites committed state straight to the DB without announcing it to the incremental state-root pipeline, so a block could commit a root describing the pre-write state —
upgrade_system_contract(contract code → codeHash, which is what runs at a hardfork transition),apply_history_storage_account(EIP-2935), anddistribute_incoming(zeroingSYSTEM_ADDRESS, and crediting the validator reward). On bsc-qanet the un-fixed behaviour split the cluster at the Pasteur transition: geth rejected the block withinvalid merkle root. This fix is not in v0.1.1. - BidBlock is opt-in. The new inbound builder path is gated by
BidBlockEnabledand by per-builder permission; a node that does not enable it is not exposed to the new admission path. - No binaries are attached to this release. Use the
ghcr.ioimage published on the tag, or build from thev0.1.2tag.
MetaInfo
Mandatory Update Required: No
Target Audience: developers, mainnet and testnet operators
Procedure: simply binary replacement should be good
Schedule(Timeline): no scheduled upgrade timeline
What's Changed
BEP-675 MEV BidBlock
- feat: BEP-675 BidBlock (SendBidBlock) MEV path by @chee-chyuan in #415
- feat(miner): switch BidBlock to zero-simulate (broadcast-then-verify) by @chee-chyuan in #419
- fix(miner): give bid simulation the full block-interval delay window by @chee-chyuan in #424
- fix(bep675): adopt bsc #3742 BidBlock signing hash + tx-root check by @chee-chyuan in #455
- rpc:
mev_sendBidBlockadmission path,mev_getBidBlockPermission,admin_setBidBlockPermission,BidBlockEnabledexposed viamev_params; geth's-38007/-38008error codes with synchronous payload verification - consensus: BidBlock system-tx validation and
BlockTimeUpperCheckpre-seal gate - miner: builder permission manager with revocation of dishonest builders; intake queue, consumer loop and build cycle with state-root verification; selection at the slot deadline
- miner: blob-sidecar validation and blob-KZG proof verification before broadcast; double-sign gap closed on the winning BidBlock path; pre-seal cascading header checks, post-import average-gas-price floor, stale-entry eviction, vote-attestation refresh at selection
- compatibility with go-bsc: unsigned system-tx wire format,
BlobSidecarJSON shape,simBidrecommit,canBeInterruptedsemantics andNoInterruptLeftOverdefaults - mev: legacy
SendBidwinners tagged with block MEV info; bid-simulation preemption instrumented for the thrash ratio
State-root correctness
- evm: report direct state writes to the state hook, so the system-contract upgrade at a hardfork transition commits the correct state root (see Note 1)
- evm: reject the coinbase address as a contract address; use the effective gas price for the system-tx check
Dependencies
-
chore(deps): bump reth to v0.1.2 by @chee-chyuan in #471
Brings geth RPC parity (
noopTracer,muxTracer,getTransactionDataAndReceipt,eth_getLogstopic-position handling,totalDifficultyon header responses, pending-block log filters rejected),--rpc.batchrequestlimit, and an h2 bump for GHSA-q83h-524g-xf6h.
RPC
- rpc: honour
--http.api/--ws.apifor the BSC namespaces
Tests
- ef-tests: BidBlock execution harness covering build/execute round-trip and the execution gate
- miner: BidBlock broadcast timing and cross-path double-sign race coverage; test signing keys generated rather than embedded
Full Changelog: v0.1.1...v0.1.2