3.140.0-devnet (2026-10-23)
142 changes since 3.139.0-devnet (full diff).
Runtime, pallets and precompiles
- fix(attestation): bound catch-up and roster limits by block capacity (CSUB-2111, CSUB-2112) (#1601) @didac-gluwa
- fix(pallet): apply bounds to set_max_invulnerables CSUB-2114 (#1602) @BradleyOlson64
- fix(chain-info): charge DB reads for absent attestation state (CSUB-2113) (#1600) @didac-gluwa
- test(evm): oversized EIP-7702 auth lists rejected (#1583) @BradleyOlson64
- test(evm): confirm BLOCKHASH only reaches the last 256 blocks (#1581) @BradleyOlson64
- test(evm): EVM.call is bound by proof-size limit (#1582) @BradleyOlson64
- test(attestation): check that removeChain cleans up in batches, resulting in fully cleared state (#1588) @BradleyOlson64
- test(attestation): check that revertTo clears attestations in batches (#1587) @BradleyOlson64
- test(attestation): A low target sample size doesn't lower the quorum threshold (#1585) @BradleyOlson64
- test(evm): check Executed extra data is capped (#1584) @BradleyOlson64
- test(attestation): pool tag is withheld correctly (#1570) @BradleyOlson64
- test(evm): check that GASPRICE matches what the sender pays (#1573) @BradleyOlson64
- test(evm): balance override tests (#1574) @BradleyOlson64
- fix(test): Add asserts in commit attestation test (#1547) @BradleyOlson64
- test(supported-chains): register chain limits (#1549) @BradleyOlson64
- fix(attestation): attestation improvements (CSUB-2055) (#1445) @beqaabu
- fix(precompile): Check that fetched checkpoint isn't stale in contains_digest (#1546) @BradleyOlson64
- fix(attestation): harden commit validation (CSUB-2083) (#1516) @didac-gluwa
- test(runtime): add EVM block benchmarks (CSUB-2065) (#1440) @beqaabu
- chore(runtime): wire up finality api improvements (CSUB-2062) (#1434) @beqaabu
- fix(attestation): quorum improvements (CSUB-2052) (#1469) @BradleyOlson64
- perf(attestation): cheaper active-attestor check in tx prevalidation (CSUB-2084) (#1515) @didac-gluwa
- fix(attestation): bound chain removal cleanup (CSUB-2081) (#1495) @didac-gluwa
- ci(attestation): run the full attestor-network soak nightly (#1526) @DylanVerstraete
- feat(supported-chains): add set_chain_name extrinsic to rename a registered chain (#1490) @DylanVerstraete
- fix(precompiles): improve substrate-transfer precompile (CSUB-2080) (#1497) @didac-gluwa
- fix(attestation): chain configuration checks (CSUB-2082) (#1477) @DylanVerstraete
- fix(runtime): update EVM fee handling (CSUB-2061) (#1439) @beqaabu
- fix(attestation): release matured unlocking chunks when unbonding into a full queue (#1446) @didac-gluwa
- fix(attestation): rework attestation cleanup (CSUB-2059) (#1425) @didac-gluwa
- fix(precompiles): attestor-stash precompile improvements (CSUB-2063) (#1437) @didac-gluwa
- fix: charge DB-read gas on both outcomes of chain-info key lookup (CSUB-2064) (#1431) @didac-gluwa
- CSUB-2058 (fix) attestation improvements (#1423) @didac-gluwa
- CSUB-2054 (fix) Proof of possession hardening (#1432) @BradleyOlson64
- Validate attestor/invulnerable roster limits on chain registration (#1421) @didac-gluwa
Node
- feat(rpc): update frontier_2 patch (#1603) @didac-gluwa
- test(rpc): test that estimateGas shortcuts only plain transfers (#1594) @BradleyOlson64
- test(rpc): reported base fee matches what the block actually ran with (#1580) @BradleyOlson64
- test(rpc): check newHeads timestamps are in seconds (#1579) @BradleyOlson64
- feat(node): keep BABE epochs, sessions and eras running under --sealing (#1537) @DylanVerstraete
- fix(node): tx pool validation improvements (CSUB-2053) (#1426) @BradleyOlson64
Attestor
- fix(attestor): give zombienet attestors each other as boot nodes (#1528) @DylanVerstraete
- fix(attestor): probe an http(s) eth endpoint with eth_chainId at startup (#1485) @DylanVerstraete
- feat(attestor): pace source-chain RPC requests (#1463) @DylanVerstraete
- feat(attestor): log gossipsub subscription and support events (#1429) @HusseinAdeiza
Archiver
- feat(archiver): pace source-chain RPC requests with --eth-rps (#1478) @DylanVerstraete
- archiver: log RPC endpoints through redact_url_query (#1458) @beqaabu
- fix(Archiver): Follow the last included attestation (#1444) @BradleyOlson64
Proof generation and checkpoints
- perf(checkpoint-verifier): fetch and hash blocks concurrently (#1560) @DylanVerstraete
- ci(proof-gen): wait for both chains at once and bound the outage to 60-90 s (#1556) @DylanVerstraete
- ci(proof-gen): reuse the CI node build and wait for readiness (#1522) @DylanVerstraete
- fix(proof-gen,continuity): answer 422 while the archiver stores the newest attested blocks (#1438) @DylanVerstraete
Shared libraries
- feat(eth): raw-RLP block fetch mode (debug_getRawBlock/Receipts) + archiver --fetch-mode (#1328) @DylanVerstraete
- feat(streams): follow the source-chain head by polling when the RPC is HTTP-only (#1480) @DylanVerstraete
- fix(stream_eth): fuse the head watchdog so an ETH reconnect can't panic the attestor (#1442) @DylanVerstraete
Indexer
- ci(cc3-indexer): seal a block every second and run the tests in one job (#1558) @DylanVerstraete
- ci(cc3-indexer): seal blocks for era waits instead of waiting for them (#1538) @DylanVerstraete
- ci(cc3-indexer): split the indexer tests over three runners (#1530) @DylanVerstraete
- fix(indexer): drop default postgres password from the image (#1472) @DylanVerstraete
CLI and scripts
- test(grandpa): key ownership proofs are generated (#1586) @BradleyOlson64
- test(pop): proof-of-possession binds to intended attestor key (#1548) @BradleyOlson64
- test(revert): revert_to blocks new attestation commits (#1572) @BradleyOlson64
- test(att): cover unregistering an attestor when unlocking queue is full (#1571) @BradleyOlson64
- fix(scripts): stop the storage version comparison passing on missing input (#1562) @DylanVerstraete
- ci(cli): seal blocks every second in the attestor CLI tests and run them in one job (#1555) @DylanVerstraete
- ci(cli): run the validator CLI proxy=no and Staking legs unsplit (#1557) @DylanVerstraete
- test(cli): allow the unbonding countdown to pause on an era boundary (#1553) @DylanVerstraete
- ci(cli): seal blocks every second in the validator CLI tests (#1544) @DylanVerstraete
- ci(cli): split the blockchain tests over two runners (#1525) @DylanVerstraete
- ci(cli): split the Staking proxy leg over two runners (#1521) @DylanVerstraete
- ci(cli): split the full validator-cli suite over two runners (#1513) @DylanVerstraete
- ci(cli): split attestor-cli tests over two runners (#1505) @DylanVerstraete
- test(cli): wait for Bob to see the registration in show-status (#1511) @DylanVerstraete
- test(cli): check argument validation in unit tests (#1504) @DylanVerstraete
- ci(cli): run only signing-path tests in proxy variants (#1503) @DylanVerstraete
- ci(cli): run attestor CLI e2e when the CLI code changes (#1506) @DylanVerstraete
- test(cli): write JUnit reports for e2e suites (#1502) @DylanVerstraete
- test(cli): bound sanity and randomness soak tests (#1500) @DylanVerstraete
- feat(scripts): add a sweep for the stable2512 staking currency migration (#1493) @beqaabu
- fix(cli): derive prover-check gas limits from on-chain BlockGasLimit (#1371) @mason-gluwa
- feat(scripts): add bsc testnet to the testnet USC audit (#1488) @jakerumbles
- feat(scripts): add asc-devnet to the USC audit and run it every 6h (#1487) @didac-gluwa
- feat(scripts): add BSC Testnet (ck10) to devnet USC audit (#1479) @jakerumbles
- Replace USC Audit Automation BSC key from 8 to 9 (#1447) @didac-gluwa
- fix(scripts): derive usc audit maturity lag from on-chain strategy (#1443) @didac-gluwa
CI and repository
- chore(release): reconcile usc-testnet (3.139.0) into dev (#1577) @DylanVerstraete
- ci(cache): restore the warmer's cache in try-runtime and benchmarks (#1564) @DylanVerstraete
- ci(cache): save the setup-node caches from dev so pull requests stop saving their own (#1563) @DylanVerstraete
- ci(triggers): run the suites when their configs, setups or shared scripts change (#1561) @DylanVerstraete
- ci(build): cache the runtime's wasm build separately (#1559) @DylanVerstraete
- ci(build): compile the workspace crates at opt-level 1 in testing builds (#1550) @DylanVerstraete
- ci(validator-compatibility): onboard the historical validators in parallel (#1552) @DylanVerstraete
- ci(examples): pin the examples that poll the bridge worker instead of sleeping (#1551) @DylanVerstraete
- ci(runners): drop the metadata rebuild and move compatibility jobs to hosted runners (#1545) @DylanVerstraete
- ci(attestor-network): load a 10k-block anvil fixture with two transactions per block (#1543) @DylanVerstraete
- ci(triggers): run the e2e suites when the node, manifests or lockfile change (#1542) @DylanVerstraete
- ci(extrinsics): warn on development trunks, block promotion to testnet and main (#1540) @DylanVerstraete
- ci(attestor-network): keep the anvil state dumps out of the uploaded logs (#1541) @DylanVerstraete
- ci(rust): let dev cache producers finish and drop no-op cache restores (#1539) @DylanVerstraete
- ci(attestor-compat): report incompatibility as a warning on dev PRs (#1536) @DylanVerstraete
- ci(cache): let cache builds on dev finish instead of cancelling them (#1535) @DylanVerstraete
- ci(cache): key Rust caches on our toolchain, not the runner image's (#1533) @DylanVerstraete
- ci(triggers): run the heavy PR workflows only for the changes they test (#1534) @DylanVerstraete
- ci(cache): stop the PR-only Rust jobs saving caches (#1532) @DylanVerstraete
- ci(extrinsics): check extrinsics only when the runtime can change (#1531) @DylanVerstraete
- ci(git): drop the merge-commit check from PR sanity (#1529) @DylanVerstraete
- ci(build): reuse node binaries when no crate source changed (#1527) @DylanVerstraete
- ci(git): flag only new promotion conflicts and report trunk drift daily (#1524) @DylanVerstraete
- ci(release): build releases warm on hosted runners and drop subkey (#1518) @DylanVerstraete
- ci(runners): move PR build jobs to GitHub-hosted runners (#1489) @mason-gluwa
- ci(rust): keep the default-branch Rust caches alive for PRs (#1519) @DylanVerstraete
- ci(blockchain,examples): informational storage-version diff on dev, pin examples (#1512) @DylanVerstraete
- ci(dependabot): hold @PolkaDot majors and group @PolkaDot packages (#1481) @DylanVerstraete
- ci(e2e): replace fixed sleeps with condition waits (#1501) @DylanVerstraete
- ci(gate): count fork PR approvals by repository permission (#1462) @DylanVerstraete
- ci(release): build release notes from the tagged range, grouped by topic (#1494) @DylanVerstraete
- fix(hooks): compare new branches against origin/dev in pre-push (#1496) @didac-gluwa
- ci(extrinsics): compare against the target network's latest release (#1491) @DylanVerstraete
- ci(release): allow devnet hotfix releases from any branch (#1476) @beqaabu
- ci: report peak runner resource usage in job summaries (#1329) @mason-gluwa
- docs(claude): point the conventional-commits skill at dev after the usc-dev rename (#1450) @DylanVerstraete
- ci(git): let the sanity checks run on fork PRs (#1457) @DylanVerstraete
- feat(claude): require a scope on every commit header and PR title (#1435) @DylanVerstraete
- chore(claude): add a shared skill for conventional commits and PR titles (#1433) @DylanVerstraete
- ci: add the asc-devnet release flavour (#1418) @beqaabu
Dependencies (17)
- build(deps): bump hono from 4.13.7 to 4.13.13 in /cc3-indexer (#1591) @dependabot[bot]
- build(deps): bump the all-dependencies group with 8 updates (#1510) @dependabot[bot]
- build(deps): bump frontier_2 and wire up the precompile check (CSUB-2067) (#1567) @didac-gluwa
- build(deps): bump the prod-dependencies group across 2 directories with 2 updates (#1508) @dependabot[bot]
- build(deps): bump @modelcontextprotocol/sdk from 1.26.0 to 1.32.1 in /cc3-indexer (#1475) @dependabot[bot]
- build(deps): bump ubuntu from
da6fc2btof144425in the all-dependencies group across 1 directory (#1507) @dependabot[bot] - build(deps-dev): bump the dev-dependencies group across 6 directories with 5 updates (#1509) @dependabot[bot]
- build(deps): bump brace-expansion from 1.1.13 to 1.1.21 in /scripts (#1499) @dependabot[bot]
- build(deps): bump handlebars from 4.7.9 to 4.7.10 in /cli (#1498) @dependabot[bot]
- build(deps): bump proxy-addr from 2.0.7 to 2.0.8 in /cc3-indexer (#1483) @dependabot[bot]
- build(deps-dev): bump source-map-js from 1.2.1 to 1.2.2 in /docs/smart-contract-development/with-ethers.js (#1470) @dependabot[bot]
- build(deps): bump proxy-addr from 2.0.7 to 2.0.8 in /cli (#1471) @dependabot[bot]
- build(deps): bump handlebars from 4.7.9 to 4.7.10 in /docs/smart-contract-development/with-hardhat (#1492) @dependabot[bot]
- build(deps): bump the all-dependencies group across 3 directories with 2 updates (#1453) @dependabot[bot]
- build(deps): bump linode-cli from 5.68.0 to 5.69.0 in /.github in the linode-dependencies group across 1 directory (#1454) @dependabot[bot]
- build(deps-dev): bump brace-expansion from 1.1.13 to 1.1.21 in /docs/smart-contract-development/with-hardhat (#1449) @dependabot[bot]
- build(deps): bump vm2 from 3.11.6 to 3.12.2 in /cc3-indexer (#1461) @dependabot[bot]
⚠️ Operator Warnings
The following changes in this release may require action from node, attestor, or indexer operators.
Please review carefully before upgrading.
🔴 Runtime definition changed
The runtime source code has changed. A runtime upgrade will likely be required. Ensure the on-chain runtime is updated accordingly.
Changed files (2)
runtime/src/ethereum_finalize_benchmarking.rs
runtime/src/lib.rs
🟡 Node binary source changed
The node binary source code has changed. Node operators should rebuild and redeploy their node binary.
Changed files (2)
node/src/rpc/mod.rs
node/src/service.rs
🟡 Pallet or precompile code changed
Pallet or precompile source code has changed. A runtime upgrade may be required. Review the changes carefully before upgrading.
Changed files (15)
pallets/attestation/src/benchmarking.rs
pallets/attestation/src/clear_or_revert.rs
pallets/attestation/src/continuity.rs
pallets/attestation/src/extensions.rs
pallets/attestation/src/impls.rs
pallets/attestation/src/lib.rs
pallets/attestation/src/weights.rs
pallets/randomness/src/weights.rs
pallets/supported-chains/src/benchmarking.rs
pallets/supported-chains/src/lib.rs
pallets/supported-chains/src/weights.rs
precompiles/attestor-stash/src/lib.rs
precompiles/block-prover/src/lib.rs
precompiles/chain-info/src/lib.rs
precompiles/substrate-transfer/src/lib.rs
🟡 Attestor source changed
Attestor-related source code has changed. Attestor operators should rebuild and redeploy their attestor binary.
Changed files (21)
attestor/attestor/src/error.rs
attestor/attestor/src/lib.rs
attestor/attestor/src/main.rs
attestor/attestor/src/secret.rs
attestor/attestor/src/shared.rs
attestor/attestor/src/startup.rs
attestor/attestor/src/tasks/p2p/mod.rs
attestor/attestor/src/tasks/production.rs
attestor/attestor/src/tasks/validation.rs
common/eth/Cargo.toml
common/eth/src/lib.rs
common/eth/tests/raw_rlp_pairing.rs
common/eth/tests/raw_rlp_vs_json.rs
common/eth/tests/unrecoverable_fetch.rs
common/streams/attestation/src/lib.rs
🟡 Indexer schema entities added or removed
The indexer GraphQL schema has had entities added or removed.
Changed files (1)
cc3-indexer/schema.graphql