• SEI immunefi-logoRewards Blockchain DLT
      $1,000 $5,000 $25,000 <$500,000

    fix(evmrpc): acquire requestLimiter in eth_createAccessList

    amir-deris merged to sei-protocol/sei-chain at 2026-06-25 20:31:24

    Added rate limiter to eth_createAccessList, added test

    by amir-deris

    Merge branch 'main' into amir/plt-706-createAccessList-requestLimiter

    by amir-deris

    ci(PLT-761): cancel superseded integration-test PR runs and defer Autobahn Gov/Mint/Upgrade to merge queue

    amir-deris merged to sei-protocol/sei-chain at 2026-06-25 18:21:35

    Added concurrency cancellation to integration test

    by amir-deris

    Moved some autobahn tests to merge queue

    by amir-deris

    Merge branch 'main' into amir/plt-761-reduce-ci-wall-clock-time

    by amir-deris

    ci(PLT-761): fix integration-test startup failure via generated matrix The job-level `if: !matrix.test.merge_only` referenced the matrix context, which is unavailable in jobs..if. This failed workflow validation (startup failure, 0 jobs), so the required Integration Test checks never reported and the PR stayed BLOCKED. Resolve the matrix in a new set-matrix job instead: extract the entries to integration-test-matrix.json and filter out merge_only (Autobahn GIGA-mode) variants on pull_request with jq, then consume it via matrix.test = fromJSON(needs.set-matrix.outputs.tests). PRs run 21 of 32 entries; push and merge queue run the full matrix. Co-Authored-By: Claude Opus 4.8 (1M context)

    by amir-deris

    Scoped down cancel in progress to only pull request

    by amir-deris

    ci(PLT-761): defer only Autobahn Gov/Mint/Upgrade to merge queue Scope merge_only down from all 11 Autobahn GIGA matrix entries to the four Gov/Mint/Upgrade variants. Other Autobahn matrix jobs run on every PR again (28 of 32 entries on pull_request). Co-authored-by: Cursor

    by amir-deris

    fix(grpc-web): set ReadTimeout, WriteTimeout, IdleTimeout, and MaxOpenConnections

    amir-deris merged to sei-protocol/sei-chain at 2026-06-25 17:59:21

    Added read, write and idle timeout params to grpc web server

    by amir-deris

    Increased write timeout to eliminate risk of slow queries getting truncated

    by amir-deris

    Merge branch 'main' into amir/sei-10199-fix-grpc-timeout

    by amir-deris

    Reduced idle timeout

    by amir-deris

    Added max open connections limit

    by amir-deris

    Fixed test

    by amir-deris

    Merge branch 'main' into amir/sei-10199-fix-grpc-timeout

    by amir-deris

    Added config for connections, used buffered channel for go routine

    by amir-deris

    Add max int overflow check

    by amir-deris

    Fixed lint error

    by amir-deris

    Merge branch 'main' into amir/sei-10199-fix-grpc-timeout

    by amir-deris

    Merge branch 'main' into amir/sei-10199-fix-grpc-timeout

    by masih

    Merge branch 'main' into amir/sei-10199-fix-grpc-timeout

    by amir-deris

    added default max open connections

    by amir-deris

    Merge branch 'main' into amir/sei-10199-fix-grpc-timeout

    by amir-deris

    feat(evmrpc): configurable batch request limit and batch response size

    amir-deris merged to sei-protocol/sei-chain at 2026-06-25 16:57:35

    Added batch request limit and batch response size limit to config

    by amir-deris

    Merge branch 'main' into amir/plt-703-evmrpc-configure-batch-fields

    by amir-deris

    • STARKNET immunefi-logoRewards Smart Contract
      $0 $0 $0 <$250,000
      Websites and Applications
      $0 $0 <$2,500 <$10,000
      Blockchain DLT
      $0 $0 $10,000 <$250,000

    apollo_consensus_orchestrator: avoid cloning txs in send_reproposal

    matanl-starkware merged to starkware-libs/sequencer at 2026-06-25 13:54:54

    apollo_consensus_orchestrator: avoid cloning txs in send_reproposal Move txs into the converter via into_iter() instead of cloning; txs is unused after the loop. Removes O(N_txs) allocations per repropose call. Also fix the test build to compile without --features testing by adding shared_execution_objects (deserialize, testing) to dev-dependencies. Co-Authored-By: Claude Opus 4.8 (1M context)

    by matanl-starkware

    apollo_propeller: guard inbound reads on non-empty unsent_units buffer

    sirandreww-starkware merged to starkware-libs/sequencer at 2026-06-25 13:54:54

    apollo_propeller: route inbound units through bounded channel

    by sirandreww-starkware

    apollo_propeller: guard inbound reads on non-empty unsent_units buffer

    by sirandreww-starkware

    starknet_patricia: collapse the let-else + re-match in node_from_edge_data into a single match

    yoavGrs merged to starkware-libs/sequencer at 2026-06-25 12:17:05

    starknet_patricia: use OnceLock for write-once filled-tree output maps The filled-tree output maps are written exactly once per node and then reclaimed, yet they used `Mutex>` and locked on every write and on every reclaim - even though after `Arc::into_inner` the map is uniquely owned and can never be contended. Replace the output maps with `OnceLock`, the primitive that matches this write-once access pattern: `write_to_output_map` becomes a lock-free `set` (a failed `set` is the double-update error), and reclaiming via `OnceLock::into_inner` drops the locking entirely. Pre-allocate the collected map with the known capacity. `Leaf::Output` gains a `Sync` bound, required for `OnceLock: Sync`. The leaf *input* map keeps `Mutex>`, since its values are moved out (take-once), not written. Co-Authored-By: Claude Opus 4.8 (1M context)

    by yoavGrs

    starknet_patricia: group bottom index and node into a tuple in node_from_edge_data test Reduces test_node_from_edge_data's argument count, keeping it under the clippy too_many_arguments threshold when later params are added. Co-Authored-By: Claude Opus 4.8 (1M context)

    by yoavGrs

    starknet_patricia: collapse the let-else + re-match in node_from_edge_data into a single match Replace the let-else followed by a re-match on the bottom node with a single flat match over all TempSkeletonNode variants. This drops the now-redundant unreachable arm for the non-Original case. Co-Authored-By: Claude Opus 4.8 (1M context) starknet_patricia: assert unmodified-subtree edge bottom is present in the skeleton Mirror the leaf sanity-check in node_from_edge_data: an unmodified subtree bottom must already be finalized in the skeleton (from finalize_bottom_layer), so merge its arm with the leaf arm under the shared presence assertion. Co-Authored-By: Claude Opus 4.8 (1M context)

    by yoavGrs

    starknet_patricia: use OnceLock for write-once filled-tree output maps

    yoavGrs merged to starkware-libs/sequencer at 2026-06-25 10:32:09

    starknet_patricia: use OnceLock for write-once filled-tree output maps The filled-tree output maps are written exactly once per node and then reclaimed, yet they used `Mutex>` and locked on every write and on every reclaim - even though after `Arc::into_inner` the map is uniquely owned and can never be contended. Replace the output maps with `OnceLock`, the primitive that matches this write-once access pattern: `write_to_output_map` becomes a lock-free `set` (a failed `set` is the double-update error), and reclaiming via `OnceLock::into_inner` drops the locking entirely. Pre-allocate the collected map with the known capacity. `Leaf::Output` gains a `Sync` bound, required for `OnceLock: Sync`. The leaf *input* map keeps `Mutex>`, since its values are moved out (take-once), not written. Co-Authored-By: Claude Opus 4.8 (1M context)

    by yoavGrs

    apollo_consensus_orchestrator: track and cancel reproposal task on round change

    matanl-starkware merged to starkware-libs/sequencer at 2026-06-25 10:26:29

    apollo_consensus_orchestrator: track and cancel reproposal task on round change repropose spawned two detached tasks that were never stored in active_proposal nor given a CancellationToken, so set_height_and_round / decision_reached could not cancel them. Under round churn, superseded reproposals kept re-converting every transaction through the class manager and holding full-block clones with no backpressure (M-27). Track the reproposal task in active_proposal with a CancellationToken like build/validate, wrap send_reproposal in a cancel-aware select so a superseded round stops in flight, and drop the separate panic-watcher task (JoinError now surfaces via interrupt_active_proposal). Co-Authored-By: Claude Opus 4.8 (1M context)

    by matanl-starkware

    apollo_consensus_orchestrator: enforce version_constant_commitment matches expected value

    dan-starkware merged to starkware-libs/sequencer at 2026-06-25 08:58:14

    apollo_consensus_orchestrator: enforce version_constant_commitment matches expected value

    by dan-starkware

    • OPTIMISM immunefi-logoRewards Smart Contract
      $0 <$15,000 <$50,000 <$2,000,042
      Websites and Applications
      $0 $0 $5,000 <$50,000
      Blockchain DLT
      $0 <$15,000 <$50,000 <$2,000,042

    op-devstack: add controlled lifecycle support

    Inphi merged to ethereum-optimism/optimism at 2026-06-25 21:21:39

    op-devstack: add controlled lifecycle support

    by Inphi

    review comment

    by Inphi

    fix op-up

    by Inphi

    fix(kona-sp1): make BlobStore soundness self-contained

    digorithm merged to ethereum-optimism/optimism at 2026-06-25 20:00:41

    fix(kona-sp1): make BlobStore soundness self-contained BlobStore leaned on two implicit invariants: kzg_rs's batch verifier (which skips length checks at 0/1 blob) and an undocumented host packing order. Move both checks local to blob_provider.rs: * assert_eq! on the three BlobData lengths at top of From. * By-hash lookup (linear scan + swap_remove) in get_and_validate_blobs, panicking on miss instead of silently dropping the request. * Drop the now-dead .rev() in the constructor. In the SP1 guest both new panics surface as "invalid proof". Behavior note: if a host returned the correct set of blobs in wrong order, baseline returned an empty Vec; by-hash lookup now succeeds. Strictly more correct. Three unit tests fail on baseline cf2ce0979a and pass after the fix. Closes #21490.

    by digorithm

    refactor(kona): make sp1 range core natively testable

    Inphi merged to ethereum-optimism/optimism at 2026-06-25 19:35:33

    refactor(kona): make sp1 range core natively testable Extract the kona-sp1 range execution logic behind a shared Rust API so tests can exercise the core without running the SP1 ELF. Keep the guest entrypoint as the SP1 IO wrapper and add a range-executor native-core mode for faster action-test coverage while preserving the full SP1 execute smoke path.

    by Inphi

    superchain: load keep_karst_upgrade_gas from registry into op-node

    geoknee merged to ethereum-optimism/optimism at 2026-06-25 12:33:55

    superchain: load keep_karst_upgrade_gas from registry into op-node op-node's superchain-registry decoder dropped keep_karst_upgrade_gas: the Go HardforkConfig struct had no field for it (BurntSushi/toml silently ignores unknown keys) and applyHardforks never copied it. So an op-node started with --network=op-sepolia (or op-mainnet) loaded the flag as false even though the registry sets keep_karst_upgrade_gas = true, and would subtract the Karst upgrade gas at the post-activation block and diverge from canonical history. Operators had to pass --override.keep-karst-upgrade-gas by hand. PR #21441 wired the flag into kona (its HardForkConfig reads it from the embedded registry) and added the op-node rollup.Config field plus the CLI override, but never extended the Go SCR-loading path. This closes that gap: - Add KeepKarstUpgradeGas to superchain.HardforkConfig so the TOML key is decoded. - Copy it in applyHardforks alongside the fork-time fields. Tested first: asserting KeepKarstUpgradeGas == true for the SCR-loaded sepolia and mainnet configs in TestGetRollupConfig fails on the baseline (expected true, actual false) and passes after the fix. The reflection-based TestApplyHardforks is updated to handle the new non-pointer bool field. Co-Authored-By: Claude Opus 4.8 (1M context)

    by geoknee

    Remove cannon image builds

    falcorocks merged to ethereum-optimism/optimism at 2026-06-25 08:59:04

    ci: remove cannon image builds

    by falcorocks

    • BABYLON-LABS immunefi-logoRewards Websites and Applications
      $1,000 $3,000 <$7,500 <$70,000
      Blockchain DLT
      $1,000 <$5,000 <$15,000 <$500,000

    feat(vault): add operator-configurable notice banner

    kirugan merged to babylonlabs-io/babylon-toolkit at 2026-06-25 14:47:44

    feat(vault): add operator-configurable notice banner

    by kirugan

    fix(vault): show notice banner to geo-blocked sessions and wire release var

    by kirugan

    feat(packages): improves display of data on split vault form

    jonybur merged to babylonlabs-io/babylon-toolkit at 2026-06-25 09:26:28

    feat(packages): improves display of data on split vault form

    by jonybur

    feat(packages): change padding

    by jonybur

    feat(packages): style improvements

    by jonybur

    refactor(vault): rename suggested order to optimal

    gbarkhatov merged to babylonlabs-io/babylon-toolkit at 2026-06-25 08:44:42

    refactor(vault): rename suggested order to optimal

    by gbarkhatov

    feat(vault): align reorder notification

    gbarkhatov merged to babylonlabs-io/babylon-toolkit at 2026-06-25 02:11:48

    feat(vault): align reorder notification

    by gbarkhatov

    chore(pr): comments

    by gbarkhatov

    • LIDO immunefi-logoRewards Smart Contract
      $1,000 <$50,000 <$250,000 <$2,000,000
      Websites and Applications
      $500 <$5,000 <$50,000 <$100,000

    Small fixes

    madlabman merged to lidofinance/community-staking-module at 2026-06-25 20:06:37

    chore: update natspec

    by madlabman

    test: fix off by one

    by madlabman

    Merge branch 'develop' into small-fixes

    by skhomuti

    Fix deploy-csm-impl command

    krogla merged to lidofinance/community-staking-module at 2026-06-25 08:08:10

    fix: enforce broadcast and correct rpc url in csm impl deploy

    by krogla

    docs: remove comment

    by krogla

    [codex] clean up csm deploy recipes (#829) ## Summary - Add `deploy-csm-impl-live-no-confirm` for non-interactive CSM implementation live deployments. - Remove deprecated CSM deployment aliases from `csm.just`. ## Motivation This is stacked on #828, which changes `_deploy-csm-impl` to accept an explicit RPC URL. The new no-confirm recipe follows that updated helper signature so external deployment tooling can call the live CSM implementation deploy without an interactive confirmation. The deprecated aliases were removed so the recipe surface stays explicit and current. ## Validation - `just --list | rg "deploy-csm-impl|deploy-local|deploy-live|deploy-impl|upgrade-v3|verify-live"`

    by skhomuti

    fix: restore csm impl deploy helper

    by skhomuti

    chore: keep csm deploy recipe cleanup scoped

    by skhomuti

    [codex] clean up csm deploy recipes

    skhomuti merged to lidofinance/community-staking-module at 2026-06-25 07:28:36

    chore: clean up csm deploy recipes

    by skhomuti

    deploy scripts, artifacts for AO fix

    krogla merged to lidofinance/core at 2026-06-25 17:19:02

    fix: deploy scripts, artifacts for AO fix

    by krogla

    fix: vote for upgrade DSM & OSC on hoodi (interim upd2)

    krogla merged to lidofinance/core at 2026-06-25 10:49:11

    fix: vote for upgrade DSM & OSC on hoodi (interim upd2)

    by krogla

    fix: github test flow

    by krogla

    fix: deployed artifacts, archived scripts

    by krogla

    fix: hoodi test GH workflow

    by krogla

    • ROOTSTOCKLABS immunefi-logoRewards Smart Contract
      $1,000 $2,500 <$10,000 <$100,000
      Websites and Applications
      $1,000 $1,500 $2,500 <$10,000
      Blockchain DLT
      <$2,500 <$5,000 <$10,000 <$200,000

    feature: centralize log messages for cold wallet transfer watcher

    AndresQuijano merged to rsksmart/liquidity-provider-server at 2026-06-25 13:18:22

    feature: centralize log messages for cold wallet transfer watcher

    by AndresQuijano

    refactor: move cold wallet transfer watcher messages to the watcher package

    by AndresQuijano

    test: add test for cold wallet transfer watcher messages

    by AndresQuijano

    fix: fix messages and log calls by copilot suggestions

    by AndresQuijano

    Fix/pegout value when splitting request

    julia-zack merged to rsksmart/rskj at 2026-06-25 18:32:24

    Cleanups before adding fix

    by julia-zack

    Rename fields and rephrase adjustBalancesIfChangeOutputWasDust javadoc

    by julia-zack

    Use value from entries being processed in batch

    by julia-zack

    Add test cases

    julia-zack merged to rsksmart/rskj at 2026-06-25 18:31:49

    Add tests for current behavior

    by julia-zack

    Add tests for new behavior

    by julia-zack

    Add regression test when having dust change

    by julia-zack

    Fix Union Bridge regtest authorizer addresses for UnionBridgeAuthoriz…

    jeremy-then merged to rsksmart/rskj at 2026-06-25 18:28:57

    Fix Union Bridge regtest authorizer addresses for UnionBridgeAuthorizerDeployer seed.

    by marcos-iov

    • ZKSYNC-OS immunefi-logoRewards Blockchain DLT
      $0 $5,000 $20,000 <$100,000

    fix: reconstruct full final replay chunk on exact-multiple counts

    antoniolocascio-bot merged to matter-labs/zksync-airbender at 2026-06-25 13:00:31

    fix: reconstruct full final replay chunk on exact-multiple counts The replay helpers (`replay_non_mem`, `replay_mem`, `replay_generic_work`) allocate `num_calls.div_ceil(cycles_per_circuit)` chunks, fill every full chunk with `cycles_per_circuit` events, and size the final chunk as `num_calls % cycles_per_circuit`. When `num_calls` is a positive exact multiple of `cycles_per_circuit`, the final chunk is full, but the remainder is `0`, so the code truncates that full chunk to length zero and then panics at the `assert_eq!(sum(len), num_calls)` invariant. This is a completeness failure: an otherwise valid, finishing execution whose selected opcode-family, unified, or delegation count exactly fills the final configured circuit cannot be proven. The chunk sizes come from `setups::*::NUM_CYCLES` / `NUM_DELEGATION_CYCLES` on the production proving path, so the boundary is reachable (e.g. an ADD/SUB/LUI/AUIPC count of exactly `add_sub_lui_auipc_mop::NUM_CYCLES = (1 << 24) - 1`). Factor the last-chunk sizing into a single `last_chunk_init_size` helper that treats a zero remainder as a full chunk (when `num_calls > 0`), and use it at all three sites. Add a regression test covering exact multiples and the `sum == num_calls` invariant; the existing tests only ever exercise counts strictly below one chunk. Co-Authored-By: Claude Opus 4.8 (1M context)

    by antoniolocascio

    fix: SLTI bug in standalone jump and unified circuits

    yoaveshel merged to matter-labs/zksync-airbender at 2026-06-25 11:25:16

    fix slti bug

    by yoaveshel

    regenerate

    by yoaveshel

    fix malicious tests

    by yoaveshel

    Merge remote-tracking branch 'origin/av_gkr_compiler' into ye_unified_audit_fixes

    by yoaveshel

    regenerate

    by yoaveshel

    • PYTHNETWORK immunefi-logoRewards Smart Contract
      <$2,500 <$10,000 <$50,000 <$250,000
      Websites and Applications
      $1,000 $2,500 <$20,000 <$50,000

    feat: devin feedback

    guibescos merged to pyth-network/pyth-crosschain at 2026-06-25 15:44:33

    devin feedback

    by guibescos

    feat(developer-hub): link change-log feeds to the Pyth Terminal

    aditya520 merged to pyth-network/pyth-crosschain at 2026-06-25 14:43:19

    feat(developer-hub): link change-log feeds to the Pyth Terminal Make each feed symbol on the change-log page a deep link into the Pyth Terminal explore view — e.g. Metal.Index.SILVER/USD opens /explore/Metal.Index.SILVER%2FUSD. EventRow powers both the day and stream views, so every feed on the page becomes clickable. - Add a terminalUrl(id) helper that encodeURIComponent-escapes the symbol (slash -> %2F; no-slash and suffixed symbols pass through unchanged). - Render the feed symbol as an external (new tab, rel=noopener noreferrer) with a small external-link cue. - Links apply to all change types, including removed feeds, which resolve to the terminal's INACTIVE feed page rather than a 404. Part of PFG-1150. Co-Authored-By: Claude Opus 4.8 (1M context)

    by aditya520

    fix(developer-hub): size the change-log link arrow to match the text Address review feedback on PR #3842: the external-link cue was 0.75em and barely legible. Bump to 1em so it matches the feed symbol text. Co-Authored-By: Claude Opus 4.8 (1M context)

    by aditya520

    chore(contract_manager): add 7th guardian set upgrade

    ali-behjati merged to pyth-network/pyth-crosschain at 2026-06-25 14:26:21

    chore(contract_manager): add 7th guardian set upgrade

    by ali-behjati

    feat: add 7th guardian set to solana cli

    guibescos merged to pyth-network/pyth-crosschain at 2026-06-25 14:26:05

    add it

    by guibescos

    feat(developer-hub): add site-wide change log bar

    aditya520 merged to pyth-network/pyth-crosschain at 2026-06-25 13:21:32

    feat(developer-hub): add change log ticker to homepage hero Surface the price-feed change log on the landing page as a thin auto-scrolling marquee under the hero, instead of leaving it buried as a docs sidebar page. A server component reads the existing getChangeLog() data, shows the latest 18 events (color-coded by change type), and links to the full /price-feeds/changelog page. Pauses on hover/focus and freezes under prefers-reduced-motion. Labeled "Feed updates" to scope it to the price-feed lane. Co-Authored-By: Claude Opus 4.8 (1M context)

    by aditya520

    feat(developer-hub): make the change log a site-wide overflow bar Replace the homepage-hero marquee with a slim static bar rendered at the top of every page. It shows the most recent feed changes and collapses whatever doesn't fit on one line into a "+N more" link to the change log, instead of scrolling. - New src/components/ChangelogBar/ (server wrapper + client overflow row + styles); removed the old Pages/Homepage/changelog-ticker.* component and its homepage-hero usage. - Mounted in both the (homepage) and (docs)/[section] layouts, right after MigrationBanner, so it appears site-wide above the page content. - The client measures how many items fit using an off-screen measurement row plus a ResizeObserver, and re-measures on document.fonts.ready so the monospace IDs stay accurate after the web font swaps in. - Use PascalCase component filenames and let the link's accessible name come from the item text rather than an overriding aria-label, addressing the two Codex review comments. Co-Authored-By: Claude Opus 4.8 (1M context)

    by aditya520

    • POLYGON immunefi-logoRewards Smart Contract
      $0 $2,000 $10,000 <$250,000
      Blockchain DLT
      $0 $2,000 $10,000 <$250,000

    feat: devp2p peer jailing

    vbhattaccmu merged to 0xPolygon/bor at 2026-06-25 08:28:50

    eth/downloader, eth: graded peer response for sync failures (devp2p peer jailing) Replace the blanket peer-drop on sync failures with a graded, locally enforced response. Core grading: - Drop peers that serve objectively invalid or malformed data (invalid chain, bad-peer, invalid ancestor). - Soft-backoff peers that are merely slow, time out, or stall, or where malice cannot be proven; classification unwraps the error chain so a timeout wrapped in a bad-data sentinel is treated as transient, while a proven-bad-data sentinel is never downgraded by a stray deadline string. - Treat whitelist (checkpoint/milestone) mismatches as a distinct graded class: short backoff on first occurrence, local jail on repeat, and drop only after persistent mismatch within a 30-minute window. - Escalate repeated soft failures (4 within a 10-minute window) to a local jail, and persist backoffs across reconnects so the penalty cannot be reset by reconnecting under the same id. - Bench stalling peers past a grace period instead of dropping them, and keep sync live when every peer is stalled by unblocking the fetch loop via errPeerBackedOff. Robustness and hardening: - A pruned-sidechain ghost-state attack escalates (jail first, drop on a second within 30m) instead of jailing forever. - concurrentFetch timeouts route through the grading funnel exactly once (2-minute grace, no double strike); a master timeout aborts the cycle. - Every terminal drop records a 30-minute durable bench that survives reconnect, including the skeleton beacon-sync invalid-headers drop, and even when the offending peer has already departed (recordJailByID). - Per-peer strike and jail maps are hard-capped with oldest-strike / soonest-expiry eviction to bound peer-keyed allocation. - Non-peer-fault conditions never penalize the peer: node-shutdown cancellations (errCanceled / errCancelContentProcessing / errTerminated / errCancelStateFetch / snap.ErrCancelled) return early, benign swarm sentinels (errPeersUnavailable, errNoPeers) classify as no-action, and a peer that simply disconnects mid-sync (errDisconnected) is graded as a soft backoff rather than mis-classified as a bad-peer drop. - Cross-queue soft strikes are deduped via an atomic backoffForClaim, so a simultaneous multi-queue stall records one strike; skeleton header timeouts grade through the same backoff and mark the soft-backoff and jail meters. A peer benched by a skeleton timeout is requeued into the idle set so the scheduler arms its wake-up timer, and a timeout whose request was already reverted by a peer-leave is skipped via req.stale so a departed peer's same-id reconnect is never benched by a late timer. - peerWithHighestTD iterates the peer set under RLock to avoid a hot-path allocation; nextSyncOp arms the retry timer when no eligible peer is available and for the backoff expiry of benched higher-TD peers while in sync with a lower-TD one, and PeerBackoff consults the persisted jail map first to keep the peerSet/peerConnection lock order explicit. An errPeersUnavailable sync result (e.g. snap sync with only eth/68 peers) arms a short chainSyncer cooldown, cleared on any peer join/leave, so the loop does not spin in continuous sync setup/teardown without penalizing an otherwise-fine peer. Co-Authored-By: Claude Opus 4.8

    by vbhattaccmu

    PR comments

    by vbhattaccmu

    update error message

    by vbhattaccmu

    revert error type

    by vbhattaccmu

    normalize zero timestamps Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

    by vbhattaccmu

    address peer response review comments Restore a WARN for no-op peer responses so peers-unavailable and whitelist no-remote stay visible instead of only logging at debug. Treat whitelist ErrNoRemote as a no-op and arm the retry cooldown instead of benching an honest peer that is merely lagging behind the latest milestone. Add peerGhostStateMeter for parity with the mismatch meter, and stop double-counting whitelist mismatches in the soft-backoff meter.

    by vbhattaccmu

    Merge branch 'develop' into feat/devp2p-peer-jailing

    by vbhattaccmu

    • ALCHEMIX-1 immunefi-logoRewards Smart Contract
      $1,000 $4,000 <$35,000 <$300,000

    Strategy runbook updates

    d0m0l33 merged to alchemix-finance/v3 at 2026-06-25 05:16:42

    added missing strategy risk class assignment step

    by None

    added note for alternative dashboard path for strat risk class assignment

    by None

    • FRANKENDANCER immunefi-logoRewards Blockchain DLT
      $5,000 <$50,000 <$100,000 <$500,000

    watch: add node info row

    ripatel-fd merged to firedancer-io/firedancer at 2026-06-25 16:31:30

    watch: add node info row Co-Authored-By: Richard Patel

    by mmcgee-jump

    • CHAINLINK immunefi-logoRewards Smart Contract
      <$5,000 <$10,000 <$75,000 <$3,000,000
      Websites and Applications
      <$1,000 <$2,000 <$10,000 <$100,000

    Bump cl-framework/multinode

    amit-momin merged to smartcontractkit/chainlink at 2026-06-25 16:24:06

    Bumped cl-framework/multinode

    by amit-momin

    chore: remove CCIP RMN blessing dependencies

    nvsriram merged to smartcontractkit/chainlink at 2026-06-25 15:57:30

    chore: remove dependence on CCIP blessing stubs

    by nvsriram

    [PLEX - 3187] - Stellar LOOP Relayer setup + core node cmds

    ilija42 merged to smartcontractkit/chainlink at 2026-06-25 11:50:19

    Add stellar to relayer factory

    by ilija42

    Add stellar keystore to orm

    by ilija42

    Register Stellar as a LOOP

    by ilija42

    run generate

    by ilija42

    Cleanup stellar core node cmds

    by ilija42

    lint

    by ilija42

    update TestCoreRelayerChainInteroperators with stellar

    by ilija42

    rm stray test file

    by ilija42

    lint

    by ilija42

    lint

    by ilija42

    lint

    by ilija42

    tm bad test parallel execution

    by ilija42

    supress lint on parallel test

    by ilija42

    lint

    by ilija42

    lint

    by ilija42

    Fix NewStellarKeyResources key slice init

    by ilija42

    lint

    by ilija42

    goimports

    by ilija42

    lint

    by ilija42

    lint

    by ilija42

    rm usage of testing.TB.Context(t)

    by ilija42

    Add Stellar imported keys

    by ilija42

    Add Stellar imported keys test

    by ilija42

    fix test context usage

    by ilija42

    fix test context usage

    by ilija42

    Fix gateway ws connection stuck after network disruption

    george-dorin merged to smartcontractkit/chainlink at 2026-06-25 15:20:23

    Handle write errors by closing connection to unblock readPump, and add test coverage.

    by george-dorin

    Fix lint

    by george-dorin

    Add error msg in cae of failure

    by george-dorin

    [CCIP-11722] Fix TestCCIPReader_Nonces flake: mine each SetInboundNonce tx

    KodeyThomas merged to smartcontractkit/chainlink at 2026-06-25 13:05:04

    [CCIP-11722] Fix TestCCIPReader_Nonces flake: mine each SetInboundNonce tx The setup loop sent all SetInboundNonce txs from one EOA (auth.Nonce==nil) with no Commit() between them. Each send resolves its nonce via PendingNonceAt on the ethclient/simulated backend, whose pending nonce is updated by an async txpool loop. Under CPU contention (full smoke/ccip package in CI) that loop lags, two sends resolve the same nonce, and go-ethereum rejects the duplicate with "replacement transaction underpriced", failing require.NoError. Commit() after each tx so the next PendingNonceAt reads the committed nonce, removing the async-txpool dependency. Mirrors the fix in #22031 for commitSqNrs and the existing emitCommitReports pattern in the same file.

    by KodeyThomas

    [CCIP-11146] Fix flaky Test_CCIPGasPriceUpdatesWriteFrequency

    KodeyThomas merged to smartcontractkit/chainlink at 2026-06-25 12:01:18

    [CCIP-11146] Fix flaky Test_CCIPGasPriceUpdatesWriteFrequency The assert.Eventually condition called require.NoError(t, err). testify runs the condition in a separate goroutine (go checkCond()), so require/FailNow there calls runtime.Goexit() on that goroutine without delivering a result on the channel. A single transient simulated-RPC error therefore hangs the Eventually loop until its waitFor timeout (or the package -timeout panic), surfacing as an intermittent flake rather than a clean failure. Replace the four require.NoError calls inside the callback with `if err \!= nil { return false }` so transient errors retry on the next tick. Test goal is unchanged.

    by KodeyThomas

    [Cherry pick] bump chainlink-ccip (#22959)

    RensR merged to smartcontractkit/chainlink at 2026-06-25 11:07:55

    bump chainlink-ccip (#22959) bump chainlink

    by RensR

    bump chainlink-ccip

    RensR merged to smartcontractkit/chainlink at 2026-06-25 10:29:16

    bump chainlink

    by RensR

    Fix Hedera Fee Decimals Scaling issue

    simsonraj merged to smartcontractkit/chainlink-ccip at 2026-06-25 09:32:29

    Fix Hedera Fee Decimals Scaling issue

    by simsonraj

    remove integration tests

    by simsonraj

    lint-fix

    by simsonraj

    capabilities/v2/actions/confidentialrelay: Add applicationRequestID to ComputeRequest and hashing

    cfal merged to smartcontractkit/chainlink-common at 2026-06-25 16:39:14

    capabilities/v2/actions/confidentialrelay: Add applicationRequestID to ComputeRequest and hashing Introduce the `ApplicationRequestID` field to the `ComputeRequest` struct. For non-legacy versions, this field is included in the computed hash to bind the application-specific request identity. For legacy versions, the field is excluded from the hash, maintaining compatibility with existing behavior.

    by cfal

    Release 1.363.0

    app-token-issuer-data-feeds[bot] merged to smartcontractkit/external-adapters-js at 2026-06-25 20:53:26

    Release 1.363.0

    by app-token-issuer-data-feeds[bot]

    Update framework versions

    yaroslav-glukhov-chainlink merged to smartcontractkit/external-adapters-js at 2026-06-25 20:35:24

    Update framework versions

    by yaroslav-glukhov-chainlink

    [Streams adapter] Changeset for multiple adapters upgrade

    denis-chernov-smartcontract merged to smartcontractkit/external-adapters-js at 2026-06-25 17:32:18

    changeset

    by denis-chernov-smartcontract

    [Streams adapters] fixes issues with nested arrays in payload

    denis-chernov-smartcontract merged to smartcontractkit/external-adapters-js at 2026-06-25 14:15:53

    fixes nested array in payload

    by denis-chernov-smartcontract

    hashed key params support

    by denis-chernov-smartcontract

    Merge branch 'main' into DS/view-function-payload-fix

    by denis-chernov-smartcontract

    • AVALANCHE immunefi-logoRewards Smart Contract
      $0 $5,000 <$10,000 <$100,000
      Blockchain DLT
      $1,000 $5,000 <$10,000 <$100,000

    feat(vms/saevm/cchain): parse and wire minimal operator config

    JonathanOppenheimer merged to ava-labs/avalanchego at 2026-06-25 20:56:21

    feat(vms/saevm/cchain): parse and wire minimal operator config

    by JonathanOppenheimer

    fix: add default to sut

    by JonathanOppenheimer

    chore: typo

    by JonathanOppenheimer

    Merge branch 'master' into JonathanOppenheimer/setup-config

    by JonathanOppenheimer

    Update vms/saevm/cchain/config.go Co-authored-by: Stephen Buttolph Signed-off-by: Jonathan Oppenheimer <147infiniti@gmail.com>

    by JonathanOppenheimer

    chore: Stephen review

    by JonathanOppenheimer

    chore: readd disable tracing

    by JonathanOppenheimer

    chore: options

    by JonathanOppenheimer

    chore: format

    by JonathanOppenheimer

    Update vms/saevm/cchain/config.go Co-authored-by: Stephen Buttolph Signed-off-by: Jonathan Oppenheimer <147infiniti@gmail.com>

    by JonathanOppenheimer

    refactor(eth): remove in-memory HashDB from reexecution

    RodrigoVillar merged to ava-labs/avalanchego at 2026-06-25 16:41:54

    refactor(eth): remove inMemoryDB

    by RodrigoVillar

    Update graft/coreth/eth/state_accessor.go Co-authored-by: Austin Larson <78000745+alarso16@users.noreply.github.com> Signed-off-by: rodrigo <77309055+RodrigoVillar@users.noreply.github.com>

    by RodrigoVillar

    refactor(firewood): unify state accessor construction behind NewStateAccessor

    by RodrigoVillar

    chore: address review comments

    by RodrigoVillar

    refactor: remove newReconstructedStateDatabase()

    by RodrigoVillar

    chore: address review comments

    by RodrigoVillar

    tests: check genesis balances for alloc accounts

    by RodrigoVillar

    Merge branch 'master' into rodrigo/fwd-remove-inmemorydb

    by StephenButtolph

    feat(vms/saevm/cchain): wire `MinPriceExponent` into the SAE block lifecycle

    powerslider merged to ava-labs/avalanchego at 2026-06-25 16:17:00

    feat(vms/saevm/cchain): wire MinPriceExponent into the SAE block lifecycle - Derive the gas-config min price from the header's price exponent, defaulting to 1 wei when the field is absent. - On block build, read the parent's exponent (or seed the initial value on fork activation) and nudge it toward the proposer's desired vote, clamped by acp283's per-block step. - On block rebuild, pass the block's exponent as the rebuilder's desired so honest blocks reproduce exactly and cheated ones get clamped. SAE relies on this for verification via the existing rebuild-and-compare path. - Add a per-node desired-floor knob to the cchain VM config, converted once at startup from wei into a target exponent. nil means no vote. resolves #5436 Signed-off-by: Tsvetan Dimitrov (tsvetan.dimitrov@avalabs.org)

    by powerslider

    test(vms/saevm/cchain): add ACP-283 ramp test

    by powerslider

    refactor(vms/saevm/cchain): extract Config and desiredParams addressing remarks - Move the JSON config out of vm.go into config.go with ParseConfig. - Rename PriceTarget with the min-price-target JSON tag, matching plugin/evm/config.go convention. - Bundle internal exponent votes into desiredParams so newHooks's signature stays stable as ACP-226 and ACP-176 wiring land. - vm.go no longer references gas or dynamic. The user-facing to internal conversion lives in Config.desired().

    by powerslider

    chore: extract sentinel error

    by powerslider

    refactor(vms/saevm/cchain): unexport config and parseConfig

    by powerslider

    test(vms/saevm/cchain): add cchaintest WithMinPriceExponent option

    by powerslider

    test(vms/saevm/cchain): deflake MinPriceExponent ramp test

    by powerslider

    chore(vms/saevm/cchain): drop duplicate alloc helper and stray comments

    by powerslider

    refactor(vms/saevm/cchain): inline single-use header test helper

    by powerslider

    Merge remote-tracking branch 'origin/master' into powerslider/5436-sae-min-price-exponent-wiring

    by powerslider

    refactor(vms/saevm/cchain): tidy MinPriceExponent wiring per review

    by powerslider

    test(vms/saevm/cchain): drop TestGasConfigAfter

    by powerslider

    test(vms/saevm/cchain): move MinPriceExponent tests to the VM level

    by powerslider

    chore(vms/saevm/cchain): remove obsolete comment and regenerate bazel

    by powerslider

    test(vms/saevm/cchain): refine MinPriceExponent tests per review

    by powerslider

    refactor(vms/saevm/cchain): export InitialPriceExponent from dynamic

    by powerslider

    Merge remote-tracking branch 'origin/master' into powerslider/5436-sae-min-price-exponent-wiring

    by powerslider

    test(vms/saevm/cchain): add min-price-target zero case

    by powerslider

    test(vms/saevm/cchain): combine dynamic price exponent tests

    by powerslider

    Merge remote-tracking branch 'origin/master' into powerslider/5436-sae-min-price-exponent-wiring

    by powerslider

    refactor(vms/saevm/cchain): rename cfg to userConfig in Initialize

    by powerslider

    feat(saevm): Integrate Warp

    StephenButtolph merged to ava-labs/avalanchego at 2026-06-25 15:24:00

    feat(saevm): extract C-Chain Warp components Factor the Warp functionality of vms/saevm/cchain out of the warp-improvements PoC branch into a focused change on top of master. - Add vms/saevm/cchain/warp: message storage, receipt extraction, block predicate verification, and the ACP-118 signature verifier. - Wire the C-Chain VM to coreth's genesis path so the Warp precompile is scheduled alongside Durango (decoupled from the last-sync feature), parse off-chain Warp messages from config, and register the ACP-118 warp signature handler. - Fill the hooks Warp TODOs: persist produced messages from receipts and encode predicate results in the block header. - customheader: under Helicon, predicate results occupy the whole header.Extra (no fee-window prefix) and VerifyExtra is a no-op. - saetest.SetValidators returns the underlying validatorstest.State so tests can install a warp validator set.

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    comments

    by StephenButtolph

    wip

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nits

    by StephenButtolph

    wip

    by StephenButtolph

    wip

    by StephenButtolph

    wip

    by StephenButtolph

    Update TODO

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    comment

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    doc

    by StephenButtolph

    nit

    by StephenButtolph

    warp package

    by StephenButtolph

    merge

    by StephenButtolph

    wip

    by StephenButtolph

    simplify

    by StephenButtolph

    Merge branch 'StephenButtolph/warp-package' into warp-cchain-extract

    by StephenButtolph

    reduce diff

    by StephenButtolph

    Merge branch 'StephenButtolph/warp-package' into warp-cchain-extract

    by StephenButtolph

    Revert "reduce diff" This reverts commit 8662674f682f686b7992bdf25e09ee1c6a6a1d64.

    by StephenButtolph

    nit

    by StephenButtolph

    Merge branch 'StephenButtolph/warp-package' into warp-cchain-extract

    by StephenButtolph

    bazel

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    warp readme

    by StephenButtolph

    Merge branch 'StephenButtolph/warp-package' into warp-cchain-extract

    by StephenButtolph

    reduce diff

    by StephenButtolph

    nit

    by StephenButtolph

    tweak messages

    by StephenButtolph

    Merge branch 'StephenButtolph/warp-package' into warp-cchain-extract

    by StephenButtolph

    nits

    by StephenButtolph

    Merge branch 'StephenButtolph/warp-package' into warp-cchain-extract

    by StephenButtolph

    bazel

    by StephenButtolph

    cleanup

    by StephenButtolph

    reduce diff

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    cleanup

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    wip

    by StephenButtolph

    wip

    by StephenButtolph

    wip

    by StephenButtolph

    wip

    by StephenButtolph

    wip

    by StephenButtolph

    wip

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    revert coreth diff

    by StephenButtolph

    nit

    by StephenButtolph

    typo

    by StephenButtolph

    context

    by StephenButtolph

    Merge branch 'StephenButtolph/warp-package' into warp-cchain-extract

    by StephenButtolph

    nit

    by StephenButtolph

    nit

    by StephenButtolph

    Merge branch 'master' into StephenButtolph/warp-package

    by StephenButtolph

    merge

    by StephenButtolph

    wip

    by StephenButtolph

    wip cleanup

    by StephenButtolph

    wip

    by StephenButtolph

    don't panic

    by StephenButtolph

    nits

    by StephenButtolph

    wip

    by StephenButtolph

    nit

    by StephenButtolph

    Add writeGenesis test

    by StephenButtolph

    nit

    by StephenButtolph

    ai slop

    by StephenButtolph

    Merge branch 'master' into StephenButtolph/warp-package

    by StephenButtolph

    nits

    by StephenButtolph

    Merge branch 'StephenButtolph/warp-package' into warp-cchain-extract

    by StephenButtolph

    reduce diff

    by StephenButtolph

    wip

    by StephenButtolph

    test

    by StephenButtolph

    Refactor message handler

    geoff-vball merged to ava-labs/icm-services at 2026-06-25 20:34:10

    Refactor message handler

    by geoff-vball

    Merge branch 'main' into gstuart/message-handler-processes-message

    by geoff-vball

    Merge branch 'main' into gstuart/message-handler-processes-message

    by mdelle1

    • HEDERA immunefi-logoRewards Blockchain DLT
      $0 $3,000 <$10,000 <$30,000

    chore: update package versions to v0.34.0-SNAPSHOT

    jbair06 merged to hashgraph/hedera-transaction-tool at 2026-06-25 07:22:34

    chore: bump versions for v0.33.0-beta.1 [skip ci] Signed-off-by: swirlds-automation

    by swirlds-automation

    Bump versions for v0.34.0-SNAPSHOT [skip ci] Signed-off-by: John Bair

    by jbair06

    Merge branch 'main' into create-pull-request/release/0.33

    by jbair06

    feat: switch block stream and TSS configs defaults for `0.77`

    petreze merged to hiero-ledger/hiero-consensus-node at 2026-06-25 12:41:17

    initial changes Signed-off-by: Petar Tonev

    by petreze

    remove build gradle overrides and add schema fix Signed-off-by: Petar Tonev

    by petreze

    remove explicit overrides and fix other issues Signed-off-by: Petar Tonev

    by petreze

    mark as overwritten for genesis block info Signed-off-by: Petar Tonev

    by petreze

    Merge branch 'main' into 25892-tss-configs-77

    by petreze

    several fixes, extract real bn blocks extraction Signed-off-by: Petar Tonev

    by petreze

    Merge branch 'main' into 25892-tss-configs-77 # Conflicts: # hedera-node/test-clients/build.gradle.kts

    by petreze

    Merge branch 'main' into 25892-tss-configs-77

    by petreze

    spotless Signed-off-by: Petar Tonev

    by petreze

    fix DabEnabledUpgradeTest Signed-off-by: Petar Tonev

    by petreze

    Merge branch 'main' into 25892-tss-configs-77 # Conflicts: # hedera-node/test-clients/build.gradle.kts

    by petreze

    fixes Signed-off-by: Petar Tonev

    by petreze

    extract common blocks extraction from BNs and other fixes Signed-off-by: Petar Tonev

    by petreze

    try to fix restart Signed-off-by: Petar Tonev

    by petreze

    fix harness bugs surfaced by BLOCKS/gRPC cutover: genesis stream paths, ledger-id replay, block re-delivery Signed-off-by: Petar Tonev

    by petreze

    fix restart Signed-off-by: Petar Tonev

    by petreze

    fix Signed-off-by: Petar Tonev

    by petreze

    add hex guard plus deterministic sidecar extraction Signed-off-by: Petar Tonev

    by petreze

    run data-independent block validators in BLOCKS mode Signed-off-by: Petar Tonev

    by petreze

    wait for block-node stream to settle before GRPC state-replay validation Signed-off-by: Petar Tonev

    by petreze

    gate GRPC state-replay on the freeze block via the saved-state round Signed-off-by: Petar Tonev

    by petreze

    run hapiTestRestart on the production restart path (history-enabled, GRPC) to probe #24896 Signed-off-by: Petar Tonev

    by petreze

    fix chain of trust proof after restart Signed-off-by: Petar Tonev

    by petreze

    revert changes Signed-off-by: Petar Tonev

    by petreze

    lock hapiTestRestart to FILE only in ci for now Signed-off-by: Petar Tonev

    by petreze

    Merge branch 'main' into 25892-tss-configs-77

    by petreze

    Merge branch 'main' into 25892-tss-configs-77 # Conflicts: # hedera-node/test-clients/build.gradle.kts

    by petreze

    Merge branch 'main' into 25892-tss-configs-77

    by petreze

    ease platform config Signed-off-by: Petar Tonev

    by petreze

    chore: Update BN XTS Regression Panel w MN 0.157.0+ support

    Nana-EC merged to hiero-ledger/hiero-consensus-node at 2026-06-25 19:48:32

    Update Bn XTS Regression Panel w MN 0.157.0+ support Signed-off-by: Nana Essilfie-Conduah

    by Nana-EC

    ci(workflow-env): Update 855 to provide empty strings and verify outputs (#26086)

    rbarker-dev merged to hiero-ledger/hiero-consensus-node at 2026-06-25 18:14:39

    ci(workflow-env): Update 855 to provide empty strings and verify outputs (#26086) Signed-off-by: Roger Barker (cherry picked from commit 0e0b2a20a9913b393d7630038de92f3c97915c48)

    by rbarker-dev

    ci(workflow-env): Update 855 to provide empty strings and verify outputs

    rbarker-dev merged to hiero-ledger/hiero-consensus-node at 2026-06-25 17:27:13

    ci(workflow-env): Update 855 to provide empty strings and verify outputs Signed-off-by: Roger Barker

    by rbarker-dev

    chore: Fix typo Signed-off-by: Roger Barker

    by rbarker-dev

    chore: Update error message Signed-off-by: Roger Barker

    by rbarker-dev

    Merge branch 'main' into 26084-warn-on-missing-variable-instead-of-error

    by rbarker-dev

    ci(fix): update solo version

    joshmarinacci merged to hiero-ledger/hiero-consensus-node at 2026-06-25 17:13:31

    update solo version Signed-off-by: Josh Marinacci

    by joshmarinacci

    update mirror node versions Signed-off-by: Josh Marinacci

    by joshmarinacci

    chore: Apply changes from #26072 to release/0.75

    rbarker-dev merged to hiero-ledger/hiero-consensus-node at 2026-06-25 17:07:05

    chore: Apply changes from #26072 to release/0.75 Signed-off-by: Roger Barker

    by rbarker-dev

    refactor(fees): remove transitional createSimpleFeeSchedule flag

    aderevets merged to hiero-ledger/hiero-consensus-node at 2026-06-25 16:42:43

    refactor(fees): remove transitional createSimpleFeeSchedule flag Signed-off-by: aderevets

    by aderevets

    fix: main branch

    akugal merged to hiero-ledger/hiero-consensus-node at 2026-06-25 16:35:38

    Fix main branch Signed-off-by: Artur Kugal

    by akugal

    chore: remove XTS BLOCKS override tests

    petreze merged to hiero-ledger/hiero-consensus-node at 2026-06-25 16:20:04

    remove XTS BLOCKS override tests Signed-off-by: Petar Tonev

    by petreze

    Merge branch 'main' into 25894-remove-blocks-only-from-xts

    by petreze

    Merge branch 'main' into 25894-remove-blocks-only-from-xts

    by petreze

    feat: 25739 - improve workgroup error handling

    akugal merged to hiero-ledger/hiero-consensus-node at 2026-06-25 15:03:15

    Remove teacher view Signed-off-by: Artur Kugal

    by akugal

    Changes to learner logic 1 Signed-off-by: Artur Kugal

    by akugal

    pass params to syncrononize() Signed-off-by: Artur Kugal

    by akugal

    remove some exports Signed-off-by: Artur Kugal

    by akugal

    Renames and docs Signed-off-by: Artur Kugal

    by akugal

    Fix copilot comments Signed-off-by: Artur Kugal

    by akugal

    Address Nikita's comments Signed-off-by: Artur Kugal

    by akugal

    Fix compilation error Signed-off-by: Artur Kugal

    by akugal

    Minor improvements Signed-off-by: Artur Kugal

    by akugal

    Merge branch 'main' into 25695-refactor-reconnect-views

    by akugal

    Simplify reconnect tasks termination Signed-off-by: Artur Kugal

    by akugal

    Some working state Signed-off-by: Artur Kugal

    by akugal

    rename execute() to fork() Signed-off-by: Artur Kugal

    by akugal

    Improve error handling for StandardWorkGroup Signed-off-by: Artur Kugal

    by akugal

    ADress copilot comments Signed-off-by: Artur Kugal

    by akugal

    Address comment about join Signed-off-by: Artur Kugal

    by akugal

    Spotless fixes Signed-off-by: Artur Kugal

    by akugal

    Address PR comments Signed-off-by: Artur Kugal

    by akugal

    Merge branch 'main' into 25739-workgroup-error-handling

    by akugal

    Merge branch 'main' into 25739-workgroup-error-handling

    by akugal

    join() interrupt doesn't wait all tasks to complete Signed-off-by: Artur Kugal

    by akugal

    Fix flaky tests Signed-off-by: Artur Kugal

    by akugal

    Merge branch 'main' into 25739-workgroup-error-handling

    by akugal

    Address comments and improve tests Signed-off-by: Artur Kugal

    by akugal

    refactor(fees): delete simpleFeesEnabled config field

    aderevets merged to hiero-ledger/hiero-consensus-node at 2026-06-25 14:44:54

    refactor(fees): delete simpleFeesEnabled config field Signed-off-by: aderevets

    by aderevets

    ci(fix): broken slack report

    joshmarinacci merged to hiero-ledger/hiero-consensus-node at 2026-06-25 13:38:47

    fix broken slack report Signed-off-by: Josh Marinacci

    by joshmarinacci

    fix broken slack report again Signed-off-by: Josh Marinacci

    by joshmarinacci

    chore: bump PandasWhoCode/initialize-github-job to v1.1.2 in BN XTS regression panel

    Nana-EC merged to hiero-ledger/hiero-consensus-node at 2026-06-25 13:31:49

    chore: bump PandasWhoCode/initialize-github-job to v1.1.2 in regression workflow Also fix return 1 -> exit 1 in bash scripts (return is invalid outside a function in bash), and add --no-frozen-lockfile to pnpm install to handle lockfile drift when protobufjs version differs between the manifest and the existing lockfile in hiero-sdk-js. Signed-off-by: Nana Essilfie-Conduah

    by Nana-EC

    fix: remove redundant pnpm install after pnpm add in sdk-server step pnpm add already updates the lockfile and installs tck workspace dependencies in one pass. The separate pnpm install then ran for all 10 hiero-sdk-js workspace packages and failed with ERR_PNPM_IGNORED_BUILDS because build scripts (protobufjs, chromedriver, etc.) had not been pre-approved via pnpm approve-builds. Signed-off-by: Nana Essilfie-Conduah

    by Nana-EC

    Add pnpm install Signed-off-by: Nana Essilfie-Conduah

    by Nana-EC

    fix: correct pnpm install flags in block-node regression sdk-server step pnpm v11 silently ignores pnpm.overrides in package.json, leaving a specifier drift (protobufjs 8.0.1 in lockfile vs 8.2.0 in manifest). pnpm install with frozen-lockfile (the CI default) then fails with ERR_PNPM_OUTDATED_LOCKFILE. Using --no-frozen-lockfile lets pnpm re-resolve and update the lockfile. Using --ignore-scripts prevents ERR_PNPM_IGNORED_BUILDS (chromedriver, protobufjs, etc. have build scripts not pre-approved via pnpm approve-builds). Signed-off-by: Nana Essilfie-Conduah

    by Nana-EC

    Add an application properties and env Signed-off-by: Nana Essilfie-Conduah

    by Nana-EC

    fix: move inner EOF terminator to column 0 in application.properties heredoc YAML block scalar strips 10-space common indent; the EOF inside the if block was at 12 spaces (→ 2 spaces in shell) so bash never found the terminator. Moved to 10 spaces so it strips to column 0. Signed-off-by: Nana Essilfie-Conduah

    by Nana-EC

    fix env value Signed-off-by: Nana Essilfie-Conduah

    by Nana-EC

    spotlessApply Signed-off-by: Nana Essilfie-Conduah

    by Nana-EC

    chore: Introduce ISS detection module

    netopyr merged to hiero-ledger/hiero-consensus-node at 2026-06-25 13:25:52

    Initial implementation of ISS detection module Signed-off-by: Michael Heinrichs

    by netopyr

    Add README.md and CLAUDE.md Signed-off-by: Michael Heinrichs

    by netopyr

    Revert unintentional changes Signed-off-by: Michael Heinrichs

    by netopyr

    Merge branch 'main' into 25866-iss-detection-module # Conflicts: # platform-sdk/consensus-reconnect-impl/src/main/java/org/hiero/consensus/reconnect/impl/ReconnectController.java # platform-sdk/consensus-reconnect-impl/src/test/java/org/hiero/consensus/reconnect/impl/ReconnectControllerTest.java # platform-sdk/consensus-utility/src/main/java/module-info.java

    by netopyr

    Review comments Signed-off-by: Michael Heinrichs

    by netopyr

    Merge branch 'main' into 25866-iss-detection-module # Conflicts: # platform-sdk/swirlds-platform-core/src/main/java/module-info.java

    by netopyr

    Utility methods for suppressing ISS errors Signed-off-by: Michael Heinrichs

    by netopyr

    docs: Add CLAUDE.md for consensus layer KB

    poulok merged to hiero-ledger/hiero-consensus-node at 2026-06-25 13:11:40

    add CLAUDE.md Signed-off-by: Kelly Greco

    by poulok

    reviewer comments Signed-off-by: Kelly Greco

    by poulok

    reviewer comment Signed-off-by: Kelly Greco

    by poulok

    docs: 25447: Clarify run configurations in swirlds-benchmarks

    thenswan merged to hiero-ledger/hiero-consensus-node at 2026-06-25 09:34:37

    docs: 25447: Clarify run configurations in swirlds-benchmarks Signed-off-by: Nikita Lebedev

    by thenswan

    Address review comments Signed-off-by: Nikita Lebedev

    by thenswan

    Address review comments Signed-off-by: Nikita Lebedev

    by thenswan

    wip Signed-off-by: Nikita Lebedev

    by thenswan

    fix: 25479: ReconnectBench fails when run from the JMH JAR Signed-off-by: Nikita Lebedev

    by thenswan

    perf: deduplicate resolveEvmAddress calls in block worker

    ValentinVPK merged to hiero-ledger/hiero-json-rpc-relay at 2026-06-25 10:23:12

    perf: deduplicate resolveEvmAddress calls in block worker Signed-off-by: ValentinVPK

    by ValentinVPK

    fix: address review comments on resolveEvmAddress deduplication Signed-off-by: ValentinVPK

    by ValentinVPK

    test: improve resolveEvmAddress deduplication tests in getBlockReceipts Signed-off-by: ValentinVPK

    by ValentinVPK

    fix: cap mirror node concurrency and skip address resolution when showDetails=false Signed-off-by: ValentinVPK

    by ValentinVPK

    fix: remove redundant concurrency limit fallback Signed-off-by: ValentinVPK

    by ValentinVPK

    Merge branch 'main' into 5264-perf-resolve-evm-address-deduplication Signed-off-by: ValentinVPK

    by ValentinVPK

    fix: correct xts and release_light test index, remove dead ws_newheads

    quiet-node merged to hiero-ledger/hiero-json-rpc-relay at 2026-06-25 08:54:14

    fix: correct xts and release_light test index, remove dead ws_newheads (#5506) Signed-off-by: Logan Nguyen

    by quiet-node

    Deploy v0.157.1 to mainnet-eu

    hedera-github-bot merged to hiero-ledger/hiero-mirror-node at 2026-06-25 16:46:59

    Deploy v0.157.1 to common,mainnet-citus in mainnet-eu Signed-off-by: swirlds-automation

    by swirlds-automation

    Update chainId Signed-off-by: Ivan Kavaldzhiev

    by IvanKavaldzhiev

    Prepare mainnet-na for 157

    IvanKavaldzhiev merged to hiero-ledger/hiero-mirror-node at 2026-06-25 15:30:13

    Prepare mainnet-na for 157 Signed-off-by: Ivan Kavaldzhiev

    by IvanKavaldzhiev

    Bump Jackson 2 and Java versions

    steven-sheehy merged to hiero-ledger/hiero-mirror-node at 2026-06-25 14:47:23

    Bump Jackson 2 and Java versions Signed-off-by: Steven Sheehy

    by steven-sheehy

    Bump the dependencies group in /rest with 4 updates

    dependabot[bot] merged to hiero-ledger/hiero-mirror-node at 2026-06-25 14:46:57

    Bump the dependencies group in /rest with 4 updates Bumps the dependencies group in /rest with 4 updates: [js-yaml](https://github.com/nodeca/js-yaml), [pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg), [@bufbuild/buf](https://github.com/bufbuild/buf) and [@testcontainers/postgresql](https://github.com/testcontainers/testcontainers-node). Updates `js-yaml` from 4.2.0 to 5.0.0 - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/4.2.0...5.0.0) Updates `pg` from 8.21.0 to 8.22.0 - [Changelog](https://github.com/brianc/node-postgres/blob/master/CHANGELOG.md) - [Commits](https://github.com/brianc/node-postgres/commits/pg@8.22.0/packages/pg) Updates `@bufbuild/buf` from 1.70.0 to 1.71.0 - [Release notes](https://github.com/bufbuild/buf/releases) - [Changelog](https://github.com/bufbuild/buf/blob/main/CHANGELOG.md) - [Commits](https://github.com/bufbuild/buf/compare/v1.70.0...v1.71.0) Updates `@testcontainers/postgresql` from 12.0.2 to 12.0.3 - [Release notes](https://github.com/testcontainers/testcontainers-node/releases) - [Commits](https://github.com/testcontainers/testcontainers-node/compare/v12.0.2...v12.0.3) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: dependencies - dependency-name: pg dependency-version: 8.22.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: "@bufbuild/buf" dependency-version: 1.71.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: "@testcontainers/postgresql" dependency-version: 12.0.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dependencies ... Signed-off-by: dependabot[bot]

    by dependabot[bot]

    Fix breaking changes in js-yaml Signed-off-by: Steven Sheehy

    by steven-sheehy

    feat: add EthereumEipXXXXTransaction support

    Dosik13 merged to hiero-ledger/hiero-sdk-go at 2026-06-25 12:33:23

    feat: add AccessListItem struct and unit tests Signed-off-by: dosi

    by Dosik13

    feat: add helper functions for ethereum encoding and tests Signed-off-by: dosi

    by Dosik13

    feat: add EthereumTransactionBody interface Signed-off-by: dosi

    by Dosik13

    test: add EthereumTransactionBody tests Signed-off-by: dosi

    by Dosik13

    feat: add Sign() and split ToBytes() into 2 helper functions Signed-off-by: dosi

    by Dosik13

    feat: add Getters/Setters in eip1559 Signed-off-by: dosi

    by Dosik13

    feat: add Sign() and split ToBytes() into helper function in EIP2930 Signed-off-by: dosi

    by Dosik13

    feat: add Getters/Setters in eip2930 Signed-off-by: dosi

    by Dosik13

    feat: add Sign() and split ToBytes() into helper function in Legacy Signed-off-by: dosi

    by Dosik13

    feat: add Getters/Setters in legacy Signed-off-by: dosi

    by Dosik13

    feat: add Sign() and split ToBytes() into helper function in EIP7702 Signed-off-by: dosi

    by Dosik13

    feat: add Getters/Setters in EIP7702 Signed-off-by: dosi

    by Dosik13

    refactor: extract shared Sign/encode helpers for typed Ethereum variants Signed-off-by: dosi

    by Dosik13

    chore: fix comments for eip transaction structures Signed-off-by: dosi

    by Dosik13

    feat: add SetEthereumDataFromBody functionality Signed-off-by: dosi

    by Dosik13

    test: add more unit tests Signed-off-by: dosi

    by Dosik13

    refactor: make Authorization structure Signed-off-by: dosi

    by Dosik13

    test: add unit tests Signed-off-by: dosi

    by Dosik13

    Chore(deps): Bump actions/setup-go from 6.4.0 to 6.5.0

    dependabot[bot] merged to hiero-ledger/hiero-sdk-go at 2026-06-25 07:29:34

    Chore(deps): Bump actions/setup-go from 6.4.0 to 6.5.0 Bumps [actions/setup-go](https://github.com/actions/setup-go) from 6.4.0 to 6.5.0. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/4a3601121dd01d1626a1e23e37211e3254c1c06c...924ae3a1cded613372ab5595356fb5720e22ba16) --- updated-dependencies: - dependency-name: actions/setup-go dependency-version: 6.5.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot]

    by dependabot[bot]

    • OPENZEPPELIN immunefi-logoRewards Smart Contract
      $1,000 $2,500 <$5,000 <$25,000

    Add a ERC1967Clones library

    Amxx merged to OpenZeppelin/openzeppelin-contracts at 2026-06-25 15:33:51

    Add a ERC1967Clones library

    by Amxx

    fix tests

    by Amxx

    refactor

    by Amxx

    Update Stateless.sol

    by Amxx

    coverage

    by Amxx

    emit Upgraded event during construction

    by Amxx

    Merge branch 'master' into ERC1967Clones

    by Amxx

    Add changeset and README entry for ERC1967Clones library Co-Authored-By: Claude Opus 4.7 (1M context)

    by Amxx

    Review

    by ernestognw

    Replace UPGRADE_TOPIC1

    by ernestognw

    minor update

    by Amxx

    minor update

    by Amxx

    Update actions/cache action to v6

    renovate[bot] merged to OpenZeppelin/openzeppelin-contracts at 2026-06-25 15:03:02

    Update actions/cache action to v6

    by renovate[bot]

    • LINEA immunefi-logoRewards Smart Contract
      $1,000 $5,000 $0 $100,000

    chore(postman): rename LineaRollup to LinethRollup in postman service

    thedarkjester merged to Consensys/linea-monorepo at 2026-06-25 13:15:19

    chore(postman): rename LineaRollup to LinethRollup in postman service Update all LineaRollup references to LinethRollup in postman including client class and interface file renames, ABI reference updates, and linethRollupAddress parameter naming. Signed-off-by: The Dark Jester

    by thedarkjester

    feat(arithmetization): replace if with switch interpreter

    amkCha merged to Consensys/linea-monorepo at 2026-06-25 12:38:47

    feat: switch to switch in r type Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    feat: switch b type on if imm_sign Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    feat: switch vs ifs Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    feat: r_type Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    feat: finish processing if rm Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    feat: finish utils Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    feat: rm if in keccak Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    feat(arithmetization): wait for native field support to run gogen on bench interpreter (#3419) Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    fix: comparison Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    fix: int Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    feat: revert single ifs Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    feat: revert 2 Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    feat: lint Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    feat: rebase Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    fix: act4-test Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    Merge branch 'main' into feat/replace-if-interpreter

    by letypequividelespoubelles

    feat: switch to an if Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    feat: replace in r type Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    Merge branch 'main' into feat/replace-if-interpreter

    by amkCha

    feat: rep Signed-off-by: amkCha <29160563+amkCha@users.noreply.github.com>

    by amkCha

    feat(verifier-ray): add benchmarking framework for the verifier

    arijitdutta67 merged to Consensys/linea-monorepo at 2026-06-25 11:01:09

    feat: add compile-time call count profiling Signed-off-by: Ivo Kubjas

    by ivokub

    feat: allow marking within R5 instructions Signed-off-by: Ivo Kubjas

    by ivokub

    test: add full verify testdata generation Signed-off-by: Ivo Kubjas

    by ivokub

    chore: generate verify testdata Signed-off-by: Ivo Kubjas

    by ivokub

    feat: add build-time options for choosing the input and spec Signed-off-by: Ivo Kubjas

    by ivokub

    test: separate spec and input getter from fixture Signed-off-by: Ivo Kubjas

    by ivokub

    chore: generate testdata Signed-off-by: Ivo Kubjas

    by ivokub

    feat: use actual verify and testdata for program Signed-off-by: Ivo Kubjas

    by ivokub

    test: also write out failing inputs Signed-off-by: Ivo Kubjas

    by ivokub

    feat: allow also embedding failing inputs Signed-off-by: Ivo Kubjas

    by ivokub

    feat: use embedded inputs in CI Signed-off-by: Ivo Kubjas

    by ivokub

    added benchmark for the ray verifier Signed-off-by: arijitdutta67

    by arijitdutta67

    restore debug option, csv bench report Signed-off-by: arijitdutta67

    by arijitdutta67

    fix: restore RISC-V register debug helpers Signed-off-by: arijitdutta67

    by arijitdutta67

    chore: fix comment

    by ivokub

    chore: emit test fixtures as const Signed-off-by: Ivo Kubjas

    by ivokub

    chore: go generate Signed-off-by: Ivo Kubjas

    by ivokub

    chore: inline profiling reset and snapshot Signed-off-by: Ivo Kubjas

    by ivokub

    chore: guard R5 mark setting Signed-off-by: Ivo Kubjas

    by ivokub

    fix: simplify by removing profile option Signed-off-by: arijitdutta67

    by arijitdutta67

    fix(makefile): remove out flag Signed-off-by: arijitdutta67

    by arijitdutta67

    Merge remote-tracking branch 'origin/main' into verifier-ray/profiling Signed-off-by: arijitdutta67

    by arijitdutta67

    fix: changes after logderivsum is introduced Signed-off-by: arijitdutta67

    by arijitdutta67

    fix(wip): verifier.ProofData -> verifier.Proof Signed-off-by: arijitdutta67

    by arijitdutta67

    fix: add fast option to make the profiling faster Signed-off-by: arijitdutta67

    by arijitdutta67

    add the heavy lookup bench scenario Signed-off-by: arijitdutta67

    by arijitdutta67

    fix: move default input to makefile Signed-off-by: arijitdutta67

    by arijitdutta67

    chore: cleanup in the lookup test Signed-off-by: arijitdutta67

    by arijitdutta67

    chore: cleanup renderCsv test Signed-off-by: arijitdutta67

    by arijitdutta67

    doc: update profiling doc Signed-off-by: arijitdutta67

    by arijitdutta67

    fix: profiling modification to include logderivsum cycles Signed-off-by: arijitdutta67

    by arijitdutta67

    fix: makefile changes Signed-off-by: arijitdutta67

    by arijitdutta67

    Merge branch 'main' into verifier-ray/profiling

    by arijitdutta67

    chore: gofmt fix Signed-off-by: arijitdutta67

    by arijitdutta67

    fix: remove the heavy test from prover-ray to verifier ray Signed-off-by: arijitdutta67

    by arijitdutta67

    fix: remove replace in go mod as we are not touching prover-ray Signed-off-by: arijitdutta67

    by arijitdutta67

    chore: reorder new scenario for less diff Signed-off-by: Ivo Kubjas

    by ivokub

    chore: use dedicated instantiation Signed-off-by: Ivo Kubjas

    by ivokub

    chore: allow including verifier fixtures Signed-off-by: Ivo Kubjas

    by ivokub

    chore: remove unused rule Signed-off-by: Ivo Kubjas

    by ivokub

    chore: include generated fixtures Signed-off-by: Ivo Kubjas

    by ivokub

    chore: revert the fromUints to explit value init to avoid comptime eval budget overflow Signed-off-by: Ivo Kubjas

    by ivokub

    chore: generate Signed-off-by: Ivo Kubjas

    by ivokub

    perf: run zkc exec in fast mode Signed-off-by: Ivo Kubjas

    by ivokub

    chore: cleanup makefile Signed-off-by: Ivo Kubjas

    by ivokub

    chore: update zkc in CI Signed-off-by: Ivo Kubjas

    by ivokub

    fix: avoid overwriting profiling build Signed-off-by: Ivo Kubjas

    by ivokub

    chore: update bench stats Signed-off-by: Ivo Kubjas

    by ivokub

    • STACKS immunefi-logoRewards Smart Contract
      $1,000 <$5,000 <$25,000 <$250,000
      Blockchain DLT
      $1,000 <$5,000 <$25,000 <$250,000

    ci: decouple test jobs from public-only `check-release`

    brice-stacks merged to stacks-network/stacks-core at 2026-06-25 19:05:35

    ci: decouple test jobs from public-only `check-release` `check-release` is skipped on private forks, which cascades to those jobs that actually need it. The regular CI tests now only gate on `job-should-run`.

    by brice-stacks

    chore: rearrange comments

    by brice-stacks

    Adding more coverage in clarinet tests

    brice-stacks merged to stacks-network/stacks-core at 2026-06-25 17:43:14

    test: add some more tests about updating and unstaking

    by brice-stacks

    test: adding clarinet tests for missing scenarios

    by brice-stacks

    • AUDIT-COMP-BASE-AZUL immunefi-logoRewards Smart Contract
      Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool
      Blockchain DLT
      Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool

    Revert "feat(proof): add zk proof requester (#3715)"

    mw2000 merged to base/base at 2026-06-25 22:28:35

    Revert "feat(proof): add zk proof requester (#3715)" This reverts commit ba37def211662319bf640f25478a8e8835466526.

    by mw2000

    fix(zk-host): claim all ZK proof jobs

    mw2000 merged to base/base at 2026-06-25 22:08:28

    fix(zk-host): claim all ZK proof jobs Co-authored-by: Codex

    by mw2000

    fix(zk-host): surface claim errors without allocations Co-authored-by: Codex

    by mw2000

    fix(zk-host): make proof claims fair and fail-fast Co-authored-by: Codex

    by mw2000

    fix(cli): Remove Dead CLI Flags

    refcell merged to base/base at 2026-06-25 22:03:37

    fix(cli): remove dead CLI flags Co-authored-by: Codex

    by refcell

    docs(proposer): clean up README

    jackchuma merged to base/base at 2026-06-25 21:22:30

    docs(proposer): clean up README Co-authored-by: Codex

    by jackchuma

    chore(proof): dry-run review cleanup

    mw2000 merged to base/base at 2026-06-25 21:16:43

    chore(proof): simplify dry-run review cleanup Co-authored-by: Codex

    by mw2000

    refactor(proposer): clean up test utils

    jackchuma merged to base/base at 2026-06-25 20:21:55

    refactor(proposer): clean up test utils Co-authored-by: Codex

    by jackchuma

    fix clippy

    by jackchuma

    refactor(proposer): clean up proposal intervals

    jackchuma merged to base/base at 2026-06-25 19:15:07

    refactor(proposer): clean up proposal intervals Co-authored-by: Codex

    by jackchuma

    feat(eip8130): add eth_estimateGas for 8130

    chunter-cb merged to base/base at 2026-06-25 19:15:07

    feat(eip8130): add eth_estimateGas via a shared read-only simulation Add EIP-8130 gas estimation for `eth_estimateGas`/`eth_call` through a single read-only simulation against block state, gated on the Cobalt fork. - A read-only `simulate` path on the executor resolves the sender without signature recovery, neither validates nor advances the nonce, skips fee/balance validation and fee movement, and reverts all state afterward. It shares the pre-call pipeline (account-change apply, auto-delegation, intrinsic gas) and the billable-gas math with the verifying `execute` path via common helpers, so the estimate cannot drift from the gas a real execution charges. No gas-limit binary search is needed: the EIP-8130 schedule is deterministic and signature-independent. - `Eip8130ExecutionMode` selects verify vs simulate when dispatching from `BaseEvm::transact_raw`. - `BaseTransactionRequest` -> EIP-8130 simulation-tx conversion, with the declared authentication sizes capped (`MAX_AUTH_SIZE`) to reject oversized inputs with INVALID_PARAMS rather than allocating unbounded stub blobs. - `Eip8130GasEstimator` plus the standalone and flashblocks `eth_estimateGas` overrides; a plain (non-8130) request falls through to the standard estimator.

    by chunter-cb

    fix(eip8130): publish declared payer in simulation; drop dead constructor Address review feedback on the estimate path: - simulate_resolve published `payer = sender` even when the request declares a sponsoring payer, so a call reading the payer from the `TxContext` precompile during estimation would see the wrong address and could diverge from the gas a real execution charges. Resolve the declared payer (`tx.payer`, falling back to sender) and publish it, keeping the estimate aligned with execution. - Remove the unused `Eip8130TransactionParts::new_simulation` constructor; the RPC path builds parts via the consensus-tx conversion and sets `Simulate` mode on the result, so the constructor was dead.

    by chunter-cb

    fix(eip8130): tighten estimate request routing and simulate signature Address review feedback on the estimate path: - `Eip8130RequestFields::is_some` now also checks `sender_auth_size`, `payer_auth_scheme`, and `payer_auth_size`, so a request carrying any 8130-looking field (e.g. only `senderAuthSize`) routes to the 8130 path and gets a clean INVALID_PARAMS for the incomplete combination instead of being silently misrouted to the standard estimator. - Drop the dead `now` parameter from `simulate_resolve` (it was only suppressed with `let _ = now`), and remove the now-unused block-timestamp read from `simulate`: estimation skips authorization so it does not enforce expiry, and the EIP-8130 intrinsic schedule does not depend on the timestamp. - Clarify the `billable_gas` refund-cap comment: the denominator includes `sender_intrinsic` (as on mainnet) but excludes `payer_auth`, which carries no refund and must not inflate the EIP-3529 ceiling. - Note at the stub-auth fill site why a non-zero filler is used (EIP-2028 calldata parity with a real high-entropy signature).

    by chunter-cb

    fix(eip8130): return gross gas with 63/64 buffer from estimate The `simulate` estimate returned `billable_gas` — the net consensus charge (intrinsic + call_gas_spent - capped_refund + payer_auth). Refunds are credited to the payer after execution and are never available to the call pool, so a caller who set gas_limit to this estimate would leave gas_limit - intrinsic < call_gas_spent whenever a call's capped refund exceeded payer_auth, OOG-ing the calls. Return the gross amount instead (intrinsic + call_gas_spent + payer_auth, no refund subtracted), matching standard eth_estimateGas semantics. Additionally pad the call portion by CALL_GAS_BUFFER_PERCENT (112%) to cover EIP-150's 63/64 gas retention across nested calls: the simulation measures call gas against a large pool (the request's gas_limit, defaulting to the block gas limit), so a tighter gas_limit == estimate would forward less gas down the call tree and could starve a deep callee. The factor is sized for a representative ~7-hop worst case ((64/63)^7 ~= 1.1165). Intrinsic and payer-auth gas are fixed charges not subject to call forwarding, so the buffer applies only to call gas.

    by chunter-cb

    feat(eip8130): binary-search the estimate gas limit for 63/64 headroom Replace the flat call-gas buffer with a verify-and-search inside `simulate`, the read-only estimation path. The previous fixed multiplier covered EIP-150's 63/64 forwarding retention blindly; this instead searches for the minimum call pool at which the phased calls still succeed, guaranteeing the returned gas limit is feasible without over-estimating. `execute_calls` now takes an explicit `pool` so it can be re-dispatched at candidate pools; block execution passes `outcome.execution_gas_available` unchanged. `probe_calls` runs the calls under a nested journal checkpoint and reverts every write and log, so each probe starts from the identical resolved state (resolved sender, applied account changes, warmed accounts are shared). `search_estimate_pool` short-circuits when the measured spend is itself feasible (the common case, ~2 runs), otherwise bisects upward seeded with the standard 64/63 optimistic guess, bounded by a 1.5% early-exit and a 16-iteration cap — mirroring the reth/geth estimator while exploiting the deterministic EIP-8130 schedule to keep the search short. The estimate is `intrinsic + feasible_pool + payer_auth`: the on-chain call pool at that limit is `feasible_pool + payer_auth` (payer auth is billed on top of the limit, not drawn from the pool), so it is at least the verified-feasible amount and also covers the net charge. base-common-evm and the eip8130-rpc-node RPC estimate tests pass; clippy clean.

    by chunter-cb

    Merge remote-tracking branch 'origin/main' into hh/eip-8130-rpc-simulate # Conflicts: # crates/common/evm/src/eip8130.rs

    by chunter-cb

    style: cargo +nightly fmt

    by chunter-cb

    test(eip8130): add estimate tests on the binary-search path Two new tests lock the binary-search fix against regression: - simulate_estimate_covers_gross_gas_when_sstore_refund_earned: A SSTORE contract clears a pre-seeded slot, earning an EIP-3529 SSTORE_CLEARS refund (~4800 gas). Asserts estimate_gas > charge_gas (gross > net), that gas_limit = charge_gas reverts (call pool is too small because the old net formula subtracted the refund), and that gas_limit = estimate_gas succeeds. - simulate_estimate_covers_63_64_gas_retention_in_nested_calls: A forwarder calls a 100-cold-SLOAD sink via GAS/CALL; the 1/64 retention at each hop starves the sink at a naive gas limit. Asserts estimate_gas > charge_gas (search exceeded the raw spend), that gas_limit = charge_gas reverts (sink OOGs; forwarder detects and propagates the failure), and that gas_limit = estimate_gas succeeds.

    by chunter-cb

    style: cargo +nightly fmt

    by chunter-cb

    refactor(proposer): clean up proof target

    jackchuma merged to base/base at 2026-06-25 16:12:58

    refactor(proposer): clean up proof target Co-authored-by: Codex

    by jackchuma

    address review comments

    by jackchuma

    feat(basectl): add max peer count to basectl p2p info

    Pulsator01 merged to base/base at 2026-06-25 16:12:42

    add max peer count to basectl p2p info

    by Pulsator01

    fix clippy errors

    by Pulsator01

    zeronet: re-genesis config — new genesis + L1 addresses (main)

    rayyan224 merged to base/base at 2026-06-25 16:03:14

    zeronet: re-genesis config — new genesis hash + L1 addresses (on main) Point the zeronet (chainId 763360) chain config at the re-genesis L1 stack deployed on Hoodi via op-deployer. Same change as #3770 but rebased onto main (the regenesis now builds off main). - genesis_l2_hash 0x572a15dd7e69df35913f7f2217376609fc20d59276169977de92c01684637162 (verified: BaseChainSpec::zeronet().genesis_header().hash_slow() on main recomputes to this exact hash — genesis unchanged vs v1.1.0) - L1 origin block 3083762 (0xacb2c60e...); l2_time 1782348588 - new SystemConfig 0x0a111c7980152bde41d71f48e2e1d8184f5f6187, OptimismPortal 0x7e3b97c95c823f385ff6770411f6e12f8e09ac9b - zeronet_base.json regenerated from op-deployer; carries .config.base {azul,beryl} so forks activate via --chain Verified: cargo test -p base-execution-chainspec base_zeronet_genesis passes. Generated with Claude Code Co-Authored-By: Claude

    by rayyan224

    zeronet: update multiproof config_hash known-value for re-genesis The re-genesis chain config (new genesis hash + L1 addresses) changes zeronet's PerChainConfig hash, so config_hash_for_chain(763360) now computes 0xd14ddabf...; update the known-values test assertion. Test-only change (no binary impact). NOTE: the on-chain AggregateVerifier (game 621) CONFIG_HASH must be set to 0xd14ddabf... in Step 3, alongside the regenerated TEE/ZK hashes. Generated with Claude Code Co-Authored-By: Claude

    by rayyan224

    zeronet: schedule azul/beryl just after re-genesis genesis The forks must activate shortly AFTER the new genesis (1782348588), not be baked in at genesis (esp. beryl, which has an activation-admin gate). Set: azul = 1782348888 (genesis + 5m) beryl = 1782349188 (genesis + 10m) Updated config.rs ZERONET + the hardcoded azul/beryl boundary tests (chain.rs, config.rs) + zeronet_base.json .config.base. Verified: base_zeronet_genesis still 0x572a15dd (forks don't affect the genesis header); config_hash unchanged (0xd14ddabf); base-common-chains green. Generated with Claude Code Co-Authored-By: Claude

    by rayyan224

    feat(upgrade-signal): wire upgrade-signal support into consensus nodes

    PelleKrab merged to base/base at 2026-06-25 15:58:53

    feat(consensus): wire upgrade signal into the consensus node Adds the upgrade signal metrics actor, the admin_refreshUpgradeSignal RPC, startup schedule application to RollupConfig, and the three rollout modes (metrics-only -> startup-apply -> runtime-admin) in the consensus CLI/service. Generated with Claude Code Co-Authored-By: Claude

    by PelleKrab

    feat(base): apply pinned startup upgrade signal to EL and CL The base rpc command reads one pinned startup schedule and applies it to both the execution and consensus configs before launching embedded services. Generated with Claude Code Co-Authored-By: Claude

    by PelleKrab

    refactor(upgrade-signal): share consensus validation

    by PelleKrab

    test(base): keep runtime validation test on a valid chainspec Amp-Thread-ID: https://ampcode.com/threads/T-019ef0a8-18c1-74ae-b89f-13064d7d20b3 Co-authored-by: Amp

    by PelleKrab

    fix(upgrade-signal): separate EL and CL metrics

    by PelleKrab

    refactor(upgrade-signal): use upgrade terminology

    by PelleKrab

    Default upgrade-signal L1 RPC in integrated nodes Default the execution upgrade-signal reader to the consensus L1 RPC in integrated commands, honor the upgrade-signal L1 RPC override during consensus startup reads, and fix the rebased protocol test call sites for the updated L1BlockInfoTx::try_new signature. Amp-Thread-ID: https://ampcode.com/threads/T-019ef559-ecab-707e-bbb4-f9222db8a5a3 Co-authored-by: Amp

    by PelleKrab

    fix(upgrade-signal): clean up runtime read wiring

    by PelleKrab

    fix(upgrade-signal): avoid duplicate refresh log

    by PelleKrab

    fix(consensus): use beryl activation admin helper

    by PelleKrab

    chore(zepter): propagate cargo features

    by PelleKrab

    refactor(upgrade-signal): consolidate review fixes

    by PelleKrab

    Apply full upgrade signal schedule

    by PelleKrab

    refactor(upgrade-signal): address startup review feedback

    by PelleKrab

    refactor(proposer): clean up proof submitter

    jackchuma merged to base/base at 2026-06-25 15:19:12

    refactor(proposer): clean up proof submitter Co-authored-by: Codex

    by jackchuma

    address review comments

    by jackchuma

    address review comments

    by jackchuma

    fix(eip8130): keep enshrined system accounts non-empty under EIP-161 via Cobalt code stub

    chunter-cb merged to base/base at 2026-06-25 13:50:56

    fix(eip8130): keep enshrined system accounts non-empty under EIP-161 The enshrined EIP-8130 path writes account configuration and 2D-nonce state through the journal's `sstore`, which only mutates the storage trie — it never sets nonce/balance/code. The target account therefore stays EIP-161-"empty" and is reaped, together with its storage, by end-of-block state clearing. This silently discards: - the native `NonceManager` precompile's 2D-nonce channels (`0x8130…aa01`, which carries no code on any chain), and - the `AccountConfiguration` system account's config on a chain where it is enshrined rather than deployed (e.g. devnet). Guard `JournalStorageProvider::sstore`: when a non-zero value materializes storage on an otherwise-empty account, bump its nonce to 1 so it survives clearing. It fires once per account and is a no-op where the target already has code (deployed contract) or state. The bump is journaled, so a rejected transaction's checkpoint revert rolls it back with the write. Also addresses two journal.rs review nits: drop the per-read `AccountInfo` clone in `with_account_info`, and document why the block number is truncated to u64 (unlike the consensus-critical timestamp).

    by chunter-cb

    fix(eip8130): protect code-less system accounts with a Cobalt code stub Replace the per-sstore EIP-161 nonce-bump guard with an irregular state transition at the Cobalt (EIP-8130) activation that plants a one-byte `0xEF` code stub on code-less enshrined system accounts (the 2D `NonceManager`). Giving the account code makes it EIP-161-non-empty, so end-of-block state clearing no longer reaps it and discards its persistent storage. This mirrors the Canyon create2-deployer transition. Advantages over the nonce bump: - one-shot at the fork boundary instead of a branch on every enshrined `sstore`, and - protects all write paths (including `EvmPrecompileStorageProvider`) automatically, since the account simply has code. The transaction-context precompile is transient-only (nothing to clear) and `AccountConfiguration` is a deployed contract, so neither needs a stub. The guard and its four tests in `journal.rs` are removed; the `with_account_info` clone-removal nit is retained.

    by chunter-cb

    fix(eip8130): plant NonceManager stub in flashblocks apply_pre_execution_changes The flashblocks sequencer's apply_pre_execution_changes mirrored ensure_create2_deployer but was missing the new ensure_eip8130_system_accounts call added in the companion commit. Post-Cobalt the sequencer would not plant the NonceManager code stub, causing the sequencer to diverge from the validator on EIP-161 state.

    by chunter-cb

    style: rustfmt import wrap in state_builder

    by chunter-cb

    feat(eip8130): account-abstraction receipt

    chunter-cb merged to base/base at 2026-06-25 13:19:14

    feat(eip8130): surface account-abstraction receipt fields Add the EIP-8130 receipt surface so AA transactions report their extra execution data through `eth_getTransactionReceipt`: - A `BaseReceipt::Eip8130` consensus variant wrapping the standard receipt with the per-phase `phaseStatuses` array, plus its node-local Compact persistence. - The executor publishes `phaseStatuses` for each EIP-8130 transaction via a thread-local handoff (`Eip8130PhaseStatuses`) consumed by the receipt builder. - RPC `BaseTransactionReceipt` gains the AA fields (`payer`, `status`, `phaseStatuses`, `metadata`), derived in the receipt response builder. Also relocates the balance-monitor unit tests into a sibling test module.

    by chunter-cb

    fix(eip8130): keep balance-monitor tests colocated; guard no_std phase-status drop Address review feedback on the receipt PR: - Revert the balance-monitor unit tests back to a colocated `#[cfg(test)] mod tests` block in `monitor.rs`, per the project convention against standalone `tests.rs` modules. This drops the unrelated test relocation entirely. - Add a `debug_assert!` in the `no_std` `Eip8130PhaseStatuses::set` so a future caller that drops non-empty statuses (which `take` could not recover) fails loudly instead of silently; EIP-8130 execution is `std`-gated, so statuses are always empty here today.

    by chunter-cb

    fix(eip8130): publish phase statuses as the last step of execute Move the `Eip8130PhaseStatuses::set` handoff to after the journal teardown (`take_logs`/`checkpoint_commit`/`commit_tx`/local+frame clear), so the only code between publishing the statuses and the receipt builder's `take` is the allocation-free result construction. This closes the window where a panic in the journal teardown could leave stale per-phase statuses in the thread-local slot for the next transaction on the same thread.

    by chunter-cb

    fix(eip8130-receipt): close phase-status panic window, omit empty metadata Address review feedback on the EIP-8130 receipt PR: - Panic safety: clear the phase-status thread-local at the start of every `execute` so a value leaked by an earlier transaction (e.g. a panic caught between its `set` and the receipt builder's `take`) can never be misattributed to the current transaction's receipt. - Empty metadata: omit empty EIP-8130 metadata from `eth_getTransactionReceipt` rather than serializing it as `"0x"`, matching how empty `phaseStatuses` is skipped. Locked by an assertion in the empty-calls test. - Add a sponsored-payer receipt test (declared payer != sender) pinning the `tx.payer.unwrap_or(sender)` precedence. - Add a Compact round-trip test pinning that `eip8130_phase_statuses` survives encode/decode as the trailing field.

    by chunter-cb

    Update crates/execution/rpc/src/eth/receipt.rs Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

    by chunter-cb

    fix(eip8130-receipt): repair receipt match arm delimiters and drop unused import

    by chunter-cb

    test(eip8130-receipt): cover two 8130 txs in one block Add an end-to-end test that mines two EIP-8130 transactions into a single block — one fully successful and one whose second phase reverts — and asserts each receipt carries its own `phaseStatuses`. This locks the per-transaction attribution of the thread-local executor->receipt-builder handoff (`Eip8130PhaseStatuses`), which relies on reth driving each tx as `execute` -> `build_receipt` sequentially on one thread. A regression that leaked or swapped one tx's statuses would surface here even though the single-8130-tx-per-block tests would still pass.

    by chunter-cb

    chore(eip8130): re-pin contract addresses to latest Base Sepolia deployment

    chunter-cb merged to base/base at 2026-06-25 12:44:06

    chore(eip8130): re-pin contract addresses to latest Base Sepolia deployment Updates the four addresses (and their paired init-code hashes) that changed in the most recent deploy from the eip-8130 contract repo: - AccountConfiguration: 0xb0198...b50 → 0xC6595...88F - DefaultAccount: 0x124b5...251 → 0xca8D7...A6b - DefaultHighRateAccount: 0x13dD0...75D → 0x9bB1a...527 - DelegateAuthenticator: 0xE67D2...d7 → 0xCc815...B1 P256Authenticator and WebAuthnAuthenticator addresses are unchanged. All address/init-code-hash pairs verified under CREATE2 via cast.

    by chunter-cb

    refactor(proposer): clean up proof recovery

    jackchuma merged to base/base at 2026-06-25 12:23:17

    refactor(proposer): clean up proof recovery Co-authored-by: Codex

    by jackchuma

    fix clippy

    by jackchuma

    address review comments

    by jackchuma

    feat(proof): execute zk dry runs locally

    mw2000 merged to base/base at 2026-06-25 11:45:14

    feat(proof): execute zk dry runs locally Make the dry-run ZK backend generate a witness and execute the SP1 range program locally with SP1's light prover. Return local execution stats in ZK proof results and keep dry-run compressed-only. Co-authored-by: Codex

    by mw2000

    fix(challenger): retry ready TEE proofs on tx errors

    leopoldjoy merged to base/base at 2026-06-25 11:41:17

    fix(challenger): preserve tee proof on tx errors Co-authored-by: OpenCode

    by leopoldjoy

    test(challenger): cover tee fallback submission Co-authored-by: OpenCode

    by leopoldjoy

    fix(challenger): bound tee tx retries Co-authored-by: OpenCode

    by leopoldjoy

    fix(challenger): apply tee retry limit without fallback Co-authored-by: OpenCode

    by leopoldjoy

    chore(devnet): schedule Base Cobalt on the local devnet

    chunter-cb merged to base/base at 2026-06-25 07:10:45

    chore(devnet): wire L2_BASE_COBALT_BLOCK through the devnet main already carries the setup-l2.sh Cobalt logic (validation, timestamp derivation, and base.cobalt patching of rollup.json/genesis.json). This adds the two remaining bits of plumbing so it actually fires on the local devnet: a default L2_BASE_COBALT_BLOCK in devnet-env and the env-var passthrough in docker-compose. With these, the devnet activates Base Cobalt (and can include EIP-8130 type 0x7B transactions) at the chosen block.

    by chunter-cb

    fix(challenger): classify known dispute reverts

    leopoldjoy merged to base/base at 2026-06-25 01:20:02

    fix(challenger): classify known dispute reverts Co-authored-by: OpenCode

    by leopoldjoy

    fix(challenger): satisfy clippy in tests Co-authored-by: OpenCode

    by leopoldjoy

    fix(challenger): drop stale zk l1 origin proofs Co-authored-by: OpenCode

    by leopoldjoy

    fix(challenger): ignore stale l1 origin games Co-authored-by: OpenCode

    by leopoldjoy

    fix(challenger): handle duplicate game reverts Co-authored-by: OpenCode

    by leopoldjoy

    refactor(proposer): clean up proof dispatcher

    jackchuma merged to base/base at 2026-06-25 00:32:20

    refactor(proposer): clean up proof dispatcher Co-authored-by: Codex

    by jackchuma

    address review comments

    by jackchuma

    address review comments

    by jackchuma

    fix clippy

    by jackchuma

    address review comments

    by jackchuma

    • BERACHAIN immunefi-logoRewards Smart Contract
      $2,000 <$10,000 <$50,000 <$250,000
      Blockchain DLT
      $2,000 <$10,000 <$50,000 <$250,000

    ci(nightly): add missing pipeline permissions

    fridrik01 merged to berachain/beacon-kit at 2026-06-25 10:51:49

    ci(nightly): add missing pipeline permissions

    by fridrik01

    • FIREDANCER-V1-AUDIT-COMP immunefi-logoRewards Blockchain DLT
      Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool

    watch: add node info row

    ripatel-fd merged to firedancer-io/firedancer at 2026-06-25 16:31:30

    watch: add node info row Co-Authored-By: Richard Patel

    by mmcgee-jump

    • HATHORNETWORK immunefi-logoRewards Websites and Applications
      $0 $0 $0 $10,000
      Blockchain DLT
      $1,000 $0 $10,000 <$20,000

    refactor(decimals): swap int for TokenAmount/TokenBalance on the static surface [part 10]

    glevco merged to HathorNetwork/hathor-core at 2026-06-25 15:54:09

    refactor(decimals): swap int for TokenAmount/TokenBalance on the static surface

    by glevco

    review changes

    by glevco

    chore: bump version to v0.41.0-rc.1

    raul-oliveira merged to HathorNetwork/hathor-wallet-headless at 2026-06-25 21:02:11

    chore: bump version to v0.41.0-rc.1 Co-Authored-By: Claude Opus 4.8 (1M context)

    by raul-oliveira

    Release candidate v0.41.0-rc.1

    raul-oliveira merged to HathorNetwork/hathor-wallet-headless at 2026-06-25 15:08:58

    Merge pull request #608 from HathorNetwork/release-candidate Release v0.40.0

    by raul-oliveira

    chore: bump version to v0.40.0 (#609) Co-authored-by: Claude Opus 4.8 (1M context)

    by raul-oliveira

    Merge pull request #610 from HathorNetwork/release sync master with release

    by raul-oliveira

    feat(wallet): add POST /wallet/sign-message endpoint (#605)

    by pedroferreira1

    feat(start): accept scanPolicy='single-address' in POST /start (#607)

    by pedroferreira1

    Merge pull request #611 from HathorNetwork/raul-oliveira/feat/multisig-streaming-sync feat(wallets): route multisig wallets to manual stream sync

    by raul-oliveira

    • FILECOIN immunefi-logoRewards Blockchain DLT
      <$2,000 <$10,000 <$100,000 <$150,000

    ci: grant pull-requests: read to precheck job

    rvagg merged to filecoin-project/lotus at 2026-06-25 11:57:40

    ci: grant pull-requests: read to precheck job

    by rvagg

    • FIREDANCER-BOOST immunefi-logoRewards Blockchain DLT
      $0 Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool

    watch: add node info row

    ripatel-fd merged to firedancer-io/firedancer at 2026-06-25 16:31:30

    watch: add node info row Co-Authored-By: Richard Patel

    by mmcgee-jump

    • FUEL-NETWORK-ATTACKATHON immunefi-logoRewards Smart Contract
      Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool
      Websites and Applications
      $0 Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool
      Blockchain DLT
      Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool

    Remove cloning of parsed tree elements during type checking

    ironcev merged to FuelLabs/sway at 2026-06-25 01:30:56

    Remove cloning of parsed tree elements during type checking

    by ironcev

    Add development scripts and `just` recipes

    ironcev merged to FuelLabs/sway-standards at 2026-06-25 13:39:21

    Add development scripts and just recipes

    by ironcev

    Add comment on limiting parallel execution

    by ironcev

    Fix typos in docs and standards' doc-comments

    ironcev merged to FuelLabs/sway-standards at 2026-06-25 12:10:05

    Fix typos in docs and standards' doc-comments

    by ironcev

    • ETHEREUM-PROTOCOL-ATTACKATHON immunefi-logoRewards Smart Contract
      Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool
      Blockchain DLT
      Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool Portion of the Reward Pool

    feat: add standard fast confirmation metrics

    nflaig merged to chainsafe/lodestar at 2026-06-25 10:44:45

    feat: add standard fast confirmation metrics

    by nflaig

    fix: only count fast confirmation fallbacks that revert to finality `fallbacks` was incremented inside the `didReset` branch, so it fired on every reset and ended up identical to `resets`. A reset can be followed by a rule that advances the confirmed root forward, which is not a fallback. Track a dedicated `didFallback` flag that is true only when the run ends with the confirmed root at the finalized checkpoint, matching the spec event "reverting confirmed block to the finalized block" (ethereum/beacon-metrics#22). Co-Authored-By: Claude Opus 4.8 (1M context)

    by nazarhussain

    fix: detect fast confirmation reorgs from ancestry `didReorg` was derived from the `ResetNotAncestor` reset reason, but when the confirmed block is both epoch-behind and not an ancestor of head, `resetIfBehindOrNotAncestorOrUnsafe` records `ResetBehind` (higher precedence). Such reorgs crossing an epoch boundary were not counted. Determine `didReorg` directly from ancestry of the confirmed block, which matches the spec event "chain reorg making confirmed block non-canonical" (ethereum/beacon-metrics#22). Co-Authored-By: Claude Opus 4.8 (1M context)

    by nazarhussain

    refactor: register fast confirmation resets metric as a counter `resets` was a gauge despite its `_total` name and `.inc()` usage. Switch it to a counter to match the standardized metrics and Prometheus naming conventions. Also correct the help text: it fires for every reset cause, not only reorgs. Co-Authored-By: Claude Opus 4.8 (1M context)

    by nazarhussain

    chore: fix the lint errors

    by nazarhussain

    feat: chart standard fast confirmation metrics in fork-choice dashboard Add a "Fast Confirmation Events" panel plotting the new standardized counters: beacon_fast_confirmation_reorgs_total, beacon_fast_confirmation_fallbacks_total, and beacon_fast_confirmation_restarts_total. beacon_fast_confirmation_slot is omitted as it duplicates the existing "Confirmed Slot" stat (lodestar_fast_confirmation_confirmed_slot). Co-Authored-By: Claude Opus 4.8 (1M context)

    by nazarhussain

    refactor: replace lodestar_fast_confirmation_confirmed_slot with standard metric The confirmed slot was exposed twice with identical values: `lodestar_fast_confirmation_confirmed_slot` and the standardized `beacon_fast_confirmation_slot`. Drop the lodestar-namespaced gauge and use the standard metric everywhere, including the fork-choice dashboard. Co-Authored-By: Claude Opus 4.8 (1M context)

    by nazarhussain

    Merge branch 'unstable' into nflaig/fcr-standard-metrics

    by nflaig

    fix: use rate() for fast confirmation event counters in dashboard The Fast Confirmation Events panel plotted the raw cumulative counters. Wrap them in rate(...[$rate_interval]) so the panel shows the per-second event rate, addressing review feedback. Co-Authored-By: Claude Opus 4.8 (1M context)

    by nazarhussain

    refactor: simplify metrics result type with Omit Replace the five-field Pick on FastConfirmationRunResult with Omit<..., "reason">, which is equivalent and reads cleaner. Co-Authored-By: Claude Opus 4.8 (1M context)

    by nazarhussain

    fix: use rate() for resets metric in fast confirmation dashboard Now that lodestar_fast_confirmation_resets_total is a real counter, plot its per-second rate instead of the raw cumulative value, consistent with the other fast confirmation event counters. Co-Authored-By: Claude Opus 4.8 (1M context)

    by nazarhussain

    refactor: rename "Reset Total" dashboard panel to "Resets" The panel now plots a rate rather than a cumulative total, so "Resets" reads more accurately. Co-Authored-By: Claude Opus 4.8 (1M context)

    by nazarhussain

    refactor: merge fast confirmation event counters into one panel Combine the standalone "Resets" panel into "Fast Confirmation Events" so all four related counters (resets, reorgs, fallbacks, restarts) are shown together, with resets as the envelope of the breakdown. Co-Authored-By: Claude Opus 4.8 (1M context)

    by nazarhussain

    use increase instead of rate

    by nflaig

    allow usage of increase()

    by nflaig

    Merge branch 'unstable' into nflaig/fcr-standard-metrics

    by nflaig

    fix: check for slot > 0 in missedSlotVote

    spiral-ladder merged to chainsafe/lodestar at 2026-06-25 10:09:30

    fix: check for slot > 0 in missedSlotVote this is OK in TypeScript because -1 is a valid input for `getBlockRootAtSlot` but not for zig where we take unsigned int

    by spiral-ladder

    use GENESIS_SLOT instead of 0

    by spiral-ladder

    defaulted to not use quartz scheduler

    rolfyone merged to Consensys/teku at 2026-06-25 02:26:25

    defaulted to not use quartz scheduler

    by rolfyone

    Merge branch 'master' into default-scheduler

    by rolfyone

    Merge branch 'master' into default-scheduler

    by rolfyone

    Update Discord links to new server invite

    lucassaldanha merged to Consensys/teku at 2026-06-25 21:42:02

    Update Discord links to new server invite Replace old Discord invite (discord.gg/7hPv2T6) and stale server channel deep-links with the new invite https://discord.gg/teku.

    by lucassaldanha

    Merge branch master

    mehdi-aouadi merged to Consensys/teku at 2026-06-25 20:25:58

    Merge branch master

    by mehdi-aouadi

    Update actions/checkout action to v7

    protocols-renovate[bot] merged to Consensys/teku at 2026-06-25 05:02:17

    Update actions/checkout action to v7

    by protocols-renovate[bot]

    Merge branch 'master' into renovate/major-renovatebot-gha-updates

    by rolfyone

    Merge branch 'master' into renovate/major-renovatebot-gha-updates

    by rolfyone

    Make reorderImports explicit to fix environmental issues

    rolfyone merged to Consensys/teku at 2026-06-25 01:58:44

    Make reorderImports explicit to fix environmental issues **Summary** Spotless `8.7.0` can produce different Java import-order results depending on the formatter/JDK environment. CI currently passes on Ubuntu with Temurin JDK 25, but local builds on Oracle JDK 25.0.3/macOS fail `spotlessJavaCheck` with import-order violations across existing files. This PR makes the intended behavior explicit by enabling google-java-format import reordering: ```groovy googleJavaFormat('1.35.0').reorderImports(true) ``` That is the minimal fix: it preserves the existing checked-in import style, avoids a large formatting-only rewrite, and keeps the Spotless `8.7.0` upgrade. **Testing** ```bash ./gradlew :data:spotlessJavaCheck -q ./gradlew spotlessCheck -q ```

    by rolfyone

    Merge branch 'master' into spotless-cleanup

    by lucassaldanha

    Fix BootnodeService package name

    lucassaldanha merged to Consensys/teku at 2026-06-25 00:53:59

    Fix BootnodeService package name Move BootnodeService from teku.pegasys.teku.services.bootnode to the correct tech.pegasys.teku.services.bootnode package and update its importer.

    by lucassaldanha

    Update ConsenSys/github-actions digest to 68e0677

    protocols-renovate[bot] merged to Consensys/teku at 2026-06-25 01:19:30

    Update ConsenSys/github-actions digest to 68e0677

    by protocols-renovate[bot]

    Merge branch 'master' into renovate/renovatebot-gha-updates

    by gfukushima

    Merge branch 'master' into renovate/renovatebot-gha-updates

    by gfukushima

    Replace prose with `get_signed_proposer_preferences` function

    jtraglia merged to ethereum/consensus-specs at 2026-06-25 18:06:58

    Replace prose with `get_signed_proposer_preferences` function

    by jtraglia

    Apply review feedback

    by jtraglia

    Merge branch 'master' into get-signed-proposer-preferences

    by jtraglia

    Bump version to v1.7.0-alpha.12

    jtraglia merged to ethereum/consensus-specs at 2026-06-25 00:58:44

    Bump version to v1.7.0-alpha.12

    by jtraglia

    fill-stateful: make the per-test chain rewind optional (add debug_resetHead)

    skylenet merged to ethereum/execution-specs at 2026-06-25 22:43:29

    fill: don't let the deploy gas safety-buffer exceed the tx gas cap _compute_deploy_gas_limit doubles the regular-gas estimate as a safety buffer, then rejects the deploy if that buffered value exceeds the EIP-7825 per-tx regular-gas cap. On Amsterdam this rejects max-code-size benchmark contracts whose *actual* deploy fits the cap (~8.5M) purely because 2x pushes the limit over it (~17M > 16.77M). Clamp the buffered limit to the cap when the unbuffered estimate still fits; only raise when the unbuffered estimate itself exceeds the cap (genuinely undeployable). Preserves the full max-size benchmark contract.

    by skylenet

    fill-stateful: skip seed withdrawal funding when seed is already funded _session_pre_run unconditionally funds the seed via a CL withdrawal, building a pre-run block so start_block sits one diff-layer above the snapshot. A test that builds many blocks (e.g. test_blockhash's 256-block window) then prunes that block's state, so the per-test debug_setHead rewind to start_block collapses to the snapshot block and pytest.exit aborts the whole session. Skip the withdrawal when the seed already holds >= SEED_FUNDING_WEI (e.g. pre-funded in the state-actor snapshot). Combined with a predeployed factory the pre-run is then empty, start_block == the snapshot block, and the rewind targets the always-available persistent disk-layer state.

    by skylenet

    feat(fill-stateful): fall back to debug_resetHead when debug_setHead is unavailable Nethermind does not expose debug_setHead (geth's number-based head rewind) but offers debug_resetHead, which takes a block hash. Add a rewind_head helper on DebugRPC that prefers debug_setHead and falls back to debug_resetHead on a JSON-RPC 'method not found' error, caching the choice so the probe runs once per session.

    by skylenet

    fix(fill-stateful): also fall back to debug_resetHead on -32603 Nethermind registers debug_setHead but throws NotImplementedException, which it returns as -32603 (Internal error) rather than -32601 (method not found). The probe only caught -32601, so the fallback never fired and it kept calling the unsupported debug_setHead. Accept both codes.

    by skylenet

    refactor(fill-stateful): name the -32603 fallback code Keep _METHOD_NOT_FOUND and add _INTERNAL_ERROR as named constants, combined into _SET_HEAD_UNSUPPORTED, instead of a bare tuple.

    by skylenet

    refactor(fill-stateful): rename _INTERNAL_ERROR to _METHOD_NOT_IMPLEMENTED

    by skylenet

    refactor(fill-stateful): inline the fallback error-code check Drop the _SET_HEAD_UNSUPPORTED tuple; check both codes directly on the fallback codepath.

    by skylenet

    fix(fill-stateful): sync seed nonce at start_block, not latest worker_key re-read the session seed account's nonce from "latest" before each test. On a client whose rewind leaves the `latest` pointer at the previous test's tip (e.g. nethermind's debug_resetHead, which restores the build state but not `latest`), this returned the previous test's advanced nonce, so every funding tx was rejected ("Invalid nonce - expected 0") and the built block included no transactions. Read the nonce at the reset head (start_block) instead, which reflects the state the next block builds on.

    by skylenet

    fix(fill-stateful): verify chain rewind by expected block number, not latest The per-test reset fixture confirmed the rewind landed by reading eth_getBlockByNumber("latest"). Nethermind's debug_resetHead rewinds the build head but leaves the `latest` pointer at the previous test's tip, so the check spuriously failed there. Query the block at the expected start_block number instead — correct for any client whose rewind leaves `latest` stale, and identical to "latest" on clients (e.g. geth) whose debug_setHead moves it.

    by skylenet

    feat(fill-stateful): keep filling when the client implements neither debug rewind rewind_head probed debug_setHead, fell back to debug_resetHead, and raised if neither was available. Fall back to a no-op ("none") instead: each test's first block is built on its explicit start_block parent, so the client reorgs onto it without a debug rewind (validated on nethermind — 225/0, fixtures replay clean on geth and nethermind). Note debug_setHead truncates the chain (geth), keeping the block tree small; debug_resetHead only repoints the head on nethermind, so per-test forks accumulate there as they do under "none".

    by skylenet

    fix(spec-specs): EIP-2780 charge `NEW_ACCOUNT` for value transfer to zero balance precompile

    gurukamath merged to ethereum/execution-specs at 2026-06-25 09:50:55

    fix(amsterdam): charge NEW_ACCOUNT for value transfer to empty precompile EIP-2780 charges the NEW_ACCOUNT state cost when a transaction transfers value to a recipient that is empty per EIP-161. The top-frame charge previously carved out precompile recipients, but neither EIP-2780 nor EIP-161 authorizes that exemption: - EIP-2780 does not mention precompiles; its rule keys solely on "empty per EIP-161 and tx.value > 0". - EIP-161 defines empty structurally (no code, zero nonce, zero balance) with no precompile exception, so an unfunded precompile is empty and is created by the value transfer like any other account. Remove the `recipient_is_precompile` carve-out from the top-frame charge so an empty precompile receiving value pays NEW_ACCOUNT, drop the matching special-case from the testing framework's `transaction_top_frame_state_gas`, and rewrite `test_value_move_to_precompiles` to assert the charge fires for the not-funded precompile while a pre-funded (alive) precompile remains exempt by virtue of being non-empty.

    by gurukamath

    feat(tests): add empty precompile top-frame charge test Add a gas-boundary regression test for value transfers to an unfunded precompile. The transaction is one gas short of covering the top-frame NEW_ACCOUNT state charge, so implementations that incorrectly carve out precompile recipients reach the identity precompile and fail the expected post-state instead of silently filling.

    by danceratopz

    refactor(tests): remove explicit `Trancsaction(gas_limit=...)` cf #2969

    by danceratopz

    chore(tests): guard empty precompile gas assertion Pin the sender balance for one value-moving transaction to an unfunded precompile so the source test fails if the NEW_ACCOUNT top-frame state charge is accidentally skipped. Without this check the broad precompile matrix can still fill because recipient balance and sender nonce are unchanged by the missing charge. Use precompile 0x04 specifically because identity accepts the empty calldata already used by this test and has deterministic execution gas. The NEW_ACCOUNT rule is independent of which precompile executes, so this avoids duplicating every precompile's gas model while still catching the silent-fill regression.

    by danceratopz

    Merge pull request #13 from danceratopz/fix/eip-2780-empty-precompile-new-account-suggestion feat(tests): add empty precompile top-frame charge test

    by gurukamath

    fix(test-cli): raise a clear error when `gentest` can't find `ruff`

    danceratopz merged to ethereum/execution-specs at 2026-06-25 07:08:14

    fix(tooling): raise a clear error when gentest can't find ruff When `ruff` is missing from the environment, gentest's `format_code` let the `FileNotFoundError` from `subprocess.run` surface as an opaque `` with no mention of `ruff`. Catch it and re-raise with a hint to install the dev environment. Also surface the underlying exception in the CLI test via `catch_exceptions=False`, and fix a stale `Black` reference in the `format_code` docstring.

    by danceratopz

    refactor(test-cli): handle gentest `ruff` failures via exception flow Use `subprocess.run(..., check=True)` so a non-zero `ruff` exit raises `CalledProcessError` rather than being detected via an `if result.returncode != 0` value check. Both failure modes, a missing `ruff` binary and a formatting error, now read symmetrically as `except` branches in a single `try` block. Behavior is unchanged: `capture_output=True` still captures `stdout` and `stderr` separately, so the re-raised `RuntimeError` carries the same detail as before. The formatting-error path additionally chains with `from e`, preserving the underlying cause in the traceback.

    by danceratopz

    chore(tooling): clarify state_test preference in write-test skill

    danceratopz merged to ethereum/execution-specs at 2026-06-25 05:38:50

    chore(tooling): clarify state_test preference in write-test skill Strengthen the test-type guidance in the `write-test` skill so agents stop reaching for `blockchain_test` to wrap a single transaction. Make explicit that block-header checks (commonly `gas_used`), receipt logs, and 2D regular/state gas are all expressible from a `state_test` via `blockchain_test_header_verify`, the transaction's `expected_receipt`, and `state_gas_reservoir` respectively, so needing one of those is not a reason to use `blockchain_test`.

    by danceratopz

    chore(tooling): prefer the tx receipt for gas checks in write-test skill The skill recommended `blockchain_test_header_verify=Header(gas_used=...)` to assert a transaction's gas usage from a `state_test`. The transaction's `expected_receipt=TransactionReceipt(cumulative_gas_used=...)` expresses the same check bound to the transaction, so point the gas guidance there and leave `blockchain_test_header_verify` for other block-header fields. The change follows the review that checks gas used through the transaction receipt rather than the block header: https://github.com/CPerezz/execution-specs/pull/3

    by danceratopz

    refactor(test-tools): Remove `CodeGasMeasure` footgun (stop)

    marioevz merged to ethereum/execution-specs at 2026-06-25 05:33:38

    refactor(test-tools): Remove `CodeGasMeasure` footgun (stop)

    by marioevz

    fix(tests): Fix CLZ test

    by marioevz

    chore(test-clients-cli): map ethrex empty-change-set BAL rejection to `INVALID_BLOCK_ACCESS_LIST`

    ilitteri merged to ethereum/execution-specs at 2026-06-25 05:29:59

    fix(clients): map ethrex empty-change-set BAL rejection to INVALID_BLOCK_ACCESS_LIST ethrex correctly rejects an EIP-7928 block whose BAL contains a SlotChanges with an empty slot_changes list, returning INVALID with the message "Block access list storage_changes slot for account has an empty change set". The EthrexExceptionMapper already recognizes the sibling validate_ordering() messages (not-in-strictly-ascending-order, storage_changes-and-storage_reads) but was missing this one, so consume's strict exception matching reports test_bal_invalid_empty_slot_changes [unrelated_slot|demoted_noop] as failing even though ethrex's consensus behavior is correct. Add the missing alternative to the INVALID_BLOCK_ACCESS_LIST regex.

    by ilitteri

    feat(tests): CREATE/CREATE2 and CALL clear return data on failed pre-checks

    omerfirmak merged to ethereum/execution-specs at 2026-06-25 04:41:55

    feat(tests): CREATE/CREATE2 and CALL clear return data on failed pre-checks Entering a CREATE or CALL must reset the return-data buffer unconditionally, including the pre-checks that abort before the callee/initcode runs. The existing CREATE/CREATE2 return-data tests always execute the initcode (RETURN or REVERT) and the CALL tests always enter the callee, so the early-return pre-check paths are uncovered. A client that resets the buffer only after a pre-check leaves stale return data from a preceding CALL observable via RETURNDATASIZE/RETURNDATACOPY. Add EIP-211 state tests under byzantium/eip211_return_data, alongside the existing test_selfdestruct_clears_return_data: - test_create: a CALL returning 32 bytes followed by a CREATE/CREATE2 with value exceeding the creator's balance (failing the balance pre-check before initcode). CREATE is valid from Byzantium, CREATE2 from Constantinople. - test_call: a CALL returning 32 bytes followed by a CALL with value exceeding the caller's balance (failing the balance pre-check before entering the callee). Both assert RETURNDATASIZE is 0 after the failed create/call. The 1024 call-stack depth pre-check is intentionally not tested: since EIP-150's 63/64 gas-forwarding rule, a call chain runs out of gas before reaching depth 1024, so that branch is effectively unreachable. Co-Authored-By: Claude Opus 4.8 (1M context)

    by omerfirmak

    refactor: create/call failure cleans return buffer

    by LouisTsai-Csie

    core: implement EIP-8282: Builder Execution Requests

    MariusVanDerWijden merged to ethereum/go-ethereum at 2026-06-25 14:12:07

    core: implement EIP-8282: Builder Execution Requests

    by MariusVanDerWijden

    happy lint, happy life

    by MariusVanDerWijden

    core: add tests

    by rjl493456442

    params: update with placeholder contract

    by MariusVanDerWijden

    eth/downloader: fix test panic

    rjl493456442 merged to ethereum/go-ethereum at 2026-06-25 11:10:54

    eth/downloader: fix test panic

    by rjl493456442

    params: bump max code size as per EIP-7954

    MariusVanDerWijden merged to ethereum/go-ethereum at 2026-06-25 11:09:48

    params: bump max code size as per EIP-7954

    by MariusVanDerWijden

    Simplify AI usage declaration in the PR template

    clonker merged to ethereum/solidity at 2026-06-25 13:52:57

    simplify PR template

    by clonker

    Update PULL_REQUEST_TEMPLATE.md

    by clonker

    SSA CFG: Run stack layout generator to a fixed point over spill set

    clonker merged to ethereum/solidity at 2026-06-25 11:01:45

    SSACFG Code Transform: in-loop spill discovery in the stack shuffler Replace the restart-based spill-discovery loops with a single shuffle that resolves stuck states in place. A failure leaf whose culprit is not yet active spills it and continues, instead of surfacing StackTooDeep and forcing the caller to restart from scratch.

    by clonker

    SSACFG Code Transform: Run stack layout generator in a fixed point over the spill set

    by clonker

    Use shuffleWithSpillDiscovery in the stack shuffler test

    by clonker

    Remove unused `using`

    msooseth merged to ethereum/solidity at 2026-06-25 09:48:28

    Remove unused `using`

    by msooseth

    Interface: Fix type of optimiser setting

    blishko merged to ethereum/solidity at 2026-06-25 07:01:13

    Test: Add cmdline test for large value of optimizer runs This test demonstrated incorrect behaviour where a large number for the optimizer runs on input is saved in the metadata as negative number. Note `-1` as the value of `runs` field.

    by blishko

    Interface: Fix type of optimiser setting Optimiser setting `expectedExecutionsPerDeployment` and its JSON counterpart were using different types and this could result in some unexpected situation. `expectedExecutionsPerDeployment` used (unsigned) `size_t`, but JSON serialization used signed `Json:number_integer_t`. Providing large enough number for the setting yielded negative number serialized in the contract's metadata. A negative number would be rejected as input to the compiler, breaking the round-trip. Here we propose a strict requirement that the type used in the JSON library and the internal optimiser setting is the same, avoiding any potential mismatch in the future.

    by blishko

    CLI: Fix type of optimizer runs parameter Previously, this parameter was parsed as of type `unsigned`, but internally stored as `std::uint64_t` (actually `size_t`, but we fixed that in a previous commit). Here we propose for the parameter to use the same type as is used internally to store the value. This unifies the behaviour of CLI and Standard JSON interface. As a consequence, CLI will now accept values larger than UINT32_MAX, which were rejected before.

    by blishko

    Changelog: Add entries for changes related to optimizer runs

    by blishko

    Enforce single type for optimizer runs

    by blishko

    Add Community and support to the Readme.

    bgravenorst merged to hyperledger/besu at 2026-06-25 23:38:41

    Add Community and support to the Readme. Signed-off-by: bgravenorst

    by bgravenorst

    Merge branch 'main' into docs/readme-community-refresh

    by bgravenorst

    Merge branch 'main' into docs/readme-community-refresh

    by bgravenorst

    Merge branch 'main' into docs/readme-community-refresh

    by jframe

    Consolidate contribution guidelines.

    bgravenorst merged to hyperledger/besu at 2026-06-25 23:22:06

    Consolidate contribution guidelines. Signed-off-by: bgravenorst

    by bgravenorst

    Address Sally's feedback. Signed-off-by: bgravenorst

    by bgravenorst

    Address Copilot issues. Signed-off-by: bgravenorst

    by bgravenorst

    Add suggestion to use GitHub keywords. Signed-off-by: bgravenorst

    by bgravenorst

    Remove duplication. Signed-off-by: bgravenorst

    by bgravenorst

    Merge branch 'main' into docs/contributing-consolidation

    by bgravenorst

    Merge branch 'main' into docs/contributing-consolidation

    by bgravenorst

    Set JVM for gradle daemon instead of JAVA_HOME

    lu-pinto merged to hyperledger/besu at 2026-06-25 17:34:04

    Set JVM for gradle daemon instead of JAVA_HOME Signed-off-by: Luis Pinto

    by lu-pinto

    feat(plugins): reimplement liveness and readiness checks as plugins (#7704)

    marcosio merged to hyperledger/besu at 2026-06-25 15:06:34

    feat(plugins): reimplement liveness and readiness checks as plugins (#7704) Replace hardcoded HealthService RPC methods with a plugin-based architecture allowing custom health check implementations via HealthCheckService. - Add HealthCheckService plugin API with ParamSource interface - Add HealthCheckServiceImpl using ConcurrentHashMap registry - Add LivenessCheckPlugin (always returns true) and ReadinessCheckPlugin (uses P2PService peer count and BesuEvents sync status) - Integrate plugin registry with RunnerBuilder (plugin-first fallback) - Auto-load health plugins in BesuCommand (like RocksDBPlugin) - Add unit tests for HealthCheckServiceImpl and health plugins Signed-off-by: Marcos Serradilla Diez

    by marcosio

    feat(plugins): add acceptance tests for health check plugins Add TestHealthCheckPlugin acceptance test plugin and HealthCheckPluginTest to verify plugin-provided health check endpoints. Fix CHANGELOG issue reference to use PR number per Besu convention. Signed-off-by: Marcos Serradilla Diez

    by marcosio

    fix(cli): restore --tx-sender-nonce-index-enabled option dropped during main integration Signed-off-by: Marcos Serradilla Diez

    by marcosio

    Merge branch 'main' into feat/7704-health-check-plugins

    by marcosio

    Merge branch 'main' into feat/7704-health-check-plugins

    by marcosio

    Merge branch 'main' into feat/7704-health-check-plugins

    by marcosio

    docs: fix CHANGELOG merge damage and add #10167 entry - restore the #10561, #10254 and #10559 Unreleased entries and the longer #10484 and #10515/#10240 text that a bad merge resolution had dropped - add the #10167 HealthCheckService entry under Additions and Improvements, noting the /readiness response body is simplified to {"status":...} Signed-off-by: Marcos Serradilla Diez

    by marcosio

    fix(plugins): fail fast in LivenessCheckPlugin when HealthCheckService is missing - replace the silent ifPresent-skip in register() with orElseThrow, matching ReadinessCheckPlugin, so a missing required service is not silently ignored Signed-off-by: Marcos Serradilla Diez

    by marcosio

    feat(plugin-api): add P2PService.isP2pEnabled - expose P2P enablement on the P2PService interface so consumers can tell when P2P networking is disabled (e.g. --p2p-enabled=false) - implement it in P2PServiceImpl by delegating to the wrapped P2PNetwork - update the plugin-api knownHash for the new method Signed-off-by: Marcos Serradilla Diez

    by marcosio

    fix(plugins): restore default /readiness behavior - restore DEFAULT_MAX_BLOCKS_BEHIND to 2 so a node more than 2 blocks behind reports DOWN by default (was Long.MAX_VALUE, which always reported UP) - skip the peer check when P2P is disabled via p2pService.isP2pEnabled(), so --p2p-enabled=false nodes are not permanently reported DOWN - guard syncListenerId with a -1 sentinel so stop() without a successful start() does not remove an uninitialised listener id - document the push-model SyncStatus cache (listener-fed) versus the old live pull - add unit tests for the default sync gating and the p2p-disabled peer skip Signed-off-by: Marcos Serradilla Diez

    by marcosio

    refactor(cli): register built-in health plugins after external plugins - move built-in liveness/readiness registration from preparePlugins() to after besuPluginContext.registerPlugins(), so the endpoint-already-registered guard is meaningful and external plugins can override /liveness and /readiness - instantiate each built-in only when its endpoint is still free, leaving the field null otherwise so start()/stop() skip it (no orphaned SyncStatusListener) - fix the misleading comment that described the old mechanism Signed-off-by: Marcos Serradilla Diez

    by marcosio

    Merge branch 'main' into feat/7704-health-check-plugins

    by marcosio

    Merge branch 'main' into feat/7704-health-check-plugins

    by marcosio

    Merge branch 'main' into feat/7704-health-check-plugins

    by marcosio

    docs: re-add #10642 CHANGELOG entry dropped during merge Signed-off-by: Marcos Serradilla Diez

    by marcosio

    Glamsterdam devnet 6: eth_config fixes

    daniellehrner merged to hyperledger/besu at 2026-06-25 14:06:20

    Glamsterdam devnet 6: eth_config fix, pre-Amsterdam regressions, test fixes Builds on the squash-merged #10695. Contains the post-merge fixes: - EIP-8282: rename the builder system-contract eth_config keys to BUILDER_DEPOSIT_CONTRACT_ADDRESS / BUILDER_EXIT_CONTRACT_ADDRESS to match EELS amsterdam fork.py (builders use *_CONTRACT_ADDRESS, unlike withdrawal/consolidation's *_REQUEST_PREDEPLOY_ADDRESS). Addresses unchanged. - Fix two pre-Amsterdam regressions where Amsterdam-only logic leaked into Prague/Osaka: the EIP-2780 top-frame charges and the EIP-7702 invalid-auth refund were applied on every fork. Both are now pushed into the StateGasCostCalculator strategy (NONE no-ops for pre-Amsterdam, Eip8037 implements), removing the caller-side isActive() branches. - EIP-8282: add the builder deposit/exit predeploys to the block-processor integration-test genesis files; recompute the affected state roots and add the builder addresses to the block-access-list assertions. - Restore the revert() javadoc dropped under JDK 25 -Werror (EIP-8037 commit). - Fix stale EIP-7954 max-code/initcode-size unit-test expectations and the BlockSizeTransactionSelector mocks (getRegularGasUsedForBlock). - Disable TestingBuildBlockJsonRpcHttpBySpecTest with a TODO: its pre-built blocks.bin predates EIP-8282 and must be regenerated. Co-Authored-By: Claude Opus 4.8 (1M context) Signed-off-by: daniellehrner

    by daniellehrner

    Update Glamsterdam devnet reference tests to tests-glamsterdam-devnet@v6.1.0 Bump the execution-specs devnet fixtures from v6.0.0 to v6.1.0 and refresh the verification-metadata SHA256 for the new tarball. Extend the INTRINSIC_GAS_TOO_LOW exception mapping so the three EIP-8037 state-creation gas-cap fixtures pass. Besu already correctly rejects these transactions (intrinsic regular gas / calldata floor exceeding TX_MAX_GAS_LIMIT), but its cap-violation messages did not match the regex, which only covered the classic "intrinsic gas cost N exceeds gas limit N" form. The mapping now also accepts the two TX_MAX_GAS_LIMIT messages. Fix the EIP-7928 BAL JSON parser to read postNonce/blockAccessIndex as unsigned longs (the previous signed Long.decode threw on a max nonce of 0xffffffffffffffff, e.g. the nonce_overflow_after_first_authorization fixture). Renamed the existing decodeIndex helper to parseUnsignedLong and reused it for the nonce. v6.1.0 also fixes the EIP-2780 spec to charge NEW_ACCOUNT for a value transfer to a previously zero-balance precompile; the corresponding Besu fix is folded into the pre-Amsterdam/EIP-8037 commit. Co-Authored-By: Claude Opus 4.8 (1M context) Signed-off-by: daniellehrner

    by daniellehrner

    Introduce BesuJsonModule and centralized JSON-RPC object mappers

    fab-10 merged to hyperledger/besu at 2026-06-25 08:27:02

    Introduce BesuJsonModule and centralized JSON-RPC object mappers Add a BesuJsonModule with serializers/deserializers for Besu core types and a JsonRpcObjectMapperFactory that centralizes parameter/response ObjectMapper construction, replacing the ad-hoc deserializers and inline mapper wiring. Rewire JsonRpcParameter and the response serializers (IPC, WebSocket, subscriptions, executor) onto the factory. This is a prerequisite for the Engine API refactor. Co-Authored-By: Claude Signed-off-by: Fabio Di Fabio

    by fab-10

    Apply suggestions from code review Signed-off-by: Fabio Di Fabio

    by fab-10

    Apply suggestions from code review Signed-off-by: Fabio Di Fabio

    by None

    chore: delete orphaned TransactionSmartContractPermissioningControllerTest fixtures

    macfarla merged to hyperledger/besu at 2026-06-25 06:48:10

    chore: delete orphaned TransactionSmartContractPermissioningControllerTest fixtures The three genesis JSON files in `ethereum/permissioning/src/test/resources/TransactionSmartContractPermissioningControllerTest/` have no corresponding test class — no Java file references them anywhere in the codebase. They are dead test fixtures left behind when the test class was removed. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Sally MacFarlane

    by macfarla

    Merge branch 'main' into chore/remove-orphaned-permissioning-test-fixtures

    by macfarla

    Additional logging when QBFT validator contract fails

    jframe merged to hyperledger/besu at 2026-06-25 06:32:13

    Additional logging when transaction simulator or QBFT validator contract fails due to an exception Signed-off-by: Jason Frame

    by jframe

    Merge branch 'main' into diagnose-validator-contract-call-failure

    by jframe

    rpc: remove state history check from block-data-only endpoints

    Sahil-4555 merged to ledgerwatch/erigon at 2026-06-25 16:22:23

    rpc: use checkPruneBlocks for uncle endpoints instead of checkPruneHistory Uncle RPC endpoints (GetUncleByBlockNumberAndIndex, GetUncleByBlockHashAndIndex, GetUncleCountByBlockNumber, GetUncleCountByBlockHash) only read block headers and bodies via _blockReader.BlockWithSenders — they never access state history. checkPruneHistory gates on p.History (state history boundary), which incorrectly rejects requests in BlocksMode where blocks are kept but state is pruned. checkPruneBlocks gates on p.Blocks (block data boundary), which is the correct field for these operations. This aligns eth_uncles.go with the fix already applied to eth_block.go and eth_txs.go. Ref: #21965

    by Sahil-4555

    Merge branch 'main' into fix/rpc-block-access-prune-mode-blocks

    by Sahil-4555

    Merge branch 'main' into fix/rpc-block-access-prune-mode-blocks

    by lupin012

    Merge branch 'main' into fix/rpc-block-access-prune-mode-blocks

    by Sahil-4555

    Merge branch 'main' into fix/rpc-block-access-prune-mode-blocks

    by AskAlexSharov

    Merge branch 'main' into fix/rpc-block-access-prune-mode-blocks

    by Sahil-4555

    Merge branch 'main' into fix/rpc-block-access-prune-mode-blocks

    by Sahil-4555

    Merge branch 'main' into fix/rpc-block-access-prune-mode-blocks

    by yperbasis

    Merge branch 'main' into fix/rpc-block-access-prune-mode-blocks

    by yperbasis

    cmd/bumper: fix rename include/exclude ext filter and drop non-renamable fields

    awskii merged to ledgerwatch/erigon at 2026-06-25 18:29:34

    cmd/bumper: fix rename include/exclude ext filter and drop non-renamable fields The rename selector's --include-exts filter never restricted anything: the extension loop lacked the len(includeExts)>0 whitelist guard the domain loop has, so every extension was pre-selected no matter the flag. Add the guard (include = whitelist when set, exclude = blacklist otherwise, include wins) and iterate the domains slice instead of mutating the selection map mid-range. getNames also surfaced the block-data schema fields (HeadersBlock and the other *Block fields), which parseName maps to an empty type and which renameFiles cannot resolve via String2Enum -- so the default `rename` with no filters aborted before renaming anything. Skip fields that are neither a domain nor an inverted index.

    by awskii

    cmd/bumper: highlight active panel in bump TUI and show pending changes

    awskii merged to ledgerwatch/erigon at 2026-06-25 16:08:47

    cmd/bumper: highlight active panel in bump TUI and show pending changes The bump TUI gave no cue which panel was active -- the bubbles table highlights its selected row regardless of focus, so both panels showed a live cursor. Color the active panel's border, dim the inactive one, and dim the inactive table's selected row so only the focused panel looks live. Also make Tab toggle focus both ways (was left->right only) and render a list of pending edits under the status line, e.g. "commitment.kv v2.1 -> v2.2", so the changes about to be saved are visible at a glance.

    by awskii

    rpc/jsonrpc: one pre-block read for witness keys[] gate; bound completeness error

    awskii merged to ledgerwatch/erigon at 2026-06-25 15:53:22

    rpc/jsonrpc: one pre-block read for witness keys[] gate; bound completeness error Follow-ups to #22000. collectAccessedState gated keys[] on `!accountExists(addr) && !existedPreBlock(addr)`, which read the pre-block account twice for accessed-but-nonexistent addresses: accountExists runs its own inner read and returns false, so && does not short-circuit and existedPreBlock reads the same account again. Merge both into hasWitnessLeaf, which consults the inner reader at most once. Predicate unchanged. checkWitnessKeysComplete listed every missing preimage in the error; cap at 16 with a (+N more) suffix, keeping the full count.

    by awskii

    [r3.5] db/version: app version 3.5.0

    yperbasis merged to ledgerwatch/erigon at 2026-06-25 15:17:40

    [r3.5] db/version: app version 3.5.0

    by yperbasis

    cl/beacon: give the EL builder a build window before stopping it

    lystopad merged to ledgerwatch/erigon at 2026-06-25 15:10:58

    cl/beacon: give EL builder a build window before stopping it Caplin produced near-empty blocks (a handful of txs) because produceBlock issued the FCU to start the EL builder and then polled GetAssembledBlock immediately. GetAssembledBlock calls builder.Stop(), which interrupts the build and returns whatever was assembled so far — so the first poll (a few tens of ms after the build started, once the forkchoice commit released the EL semaphore) returned an almost-empty payload. Wait for the builder to fill the payload before stopping it: build for the builder's own budget (SecondsPerSlot/4) but never past the attestation deadline (SecondsPerSlot/3 into the slot) so the block still propagates in time. Both bounds scale with the chain's slot time, and a late produce request grabs immediately.

    by lystopad

    cl/beacon: use ComputeTimestampAtSlot for slot start (account for GenesisSlot)

    by lystopad

    cl/beacon: name the EL builder budget Hoist the duplicated slotDuration/4 into a single builderBudget local shared by the build-wait window and the poll-loop timeout. No behavior change.

    by yperbasis

    cl/beacon: clamp block builder timing window

    by domiwei

    Merge branch 'main' into feature/lystopad/caplin-block-build-window

    by domiwei

    cl/beacon: keep payload retry window before deadline

    by domiwei

    cl/beacon: account for FCU time in builder window

    by domiwei

    cl/beacon: anchor the EL build window to the attestation deadline (#22032) Suggested changes on top of #21989 (based on its branch, so the diff here is only the delta). ## Why Reviewing #21989 surfaced a GLOAS timeliness bug and an EL/CL coupling: - **GLOAS:** the build budget (`SecondsPerSlot/4`) equals the GLOAS attestation deadline (both 25% of the slot), so `firstGetAt` clamps to `deadline-100ms` and the block is only publishable *after* the 3s deadline (grab ~2.9s + `ProcessBlock`/`HashSSZ` + sign + gossip). A block received after the attestation deadline does not earn proposer boost (`updateProposerBoostRoot` early-returns on `!isTimely`), so it is reorg-eligible. The live validation in #21989 was on Fulu (4s deadline, ~1s margin); GLOAS has none. - **Coupling:** the CL hard-codes the EL builder's own `SecondsPerSlot/4` self-stop budget. If the EL ever retunes its build duration the CL would grab before the builder seals → truncated/near-empty block, with no compile-time signal. ## What - **Anchor the poll window to the attestation deadline** rather than the EL budget: poll until `attestationDue - attestationDue/payloadPublicationDivisor`, reserving a margin for consensus processing + signing + gossip. Preserves the validated pre-GLOAS first grab (~3s, deadline 4s) and gives GLOAS a real margin (grab by ~2.25s, deadline 3s). This also removes the duplicated `SecondsPerSlot/4` — the CL now derives timing only from the attestation deadline it owns. - **Share the attestation-deadline formula** via `clparams.AttestationDueMs(gloas bool)`; `forkchoice.getAttestationDueMs` and block production both delegate to it so they can't drift. - **Use the shared `ethClock.GetSlotTime`** for slot start instead of re-deriving it. - **Extract `pollAssembledPayload`** (the poll/retry/cancel loop) and add unit tests: ready / busy-retry / error-retry / stop-at-deadline / late-request-grabs-once / ctx-cancel. Drops the now-dead `builderBudget` field. ## Spec alignment Cross-checked against consensus-specs (phase0 + gloas) and EIP-7732: - The attestation-deadline values match exactly (GLOAS `ATTESTATION_DUE_BPS_GLOAS = 2500` → 3s; pre-GLOAS 1/3 → 4s) and the proposer-boost timeliness gate (`time_into_slot < attestation_due`) is unchanged. - The build-window timing is **implementation-defined** in the spec (`get_payload` is "implementation dependent"; the spec only says propose at slot start and be timely). So the margin is a legitimate client policy — **`payloadPublicationDivisor = 4` is the one tunable knob**, picked to preserve the validated pre-GLOAS grab while giving GLOAS headroom. Happy to change it if you'd prefer a different reserve. ## Notes - The `block_production.go` diff looks large but most of it is gofmt re-indentation from lifting the payload-processing block out of the old `for`/`select`/`case`. - GLOAS self-build intentionally interrupts the EL builder ~0.75s early (timely-but-slightly-smaller beats full-but-reorged); with an external builder this self-build window isn't on the critical path. Verified: `go test ./cl/beacon/handler ./cl/clparams ./cl/phase1/forkchoice`, `make erigon integration`, scoped golangci-lint clean.

    by yperbasis

    cl/beacon: simplify pollAssembledPayload deadline handling Call get() at the top of the poll loop and drive termination from one deadline gate plus a deadline timer in the select, dropping the stop timer, the nil-primed stopPolling channel, the firstPayloadAttempt flag and the duplicate deadline checks. Grab-once-for-late-requests and the strict no-poll-past-pollUntil guarantee are unchanged; the existing pollAssembledPayload tests cover both.

    by yperbasis

    cl/beacon: re-check build-window deadline after the retry tick The deadline gate ran before the select, so once a retry tick woke the loop it called get() — which stops the EL builder — before re-checking pollUntil. If the deadline elapsed while parked in the select and the select picked the ticker over deadlineTimer (both ready), one extra build-stopping grab could run past pollUntil. Move the gate after the select so only the mandatory first grab may run past the deadline; deadlineTimer still returns promptly at it.

    by yperbasis

    .github/workflows: cache Kurtosis third-party images, with versions sourced from the .io files

    yperbasis merged to ledgerwatch/erigon at 2026-06-25 15:10:58

    .github/workflows: cache ethereum-package images pulled during kurtosis run The caplin-minimal assertoor suite live-pulls four images from Docker Hub during `kurtosis run` Starlark validation that the docker-cl-* cache does not cover: ethereum-genesis-generator, eth2-val-tools, python:3.11-alpine, and the validator-client lighthouse v7.0.1 (the cache only had the v8.1.3 beacon image). A Docker Hub timeout there fails the step before erigon even starts, fails CI Gate, and evicts the PR from the merge queue. Add these to the warm/pull/save/load lists and the cache key so they are served from the local daemon and `kurtosis run` need not reach Docker Hub.

    by yperbasis

    Merge branch 'main' into yperbasis/kurtosis-cache-package-images

    by AskAlexSharov

    .github/actions: drop all flaky Microsoft/Chrome apt sources before apt-get update setup-erigon removed google-chrome.list and microsoft-prod.list by name, but the runner image's azure-cli source (a separate deb822 .sources file) slipped through and 403'd ("no longer signed"), failing apt-get update and the whole job. Match every source referencing dl.google.com or packages.microsoft.com instead, covering .list and .sources regardless of filename.

    by yperbasis

    .github/workflows: cache the pectra and glamsterdam assertoor images The kurtosis-assertoor workflow cached only assertoor:v0.1.2, but the pectra suite pulls v0.0.17 and the glamsterdam suite pulls master-0ad56fb live from Docker Hub on every run. Cache both (matching their .io pins) so neither is exposed to Docker Hub rate limits, mirroring the existing teku/lighthouse-vc caching; the cache key now covers all three assertoor tags.

    by yperbasis

    .github/workflows: cache the GLOAS run's pinned and versioned images The GLOAS workflow cached sigp/lighthouse:v7.0.1 and assertoor:v0.1.2, neither of which the gloas-*.io files use, so every run still pulled its real images live. Drop the dead lighthouse entry, point the assertoor cache at the pinned master-2231b3e the .io files use, and cache the ethereum-genesis-generator, eth2-val-tools and python images pulled during the run. The lighthouse/prysm glamsterdam-devnet client images are mutable tags, so they stay pulled live to avoid serving a stale client.

    by yperbasis

    .github/workflows: source the GLOAS image versions from the .io files ASSERTOOR_IMAGE and GENESIS_GENERATOR_IMAGE were duplicated between the gloas-*.io files (what kurtosis runs) and the workflow env (what the cache targets), so they could drift. Load them at job start from the .io via yq instead — the .io is now the single source of truth; the cache key and pull/save/load keep referencing the same env vars, now populated at runtime. The warm-cache job gains a sparse checkout so it can read the .io too.

    by yperbasis

    .github/workflows: source the regular assertoor versions from the .io files ASSERTOOR_IMAGE / ASSERTOOR_PECTRA_IMAGE / ASSERTOOR_GLAMSTERDAM_IMAGE were duplicated between regular-assertoor.io / pectra.io / glamsterdam.io and the workflow env. Load them at job start from those .io files via yq instead, so they can't drift from what kurtosis runs. The warm-cache job gains a sparse checkout to read the .io. The client images (lighthouse/teku, stable release tags in heterogeneous participant blocks) stay hardcoded.

    by yperbasis

    Revert ".github/actions: drop all flaky Microsoft/Chrome apt sources before apt-get update" This reverts commit 74484261e000fbf2bea3001516c61647cd8ff649.

    by yperbasis

    .github/workflows: source the regular client images from the .io files too LIGHTHOUSE_IMAGE / TEKU_IMAGE / LIGHTHOUSE_VC_IMAGE were the last image versions still hardcoded in the workflow. Load them from regular-assertoor.io (lighthouse/teku) and caplin-minimal-assertoor.io (vc) via yq alongside the assertoor tags, so no image version is duplicated between .io and .yml. Only images not pinned in any .io (genesis-generator default, eth2-val-tools, python, kurtosis infra) remain defined in the workflow.

    by yperbasis

    .github/workflows: stop caching mis-targeted genesis-generator and dead python The regular workflow cached ethereum-genesis-generator:3.3.7, but its suites actually pull 4.0.4 (ethereum-package 5.0.1) and 5.3.5 (6.1.0); 3.3.7 only matches the caplin-minimal fork. And python:3.11-alpine is not pulled by the pinned ethereum-package versions at all. Drop both from the regular workflow, and drop python from the gloas workflow (its genesis stays: it's .io-pinned to 5.3.5 and correctly cached). eth2-val-tools (the real keystore generator) stays.

    by yperbasis

    .github/workflows: re-warm kurtosis image cache when .io versions change The docker-cl-* cache key is now derived from the image tags in the kurtosis .io files, but the two cache-warming workflows only triggered on pushes to test-kurtosis-{assertoor,gloas}.yml. An .io-only version bump therefore changed the key without re-warming the base-branch cache, so PR and merge_group runs cold-pulled every third-party image from Docker Hub until the daily cron caught up. Add .github/workflows/kurtosis/** to both warmers' push paths filter and fix the now-stale header comments. Also make the gloas load step assert that every gloas-*.io pins the same assertoor and genesis image as gloas-caplin-mixed.io (the file the shared cache key is built from), failing loudly if they ever diverge. Fix a leftover comment in the regular workflow that still listed the genesis-generator/python images dropped in the previous commit.

    by yperbasis

    .github/workflows: clarify the eth2-val-tools :latest cache comment Match the wording already used for curl-jq: the cache serves the `latest` digest from the last warm rather than tracking live `latest` — the key is immutable, so the entry is frozen until eviction. No behaviour change.

    by yperbasis

    [r3.5] cl/beacon: give the EL builder a build window before stopping it

    lystopad merged to ledgerwatch/erigon at 2026-06-25 15:01:45

    cl/beacon: give EL builder a build window before stopping it Caplin produced near-empty blocks (a handful of txs) because produceBlock issued the FCU to start the EL builder and then polled GetAssembledBlock immediately. GetAssembledBlock calls builder.Stop(), which interrupts the build and returns whatever was assembled so far — so the first poll (a few tens of ms after the build started, once the forkchoice commit released the EL semaphore) returned an almost-empty payload. Wait for the builder to fill the payload before stopping it: build for the builder's own budget (SecondsPerSlot/4) but never past the attestation deadline (SecondsPerSlot/3 into the slot) so the block still propagates in time. Both bounds scale with the chain's slot time, and a late produce request grabs immediately.

    by lystopad

    cl/beacon: use ComputeTimestampAtSlot for slot start (account for GenesisSlot)

    by lystopad

    cl/beacon: reuse ethClock.GetSlotTime and name the EL builder budget Use a.ethClock.GetSlotTime(targetSlot) instead of hand-rolling it from ComputeTimestampAtSlot, and hoist the duplicated slotDuration/4 into a single builderBudget local shared by the build-wait window and the poll-loop timeout. No behavior change.

    by yperbasis

    cl/beacon: restore ComputeTimestampAtSlot for slot start Revert the GetSlotTime swap from the previous commit: ComputeTimestampAtSlot accounts for GenesisSlot and keeps slotStart consistent with the payload timestamp at attrs.Timestamp. The builderBudget dedup is retained.

    by yperbasis

    [r3.5] cl/beacon: clamp block builder timing window

    by domiwei

    Merge branch 'release/3.5' into feature/lystopad/caplin-block-build-window-35

    by lystopad

    [r3.5] cl/beacon: keep payload retry window before deadline

    by domiwei

    [r3.5] cl/beacon: account for FCU time in builder window

    by domiwei

    cl/beacon: anchor the EL build window to the attestation deadline (#22032) Suggested changes on top of #21989 (based on its branch, so the diff here is only the delta). ## Why Reviewing #21989 surfaced a GLOAS timeliness bug and an EL/CL coupling: - **GLOAS:** the build budget (`SecondsPerSlot/4`) equals the GLOAS attestation deadline (both 25% of the slot), so `firstGetAt` clamps to `deadline-100ms` and the block is only publishable *after* the 3s deadline (grab ~2.9s + `ProcessBlock`/`HashSSZ` + sign + gossip). A block received after the attestation deadline does not earn proposer boost (`updateProposerBoostRoot` early-returns on `!isTimely`), so it is reorg-eligible. The live validation in #21989 was on Fulu (4s deadline, ~1s margin); GLOAS has none. - **Coupling:** the CL hard-codes the EL builder's own `SecondsPerSlot/4` self-stop budget. If the EL ever retunes its build duration the CL would grab before the builder seals → truncated/near-empty block, with no compile-time signal. ## What - **Anchor the poll window to the attestation deadline** rather than the EL budget: poll until `attestationDue - attestationDue/payloadPublicationDivisor`, reserving a margin for consensus processing + signing + gossip. Preserves the validated pre-GLOAS first grab (~3s, deadline 4s) and gives GLOAS a real margin (grab by ~2.25s, deadline 3s). This also removes the duplicated `SecondsPerSlot/4` — the CL now derives timing only from the attestation deadline it owns. - **Share the attestation-deadline formula** via `clparams.AttestationDueMs(gloas bool)`; `forkchoice.getAttestationDueMs` and block production both delegate to it so they can't drift. - **Use the shared `ethClock.GetSlotTime`** for slot start instead of re-deriving it. - **Extract `pollAssembledPayload`** (the poll/retry/cancel loop) and add unit tests: ready / busy-retry / error-retry / stop-at-deadline / late-request-grabs-once / ctx-cancel. Drops the now-dead `builderBudget` field. ## Spec alignment Cross-checked against consensus-specs (phase0 + gloas) and EIP-7732: - The attestation-deadline values match exactly (GLOAS `ATTESTATION_DUE_BPS_GLOAS = 2500` → 3s; pre-GLOAS 1/3 → 4s) and the proposer-boost timeliness gate (`time_into_slot < attestation_due`) is unchanged. - The build-window timing is **implementation-defined** in the spec (`get_payload` is "implementation dependent"; the spec only says propose at slot start and be timely). So the margin is a legitimate client policy — **`payloadPublicationDivisor = 4` is the one tunable knob**, picked to preserve the validated pre-GLOAS grab while giving GLOAS headroom. Happy to change it if you'd prefer a different reserve. ## Notes - The `block_production.go` diff looks large but most of it is gofmt re-indentation from lifting the payload-processing block out of the old `for`/`select`/`case`. - GLOAS self-build intentionally interrupts the EL builder ~0.75s early (timely-but-slightly-smaller beats full-but-reorged); with an external builder this self-build window isn't on the critical path. Verified: `go test ./cl/beacon/handler ./cl/clparams ./cl/phase1/forkchoice`, `make erigon integration`, scoped golangci-lint clean.

    by yperbasis

    cl/beacon: simplify pollAssembledPayload deadline handling Call get() at the top of the poll loop and drive termination from one deadline gate plus a deadline timer in the select, dropping the stop timer, the nil-primed stopPolling channel, the firstPayloadAttempt flag and the duplicate deadline checks. Grab-once-for-late-requests and the strict no-poll-past-pollUntil guarantee are unchanged; the existing pollAssembledPayload tests cover both.

    by yperbasis

    cl/beacon: re-check build-window deadline after the retry tick The deadline gate ran before the select, so once a retry tick woke the loop it called get() — which stops the EL builder — before re-checking pollUntil. If the deadline elapsed while parked in the select and the select picked the ticker over deadlineTimer (both ready), one extra build-stopping grab could run past pollUntil. Move the gate after the select so only the mandatory first grab may run past the deadline; deadlineTimer still returns promptly at it.

    by yperbasis

    execution: remove code duplication from gasCreate/gasCreate2 for EIP-8037

    taratorio merged to ledgerwatch/erigon at 2026-06-25 14:40:24

    execution: remove code duplication from gasCreate/gasCreate2 for EIP-8037

    by taratorio

    preserve ErrWriteProtection code

    by taratorio

    Merge branch 'main' of github.com:erigontech/erigon into worktree-redo-8037-opCreate-readonly

    by taratorio

    .github/actions: drop flaky Microsoft/Chrome apt sources in setup-erigon

    yperbasis merged to ledgerwatch/erigon at 2026-06-25 13:22:21

    .github/actions: drop azure-cli apt repo in setup-erigon The Linux dependency step removes the google-chrome and microsoft-prod apt sources before `apt-get update` so a mid-mirror-sync or unsigned third-party repo can't fail the whole job, but it left the azure-cli repo in place. That repo periodically returns "403 Forbidden / repository is no longer signed" from packages.microsoft.com, failing `apt-get update` with exit 100 before any tests run (e.g. run 28160342365). We never install from these repos (erigon only needs build-essential), so add azure-cli to the removal list and glob the extension to cover both .list and deb822 .sources files.

    by yperbasis

    .github/actions: match flaky apt sources by CDN host, not filename Drop sources by grepping sources.list.d/ for dl.google.com / packages.microsoft.com rather than removing three hardcoded basenames, so any current or future source on those CDNs (incl. azure-cli) is covered regardless of filename. Mirrors the approach prototyped in #22005 (and reverted there to keep that PR scoped to Kurtosis caching).

    by yperbasis

    .github/actions: NUL-delimit the apt-source grep|xargs pipeline

    by yperbasis

    cmd/integration: remove domain purification (compact_domains)

    sudeepdino008 merged to ledgerwatch/erigon at 2026-06-25 04:24:10

    cmd/integration: remove domain purification (compact_domains) Domain purification (the compact_domains / purify_domains command) rewrites domain .kv files with repeated keys dropped, so a key live at step X may only exist in an earlier file. That breaks the invariant that a file ending at step X holds the state present at step X, which other tooling relies on — commitment rebuild and 'seg rm-state --latest' (working off the latest state) among them. Removes the command, its helpers (makeCompactableIndexDB, makeCompactDomains), its flags, and the release-instructions step.

    by sudeepdino008

    cl: log Caplin backward-sync roots as hex

    awskii merged to ledgerwatch/erigon at 2026-06-25 11:34:47

    cl: log Caplin backward-sync roots as hex stateRoot and blockRoot are [32]byte; wrap in common.Hash so they log as 0x… hex instead of decimal byte arrays.

    by awskii

    Merge branch 'main' into awskii/caplin-log-roots-hex

    by AskAlexSharov

    .github/workflows: confine QA build temp to a job-scoped dir and clean it up

    lystopad merged to ledgerwatch/erigon at 2026-06-25 11:34:47

    .github/workflows: confine QA build temp to a job-scoped dir and clean it up The RPC integration/performance QA jobs build Erigon with cgo. When the build is killed mid-flight (PR cancel-in-progress, OOM, timeout) the toolchain leaves its temp behind in /tmp: Go work dirs (go-build*) and cgo/gcc assembler files (cc*.s/.o). `make clean` only touches the checkout, so these accumulate for months (hundreds of MB to GB per runner). Point TMPDIR and GOTMPDIR at a single job-scoped dir under RUNNER_TEMP (outside the checkout), sweep any leftovers from a previously cancelled run at job start, and remove the dir at job end with `if: always()`. The teardown only deletes a path matching the exact erigon-build-tmp-* shape we created, so an unset/empty var can never trigger a stray rm. Applies to the four QA workflows that build Erigon: gnosis, mainnet, latest, and performance (the erigon matrix leg only). The clients workflow is untouched since it never compiles Erigon.

    by lystopad

    cl/beacon: anchor the EL build window to the attestation deadline

    yperbasis merged to ledgerwatch/erigon at 2026-06-25 10:36:04

    cl/beacon, clparams, forkchoice: anchor the EL build window to the attestation deadline produceBeaconBody delayed the first GetAssembledBlock by the EL builder's own SecondsPerSlot/4 budget. For GLOAS that budget equals the attestation deadline (both 25% of the slot), so the block could only be published after the deadline passed, losing proposer boost and becoming reorg-eligible. It also hard-coded the EL builder's budget on the CL side, which silently breaks if the EL changes its build duration. Anchor the poll window to the attestation deadline instead: poll until attestationDue - attestationDue/payloadPublicationDivisor, reserving a margin for consensus processing, signing and gossip so the block stays timely. This keeps the validated pre-GLOAS first grab (~3s, deadline 4s) and gives GLOAS a real margin (grab by ~2.25s, deadline 3s). Share the attestation-deadline formula via clparams.AttestationDueMs so block production and fork choice can't drift, derive slot start from ethClock.GetSlotTime, and extract pollAssembledPayload with unit tests (ready/busy/error/deadline/ late-request/cancel).

    by yperbasis

    cl/beacon: log "Invalid proof length" for the proof-length check The proof-length validation logged "Invalid commitment length", copy-pasted from the commitment check above it, which is misleading when troubleshooting bundle format issues. Log-string fix only, no behavior change.

    by yperbasis

    execution/commitment: remove ConcurrentHexPatriciaTrie PoC

    awskii merged to ledgerwatch/erigon at 2026-06-25 09:24:34

    execution/commitment, db/state, node: remove ConcurrentHexPatriciaTrie PoC The concurrent commitment trie was a proof-of-concept, superseded by the parallel (ParallelPatriciaHashed) and streaming (StreamingCommitter) commitment paths now on main. Remove the PoC trie, its --experimental.concurrent-commitment flag and config wiring, and its concurrent-exclusive tests. - drop ConcurrentPatriciaHashed (+ ParallelHashSort/CanDoConcurrentNext), VariantConcurrentHexPatricia, statecfg.ExperimentalConcurrentCommitment and the --experimental.concurrent-commitment flag end to end - relocate the shared mountTo primitive into parallel_mount.go and the shared nibble/address test helpers into nibble_addr_test.go - backtester paraTrie now selects VariantParallelHexPatricia - update the parallel-patricia-hashed design doc Sequential / parallel / streaming commitment paths are unchanged; SetConcurrentCommitment / IsConcurrentCommitment are kept (used by ModeParallel).

    by awskii

    execution/commitment: harden findAddressForNibble test helper Return a copy of the cached address so callers cannot mutate the shared nibbleAddressCache across parallel tests, and range-check targetNibble. Addresses Copilot review on #22004.

    by awskii

    execution/commitment: drop dead sortPerNibble per-nibble-collector path After the concurrent-PoC removal, (*Updates).SetConcurrentCommitment has no callers, so sortPerNibble is never set true and the 16 per-nibble ETL collectors (t.nibbles) are never used. Remove the field, the setter, and the dead init/collect/close branches; the live path always used the single t.etl collector. Simplify IsConcurrentCommitment to mode == ModeParallel. Behavior-preserving: ModeDirect/ModeUpdate collect via t.etl as before, ModeParallel uses the prefix trie. Addresses @yperbasis's review on #22004.

    by awskii

    rpc/jsonrpc: report the limit in `eth_getLogs` filter-size errors

    awskii merged to ledgerwatch/erigon at 2026-06-25 08:49:00

    rpc/jsonrpc: report the limit in eth_getLogs filter-size errors errExceedMaxTopics and errExceedLogQueryLimit now include the actual limit (maxTopics, logQueryLimit) and fix the grammar.

    by awskii

    cl/gossip: consolidate service registration logging

    anacrolix merged to ledgerwatch/erigon at 2026-06-25 07:02:12

    cl/gossip: demote per-topic subscribe log to DEBUG, add summary count Per-topic "Subscribed to topic" is now DEBUG. registerGossipService logs a single INFO "Registered services" line with subscribed and expired counts.

    by anacrolix

    cl/gossip: aggregate service registration counts into one summary log registerGossipService now returns subscribed/expired counts instead of logging per service. RegisterGossipServices sums them across all services and emits a single INFO "Registered services" line.

    by anacrolix

    [r3.4] db/state/statecfg: bump rcache domain kv/.v to v3.1

    sudeepdino008 merged to ledgerwatch/erigon at 2026-06-25 06:56:23

    db/state/statecfg: bump rcache domain kv/.v to v3.1

    by sudeepdino008

    db/seg/patricia: remove dead PatriciaTree and MatchFinder1/2/3

    sudeepdino008 merged to ledgerwatch/erigon at 2026-06-25 05:34:51

    db/seg/patricia: remove dead PatriciaTree and MatchFinder1/2/3 The compressor's cover phase now uses only the Aho-Corasick matcher; the suffix-array-based PatriciaTree/MatchFinder path has no remaining callers. Remove patricia_tree.go, patricia_flat.go and their tests; keep the Match type (relocated to aho_corasick.go) and the AC fuzz oracle. Closes #21626 (the prefix-loss bug lived in the now-removed PatriciaTree.Insert).

    by sudeepdino008

    Merge remote-tracking branch 'origin/main' into sudeep/seg-rm-old-patricia # Conflicts: # db/seg/patricia/patricia_fuzz_test.go

    by sudeepdino008

    db/seg/patricia: make FuzzLongestMatch oracle linear to fix fuzz timeout

    lystopad merged to ledgerwatch/erigon at 2026-06-25 04:04:54

    db/seg/patricia: make FuzzLongestMatch oracle linear to fix fuzz timeout The brute-force validation oracle in FuzzLongestMatch was O(len(data)*numKeys*keyLen). Since data grows up to ~8x len(test), the coverage-guided fuzzer could drive it past the 60s OSS-Fuzz timeout (oss-fuzz 527099028). The production matchers are bounded by trie depth and stay linear; only the test oracle was quadratic. Replace the inner per-key scan with an independent byte-trie walk (O(len(data)*maxKeyLen)), preserving identical longest-match semantics so it remains a valid oracle for the AC matcher.

    by lystopad

    db/datadir/reset: drop stale data file when its torrent infohash mismatches

    sudeepdino008 merged to ledgerwatch/erigon at 2026-06-25 03:52:15

    db/datadir/reset: drop stale data file when its torrent infohash mismatches seg reset removed a .torrent whose infohash didn't match the preverified set but kept the data file it described, leaving an unverified local build on disk for the downloader to reconcile. Remove the data file alongside its incorrect torrent so the downloader re-fetches the canonical copy. Also make the test helper write file contents so a torrent fixture with a controllable infohash can exercise the mismatch path.

    by sudeepdino008

    rpc/jsonrpc: keep preimage for in-block-deleted accounts in executionWitness

    awskii merged to ledgerwatch/erigon at 2026-06-25 03:10:52

    rpc/jsonrpc: keep preimage for in-block-deleted accounts in executionWitness collectAccessedState gated each accessed address's preimage in keys[] on accountExists(), which reports post-state existence. An account that existed in the parent state but was emptied and EIP-161 state-cleared during the block lands in DeletedAccounts, so accountExists returns false and its 20-byte preimage was dropped — even though its leaf is in the parent-state witness trie. A verifier treating keys[] as the closed accessed set then cannot route to that leaf. Gate on pre- OR post-state existence: a pre-existing account keeps its preimage even when deleted in-block; never-existed and created-then-deleted accounts stay excluded. Repro on mainnet block 25350549: 0x16fd7629978addaf41c426601176c37977a0faa7 (drained 0.36 ETH -> 0) was absent from keys[]; with the fix keys go 1516 -> 1517, witness-trie nodes unchanged. Closes #21979.

    by awskii

    rpc/jsonrpc: verify executionWitness keys[] completeness in stateless check (#22003) Stacked on #22000. The internal stateless verifier re-executes from `state[]`+`codes[]` and matches the root, but never reads `keys[]` — so a witness missing the preimage of an accessed account or storage leaf passes. That is how #21979 slipped past both erigon and reth re-execution. Record which account/storage leaves the witness trie supplies during the stateless re-exec, then assert `keys[]` carries a preimage for each. The protocol system address is exempt (omitted from `keys[]` unless it really changes). Validated on a mainnet archive node built from main + this check, without the #21979 gate fix so generation is still buggy: - block 25350549 → `debug_executionWitness` now rejected: `witness keys[] incomplete: 1 preimage(s) for leaves present in state[] missing: [0x16fD7629978AdDaf41c426601176c37977a0FaA7]` - blocks 25335936, 25350550 (complete witnesses) → verify ok This makes the internal verifier stronger than reth on the preimage axis, where reth's re-execution also passes the buggy witness. Test: `TestCheckWitnessKeysComplete`.

    by awskii

    [r3.5] db/state: fix unwind restoring stale values across step boundaries

    yperbasis merged to ledgerwatch/erigon at 2026-06-25 03:02:36

    db/state: fix unwind restoring stale values across step boundaries DomainRoTx.unwind wrote a restore for every per-step diff of a key to the same unwindStep. In the DupSort values table those became separate dup entries, so getLatestFromDb returned the smallest (often an empty tombstone from a higher step) instead of the value as of the unwind target. Only the lowest in-range step's value is the value at txNumUnwindTo, so restore once, on the last (lowest-step) diff per key. The LargeValues path was already correct (MDBX Put overwrites at the same key). A normal unwind stays within a single step at the production step size, so each key has at most one in-range diff and the bug is masked; it surfaces when the unwound range crosses a domain-step boundary (small step sizes, or a reorg landing just past a freshly-filed step). Found via the StateChurn unwind/reorg integration tests (#21860). Adds a deterministic domain-level regression test.

    by yperbasis

    Merge branch 'release/3.5' into cp/21981-to-3.5

    by yperbasis

    Merge branch 'release/3.5' into cp/21981-to-3.5

    by yperbasis

    p2p: cache per-message ingress gauges to avoid allocs in Peer.handle

    AskAlexSharov merged to ledgerwatch/erigon at 2026-06-25 01:32:25

    p2p: cache per-message ingress gauges to avoid allocs in Peer.handle

    by AskAlexSharov

    Merge branch 'main' into alex/p2p_gaug_36

    by AskAlexSharov

    execution/stagedsync: fix parallel-exec "limit" log underflow

    AskAlexSharov merged to ledgerwatch/erigon at 2026-06-25 00:53:15

    execution/stagedsync: fix parallel-exec "limit" log underflow The "parallel starting" log computed limit as startBlockNum+blockLimit-1. When blockLimit == 0 (no per-cycle limit, e.g. integration stage_exec from 0) this underflows to 18446744073709551615 (max uint64) in the log. Log the effective last block instead: maxBlockNum when unlimited, else min(startBlockNum+blockLimit-1, maxBlockNum). Log-only; execution unaffected.

    by AskAlexSharov

    test: fix flaky SyncServerTests block range broadcast test

    AnkushinDaniil merged to NethermindEth/nethermind at 2026-06-25 21:11:50

    test: fix flaky SyncServerTests block range broadcast test Fixes #10885 Broadcast_BlockRangeUpdate_when_latest_increased_enough asserted that each peer receives a NotifyOfNewRange for every frequency-aligned head (32, 64, 96). But OnNewRange cancels any in-flight broadcast of an older range (RangeBroadcast honours the CancellationToken), so when the head advances quickly the intermediate range updates are coalesced away by design - only the latest range is guaranteed to reach the peers. The test therefore failed intermittently on CI (and consistently under fast/loaded conditions) when an intermediate update such as (0, 64) was dropped: the CountdownEvent never reached its expected count, or the last two received ranges were (0, 32),(0, 96) instead of (0, 64),(0, 96). Assert the real contract instead: every peer is eventually notified of the latest frequency-aligned range (genesis -> 96). The per-peer signal fires only on that exact notification - the one broadcast that is never cancelled - so the check is deterministic and no longer depends on coalesced intermediate updates.

    by AnkushinDaniil

    AccountJsonConverter fix

    svlachakis merged to NethermindEth/nethermind at 2026-06-25 21:10:07

    Reading must not go through EthereumJsonSerializer: every instance merges the global converter list that this converter is registered into, so it would re-enter Read and recurse until the stack overflows.

    by svlachakis

    feat: Options for custom fix-receipts bounds

    alexb5dh merged to NethermindEth/nethermind at 2026-06-25 15:23:33

    Custom options for missing receipts fix

    by alexb5dh

    Code cleanup

    by alexb5dh

    PR feedback

    by alexb5dh

    Config description update

    by alexb5dh

    Merge branch 'master' into feat/fix-receipts-bounds # Conflicts: # src/Nethermind/Nethermind.Init/Steps/Migrations/ReceiptFixMigration.cs

    by alexb5dh

    Code cleanup

    by alexb5dh

    fix(shutter): bound-check keyper signer index from decryption keys

    AnkushinDaniil merged to NethermindEth/nethermind at 2026-06-25 12:32:00

    fix(shutter): bound-check keyper signer index from decryption keys

    by AnkushinDaniil

    fix(shutter): also reject wrong-length keyper signatures

    by AnkushinDaniil

    refactor(shutter): use Signature.Size and parameterize malformed-keys tests

    by AnkushinDaniil

    refactor(shutter): drop redundant comments per review

    by AnkushinDaniil

    ci: pin Claude review workflow to opus model

    benaadams merged to NethermindEth/nethermind at 2026-06-25 11:30:00

    ci: pin Claude review workflow to opus model Add `--model opus` to both the review-path and mention-path claude_args in claude-review.yml. The action previously set no model, falling through to the bundled CLI default which had drifted to an older model. `opus` tracks the latest Opus tier.

    by benaadams

    Merge branch 'master' into ci/pin-claude-review-opus

    by benaadams

    fix(shutter): validate encrypted message length before decoding

    AnkushinDaniil merged to NethermindEth/nethermind at 2026-06-25 09:35:09

    fix(shutter): validate encrypted message length before decoding

    by AnkushinDaniil

    Tone down RLP limit logging

    flcl42 merged to NethermindEth/nethermind at 2026-06-25 08:10:21

    Tone down RLP limit logging

    by flcl42

    Unify types with Geth

    Dyslex7c merged to NethermindEth/nethermind at 2026-06-25 07:36:03

    unify types with Geth

    by Dyslex7c

    merge with master

    by Dyslex7c

    fix CI build error

    by Dyslex7c

    address review comments, fix tests and build, reduce casts

    by Dyslex7c

    merge with master

    by Dyslex7c

    fix(rpc): align trace tests with Prague gas specification, fix log finder underflow

    by Dyslex7c

    fix(build): align test suites and plugins with unified type changes

    by Dyslex7c

    fix overflow/underflow errors in tests

    by Dyslex7c

    merge with master

    by Dyslex7c

    fix tests

    by Dyslex7c

    Merge remote-tracking branch 'upstream/master' into unify-geth-types # Conflicts: # src/Nethermind/Nethermind.Db/FlatDbConfig.cs

    by Dyslex7c

    fix build and tests

    by Dyslex7c

    fix tests

    by Dyslex7c

    fix Evm and blockchain tests

    by Dyslex7c

    refactor(evm): introduce `SaturatingSub` helper to simplify `ulong` saturating subtraction

    by Dyslex7c

    fix blockchain tests

    by Dyslex7c

    Merge remote-tracking branch 'upstream/master' into unify-geth-types # Conflicts: # src/Nethermind/Nethermind.Synchronization/FastSync/StateSyncPivot.cs # src/Nethermind/Nethermind.Synchronization/FastSync/StateSyncRunner.cs

    by Dyslex7c

    fix(ethash): align difficulty bomb exponent cap with Geth's 256-bit limit and fix sync test

    by Dyslex7c

    Merge remote-tracking branch 'upstream/master' into unify-geth-types # Conflicts: # src/Nethermind/Nethermind.Consensus/Stateless/WitnessGeneratingHeaderFinder.cs # src/Nethermind/Nethermind.JsonRpc.Test/Modules/DebugRpcModuleTests.ExecutionWitness.cs

    by Dyslex7c

    fix(era1): resolve `BlockTreeSuggestPacer` underflow and test boundary check failures

    by Dyslex7c

    fix(init): resolve `ReceiptMigration` ulong countdown loop underflows

    by Dyslex7c

    Merge remote-tracking branch 'upstream/master' into unify-geth-types # Conflicts: # src/Nethermind/Nethermind.Db/FlatDbConfig.cs # src/Nethermind/Nethermind.JsonRpc.Test/Modules/DebugRpcModuleTests.TraceCallMany.cs # src/Nethermind/Nethermind.Merge.Plugin.Test/SszRest/SszMiddlewareTests.cs # src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Amsterdam.cs # src/Nethermind/Nethermind.Merge.Plugin/SszRest/Handlers/GetPayloadBodiesByRangeSszHandler.cs # src/Nethermind/Nethermind.TxPool/ITxPool.cs

    by Dyslex7c

    fix: resolve type unification build errors and taiko tests and clean style lint warnings

    by Dyslex7c

    refactor: unify Geth types and fix EIP-8037/EIP-7702 test regressions

    by Dyslex7c

    Merge branch 'master' into unify-geth-types Conflict resolution highlights: - BlockTree.cs: keep master's TryUpdateMainChain refactor, apply ulong types - ISnapshotRepository / PersistenceManager / SnapshotRepository: take master's head-ancestor / committed-head tracking, switch new APIs to ulong, keep PR's PreGenesis-aware fallback in DetermineSnapshotToPersist and FlushToPersistence - BlockTreeTestDouble: switch master's new test double to ulong end-to-end - TestBlockTree / BlockTreeCallSpy: collapse to BlockTreeTestDouble base - MemoryHintMan: switch master's 1.GiB/32.MB int literals to 1UL.GiB / 32UL.MB - Other test files: adopt master's structural changes, keep PR ulong types Build-fixes triggered by the merge (not pre-existing in either branch): - DebugModuleTests: GetBundleTraces ulong?, MigrateReceipts ulong, BlockParameter(0UL) - ClearAllColumnsBatchingTests: StateId.PreGenesis sentinel instead of (-1) - TestingRpcModuleBlockchainTests: WithNonce ulong overload Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    fix(geth-types): address review findings — unsigned-underflow guards and dead checks HIGH (consensus / correctness): - EvmInstructions.Storage SSTORE refund: saturating subtract to prevent the ulong wrap that would silently grant the maximum post-cap refund - StateSyncPivot.Diff: precedence bug returned the absolute number instead of the difference; reroute through SaturatingSub - BlockTree.AcceptVisitor: bail on empty/inverted range instead of looping ~2^64 - BlockTreeSuggestPacer.WaitForQueue: guard the subtract so a head overtake doesn't pause the pacer indefinitely - BinarySearchBlockNumber: bail at index==0 in the Down branch - WitnessGeneratingHeaderFinder: count-driven loop; old i-- looped forever when _lowestRequestedHeader == 0 MEDIUM: - SaturatingSub promoted to a shared UInt64Extensions; TransactionProcessor and EthereumGasPolicy now use it - SszNumericChecks deleted; ulong fields no longer narrow to long - ReceiptMigration.tx-index expiry: explicit-guard intent, no more (long?) wrap trick - EraStore.GetEpochNumber: throw on blockNumber < FirstBlock - ReceiptFixMigration: SaturatingSub Head?.Number - 2 - EraAdminRpcModule / EraE.AdminEraService: reject negative start/end before the (ulong) cast turns -1 into MaxValue - E2StoreReader: reject negative starting_number from on-disk int64 - BlockParameter JSON Read: TryGetUInt64 path instead of throwing FormatException Xdc (flcl42): - SubnetPenaltyHandler.minBlockNumber / startRange: guard underflows before clamp - EpochSwitchManager.estBlockNum: SaturatingSub before Math.Max - Eip8037BlockGasInclusionCheck.CalculateBlockRegularGas: saturate the multi-step subtraction so a bookkeeping bug doesn't silently blow the block gas limit Cleanups: - NewPayloadHandler emoji: explicit if-tree (the < 0 branch was dead on ulong) - DebugRpcModule.debug_getBlockRlp: remove dead blockNumber >= 0 check - TraceStorePruner: early-return on block.Number <= _blockToKeep - XdcRpcModule: dead BlockNumber < 0 checks → BlockNumber is null - StateSyncPivot.TrySetNewBestHeader: drop the no-op Math.Max(x, 0) - PowForwardHeaderProvider: drop the no-op outer Math.Max and the stale comment - BlockDownloaderTests: drop the no-op Math.Max(0UL, …) noise - SurgeGasPriceOracle.GetAverageGasUsagePerBlock: dead currentBlockNumber >= 0 and the unguarded i-- at i==0 - BlockhashStore.GetBlockHashFromState: drop dead requiredBlockNumber < 0 - ISurgeConfig.FeeHistoryBlockCount, L2GasUsageWindowSize, MaxGasLimitRatio: int → ulong (eliminates the casts at call sites) Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    refactor(geth-types): cast cleanup pass Type changes that eliminate casts at multiple sites: - HeadersSyncBatch.RequestSize: ulong → int (14 (int) casts dropped in callers; one (ulong) cast added in EndNumber). Sync request sizes are inherently small. - EraPathUtils.Filename (Era1 + EraE): long epoch → ulong epoch (4 cast sites) - IOpcodeTracingConfig.{StartBlock,EndBlock,RecentBlocks}: long? → ulong?, cascading through TraceConfiguration / FromConfig / BlockRangeValidator and the recorder's currentChainTip (~12 cast sites) - ProcessingStats: _chunkBlobs and BlockData.BlobCount long → ulong - MinBlockInCachePruneStrategyTests / MaxBlockInCachePruneStrategyTests: const long → const ulong for PruneBoundary and {Min,Max}BlockFromPersisted Per-site cleanups: - BlockHeaderTests: hex literals (0x2fefbaUL) instead of (ulong)Bytes.FromHexString(...).ToUnsignedBigInteger() - Int64Extensions.ToLongFromBigEndianByteArrayWithoutLeadingZeros: cast internally once so call sites drop their (long) cast - ProcessedTransactionsDbCleaner: switch to ToULongFromBigEndian... directly - SyncConfig / RocksDbConfigFactoryTests / SyncPeerProtocolHandlerBase: N.MB / N.MiB ulong-extension forms drop the outer (ulong) cast - BlockAccessListsSyncFeedTests: ToULongFromBigEndian... directly Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    fix(build): remove dangling reference to deleted SszNumericChecks, lint cleanups - Nethermind.Stateless.Executor.csproj: drop link to deleted SszRest/SszNumericChecks.cs - Nethermind.OpcodeTracing.Plugin/OpcodeTracingConfig.cs: restore space lost in long?→ulong? replace_all - Nethermind.Taiko.Test/SurgeGasPriceOracleTests.cs: drop unused System using left over after Math.Max(0UL, …) removal Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    fix(eip8037): restore master's Validate semantics to unblock Pyspec The PR's Validate signature dropped the intrinsicRegular/intrinsicState subtractions, making the worst-case dimension calculation strictly match `min(TX_MAX_GAS_LIMIT, tx.gas)` and `tx.gas`. Master subtracts the opposite-dimension intrinsic before clamping, yielding a smaller worst- case that lets txs through when one dimension is tight but the tx's intrinsic mass lives in the other dimension. The Amsterdam test `test_block_2d_gas_valid_when_cumulative_exceeds_limit` fails under the PR's stricter check; master is green. Port master's behavior to the PR's ulong signature using SaturatingSub for the txGas - intrinsic{State,Regular} subtractions. Also revert the CalculateBlockRegularGas + Storage SSTORE Refund SaturatingSub changes back to raw subtracts so they match the PR's tested behavior. Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    test(eip8037): align inclusion check tests with master's worst-case formula The PR-added unit / integration tests asserted the "raw tx.gas" inclusion predicate (worst-case state = tx.gas, no intrinsicRegular subtraction). That contradicts the Pyspec fixture `tests/amsterdam/eip8037_state_creation_gas_cost_increase/.../test_block_2d_gas_valid_when_cumulative_exceeds_limit`, which passes on master because master's Validate subtracts the opposite- dimension intrinsic before clamping. Drop the two PR-added cases that required the raw-tx.gas predicate; rewrite the parameterized Boundary_state case to assert the worst-case-after-intrinsic-subtract semantics. - Eip8037BlockGasInclusionCheckTests: drop Creation_tx_regular_check_without_subtraction_rejects; update Boundary_state deltas so the rejection lands when (tx.gas - intrinsicRegular) > stateAvailable - Eip8037BlockGasIntegrationTests: drop Eip8037_creation_tx_regular_check_without_subtraction_rejects Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    fix(geth-types): post-review HIGH/MEDIUM/NIT fixes HIGH: - BeaconPivot.GetLowestBlockToFinalize: guard `Head.Number - MaxDepth + 1` — wrapped to a near-ulong.MaxValue safe number when head < 64. - Optimism BatchV1.DecodeTxs: drop (ulong) cast on UInt256 tx values; the Transaction.Value / DecodedMaxFeePerGas fields are UInt256 and the cast silently truncated any tx > ~18.4 ETH. - EthereumGasPolicy.CreateAvailableFromIntrinsic: Debug.Assert on the two unguarded subtracts (gasLimit - intrinsicRegular - intrinsicState and TX_MAX_GAS_LIMIT - intrinsicRegular). Callers validate today; this catches future eth_call paths that skip validation. - EvmInstructions.Storage SSTORE refund: Debug.Assert + SaturatingSub on `Refund -= sClearRefunds`. Per EIP-2200/3529 the matching `+= sClearRefunds` ran earlier so the invariant holds; the saturating subtract guards against an out-of-order wrap silently granting the maximum post-cap refund. - ReceiptMigration.MigrationPointerTracker.ReportCompleted: guard `_nextToConfirm--` at 0 so a fully-migrated chain doesn't wrap the tracker into ulong.MaxValue. Reports `MigratedBlockNumber = 0` when genesis is reached. MEDIUM: - VmState.CommitToParent: `checked` the parentState.Refund += Refund. Gas- bounded so unreachable in practice, but the unsigned add no longer caught a buggy negative-child propagation that master's signed long would have. - Eip8037BlockGasInclusionCheck.Validate: early-return RegularDimensionExceeded / StateDimensionExceeded when cumulative > limit. The prior SaturatingSub silently floored to 0 and the worst-case check could falsely succeed. - CompactionSchedule.NextFullCompactionAfter: clamp `from + distance` at ulong.MaxValue. Unreachable at any realistic chain height; explicit. - AuRaBlockFinalizationManager.LoadInitialLastFinalizedBlockLevel and GetFinalizationLevel: drop the long round-trip and use ulong arithmetic with explicit zero/underflow guards. Avoids the 2^63-1 wrap that was only theoretical but exposed by the signed→unsigned migration. NIT: - BlockTree.GetBlockHashOnMainOrBestDifficultyHash: drop dead `blockNumber < 0` check on ulong parameter. - ReceiptsSyncFeed: drop stale "_barrier is long" comment (now ulong). Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    Merge remote-tracking branch 'upstream/master' into unify-geth-types # Conflicts: # src/Nethermind/Nethermind.AuRa.Test/Validators/MultiValidatorTests.cs # src/Nethermind/Nethermind.Blockchain/IBlockFinalizationManager.cs # src/Nethermind/Nethermind.Blockchain/ManualFinalizationManager.cs # src/Nethermind/Nethermind.Core.Test/Builders/BlockTreeTestDouble.cs # src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeFinalizationManager.cs # src/Nethermind/Nethermind.Merge.Plugin.Test/MergeFinalizationManagerTests.cs # src/Nethermind/Nethermind.Merge.Plugin/MergeFinalizationManager.cs

    by Dyslex7c

    fix(json-serialization): reject leading zeros in hex quantities and clean up XDC comments

    by Dyslex7c

    refactor: address review comments on casts, comments, and hex quantity deserialization - Cast ancestorsCount and relationshipLevel to ulong early in UnclesValidator.IsKin to run Math.Min entirely on ulong. - Remove redundant (ulong) casts on ElasticityMultiplier / DefaultElasticityMultiplier. - Remove obsolete safe-cast comments in Eip1559GasLimitAdjuster, UnclesValidator, and HeaderValidator. - Support hex strings with leading zeros for block nonces and dictionary keys in JSON deserialization.

    by Dyslex7c

    refactor(aura,state): address review comments on block finalization, step calculator, difficulty, and state boundary

    by Dyslex7c

    refactor: unify block number, nonce, and gas types to unsigned types

    by Dyslex7c

    refactor: unify block number, nonce, and gas types to unsigned types

    by Dyslex7c

    refactor: geth type unification and unsigned overflow/underflow fixes

    by Dyslex7c

    Merge remote-tracking branch 'upstream/master' into unify-geth-types # Conflicts: # src/Nethermind/Nethermind.Evm/StateOverridesExtensions.cs

    by Dyslex7c

    fix(json): chainspec hex parsing rejecting valid leading-zero forms The PR's added "0x0…" rejection in NumericConverterHelper.Parse breaks ChainSpec loading: gasLimitBoundDivisor and similar fields are written as "0x0400" in real chainspec JSON. Tests across AuRa, JsonRpc, Specs, Runner, Blockchain and Merge.Plugin fail with "Error when loading chainspec (hex to UInt64)". Match master's lax behavior — accept "0x0XXX" in the chainspec parse path. EIP-1474 JSON-RPC strictness for leading zeros is enforced separately at the RPC entry layer (BlockParameter etc.) and is unaffected by this change. Also drop unused `using System;` in BeaconPivot.cs (lint IDE0005). Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    nit(json): strip remarks block on NumericConverterHelper.Parse Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    fix(evm): restore signed-refund semantics so EIP-2200/3529 sub-below-zero matches master Master computes totalRefund / claimableRefund as signed long. A negative refund (legitimate per EIP-2200 net metering) feeds into `operationGas = spentGas - refund` as `spentGas + |refund|`. The PR's ulong wrap broke this — the cap picked the quotient and operationGas underflowed, producing the wrong stateless witness on test_sstore_call_to_self_sub_refund_below_zero. CalculateSpentGasAndRefund now returns (ulong spentGas, long refund); the caller dispatches the subtraction on the sign. VmState.Refund stays ulong. Also drops the three Throws_on_leading_zeros tests that were asserting the chainspec-breaking strict hex path I reverted in the previous commit. Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    fix(evm): VmState/Substate Refund back to signed long for EIP-2200/3529 net metering The PR's ulong Refund + 'wrap is fine, final cap saves it' theory is wrong: the SSTORE Refund -= sClearRefunds wrap is later observed by the refund cap `Math.Min(spentGas/quotient, totalRefund)` which, with ulong totalRefund, picks the quotient (max refund) instead of master's signed-long path that picks the negative `totalRefund` (less refund / more gas paid). Stateless witness on test_sstore_call_to_self_sub_refund_below_zero diverges by one byte. Match master: VmState.Refund and TransactionSubstate.Refund return to long, sClearRefunds / refundFromReversal locals cast to long at the boundary, totalToRefund/cap path is signed. The caller still works in ulong spentGas and dispatches on refund sign for the final subtract. Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    review: SaturatingSub for spill, drop redundant ParseLax / strict 0x0 checks - TransactionProcessor: ternary -> SaturatingSub on spill-not-in-reservoir. - NumericConverterHelper: drop ParseLax (functionally identical to Parse after the earlier strict-leading-zero revert) and the redundant "0x0"u8 fast-path. - LongConverter/ULongConverter: route ReadAsPropertyName via Parse and align FromString(string) with the span overload (no strict 0x0 rejection, no temp-buffer prefix dance). Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    Apply suggestions from code review Co-authored-by: Lukasz Rozmej

    by LukaszRozmej

    review: address PR comments — cleaner ulong typing, drop dead code/comments - SlotStore: _fileEra long+sentinel -> ulong? (era is ulong). - StatelessBlockTree.Prefetch: length/i to ulong, drop (int)/(ulong) casts around BlockhashCache.MaxDepth. - BlockValidator/BlockErrorMessages: itemCount ulong throughout, drop the asymmetric cast. - ProcessingStats/BlockStatistics: BlockTo long -> ulong (matches BlockFrom), drop the (long)block.Number cast at construction. - TxPoolTxSource: drop noisy "we have leftover candidates / no optimal picking needed" narration; behavior is in the code. - UnclesValidator.IsKin: name the bounded int once, only widen to ulong where it interacts with header.Number. - HeaderValidator: restore master's check order (parent → totalDiff → seal → gasUsed → gasLimit → timestamp → blockNumber) to avoid silently swapping which error a failing test sees first; drop the ValidateFieldLimit virtual stub — it has no overrides and just returns true. - ProgressLogger: strip the explanatory ulong-vs-long comments; the -1 queue sentinel keeps a one-line note. Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    review(config): drop the special ulong branch that silently wrapped -1 Convert.ChangeType handles non-negative ulong strings via Convert.ToUInt64 and throws OverflowException on negative input — surfacing a config error instead of silently rewriting "-1" to ulong.MaxValue. No ulong-typed config field in the codebase uses a -1 default; the remaining -1 sentinels all live on signed long/int fields, which are unaffected. Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    refactor: drop redundant casts and cascade ulong further Follow-up cleanup to the type-unification PR — eliminates avoidable (long)/(ulong)/(int) casts by either deleting dead ones or cascading the ulong type a step further. - BlockDownloader: drop dead (ulong) cast — FindBestFullState already returns ulong on master. - EvmPooledMemory.ComputeMemoryExpansionCost: declare local words as ulong end-to-end; six casts collapse to none (subtraction is safe by the UpdateSize gating condition). - ChainSpecLoader.GetTransitions: use ulong.Parse(NumberStyles. AllowHexSpecifier) instead of (ulong)Convert.ToInt64 — keeps the signed intermediary out and removes the cast. - StateSyncPivot.GetPivotHeader / UpdateHeaderForcefully: rewrite the signed-gap comparison on ulongs and cascade ISyncConfig.StateMaxDistanceFromHead from int to ulong. The block- distance is conceptually unsigned and the cascade removes four casts at the call site. - SyncStatusList + FastBlockStatusList: cascade public API from long to ulong so the four (long)blockNumber casts at the call site go away. Internal array-allocation crosses one .NET-API boundary (`new int[size]`) which still needs an explicit (long) cast — kept with `checked` so silent truncation can't happen. - TransactionProcessor.CalculateRefundedCreateStateSpillForHalt: replace the open-coded `a > b ? a - b : 0UL` ternary with the public SaturatingSub helper (last open-coded site). - SyncReport beacon-headers format: numHeadersToDownload stays ulong end-to-end; the (long) cast was only there for the format string. - ConfigSourceHelper: when valueType is ulong, parse via ulong.TryParse directly rather than long.TryParse-then-unchecked- cast (which silently wrapped negatives). Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    review: misc unsigned-type tightening, strip cast comments, fix div-by-zero DbOnTheRocks: bufferSize cast was on the wrong operand — (ulong)0.35 truncates to 0 and divides by zero. Restore master's (ulong)(targetFileSize / CompressibilityHint). Era1 (EraExporter/EraImporter/EraReader): drop the "Cast to long/int is safe" comments — the casts are still there, but the prose is noise. totalProcessed → ulong (no more (ulong)Interlocked.Increment cast). Era1 EraWriter: _startNumber long → ulong; cast moved to the single WriteInt64 call where the disk format is signed. Era1 tests (Era1ModuleTests / EraExporterTests): start/end → ulong end to end, drop (ulong)start / (ulong)end casts at the call site. EraE: - Admin/RPC: ExportHistory/ImportHistory and admin_*EraHistory take ulong from/to; drops the negativity check and the (ulong)from cast. - Archive/EraReader: e2.First/LastBlock are already ulong; drop the redundant (ulong) casts. - Archive/EraWriter: write _startNumber via new WriteUInt64 helper (was WriteInt64 with (long) cast). - E2Store/E2StoreReader: add ReadUInt64; load _startBlock directly, remove the signed round-trip + "negative starting block" check. - Export/EraExporter: epoch indices and totalProcessed ulong; drop the (ulong)EraWriter.MaxEraSize cast (already ulong-compatible). - Proofs/Validator: GetAccumulatorForEpoch takes ulong; drop the (long)(blockNumber / (ulong)SlotsPerHistoricalRoot) cast pair. - Store/EraStore + RemoteEraStoreDecorator: strip the "Boundary cast — safe" / "uint promotes cleanly" comments and the `int → uint` migration preamble. Decorator's manifest keys / epoch locals: int → uint, so GetBlockRangeAsync stops doing `(ulong)minEpoch * _maxEraSize`. - Store/HttpRemoteEraClient + tests: manifest keys uint; TryParseEpoch outputs uint (drops the `&& epoch >= 0` check that was structurally impossible to fail). EthStats: SkipLocalsInit on the three methods that stackalloc and only read the prefix they wrote (TryParse, TryParseUInt64String, TryParseInt64String). Required AllowUnsafeBlocks in the csproj. Ethash.Test/DifficultyCalculatorTests: blocksAbove long → ulong, drop the (ulong)blocksAbove cast at the Calculate call sites; TestCase literals end with UL. Evm.Benchmark/BlockProcessingBenchmark: startNonce + nonce int → ulong; WithNonce takes startNonce + (ulong)i instead of the cast-the-sum form. Evm.Precompiles/Bls12381G{1,2}Msm + PairingCheck + Eip2537: DiscountForG1/G2 now ulong-in / ulong-out; k is ulong; DataGasCost loses the (ulong)k * (ulong)Eip2537.DiscountForGn(k) cast pair. Evm.Test: - Eip1108Tests: _blockNumberAdjustment int → long (Istanbul-relative signed offset); expectedPrecompileGas long → ulong; drops the (ulong)expectedPrecompileGas cast at AssertGas sites. - Tracing/GasEstimationTests: errorMargin int → ulong (matches GasEstimator.Estimate's ulong errorMargin parameter); TestCase -1 reworked to ulong.MaxValue ("out of bounds" still triggers). - Tracing/ParityLikeTxTracerTests: drop (long)tx.GasLimit and (UInt256)tx.Value — both already match the assertion target type. Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    review: misc ulong-tightening + strip noisy "cast safe" comments EVM: - Eip152Tests / Eip1108Tests: BlockNumber rewritten to unchecked(IstanbulBlockNumber + (ulong)_blockNumberAdjustment) with long _blockNumberAdjustment — one cast, ulong wrap subsumes the sign branch. - Eip2200/3198/3855/7883/7928/8024/8037 tests: stipend / baseFee / repeat / Result / pushCount / gasUsed → ulong end-to-end. - IntrinsicGasCalculatorTests: OldCost/NewCost/FloorCost int → ulong; drops the (ulong) casts inside the assertions. - PrecompileTests.TestCase.Gas long? → ulong?. - EvmPooledMemoryTests: input/expectedResult/memoryAllocation → ulong, decimal.ToInt64 → decimal.ToUInt64. - VmStateTests: factor the duplicated `using vmState; try {…} finally { Env.Dispose(); }` into a VmStateScope that disposes both. Drops ~80 lines. - VirtualMachineTestsBase: drop the "was: long — no negative gas limits" / "gasLimit is ulong" prose comments. EVM source: - EvmInstructions.Math2Param: expSize int → ulong, drops the ExpByteCost * (ulong)expSize cast. - CodeDepositHandler: hoist length = (ulong)byteCodeLength to a local once; downstream uses drop their per-site (ulong) casts. - RefundHelper: MaxRefundQuotient[EIP3529] literals UL; drops the redundant (ulong)(spec.IsEip3529Enabled ? ... : ...) cast. - TransactionProcessor.Validate8037DelegationRefundBounds: maxRefunds int → ulong, single cast at AuthorizationList.Length. - VirtualMachine: stripped the "Cast note: 0UL is canonical…", "Both fields are ulong after IPrecompile.* migration", and the "previous form was tautologically false" comments — code reads fine without them. Facade: - ILogIndexConfig.MaxReorgDepth int? → ulong? (cascades into LogIndexConfig, LogIndexBuilder's MaxReorgDepth property loses the (ulong) cast, BlockTreeModule and PruningTrieStateFactory drop the (int) casts on pruningConfig.PruningBoundary). LogIndexStorage keeps its int-internal layout with one boundary cast at init. - LogIndexBuilder: replace the two-branch `if (number < min)… if (number > max)…` clamp with Math.Clamp; ditto end-clamp inside DoQueueBlocks. Stripped the long "CAST NOTE / LogIndex int by design / Cast back to int is safe" comments throughout. - SimulateBlockhashProvider / SimulateBridgeHelper / SimulateDictionaryHeaderStore: stripped the "Safe subtraction" / "CAST NOTE" / "Cast to long for blockhash" comments. - BlockchainBridgeTests headNumber and maxFeePerGas → ulong, drops the (ulong)/(ulong)maxFeePerGas casts. - LogIndexBuilderTests: minBarrier int → ulong. Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    review: ulong-ify retention spec + RLP encode(ulong), SaturatingSub usages IReleaseSpec.MinHistoryRetentionEpochs / MinBalRetentionEpochs long → ulong cascades through ReleaseSpec / ReleaseSpecDecorator / OverridableReleaseSpec / ChainParameters / ChainSpecParamsJson. HistoryPruner's local fields and the matching test parameters move to ulong end-to-end. Rlp.Encode now has a dedicated ulong overload (mirrors the long one minus the negative-value branch); HistoryPruner stops casting to long when persisting the delete pointers. ValidateSubmissionHandler / HistoryPruner: replace the `x > 0 ? x - 1 : 0` and `a > b ? a - b : 0` patterns with the existing `ulong.SaturatingSub` extension; strips the explanatory underflow-guard comments. BlockchainBridge.RunEstimateGas: - (UInt256)tx.ValueRef → tx.ValueRef (ref readonly auto-dereferences). - (ulong)UInt256.Min(...) → UInt256.Min(...).u0 (Min already caps at ulong.MaxValue, so .u0 is the value without the wrapping cast). Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    review: restore Json converter special cases; ulong MemoryHint/MaxGasLimit/MaxBlockGas Serialization.Json: - LongConverter / ULongConverter FromString(string): restore master's shape with the Bytes.ZeroHexValue fast path and the StartsWith("0x0") vs StartsWith("0x") branch (which prepends "0" to even out the hex length for long.Parse). The PR had simplified this to a single AllowHexSpecifier call that wrapped Bytes.WithoutLeadingZeros input inconsistently. - LongConverter / ULongConverter ReadCore + ReadAsPropertyName: call FromString(span) instead of NumericConverterHelper.Parse directly, so the converter's public API stays the boundary. - NumericConverterHelper.Parse: restore the "0x0"u8 SequenceEqual fast-path — micro-opt for the most common JSON-RPC zero value (skips TryParse for ~half of get-block/get-receipt traffic). - Long/ULongRawJsonConverter Read: delegate to LongConverter.ReadCore / ULongConverter.ReadCore (matches master). The PR had inlined a duplicate, simpler parser that skipped the special cases. - NullableLongConverter / NullableRawULongConverter Read: collapse the if/else block to a one-line ternary. Config: - IInitConfig.MemoryHint long? → ulong? (cascades through InitConfig, MemoryHintMan, and the corresponding tests / TestCase literals). - IBlocksConfig.MaxGasLimit long → ulong (cascades through BlocksConfig and the ConfigFilesTests assertion). - RlpLimit.MaxBlockGas / InitMaxBlockGas long → ulong; drops the (ulong) cast in BlockBodyDecoder.TransactionsCountLimit and SetCodeTxDecoder.AuthorizationListLimit. Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    review: more ulong cascades + SaturatingSub + ToULong byte-span helper State/Snap: - LastNStateRootTracker / FlatStateRootIndex: _lastN int → ulong; ctors take ulong; PruningTrieStateFactory + FlatWorldStateModule drop the (int)SnapServingMaxDepth casts at construction. JsonRpc/Eth: - GasPriceOracle.GetBlocks: collapsed the while(true)+post-yield-break into a do-while(currentBlockNumber-- != 0). Merge.Plugin: - BeaconPivot.PivotDestinationNumber: replace the `>= Reorganization. MaxDepth ? a - b + 1 : 1` ternary with SaturatingSub + 1. - ChainLevelHelper: ulong.MinValue → 0UL (same value, clearer intent). - StartingSyncPivotUpdater.TryGetFromPeers: drop the `is { } h ? h.Number : null` pattern in favor of `?.Number`. Network: - TransactionBuilder.WithNonce gains a `WithNonce(int)` overload so the Eth65/Eth68 protocol tests stop casting their loop indices. - ReceiptsMessageSerializer: hoist the ulong.MaxValue sentinel to a `NoBlockSeenYet` const and drop the inline comments. - ReceiptMessageDecoder69 / OptimismReceiptMessageDecoder: drop the `(ulong)ctx.DecodePositiveLong()` and `(ulong)firstItem.ToPositiveLong()` pairs — use ctx.DecodeULong() (already existed) and a new ReadOnlySpan ToULong() helper for the byte-array path. - New Nethermind.Core.Extensions.SpanExtensions.ToULong(ReadOnlySpan) + byte[] overload. Mirrors ToPositiveLong's structure but skips the long-overflow guard. OpcodeTracing: - OpcodeTraceRecorder / TraceConfiguration: replace the `x > 0 ? x - 1 : 0` and `tip >= n - 1 ? tip - n + 1 : 0` patterns with SaturatingSub. Optimism: - ICostHelper.ComputeOperatorCost(long) → (ulong); OptimismCostHelper and OptimismTransactionProcessor drop the (long)tx.GasLimit / (long)spentGas casts at all three call sites. - DepositTransactionForRpc.ToTransaction: drop the (ulong)(Value ?? throw) cast — Transaction.Value is already UInt256, no narrowing needed. Mining.Test/HintBasedCacheTests: use Ethash.GetEpoch(200000UL) instead of the inlined (uint)(200000UL / EpochLength). Init.Snapshot: - SnapshotDownloader.initialProgress long → ulong (no more (ulong) cast in progress.Update). - HumanReadableSize takes ulong (drops the `< 0 throw` arm — unsigned by construction); FormatBytes drops the (long) wrap on logger.CurrentValue. Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    review: revert GetBlobCount to int + Optimism/Migration/Simulate cleanups Transaction.GetBlobCount() ulong → int (matches BlobVersionedHashes Length); GetBlobGas() picks up the (ulong) cast once at the boundary. Call sites that operated on ulong (TxPoolTxSource, ProcessingStats, BlobGasCalculator, PayloadPreparationService, TxPoolSourceTests) gain a single (ulong) cast each; BlobsBundleV1/V2 lose the `?? 0UL` + (int) double-cast. Optimism: - BatchV1.Decode{Legacy,AccessList,Eip1559}Transaction: inline the decode chain back into the tuple return — the rlp ValueDecoderContext advances left-to-right inside the tuple expression. - ICostHelper.ComputeOperatorCost(long → ulong) (re-applied with imports). Merge.Plugin: - NewPayloadHandler.GetGasChange: rewrite to CompareTo + switch — drops the nested ternary. - SszRest QueryParams.TryReadLong: deleted (unused — only TryReadUlong is referenced). JsonRpc/SimulateTxExecutor: `BlockOverrides.Time is not null` → `is { } blockTime` to drop the `(ulong)BlockOverrides.Time` cast in the following line. Same-name local on the else-branch removed by reusing lastBlockTime. Runner.Test/ReceiptMigrationTests: `for (int i = 1; …; i++)` → `for (ulong i = 1; …; i++)` so FindBlock takes the loop counter directly; removes the "Safe: i is a loop counter" comment. Runner.Test/TotalDifficultyFixMigrationTest: TestCase parameter types long/long? → ulong/ulong?; the `-1` sentinel for "broken level out of range" becomes ulong.MaxValue, which the body now checks with `< numberOfBlocks`. Drops three `(ulong)x` casts and three explanatory comments. Facade/BlockchainBridge: stripped the "//Ignore nonce" CAST NOTE block — the comment was repeating the call signature. Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    review: HeaderDecoder ulong + receipt ToULong + comment strip Serialization.Rlp: - HeaderDecoder.AuRaStep: decode via DecodeULong() instead of (ulong)DecodeUInt256() — the encode side already calls Encode(ulong) so the wire format is variable-length ulong, not UInt256. - ReceiptMessageDecoder (and the V69/Optimism variants in the previous commit): swap `(ulong)firstItem.ToPositiveLong()` for the new ReadOnlySpan.ToULong() — same shape minus the long-overflow guard (gas-used is non-negative by construction). Merge.Plugin: - SszCodec.DecodeGetPayloadBodiesByRangeRequest: drop the inline comment restating the wire types. - GetPayloadDirectResponseTests / PoSSwitcherTests: drop the "ERROR FIX (line X)" annotation comments — they referenced PR-time line numbers that no longer match. Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    review: EthCapabilities ulong end-to-end + EthSimulate test cleanup EthCapabilities: - ChainHead.Number long → ulong; ResourceAvailability.OldestBlock long? → ulong?; DeleteStrategy.RetentionBlocks long → ulong (with ULongRawJsonConverter instead of LongRawJsonConverter). - EthCapabilitiesProvider: drops the (long) round-trips on head.Number / historyFloor / lowestReceipt / lowestBlock / retention. windowOldest rewritten via SaturatingSub. - EthRpcModuleTests.Capabilities: TestCase / const local types long → ulong end-to-end. Suffix literals UL. JsonRpc/Test/EthSimulateTestsBlocksAndTransactions: replace `(ulong)20.GWei` with the raw `20_000_000_000UL` — same numeric value, no UInt256→ulong round-trip. Co-Authored-By: Claude Opus 4.7 (1M context)

    by LukaszRozmej

    review: cleanup ulong test types and receipt-index check JsonRpcServiceTests: align Number/Size TestCase to ulong, drop (long) casts. TraceRpcModuleTests: ModExpGasUsed returns ulong. FeeHistoryOracleTests: maxDistFromHead ulong?, drop redundant cast. Eth70ProtocolHandler: replace opaque (ulong)/(uint) coercion with explicit negative + range check.

    by LukaszRozmej

    review: strip noise comments, add int WithNumber overloads, SaturatingSub in LogScanner Removes CAST NOTE / "safe because" comments added in PR that re-explain the int↔ulong boundary already implied by the code. BlockBuilder and BlockHeaderBuilder gain int-arg WithNumber overloads so tests don't need (ulong)i casts. LogScanner switches to SaturatingSub for chunk math.

    by LukaszRozmej

    review: more comment/style cleanups DebugBridge: drop redundant NOTE on CreateFailTrace; HistoryPruner: drop section-divider comment; Metrics.OldestStoredBlockAccessListBlockNumber: make nullable; MemoryHintMan: 1UL.GB → 1UL.GiB for the hint defaults, simplify the memoryHint nullable assignment.

    by LukaszRozmej

    review: explicit (int) array size, fold ulong-aware Math.Min into UnclesValidator StatelessBlockTree.Prefetch: explicit `(int)length` for array creation so the ulong→int narrowing is on display. UnclesValidator.IsKin: collapse the header.Number ternary into Math.Min((ulong)relativeDepth, header.Number); the previous form needed a separate (int) cast on the ulong block number.

    by LukaszRozmej

    review(test): drop redundant (ulong) cast in Capabilities scenario builder retention is already const ulong; the cast was leftover from when the RetentionWindow init was long.

    by LukaszRozmej

    review(state.flat): strip stale comments; PersistenceManager depth/size fields ulong Drop the "Safe: ulong block numbers are well within long range" / "Flat persistence keys state by signed block number" / "Non-trivial: subtraction of two ulongs" narration that all restated the new ulong typing. PersistenceManager _minReorgDepth / _maxReorgDepth / _compactSize are now ulong, removing the per-use (ulong) casts. Also drop the leftover comments in CompactionSchedule.NextFullCompactionAfter.

    by LukaszRozmej

    review(specs): ulong types, drop noise comments and unused converter - AllocationJson.Nonce: UInt256 → ulong; ChainSpecLoader drops two (ulong) casts. - ChainSpecEthereumSealJson + GethGenesisJson Nonce: ULongRawJsonConverter → ULongConverter (the raw-write variant has no production caller and the default handles hex strings). - BlockRewardConverter: read the dictionary key as ulong directly via ULongConverter.FromString instead of UInt256 → (ulong) cast. - DifficultyBombDelaysConverter: unused, deleted. - ForkSchedule.timestampIndex: int → ulong (drops the per-add (ulong) cast). - GethGenesisLoader, ChainSpecLoader: drop the leftover "cast is safe" / "null when …" comments that re-explained the type system.

    by LukaszRozmej

    review(state): nonce + balance type fixes; restore DifficultyBombDelaysConverter - AccountProof.Nonce: UInt256 → ulong (protocol nonce is ulong); ProofJsonConverter pulls the ulong converter for the field. - BlockAccessListBasedWorldState.TryGetAccount: balance stays UInt256 instead of being truncated to ulong; AccountStruct ctor already takes UInt256. - WorldState.IsNonZeroAccount: simplify !(Nonce == 0) → Nonce != 0. - IWorldState.CommitTree gains int overload so callers writing for-loop counters don't need (ulong) casts (used by WorldStateManagerTests). - WorldStateManagerTests.lastBlock: int → ulong; loop counter ulong; drops the (ulong)i / (ulong)lastBlock casts. - BlockchainTestStreamingTracerTests: drop (ulong)(b + 1) cast (new int WithNumber). - DifficultyBombDelaysConverter: restored — still referenced from EthashChainSpecEngineParameters.cs. (Deletion in the previous commit was a false positive: grep missed the [JsonConverter(typeof(...))] attribute usage.)

    by LukaszRozmej

    review(taiko/trie/state): ulong cascade for precompile contract; SaturatingSub; test overloads Taiko precompile chain (PrecompileExtras.RemainingGas, IContextAwarePrecompile.Run gasConsumed, IL1CallProvider.ExecuteTraceCall + L1CallResult.GasUsed, L1StaticCallPrecompile.GasCap, MockL1CallProvider) all cascade long → ulong; TaikoVirtualMachine drops the (long)/(ulong) casts at the call site. ZkGasTxTracer and SurgeGasPriceOracleTests: replace the explicit `a > b ? a - b : 0` pattern with the existing SaturatingSub extension. StateCompositionSnapshotDecoder.EncodeULong: call the native ulong RlpStream encoder instead of casting to long (which would mis-encode values >= 2^63). Decoder already uses DecodeULong so the wire format matches. TrieDiffWalkerTests.CreateEOA: keep `int` parameter and cast internally to UInt256 so call sites don't need (ulong)rng.Next(). Trie test overloads: BeginStateBlockCommit(int) + BeginBlockCommit(int) extensions and PruningScenariosTests.WithMaxDepth(ulong) — drops (ulong) casts at test call sites. TestPruningStrategy.pruneInterval int? → ulong?. TreeStoreTests startBlock ulong; reorgBoundaryCount ulong. WorldStateManagerTests / BlockchainTestStreamingTracerTests already migrated in the previous batch. StateTestRunner: drop redundant (ulong) cast on IntrinsicGasCalculator.Standard (already ulong).

    by LukaszRozmej

    review(sync): SaturatingSub, ulong skipLastN/maxHeaders/fastSyncLag, strip noise PowForwardHeaderProvider: SaturatingSub for chunk arithmetic (headNum - 1, HeadNumber - skipLastN, currentNumber - ancestorJump, bestSuggestedNumber - MaxReorganizationLength, currentNumber - 1028). maxHeaders/skipLastN/ headersToRequest now ulong (cascades through IForwardHeaderProvider, IForwardSyncController, BlockDownloader.PrepareRequest, FastSyncFeed). PosForwardHeaderProvider: ulong signature at the entry then narrows once to int internally so the array/buffer arithmetic stays int-typed. SyncServer: SaturatingSub on the MaxReorgLength gate and the seal-validation hint window; drop the dead `number >= 0` guard (number is ulong); drop the "in the range of [Head - MaxReorganizationLength, Head]" stale comment. PeerInfo.ShouldNotifyNewRange: takes ulong instead of long; the two private last-notified fields cascade. SyncServer call site drops the (long) casts. ParallelSync: SyncProgressResolver FindBestProcessedBlock collapses `is { } n ? n : ulong.MaxValue` into `?? ulong.MaxValue`; SyncPivot getter collapses the trivial deconstruction. MultiSyncModeSelector: drop the long "Safe: …" comment that re-stated the ulong wrap behaviour. FullStateFinder: strip the "Block numbers are ulong…" and "startHeader.Number is ulong" comments; flatten the nested-if guard against underflow. SyncReport: SaturatingSub on the numHeadersToDownload subtraction. BetterPeerStrategyExtensions, ITotalDifficultyStrategy, TreeSync, SyncPeerPool: drop the leftover "cast is safe / Number is ulong" comments. Tests: BlockDownloaderTests / ForwardHeaderProviderTests / PosForwardHeaderProviderCacheTests / BlockDownloaderTests.BlockAccessLists follow the new ulong signatures.

    by LukaszRozmej

    review(sync.merge): ulong cascade in WithBlockTrees/test scenarios, use ulong.Min/Max HeadersSyncFeed: SaturatingSub in BuildRightFiller (drops the EndNumber/rightFillerSize underflow comment); strip the "Use ulong.MaxValue / 0 as 'not set' sentinel" comments in InsertHeaders — the sentinels are obvious from the initial values. BlockTreeTests.WithBlockTrees gains a ulong overload that narrows once at the entry, so callers don't need (int) casts on ulong test parameters. BlockDownloaderTests.Merge: drop the local ULongMin/ULongMax helpers in favour of the BCL `ulong.Min` / `ulong.Max`; cascade fastSyncLag / headNumber / blocksToIgnore to ulong; drop the "BOUNDARY CAST" / "fastSyncLag is non-negative" / "ULongMin avoids …" narration that re-stated the type contract. SaturatingSub replaces the `Math.Max(0, Math.Min(headNumber, headNumber - fastSyncLag))` clamp.

    by LukaszRozmej

    review(sync.test): fastSynclag/effectiveHead/headNumber ulong, strip noise BlockDownloaderTests: - Happy_path / Invoke_TryUpdateMainChain_Once / ForwardHeaderProvider_*: fastSynclag & headNumber ulong; effectiveHead lifted out of the fast-sync branch and computed via SaturatingSub. expectedNewHeadSequence drops the (ulong)fastSyncLag cast. - Drop the "Dictionary key changed from long to ulong" / "Cast loop variable i (int) to ulong" comments that re-stated the type of the surrounding code.

    by LukaszRozmej

    review(sync.test): ulong types and cast-free arg lookups - ForwardHeaderProviderTests: _testHeaderMapping rekeyed long → ulong; BuildHeaderResponse signature ulong; drop the `(long)ci.ArgAt(0)` casts at six call sites; DI registration updated to Dictionary. - StateSyncPivotTest: replace `(ulong)ci[0]` (object boxing) with ci.ArgAt(0) — clearer intent, no cast. - StateSyncDispatcherTests.ChainLength: int → ulong const; drop the (ulong) casts on `peer.HeadNumber.Returns(ChainLength - 1)`. - StateSyncFeedHealingTests.blockJumps: int → ulong; cascade loop counters; drop the (ulong)blockJumps cast. - HealingTreeTests line 223: `(ulong)100` → `100ul`.

    by LukaszRozmej

    refactor: unify blockchain metrics, limits, and validation types to ulong

    by Dyslex7c

    review(sync.test): more ulong cascades, SaturatingSub in BuildNewBatch PeerInfoAllocationTests.BuildHeaders: drop (ulong)number cast (new int WithNumber overload). SynchronizerTests.AddBlocksUpTo / AddHighDifficultyBlocksUpTo: int → ulong loop counters and parameters; drop the (long)block.Number cast. ReceiptsSyncFeedTests.Scenario: lift `(int)_pivotNumber` into a single local so the loop bodies don't repeat the cast on every comparison. E2ESyncTests.HeadPivotDistance / PartialBalSyncHeadPivotDistance: int → ulong consts; SetPivot/SyncUntilFinished params ulong; SaturatingSub for the head-finalized gap. HeadersSyncFeed.BuildNewBatch: SaturatingSub replaces the explicit `_lowestRequestedHeaderNumber >= requestSizeU ? ... : 0UL` clamp.

    by LukaszRozmej

    review: strip remaining 'not visited sentinel' narration in HeadersSyncFeed

    by LukaszRozmej

    review: strip more 'X is ulong'/'cast is safe' narration in sync code HeadersSyncFeed (8 comments) and MultiSyncModeSelector (2 comments): drop the "X.Number is ulong / cast is safe / Safe: ulong wraps to huge" narration that re-stated the new ulong typing. Behaviour-preserving cleanup.

    by LukaszRozmej

    review: strip last 'no cast needed' comment in HeadersSyncFeed

    by LukaszRozmej

    review(config): restore ulong backward-compat branch in ConfigSourceHelper Dyslex7c flagged that removing the unchecked-wrap ulong branch can crash nodes with existing TxLookupLimit=-1 configs. Restored, scoped to the ulong field case and with a short why-comment.

    by LukaszRozmej

    review: drop ulong unchecked-wrap from ConfigSourceHelper; ulong-aware sentinel check in MultiSyncModeSelector ConfigSourceHelper: drop the unchecked-wrap ulong branch — configs carrying "-1" on ulong fields should be rejected with a parse error rather than silently wrapped to ulong.MaxValue. Operators must adjust their config. MultiSyncModeSelector.IsSnapshotInvalid: replace the six `> long.MaxValue` "sentinel" checks (defensive in the long/cast era) with the single real sentinel — `best.Processed == ulong.MaxValue` from FindBestProcessedBlock when Head is null. The other resolvers default to 0 (a valid block height). Also drop the (ulong) cast in TotalSyncLag — both addends are already ulong.

    by LukaszRozmej

    review: strip more 'safe cast' narration in AuRa/Blockchain/History GasEstimator / AuRaStepCalculator / AuRaRewardCalculator: drop the leftover "Safe cast: …" comments that re-stated the unsigned arithmetic. HistoryPruner: tighten the two "Safe cast …" comments to a single one-line WHY at the first call site ("On-disk format kept as long for backward compatibility …") and drop the duplicate.

    by LukaszRozmej

    review: strip more 'safe cast'/'safe to' narration AuRa.Test (3 sites): drop "comparison via cast is safe" / "cast is safe" narration; the casts are still there but no longer re-explained. Era1/E2StoreReader: drop the four "Cast to int/long is safe: _blockCount is bounded by era file size" comments; behaviour and casts unchanged. Also drop the LastBlock "_blockCount >= 1 is guaranteed" comment. TxPool/GapNonceFilter: drop "Cast numberOfSenderTxsInPending to ulong is safe" narration on a single (ulong) cast.

    by LukaszRozmej

    review: strip ERROR FIX / widening-cast narration BeaconHeadersSyncTests: drop the two 'ERROR FIX (line ...)' commentary blocks left from the original ulong migration. Replace the manual underflow-then-clamp with SaturatingSub + a single floor check, dropping the duplicated subtraction. XdcRewardCalculator: drop the 'widening cast ... safe' narration on the two (UInt256) casts.

    by LukaszRozmej

    review: strip last 'migration narration' comments ContractBasedValidatorTests, ChainSpecBasedSpecProvider, GethGenesisLoader: drop three remaining "lastLevelFinalized is …", "All block-number properties …", "NOTE: AddTransitions signatures must also be updated …" comments. The migration is complete in master; these were progress notes, not durable docs.

    by LukaszRozmej

    review(trie): replace signed-long pruning-boundary round-trip with SaturatingSub TrieStore.GetFinalizedBlockNumber: the (long)MaxBlockNumber - (long)_maxDepth arithmetic was deliberately signed to allow negative intermediate values representing "boundary before block 0", then clamped via Math.Max(0, ...). Replace with SaturatingSub which has the same clamp-to-0 semantics without the ulong↔long round-trip. The four (long) casts and the SAFETY block disappear. HistoryPruner: drop one more "blockNumber param is ulong? — ulong is implicitly nullable here" narration.

    by LukaszRozmej

    review: replace 8 more ternary-clamp patterns with SaturatingSub Blockchain/BlockTree (TryUpdateSyncPivot), Blockchain/Headers/HeaderStore (startBlockNumber), Blockchain/ReorgDepthFinalizedStateProvider (FinalizedBlockNumber), Consensus/TargetAdjustedGasLimitCalculator (maxGasLimitDifference), Consensus.AuRa/AuRaSealValidator (oldestStepToKeep), Evm/VirtualMachine (refundableStateGas), History/HistoryPruner (CalculateRollingCutoff): all replace the `a > b ? a - b : 0` clamp with the existing UInt64Extensions.SaturatingSub helper. Behaviour-preserving. Trie/TrieStoreDirtyNodesCache: tighten the long NoCommitSentinel rationale — drop "This replaces the previous long -1 sentinel" (migration narration).

    by LukaszRozmej

    review: replace 6 more ternary-clamp patterns with SaturatingSub Consensus.AuRa/AuRaStepCalculator (timeFromTransition), History/HistoryPruner (blocksRemaining/balsRemaining — also drops the "Guarded subtractions" comment), Xdc/BaseSnapshotManager, QuorumCertificateManager, TimeoutCertificateManager (gapNumber / gapBlockNum at three sites): all replace `a >= b ? a - b : 0UL` clamps with SaturatingSub.

    by LukaszRozmej

    review(xdc): 2 more ternary-clamp → SaturatingSub (TimeoutCertificateManager, VotesManager gapNumber)

    by LukaszRozmej

    review: strip last batch of migration-narration comments ReportingContractBasedValidatorTests: drop 3-line "parentBlockNumber - startReportBlockNumber is ulong; Math.Max needs a common type …" comment, replace the inlined ternary clamp with SaturatingSub; drop the "GetNonce now returns ulong; use 1UL …" pointer. Core.Test/BlockHeaderTests: drop the three "post-migration" narration comments (class field, GasLimit, GasUsed assignments) — the types speak for themselves. Core.Test/Builders/TransactionBuilder.WithGasLimit: drop "GasLimit is ulong — gas limits are never negative" comment.

    by LukaszRozmej

    review(trie): delete identity helpers + strip last narration comments TrieStore: ToNodeRecordCommit(ulong) and ToPersistedBlockBoundary(ulong) were both no-op identity functions left over from the long→ulong migration. Inline at the 5 call sites and delete the helpers + their migration-narration comments. IsNoLongerNeeded: condense the 5-line "Non-trivial cast: NodeRecord.LastCommit is ulong …" comment down to a single line pointing at the NoCommitSentinel. HistoryPruner.PruningIntervalHasElapsed: drop the "Both Head.Number and _pruningInterval are ulong; modulo is unambiguous" comment.

    by LukaszRozmej

    review: condense remaining gas/header migration comments WitnessGeneratingHeaderFinder: tighten the count and inner-loop comments — keep the sentinel semantics, drop the "ulong i-- wraps" / "stays at ulong.MaxValue unless BLOCKHASH …" narration. EvmInstructions.Call: replace the "cap fits in ulong, so min(...) fits without 256-bit math" comment with the actual EIP-150 rationale ("only 63/64 of remaining gas is forwarded"). VmState.CommitToParent: condense the "master's signed long would have caught a buggy negative-child silently" prose to a one-line note on the `checked`.

    by LukaszRozmej

    review: strip more 'cast/subtraction is safe' narration; SaturatingSub in SignTransactionFilter Xdc/PenaltyHandler (2 sites): drop "X is ulong; clamp to listBlockHash.Count (int) before use … cast to int is safe" comments. Xdc/XdcRewardCalculator: drop "h.GasUsed is ulong; widening cast to UInt256 is safe" narration. Xdc/EpochSwitchManager: drop the "subtraction is safe: round % epoch < epoch, and epoch is bounded …" narration. The one-line "Shorten the search range" comment above already explains intent. Xdc/TxPool/SignTransactionFilter: replace the defensive 4-line "if headerNumber < epochWindow, subtraction would underflow … treat lower bound as 0" pattern with the existing SaturatingSub helper. AuRa.Test/MultiValidatorTests: drop "Safe: finalization indices are derived from block numbers, always non-negative" comment. Trie/TrieStoreDirtyNodesCache.MergeRecords: condense the 3-line "Preserve the higher LastCommit. Both are ulong; a real block number always wins over the sentinel …" comment to a one-line WHY.

    by LukaszRozmej

    review: strip more 'previously long' / loop-narration comments TrieStore: drop "Previously this was encoded as long -1 before NodeRecord.LastCommit became ulong" — the sentinel-is-ulong.MaxValue line above already explains the contract. Xdc/PenaltyHandler: tighten the "Loop down from (number - 1) to 1. Since parentNumber is ulong, we use > 0 …" comment to just the actual rationale ("block 0 is genesis and never an epoch switch body block"). Xdc/TimeoutCertificateManager + VotesManager: drop the duplicate "Math.Abs has no ulong overload; compute absolute difference without risk of underflow" comments. The ternary `a > b ? a - b : b - a` is self-documenting. Xdc/XdcRewardCalculator: drop the "ulong loop variable cannot go below 0, so we use a while loop with a check at the end" — the loop body already shows the structure.

    by LukaszRozmej

    review(consensus): tighten HeaderValidator overflow-detection comment ValidateGasLimitRange: condense the 4-line "edge case used in hive tests … we can check for ulong.MaxValue - maxGasLimitDifference …" prose to a single two-line WHY ("hive tests pass parent.GasLimit = ulong.MaxValue; when the sum would overflow there's no real 'too high' GasLimit to reject"). Rename the local `notToHighWithOverflow` to `maxNextGasLimitOverflowed` while we're here.

    by LukaszRozmej

    review(sync.test): drop more (ulong) casts on fastSyncLag/blocksToIgnore BlockDownloaderTests.CreateFastSyncNode: fastSyncLag param int → ulong, drops the cast at the StateMinDistanceFromHead assignment. ForwardHeaderProviderTests.Merge.WillSkipBlocksToIgnore: blocksToIgnore / headNumber cascade to ulong; drops (int)headNumber + 1 and (ulong)blocksToIgnore.

    by LukaszRozmej

    review(test): drop one more (ulong)retention cast in Capabilities scenario

    by LukaszRozmej

    review(test): drop (ulong)i casts at WithNumber sites with new int overload BlockTreeBuilder.CreateBlock + ExtendingScenario.Build: blockIndex+1 / i+1 are int — direct to the new WithNumber(int) overload. GasPriceOracleTests.BuildTree: drop the (ulong)maxBlock cast on the Head builder. Xdc.Test/SubnetPenaltyTests: drop the (ulong)i cast on the non-chained WithNumber call — base-class side effect mutates the builder regardless of return type. (Chained calls in XdcStateSyncTest / PenaltyTests still need the (ulong) cast because subsequent fluent calls require XdcBlockHeaderBuilder.)

    by LukaszRozmej

    review(sync.test): headNumber/notSyncedTreeStartingBlockNumber cascade to ulong BlockDownloaderTests.Merge.Can_reach_terminal_block + IfNoBeaconPivot_thenStopAtPoS: headNumber long → ulong; TestCase suffix L → UL; drop (int)headNumber + 1 and (ulong)headNumber casts. ForwardHeaderProviderTests.Merge.Merge_Happy_path: notSyncedTreeStartingBlockNumber int → ulong; drop (int)/(ulong) casts at three call sites. ForwardHeaderProviderTests.Merge.IfNoBeaconPivot_thenStopAtPoS: headNumber long → ulong; TestCase L → UL; drop the (int)headNumber + 1 cast.

    by LukaszRozmej

    review(aura.test): use UnixTime.Milliseconds (ulong) instead of (ulong)MillisecondsLong

    by LukaszRozmej

    review(core): make Eip7702Constants.PerAuthBaseCost ulong; drop redundant (ulong) casts The three GasCostOf constants `PerAuthBaseCost / StateBytesPerAuthBase / PerAuthBaseRegular` were defined as `(ulong)Eip7702Constants.X` / `(ulong) Eip8037Constants.X`. The Eip8037 sources are already ulong; the Eip7702 source was `long` (the only signed type in this cluster). Change Eip7702Constants. PerAuthBaseCost to ulong so all three GasCostOf aliases drop the (ulong) cast.

    by LukaszRozmej

    review(test): drop (int)chainLength casts at OfChainLength call sites where source is ulong BlockTreeTests / EraETestModule / BlockDownloaderTests.SyncPeerMock.BuildTree: source variable is already ulong; the (int) cast was forcing the int overload unnecessarily. Use the existing ulong OfChainLength overload directly. (ForwardHeaderProviderTests.cs:551 retains its (int) cast since `chainLength` is long there, not ulong.)

    by LukaszRozmej

    review(trie): tighten CanDelete sentinel comment

    by LukaszRozmej

    review(test): drop 'Sentinel: brokenLevel == ulong.MaxValue' narration

    by LukaszRozmej

    fix(discovery): flacky CI, log transport failures at Debug

    batrr merged to NethermindEth/nethermind at 2026-06-25 06:41:36

    fix: improve logging for peer discovery failures

    by batrr

    shorten

    by batrr

    test: stabilize flaky AdminModuleTests peer-events subscription tests

    AnkushinDaniil merged to NethermindEth/nethermind at 2026-06-25 06:41:17

    test: stabilize flaky AdminModuleTests peer-events subscription tests The PeerEventsSubscription_* tests assert that a peer event produces a JSON-RPC notification with the expected content. The notification is dispatched asynchronously through Subscription's background channel reader (Subscription.ProcessMessagesAsync), so the send runs on a thread-pool thread. The shared RaisePeerEventAndCapture helper waited only 1000 ms on a ManualResetEvent for that notification, turning a non-existent latency requirement into a hard deadline. Under parallel CI load the thread pool can be saturated and the continuation delayed past 1 s, so WaitOne times out and the test fails with "the subscription should fire within the timeout" (Expected: True But was: False) even though the notification is correct. Wait generously (30 s) when a notification is expected — WaitOne returns as soon as it arrives, so the happy path is unaffected — and keep a short 1 s bound when asserting that no notification is delivered.

    by AnkushinDaniil

    perf(evm): expose arc blocks from chain iterators

    mattsse merged to paradigmxyz/reth at 2026-06-25 14:05:52

    perf(evm): expose arc blocks from chain iterators

    by mattsse

    Merge branch 'main' into mattsse/chain-arc-block-iters

    by mattsse

    perf(trie): prune subtries in lexicographic order

    mediocregopher merged to paradigmxyz/reth at 2026-06-25 13:59:11

    perf(trie): prune subtries in lexicographic order

    by mediocregopher

    refactor(trie): stream retained subtrie leaves

    by mediocregopher

    refactor(trie): require sorted prune leaves

    by mediocregopher

    test(trie): remove subtrie prune order test

    by mediocregopher

    refactor(trie): use stack for subtrie prune

    by mediocregopher

    refactor(trie): inline retained prune cursor

    by mediocregopher

    Merge remote-tracking branch 'origin/main' into mediocregopher/lexicographic-subtrie-prune # Conflicts: # crates/trie/sparse/src/state.rs

    by mediocregopher

    fix(trie): retain sparse prune child paths

    by mediocregopher

    refactor(trie): avoid collecting sparse prune children

    by mediocregopher

    refactor(trie): use mask cursor for sparse prune children

    by mediocregopher

    refactor(trie): clarify sparse prune child iterator

    by mediocregopher

    feat(cli): allow overriding TraceArgs defaults

    decofe merged to paradigmxyz/reth at 2026-06-25 13:54:15

    Allow overriding TraceArgs filter defaults

    by decofe

    ci: hide derek comments as outdated

    decofe merged to paradigmxyz/reth at 2026-06-25 13:47:45

    ci: hide derek comments as outdated

    by decofe

    ci: add derek clear bench command

    decofe merged to paradigmxyz/reth at 2026-06-25 13:10:52

    ci: add derek clear bench command

    by decofe

    perf(trie): compute trie changesets on demand

    mediocregopher merged to paradigmxyz/reth at 2026-06-25 13:09:36

    perf(trie): compute missing changeset ranges in aggregate

    by mediocregopher

    perf(engine): stop precomputing trie changesets

    by mediocregopher

    fix(trie): compute range changesets as direct reverts

    by mediocregopher

    perf(trie): cache trie changesets by range

    by mediocregopher

    fix(trie): keep changeset merge helper semantics

    by mediocregopher

    perf(trie): skip tail revert at db tip

    by mediocregopher

    refactor(trie): remove changeset block hash index

    by mediocregopher

    refactor(trie): remove pending changeset cache entries

    by mediocregopher

    refactor(trie): use range cache for single changesets

    by mediocregopher

    refactor(trie): hash changeset cache entries

    by mediocregopher

    Merge branch 'main' into mediocregopher/aggregate-changeset-range

    by mediocregopher

    ci: add derek bench reorg mode

    by mediocregopher

    ci: clarify manual reorg workflow input

    by mediocregopher

    Merge remote-tracking branch 'origin/mediocregopher/derek-bench-reorg-mode' into mediocregopher/aggregate-changeset-range

    by mediocregopher

    refactor: address changeset cache review comments

    by mediocregopher

    Merge branch 'main' into mediocregopher/aggregate-changeset-range

    by mediocregopher

    fix(trie): move stage types to dev dependency

    by mediocregopher

    feat(snap): add version-aware snap message helpers

    lean-apple merged to paradigmxyz/reth at 2026-06-25 08:08:51

    feat(snap): add snap message request_id, is_response and response conversion Add SnapProtocolMessage::request_id and is_response, and TryFrom for SnapResponse that returns the original message for requests. Message-level helpers only; they back request/response correlation for the snap/2 client.

    by lean-apple

    Merge branch 'main' into feat/snap-message-helpers

    by lean-apple

    feat(snap): add version-aware snap message decoding helpers Adds SnapProtocolMessage::set_request_id and decode_versioned, plus a SnapProtocolError that distinguishes empty payloads, invalid message ids, and malformed RLP bodies. These let a snap/2 connection assign connection-unique request ids and decode framed inbound messages while validating ids against the negotiated version.

    by lean-apple

    fix(snap): reject trailing bytes in decode_versioned decode_versioned now errors with UnexpectedLength if the RLP body is not fully consumed, so a framed message with junk after a valid body is rejected. Also clarifies message_count as the protocol slot length, not the count of valid ids.

    by lean-apple

    test(snap): cover trailing bytes and per-variant message helpers Adds a trailing-bytes rejection test for decode_versioned and a test_case-driven check exercising set_request_id and decode_versioned round-trip across every snap/2 message variant.

    by lean-apple

    Rebroadcast pending gloas data columns

    terencechain merged to prysmaticlabs/prysm at 2026-06-25 19:53:03

    Rebroadcast pending gloas data columns

    by terencechain

    Dedupe Gloas pending-column downscore to once per peer per root

    terencechain merged to prysmaticlabs/prysm at 2026-06-25 19:20:07

    Dedupe Gloas pending-column downscore to once per peer per root

    by terencechain

    fix test

    by terencechain

    fix: Do not republish gloas columns as partial columns

    aarshkshah1992 merged to prysmaticlabs/prysm at 2026-06-25 16:57:53

    skip gloas republish

    by aarshkshah1992

    Merge branch 'develop' into fix/skip-gloas-republish

    by james-prysm

    Merge branch 'develop' into fix/skip-gloas-republish

    by james-prysm

    Revert "partial rebuilds for beacon state HTR"

    Inspector-Butters merged to prysmaticlabs/prysm at 2026-06-25 11:12:28

    Revert "partial rebuilds for beacon state HTR (#17002)" This reverts commit 05d5bc25bcdaf396f43d46b22920e85bc25fbc0c.

    by Inspector-Butters

    Range sync: fetch data columns via custody-by-root

    dapplion merged to sigp/lighthouse at 2026-06-25 15:51:12

    range sync: fetch columns via custody-by-root instead of columns-by-range For Fulu+ epochs, range sync now fetches blocks first via BlocksByRange, then initiates custody-by-root requests per block that has data, reusing the existing ActiveCustodyRequest machinery (peer selection, retries, batching) from single block lookups. Removes retry_partial_batch and DataColumnsByRange usage from forward range sync and backfill sync. Custody backfill sync path is unchanged. Adds range sync batch timing/buffer metrics and serializes batch block downloads to reduce self_limiter pressure.

    by dapplion

    range sync custody-by-root: fetch a whole batch in one request Generalize the custody-by-root machinery to fetch the custody columns of multiple block roots in a single request, and use it to fetch an entire range batch at once instead of one custody request per block. - ActiveCustodyRequest is now keyed by (block_root, column index) and can span multiple block roots; a single peer is asked for a given column across every block root it custodies in one data_columns_by_root request. - DataColumnsByRootSingleBlockRequest -> DataColumnsByRootRequestParams, carrying multiple (block_root, indices) identifiers; the response items collator validates against the full set. - The range coupling layer collapses from a per-block-root state machine to a single Active/Complete custody request, and trusts the returned columns (ActiveCustodyRequest already guarantees completeness) instead of re-validating per index. - CustodyRequester::RangeSync now carries just the ComponentsByRangeRequestId (no block_root), so the requester stays small and the Box workaround in custody.rs is removed.

    by dapplion

    test: data_columns_by_root partial response does not complete request

    by dapplion

    custody_lookup_request: take block_roots + block_epoch; cached_data_column_indexes by epoch

    by dapplion

    remove serialize-downloads gate (trigger_batch_downloads / has_pending_block_range_download) A whole batch is now fetched with a single custody-by-root request, so the per-block self-limiter pressure that motivated serializing batch block downloads is gone.

    by dapplion

    range sync: attribute completed batch to the block peer, not a random one Store the block-providing peer in the coupling struct and return it on completion, so the success path no longer falls back to PeerId::random(). The Option on the error path stays: a custody give-up has no single responsible peer.

    by dapplion

    Remove unused variable

    by dapplion

    Clean up peer messiness

    by dapplion

    Fixes

    by dapplion

    restore peers_to_deprioritize, request_span, lookup_peers check; fix coupling tests + lint - block_components_by_range_request: restore peers_to_deprioritize for block peer selection - restore request_span on the coupling struct (entered in continue_requests) - custody_lookup_request: restore unconditional empty-peers check; range sync passes the block peer as lookup_peers - fix coupling tests for the (blocks, peer) / responses tuple; type_complexity allows

    by dapplion

    Minimize test and sync diff vs unstable

    by dapplion

    test: skip partial-response test under Gloas genesis

    by dapplion

    Minimize coupling test diff vs unstable

    by dapplion

    Merge remote-tracking branch 'sigp/unstable' into range-sync-custody-by-root-batched # Conflicts: # beacon_node/network/src/sync/network_context.rs # beacon_node/network/src/sync/network_context/custody.rs

    by dapplion

    Merge remote-tracking branch 'sigp/unstable' into 9496 # Conflicts: # beacon_node/network/src/sync/network_context.rs

    by dapplion

    Dedup syn in lockfile: point data-encoding-macro-internal at syn 2 data-encoding-macro-internal 0.1.17 accepts syn >=1,<3 but the lockfile pinned it to syn 1.0.109, which (alongside syn 2.x) tripped cargo-deny's deny-multiple-versions rule for syn in deny-CI. Re-point that edge to the syn 2.0.117 already in the tree so the default-feature graph has a single syn version. syn 1.0.109 remains only for the feature-gated ark-ff path, which is excluded from the deny graph.

    by dapplion

    Merge remote-tracking branch 'sigp/unstable' into 9496 # Conflicts: # beacon_node/network/src/sync/block_sidecar_coupling.rs

    by dapplion

    Merge remote-tracking branch 'sigp/unstable' into 9496 # Conflicts: # beacon_node/network/src/sync/network_context.rs # beacon_node/network/src/sync/network_context/custody.rs

    by dapplion

    Merge remote-tracking branch 'sigp/unstable' into 9496 # Conflicts: # beacon_node/network/src/sync/block_sidecar_coupling.rs # beacon_node/network/src/sync/network_context.rs

    by dapplion

    Pass request_span into RangeBlockComponentsRequest::new

    by dapplion

    Bump `warp` and begin `axum` migration

    macladson merged to sigp/lighthouse at 2026-06-25 14:19:30

    Bump warp and begin axum migration

    by macladson

    Implement suggestions

    by macladson

    Merge branch 'unstable' into lh-axum

    by macladson

    Bump merged code to warp 0.4

    by macladson

    Remove whitespace in imports

    by macladson

    Merge branch 'unstable' into lh-axum

    by macladson

    Small tidy up

    by macladson

    Remove audit ignores

    by macladson

    Remove accidental file

    by macladson

    Merge branch 'unstable' into lh-axum

    by macladson

    Merge branch 'unstable' into lh-axum

    by macladson

    Apply suggestions

    by macladson

    Add comment explaining std to tokio listener conversion

    by macladson

    Merge branch 'unstable' into lh-axum

    by macladson

    Fix transient bug in `dequeue_attestation` and optimization

    hopinheimer merged to sigp/lighthouse at 2026-06-25 02:53:38

    Add failing case for out of order `dequeue_attestations`

    by hopinheimer

    Regression test for `dequeue_attestation` divergence in successive slot.

    by hopinheimer

    Naive fix for the bug in the `dequeue_attestation`

    by hopinheimer

    Merge branch 'unstable' into queued-attestation-bug

    by hopinheimer

    Optimize `dequeue_attestation` with BTreeMap.

    by hopinheimer

    Adopt new queue_attestations.

    by hopinheimer

    Merge branch 'queued-attestation-bug' of github.com:hopinheimer/lighthouse into queued-attestation-bug

    by hopinheimer

    Add benchmarking harness for dequeue_attestation

    by hopinheimer

    Addressing comments

    by hopinheimer

    Update comments

    by hopinheimer

    Merge branch 'unstable' into queued-attestation-bug

    by hopinheimer

    Fix committee_index/validator_committee_index confusion

    by michaelsproul

    Clippy oops

    by michaelsproul

    Refactor Custody Context Availability Checks

    ethDreamer merged to sigp/lighthouse at 2026-06-25 02:53:44

    add custody context bool

    by ethDreamer

    add slot clock to context

    by ethDreamer

    Move DA Boundary Checks to CustodyContext

    by ethDreamer

    small cleanup

    by ethDreamer

    Make CustodyContext a member of the BeaconChain

    by ethDreamer

    Arc

    by ethDreamer

    remove passing around a spec object

    by ethDreamer

    pass custody context instead of full da checker

    by ethDreamer

    add custody column verification

    by ethDreamer

    Clean up some TODOs

    by ethDreamer

    Address first round of comments

    by ethDreamer

    Merge branch 'unstable' into da-boundary-checks

    by ethDreamer

    stupid fmt

    by ethDreamer

    Fix Beacon Chain Tests

    by ethDreamer

    stupid fmt again

    by ethDreamer

    Remove redundant `is_gloas` checks in reorg tests

    michaelsproul merged to sigp/lighthouse at 2026-06-25 01:15:13

    Remove redundant is_gloas checks

    by michaelsproul

    Merge branch 'unstable' into remove-redundant-gloas-checks

    by hopinheimer

    Bump presets to latest specs

    etan-status merged to status-im/nimbus-eth2 at 2026-06-25 22:57:37

    Bump presets to latest specs Update comments in various preset files for latest specs. No semantic changes.

    by etan-status

    Revert "Persist all chain DAG heads in database"

    tersec merged to status-im/nimbus-eth2 at 2026-06-25 12:05:09

    Revert "Persist all chain DAG heads in database (#8590)" This reverts commit d40fc73d8f629a761fb6387c7297f5bd2affee08.

    by tersec

    Bump vendor/nim-eth from `9a9b0b2` to `8950556`

    dependabot[bot] merged to status-im/nimbus-eth2 at 2026-06-25 09:55:29

    Bump vendor/nim-eth from `9a9b0b2` to `8950556` Bumps [vendor/nim-eth](https://github.com/status-im/nim-eth) from `9a9b0b2` to `8950556`. - [Release notes](https://github.com/status-im/nim-eth/releases) - [Commits](https://github.com/status-im/nim-eth/compare/9a9b0b2cc998cacbfc9e335e49e56eb4d247bf7f...89505562ed87076a0287887e637fe4f23c058a60) --- updated-dependencies: - dependency-name: vendor/nim-eth dependency-version: 89505562ed87076a0287887e637fe4f23c058a60 dependency-type: direct:production ... Signed-off-by: dependabot[bot]

    by dependabot[bot]

    Bump vendor/nim-chronos from `bd92f8e` to `173e29b`

    dependabot[bot] merged to status-im/nimbus-eth2 at 2026-06-25 09:47:57

    Bump vendor/nim-chronos from `bd92f8e` to `173e29b` Bumps [vendor/nim-chronos](https://github.com/status-im/nim-chronos) from `bd92f8e` to `173e29b`. - [Commits](https://github.com/status-im/nim-chronos/compare/bd92f8e089ccd391b9762b7035215bea2307dbc9...173e29be0c08f63105b0917b0a2266d5e48fa2db) --- updated-dependencies: - dependency-name: vendor/nim-chronos dependency-version: 173e29be0c08f63105b0917b0a2266d5e48fa2db dependency-type: direct:production ... Signed-off-by: dependabot[bot]

    by dependabot[bot]

    tune scoring params for Gloas topics

    Tomi-3-0 merged to status-im/nimbus-eth2 at 2026-06-25 09:20:21

    tune scoring params for Gloas topics

    by Tomi-3-0

    use 5.0 for bid message rate

    by Tomi-3-0

    review

    by Tomi-3-0

    don't wait for column redistribution to resolve block

    tersec merged to status-im/nimbus-eth2 at 2026-06-25 07:45:21

    don't wait for column redistribution to resolve block

    by tersec

    Rename dataColumnQuarantine and add verification optimization to Gloas quarantine too.

    cheatfate merged to status-im/nimbus-eth2 at 2026-06-25 01:32:54

    Initial commit.

    by cheatfate

    Fix some mistypes.

    by cheatfate

    Get back sidecars verification with blocks for backfill process.

    by cheatfate

    Undo changes.

    by cheatfate

    Fix test.

    by cheatfate

    fix[lang]: missing no-return implements check

    Sporarum merged to vyperlang/vyper at 2026-06-25 20:26:34

    fix[lang]: missing no-return implements check

    by Sporarum

    simplify logic to reduce complex conditions

    by charles-cooper

    feat[lang]: allow conversions from flag to bytes32

    Sporarum merged to vyperlang/vyper at 2026-06-25 19:07:58

    feat[lang]: allow conversions from flag to bytes32

    by Sporarum

    fix[lang]: method_id panic on non-constant

    Sporarum merged to vyperlang/vyper at 2026-06-25 20:21:38

    fix[lang]: method_id panic on non-constant

    by Sporarum

    chore[ci]: limit test push trigger to master

    devin-ai-integration[bot] merged to vyperlang/vyper at 2026-06-25 23:32:54

    ci: limit test push trigger to master Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

    by None

    • GEAR immunefi-logoRewards Blockchain DLT
      $1,000 $2,000 $10,000 $25,000

    refactor(protocol/lazy-pages): improve `#[cfg(...)]` attributes, add support Android x86_64

    StackOverflowExcept1on merged to gear-tech/gear at 2026-06-25 16:04:36

    fix(protocol/lazy-pages): improve `#[cfg(...)]` attributes, support Android x86_64

    by StackOverflowExcept1on

    Merge remote-tracking branch 'origin/master' into av/lazy-pages-cfg

    by StackOverflowExcept1on

    fix review

    by StackOverflowExcept1on

    refactor(malachite): restructure service initialization and externalities

    grishasobol merged to gear-tech/gear at 2026-06-25 15:11:02

    initial

    by grishasobol

    fix(vara.eth/malachite): make workspace compile after starter refactor Gate `Signer` re-export behind `std`, await the now-async `try_emit_or_queue`/`receive_*` calls, switch the service event loop and test env to the new `MalachiteServiceStarter` API, drop unused imports. Co-Authored-By: Claude Opus 4.7

    by grishasobol

    test(vara.eth/malachite): re-enable disabled tests, adapt to new internals Drop both `disable-tests` cfg gates; port externalities unit tests to the `ChainHead` register / `Option>` fields and async helpers, port restart_resilience to the `MalachiteServiceStarter` API. Co-Authored-By: Claude Opus 4.7

    by grishasobol

    fix(vara.eth/malachite): publish synced head to externalities on eb-synced `ChainHead::latest_synced` was only seeded once in the starter, so the producer's quarantine probe never saw new EBs and proposals timed out. Update it in `receive_eb_synced` before waking the producer. Co-Authored-By: Claude Opus 4.7

    by grishasobol

    malachite core acceptance fixing

    by grishasobol

    refactor(vara.eth/malachite): adapt service and tests to Acceptance-based validation `Externalities::validate_block_above` now takes `&BlockPayload` and returns `Acceptance<(), String>`; rejection reasons travel in the variant (logged by the core) instead of local `warn!` + `Ok(false)`. Port the multi_validators TestExt impl and drop imports left unused by the core change. Co-Authored-By: Claude Opus 4.7

    by grishasobol

    fixing errors handling

    by grishasobol

    test(vara.eth/malachite): re-enable gated tests after errors-handling rework Drop all `disable-tests` cfg gates. Port mempool tests to the async Mempool API (proptests drive it via block_on), quarantine tests to the SimpleBlockData/Acceptance signatures (drop `verify_passed` proptest — the depth check now lives in validate_block_above), and flip the unresolved-ref_block test to assert the now-implemented purge. Co-Authored-By: Claude Opus 4.7

    by grishasobol

    chore(vara.eth/malachite): add missing SPDX license headers Co-Authored-By: Claude Opus 4.7

    by grishasobol

    docs(vara.eth/malachite): fix intra-doc links broken by type renames `MalachiteConfig` → `MalachiteCoreConfig` / `MalachiteServiceConfig`, `MalachiteService` → `MalachiteCore` (in core), `MalachiteService::new` → `MalachiteServiceStarter::new`. CI docs build runs with `-D warnings`, so the stale links failed `build / docs`. Co-Authored-By: Claude Opus 4.7

    by grishasobol

    docs example

    by grishasobol

    docs(vara.eth/malachite): concise item-level documentation Apply the short, informative doc style across ethexe-malachite and ethexe-malachite-core: one-line field docs, compressed method/struct docs without internal narration, trimmed inline comment blocks. Crate-level docs untouched. Co-Authored-By: Claude Opus 4.7

    by grishasobol

    more errors handling

    by grishasobol

    Merge branch 'master' into gsobol/ethexe/tune-malachite-errors

    by grishasobol

    fix(vara.eth/malachite): address review findings - receive_eb_synced: advance latest_synced by height instead of requiring the synced hash to equal the latest observed head — under lagging sync every BlockSynced was dropped and the producer stalled (codex P1) - wait_for_proposable_content: bail instead of panic on missing mempool - quarantine: Option -> Result via ok_or_else instead of with_context - drop redundant double with_validators + clone in service setup - fix "Malachite not local role" log wording - refresh stale `MalachiteConfig` / `MalachiteService::new` / `receive_new_chain_head` mentions in docs and messages - document the single-writer / no-guard-across-await invariant on ChainHead Co-Authored-By: Claude Opus 4.7

    by grishasobol

    fix(vara.eth/malachite): address codex review, stabilize heavy tests - app loop: propagate fatal errors again — the catch-all made `FinalizationError::Fatal` dead code and silenced the error stream - receive_eb_synced: wake the producer on stale synced blocks too (a lower-height sync may land headers a failed descendant walk needs) - restore the `candidate == parent_advance` short-circuit in find_eb_candidate_for_advancing (no more "X does not descend from X" warn spam every idle round) - drop the redundant compute_mb on BlockFinalized: BlockProposal is always emitted first on every node, so compute is already triggered - make propose_timeout a MalachiteServiceConfig field (default stays 2 * SLOT_DURATION — Ethereum block time can stretch past one slot); test envs use a short timeout so idle rounds don't burn 24s each - MalachiteServiceStarter::new: drop unused async - nextest: reserve 4 threads for ethexe-service tests in the default profile like CI does — heavy multi-validator tests starved under full-suite parallelism and blew the 120s cap (full local suite is 527/527 with this) Co-Authored-By: Claude Opus 4.7

    by grishasobol

    fix problem with collect_advance_chain

    by grishasobol

    Merge remote-tracking branch 'origin/master' into gsobol/ethexe/tune-malachite-errors

    by grishasobol

    Merge remote-tracking branch 'origin/master' into gsobol/ethexe/tune-malachite-errors # Conflicts: # ethexe/compute/src/compute.rs # ethexe/malachite/service/src/externalities.rs

    by grishasobol

    Merge remote-tracking branch 'origin/master' into gsobol/ethexe/tune-malachite-errors # Conflicts: # ethexe/malachite/service/src/externalities.rs

    by grishasobol

    Merge branch 'master' into gsobol/ethexe/tune-malachite-errors

    by grishasobol

    Merge branch 'master' into gsobol/ethexe/tune-malachite-errors

    by grishasobol

    review fixes

    by grishasobol

    refactor(vara.eth): replace ComputeError::Other(&str) with typed variants Addresses review: a typed error enum should not carry a free-form Other(&'static str) that callers/tests match by substring. Replace the eight Other(...) sites in collect_advance_chain / build_executable_data with specific variants (GenesisBlockMissing, StartBlockNotGenesis, StartBlockHeightZero, TargetEbOlderThanLastAdvanced, TargetEbSameHeightAsLastAdvanced, AdvanceChainDisconnected, AdvanceChainHeaderMissing) carrying the relevant hashes/heights, and match the variant (not a substring) in the missing-header test. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_0147tTHt6e7mhirSAPwNxRc3

    by grishasobol

    refactor(vara.eth): wrap Externalities in Arc inside MalachiteServiceStarter::new Addresses review: build the Arc at construction time (like ChainHead) so the starter holds the shared handle directly, instead of wrapping in start(). Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_0147tTHt6e7mhirSAPwNxRc3

    by grishasobol

    refactor(vara.eth): resolve net key dir via NodeConfig, not hand-joined path Addresses review: the network signer directory was re-derived in the service as key_path.parent().join("net"), duplicating the path the CLI network params already manage. Carry the net dir on NodeConfig (net_path = node base /net, the same source NetworkParams uses) and read the signer from it, removing the fragile re-join. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_0147tTHt6e7mhirSAPwNxRc3

    by grishasobol

    • CARDANOFOUNDATION immunefi-logoRewards Websites and Applications
      $1,000 $2,000 $5,000 $10,000

    Generate session keys with the system CSPRNG

    paolino merged to cardano-foundation/cardano-wallet at 2026-06-25 09:58:08

    fix(ui): generate session keys with the system CSPRNG createCookie built the session key with replicateM 16 $ randomRIO ('a','z'), drawing from the non-cryptographic process-global StdGen (splitmix), which is predictable from observed outputs. Draw 16 bytes from the system CSPRNG (getRandomBytes via Cryptography.Core) and hex-encode them instead. Resolves #5301.

    by paolino

    • NEO immunefi-logoRewards Blockchain DLT
      <$500 <$2,000 <$5,000 <$10,000

    Add PausableOwnable for an owner-gated pause switch

    Jim8y merged to neo-project/neo-devpack-dotnet at 2026-06-25 05:38:20

    Add PausableOwnable for an owner-gated pause switch Pausable ships Pause/Unpause as protected methods with no access control, and no documentation of that fact. An author who exposes them through a public method without adding an owner check creates a contract where any caller can pause it, denying service to every guarded method. Add PausableOwnable, the safe-by-default circuit breaker: it combines Ownable with a paused flag so Pause and Unpause are public but require the owner's witness. Authors gate their state-changing methods with the provided WhenNotPaused guard. Paused/Unpaused events record the owner that flipped the switch; storage is written before the event. Only the Paused getter is [Safe]. Also document on Pausable that its Pause/Unpause are unguarded and must be wrapped with an authorization check, pointing readers to PausableOwnable for the owner-gated default. Adds PausableOwnableTest (9 cases): owner can pause/unpause with events, non-owner cannot pause or unpause, pause-when-paused and unpause-when-not-paused abort, the WhenNotPaused and WhenPaused guards gate business methods, and the manifest safe-flag and ABI-exclusion surface.

    by Jim8y

    Merge PausableOwnable dynamic coverage

    by Jim8y

    Merge branch 'master-n3' into feat/pausable-ownable

    by Jim8y

    Use pausable modifier attributes in PausableOwnable

    by Jim8y

    Merge remote-tracking branch 'origin/master-n3' into feat/pausable-ownable

    by Jim8y

    Merge branch 'master-n3' into feat/pausable-ownable

    by ajara87

    Merge remote-tracking branch 'origin/master-n3' into feat/pausable-ownable

    by Jim8y

    Merge remote-tracking branch 'origin/master-n3' into feat/pausable-ownable

    by Jim8y

    Remove unused Akka helper import

    Jim8y merged to neo-project/neo-devpack-dotnet at 2026-06-25 01:17:37

    Remove unused Akka helper import

    by Jim8y