fix(payload): track Amsterdam block gas in builders#23743
Merged
Conversation
437aab3 to
3bcdad5
Compare
klkvr
reviewed
Apr 27, 2026
Comment on lines
+254
to
+259
| let block_gas_used = | ||
| if is_amsterdam { block_regular_gas_used } else { cumulative_tx_gas_used }; | ||
| let block_available_gas = block_gas_limit.saturating_sub(block_gas_used); | ||
|
|
||
| // ensure we still have capacity for this transaction | ||
| if cumulative_gas_used + pool_tx.gas_limit() > block_gas_limit { | ||
| if pool_tx.gas_limit() > block_available_gas { |
Member
There was a problem hiding this comment.
this doesn't take state gas into account right?
in theory block_regular_gas_used might be low but block_state_gas_used would be very close to the limit and the tx technically won't fit
Collaborator
Author
There was a problem hiding this comment.
Updated this path to track block_state_gas_used as well and precheck both Amsterdam dimensions: min(tx.gas_limit(), tx_gas_limit_cap) against regular availability, and tx.gas_limit() against state availability. Successful execution now increments regular gas from the raw result and state gas from GasOutput.
3bcdad5 to
5cc27c0
Compare
klkvr
approved these changes
Apr 27, 2026
umeeSthein
pushed a commit
to umeeSthein/tempo
that referenced
this pull request
Apr 30, 2026
Automated nightly update of reth dependencies from `paradigmxyz/reth` main branch. ## Upstream reth changes [`7839f3d...73ec2c9`](paradigmxyz/reth@7839f3d...73ec2c9) 🔗 Amp thread: https://ampcode.com/threads/T-019dd89b-f659-75eb-a3f2-3e769d63297f **Engine** - Spawn BAL hashed state before storage prefetch ([#23761](paradigmxyz/reth#23761)) and disable BAL parallel execution by default ([#23764](paradigmxyz/reth#23764)) - Add CLI flag to disable BAL storage prefetch ([#23770](paradigmxyz/reth#23770)) - Log transient invalid header cache skips ([#23711](paradigmxyz/reth#23711)) - Add `DecodedBal` in `ExecutionEnv` ([#23675](paradigmxyz/reth#23675)) **RPC** - Clean up eth state cache reorg entries ([#23683](paradigmxyz/reth#23683)) - Pass block timestamp to txn ([#23700](paradigmxyz/reth#23700)) - Include block numbers in `BlockRangeExceedsHead` error ([#23720](paradigmxyz/reth#23720)) **Network / P2P** - Add Basic in-memory BAL store and BAL request to block access list requests ([#23682](paradigmxyz/reth#23682), [#23710](paradigmxyz/reth#23710)) - Enforce BAL response soft limit and apply count cap to handler ([#23725](paradigmxyz/reth#23725), [#23754](paradigmxyz/reth#23754)) - Avoid RLP-decoding `NewBlock` payloads ([#23712](paradigmxyz/reth#23712)) and bound memory footprint of p2p messages ([#23718](paradigmxyz/reth#23718)) - Memory-bound channel between network and tx manager ([#23802](paradigmxyz/reth#23802)) - Track unknown tx types in announcement metrics ([#23688](paradigmxyz/reth#23688)) - Retain active session buffer capacity ([#23702](paradigmxyz/reth#23702)) and respect peer requirements for fetch followups ([#23706](paradigmxyz/reth#23706)) - Support binding discv5 and discv4 to the same port ([#23613](paradigmxyz/reth#23613)) and use Weak reference in discv5 kbuckets bg task to release port on shutdown ([#23282](paradigmxyz/reth#23282)) **Trie** - Skip DB seek on exact overlay hits ([#23559](paradigmxyz/reth#23559)) - Account for heap-allocated blinded hashes in `SparseNode::memory_size` ([#23726](paradigmxyz/reth#23726)) **DB / Storage** - `reth db migrate-v2` for pruned nodes ([#23716](paradigmxyz/reth#23716)) - Pass `ExecutedBlocks` to `OverlayBuilder`, reduce reverts queried ([#23657](paradigmxyz/reth#23657)) - Add empty request check to storage values ([#23714](paradigmxyz/reth#23714)) - Derive `Eq` for `IntegerList` ([#23709](paradigmxyz/reth#23709)) and reorder unix deps after strum ([#23697](paradigmxyz/reth#23697)) **Provider / EVM** - Use overlay builders in historical state paths ([#23667](paradigmxyz/reth#23667)) - Return gas output from block builder ([#23744](paradigmxyz/reth#23744)) - Expose executor transaction result type ([#23759](paradigmxyz/reth#23759)) **Perf** - Configurable rocksdb block cache size and re-use of mdbx provider in re-execute ([#23701](paradigmxyz/reth#23701)) - Enable revm `p256-aws-lc-rs` feature ([#23721](paradigmxyz/reth#23721)) - Add platform-specific RUSTFLAGS to Dockerfile ([#23738](paradigmxyz/reth#23738)) **Bench** - Add reorg mode to `new-payload-fcu` ([#23666](paradigmxyz/reth#23666)) - Enable `keccak-cache-global` in `reth-bb` ([#23723](paradigmxyz/reth#23723)) and fix multi-executor support ([#23763](paradigmxyz/reth#23763)) - Dedupe merged BAL storage reads ([#23758](paradigmxyz/reth#23758)) **Re-execute** - Verify reverts against changesets ([#23717](paradigmxyz/reth#23717)) **Payload** - Track Amsterdam block gas in builders ([#23743](paradigmxyz/reth#23743)) **CLI** - Use `TxTy`/`ReceiptTy` for static-file db get ([#23692](paradigmxyz/reth#23692)) and node types in execution stage dump ([#23705](paradigmxyz/reth#23705)) - Preserve `trusted_nodes_only` from config when `--trusted-only` is unset ([#23703](paradigmxyz/reth#23703)) - Avoid u64 underflow in `setup_without_evm` for genesis header ([#23728](paradigmxyz/reth#23728)) **Testing** - Add BAL request e2e coverage ([#23727](paradigmxyz/reth#23727)) - Cover admin node info discv5 port ([#23781](paradigmxyz/reth#23781)) **Misc** - Bump reth core to v0.3.1 ([#23707](paradigmxyz/reth#23707)) and alloy-evm to 0.33.3 ([#23778](paradigmxyz/reth#23778)) - Align ERA1 export with spec ([#23693](paradigmxyz/reth#23693)) ## Migrations 🔗 Amp thread: https://ampcode.com/threads/T-019dd89c-63d3-752f-ac22-7d4aef2ac3e3 - **Bumped reth git rev** from `7839f3d` to `73ec2c9` across all `reth-*` workspace dependencies in [Cargo.toml](file:///home/runner/work/tempo/tempo/Cargo.toml), and bumped `reth-primitives-traits` from `0.3.0` to `0.3.1` and `alloy-evm` from `0.33.0` to `0.34.0` to track upstream releases. - **Switched p2p proxy transactions channel** from `tokio::sync::mpsc::unbounded_channel` to `reth_metrics::common::mpsc::memory_bounded_channel` with a 32 MiB budget in [bin/tempo/src/p2p_proxy.rs](file:///home/runner/work/tempo/tempo/bin/tempo/src/p2p_proxy.rs), matching reth's new default `tx_channel_memory_limit_bytes` to prevent unbounded memory growth; added `reth-metrics` to [bin/tempo/Cargo.toml](file:///home/runner/work/tempo/tempo/bin/tempo/Cargo.toml). - **Changed `BlockExecutor::commit_transaction` signature** in [crates/evm/src/block.rs](file:///home/runner/work/tempo/tempo/crates/evm/src/block.rs) from returning `Result<GasOutput, BlockExecutionError>` to returning `GasOutput` directly (upstream removed the fallible return); replaced the missing-tx error with an `expect`, and updated all tests to drop `.unwrap()`. - **Added `Send + 'static` bound to `TxResult` impl** for `TempoTxResult<H>` to satisfy the new upstream trait bounds on associated execution-result types. - **Exposed `TempoBlockExecutor` and `TempoTxResult` as `pub`** (previously `pub(crate)`) and re-exported them from [crates/evm/src/lib.rs](file:///home/runner/work/tempo/tempo/crates/evm/src/lib.rs) so they can be named in the new associated types. - **Added associated types `TxExecutionResult` and `Executor` to `BlockExecutorFactory` impl** for `TempoEvmConfig`, and changed `create_executor` to return the concrete `Self::Executor<'a, DB, I>` instead of `impl BlockExecutorFor<'a, Self, DB, I>`, tracking upstream's move from RPIT to named associated types; dropped the now-unused `BlockExecutorFor` import and the `'a` lifetime bounds on `DB`/`I`. - **Implemented new `HeaderMut` methods** (`set_mix_hash`, `set_extra_data`, `set_parent_beacon_block_root`) for `TempoHeader` in [crates/primitives/src/reth_compat/header.rs](file:///home/runner/work/tempo/tempo/crates/primitives/src/reth_compat/header.rs) to satisfy the expanded upstream trait, delegating to the inner Ethereum header. [GitHub Workflow](https://github.com/tempoxyz/tempo/actions/runs/25101489247) --------- Co-authored-by: Centaur AI <ai@centaur.local> Co-authored-by: Amp <amp@ampcode.com> Co-authored-by: klkvr <klkvrr@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes payload and pending block building to use Amsterdam block gas counters for capacity tracking while keeping receipt gas for fee and cumulative accounting.
Post-Amsterdam builder prechecks now track both regular and state gas availability, mirroring the two-dimensional block gas accounting expected by EIP-8037. Executor gas-limit availability errors remain non-fatal during pending block construction.
Validated with
cargo +nightly fmt --all --check,cargo check -p reth-ethereum-payload-builder -p reth-rpc-eth-api, andcargo test -p reth-rpc-eth-api pending_env --lib.