Skip to content

refactor: revert dual-state from regen, block production, and metrics#9218

Merged
ensi321 merged 3 commits intounstablefrom
nc/revert-regen
Apr 17, 2026
Merged

refactor: revert dual-state from regen, block production, and metrics#9218
ensi321 merged 3 commits intounstablefrom
nc/revert-regen

Conversation

@ensi321
Copy link
Copy Markdown
Contributor

@ensi321 ensi321 commented Apr 15, 2026

Summary

Depends on #9215

  • Remove payloadPresent parameter from regen interfaces (addCheckpointState, updatePreComputedCheckpoint, getCheckpointStateOrBytes, getCheckpointStateSync)
  • Remove processPayloadState, upgradeForGloas from IStateRegenerator
  • Remove PayloadStatuspayloadPresent conversion logic from regen (queued.ts, regen.ts)
  • Remove UNEXPECTED_PAYLOAD_STATUS and INTERNAL_ERROR regen error codes
  • Remove CheckpointHexPayload type and fcCheckpointToHexPayload helper — all callers now use CheckpointHex
  • Delete computePayloadEnvelopeStateRoot() and remove payloadEnvelopeStateRoot from ProduceFullGloas type
  • Remove computePayloadEnvelopeStateRoot from StateHashTreeRootSource enum
  • Rename processBlockStateprocessState and postBlockStatepostState to remove dual-state naming

Reverts #9175

Test plan

  • pnpm check-types passes
  • pnpm lint passes

🤖 Generated with Claude Code

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request simplifies state management by removing the dual-state (block vs. payload) distinction introduced for the Gloas fork. It unifies state processing under a single processState method, removes the payloadPresent flag from multiple interfaces, and deletes the CheckpointHexPayload type. Review feedback highlights a critical issue where setting stateRoot to ZERO_HASH in the ExecutionPayloadEnvelope will trigger validation failures during block import, and suggests updating log messages to reflect the consolidated state handling.

Comment on lines +1652 to +1654
// TODO GLOAS: stateRoot is no longer computed during block production.
// This field will be removed when we implement defer payload processing
stateRoot: ZERO_HASH,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Setting stateRoot to ZERO_HASH in the ExecutionPayloadEnvelope will cause validation failures during payload import on other nodes (or even the same node if re-imported). The importExecutionPayload function still performs a strict check comparing the envelope's stateRoot against the computed postPayloadStateRoot. If the intention is to defer payload processing and avoid computing the state root during production, the importer must also be updated to skip this verification for Gloas blocks, otherwise this change breaks Gloas block production and import.

Comment on lines 158 to 160
this.checkpointStateCache.processState(blockRootHex, postState).catch((e) => {
this.logger.debug("Error processing block state", {blockRootHex, slot: postState.slot}, e);
});
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The log message "Error processing block state" is now potentially misleading because processState is used for both block states and payload states (following the removal of processPayloadState). It would be better to use a more generic term like "state" to accurately reflect both cases.

Suggested change
this.checkpointStateCache.processState(blockRootHex, postState).catch((e) => {
this.logger.debug("Error processing block state", {blockRootHex, slot: postState.slot}, e);
});
this.checkpointStateCache.processState(blockRootHex, postState).catch((e) => {
this.logger.debug("Error processing state", {blockRootHex, slot: postState.slot}, e);
});

@ensi321 ensi321 mentioned this pull request Apr 15, 2026
5 tasks
Base automatically changed from nc/revert-epbs-dual-state-cache to unstable April 16, 2026 06:50
ensi321 and others added 3 commits April 16, 2026 15:35
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@ensi321 ensi321 marked this pull request as ready for review April 16, 2026 22:36
@ensi321 ensi321 requested a review from a team as a code owner April 16, 2026 22:36
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c4844331fc

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

stateRoot: payloadEnvelopeStateRoot,
// TODO GLOAS: stateRoot is no longer computed during block production.
// This field will be removed when we implement defer payload processing
stateRoot: ZERO_HASH,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Set execution payload envelope stateRoot correctly

getExecutionPayloadEnvelope() now returns stateRoot: ZERO_HASH, but payload import still enforces that envelope.stateRoot matches the computed post-payload state root (packages/beacon-node/src/chain/blocks/importExecutionPayload.ts, lines 215-219). In the standard post-gloas proposer flow, the validator signs exactly this envelope and submits it, so self-built payload envelopes will be rejected with a state-root mismatch instead of importing successfully.

Useful? React with 👍 / 👎.

@github-actions
Copy link
Copy Markdown
Contributor

⚠️ Performance Alert ⚠️

Possible performance regression was detected for some benchmarks.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold.

Benchmark suite Current: 31be9fb Previous: 2870b59 Ratio
proposeBlockBody type=full, size=empty 2.9396 ms/op 674.98 us/op 4.36
Full benchmark results
Benchmark suite Current: 31be9fb Previous: 2870b59 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 869.74 us/op 887.57 us/op 0.98
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 38.820 us/op 39.438 us/op 0.98
BLS verify - blst 621.62 us/op 757.37 us/op 0.82
BLS verifyMultipleSignatures 3 - blst 1.2899 ms/op 1.3734 ms/op 0.94
BLS verifyMultipleSignatures 8 - blst 2.0355 ms/op 2.1778 ms/op 0.93
BLS verifyMultipleSignatures 32 - blst 6.3635 ms/op 6.9548 ms/op 0.91
BLS verifyMultipleSignatures 64 - blst 12.368 ms/op 13.408 ms/op 0.92
BLS verifyMultipleSignatures 128 - blst 24.171 ms/op 25.881 ms/op 0.93
BLS deserializing 10000 signatures 610.00 ms/op 643.38 ms/op 0.95
BLS deserializing 100000 signatures 6.1272 s/op 6.4726 s/op 0.95
BLS verifyMultipleSignatures - same message - 3 - blst 723.90 us/op 821.33 us/op 0.88
BLS verifyMultipleSignatures - same message - 8 - blst 882.50 us/op 940.84 us/op 0.94
BLS verifyMultipleSignatures - same message - 32 - blst 1.3957 ms/op 1.5664 ms/op 0.89
BLS verifyMultipleSignatures - same message - 64 - blst 2.3020 ms/op 2.4488 ms/op 0.94
BLS verifyMultipleSignatures - same message - 128 - blst 3.8968 ms/op 4.0844 ms/op 0.95
BLS aggregatePubkeys 32 - blst 16.907 us/op 17.794 us/op 0.95
BLS aggregatePubkeys 128 - blst 59.777 us/op 63.366 us/op 0.94
getSlashingsAndExits - default max 45.614 us/op 45.172 us/op 1.01
getSlashingsAndExits - 2k 374.11 us/op 320.30 us/op 1.17
proposeBlockBody type=full, size=empty 2.9396 ms/op 674.98 us/op 4.36
isKnown best case - 1 super set check 382.00 ns/op 175.00 ns/op 2.18
isKnown normal case - 2 super set checks 475.00 ns/op 170.00 ns/op 2.79
isKnown worse case - 16 super set checks 379.00 ns/op 173.00 ns/op 2.19
validate api signedAggregateAndProof - struct 1.4771 ms/op 1.5080 ms/op 0.98
validate gossip signedAggregateAndProof - struct 1.4836 ms/op 1.5067 ms/op 0.98
batch validate gossip attestation - vc 640000 - chunk 32 103.80 us/op 106.37 us/op 0.98
batch validate gossip attestation - vc 640000 - chunk 64 93.109 us/op 92.119 us/op 1.01
batch validate gossip attestation - vc 640000 - chunk 128 86.997 us/op 85.851 us/op 1.01
batch validate gossip attestation - vc 640000 - chunk 256 85.102 us/op 82.357 us/op 1.03
bytes32 toHexString 493.00 ns/op 300.00 ns/op 1.64
bytes32 Buffer.toString(hex) 386.00 ns/op 189.00 ns/op 2.04
bytes32 Buffer.toString(hex) from Uint8Array 464.00 ns/op 274.00 ns/op 1.69
bytes32 Buffer.toString(hex) + 0x 387.00 ns/op 194.00 ns/op 1.99
Return object 10000 times 0.22640 ns/op 0.21250 ns/op 1.07
Throw Error 10000 times 3.4304 us/op 3.3039 us/op 1.04
toHex 89.585 ns/op 109.36 ns/op 0.82
Buffer.from 83.027 ns/op 93.189 ns/op 0.89
shared Buffer 56.177 ns/op 66.120 ns/op 0.85
fastMsgIdFn sha256 / 200 bytes 1.6880 us/op 1.4790 us/op 1.14
fastMsgIdFn h32 xxhash / 200 bytes 361.00 ns/op 170.00 ns/op 2.12
fastMsgIdFn h64 xxhash / 200 bytes 408.00 ns/op 201.00 ns/op 2.03
fastMsgIdFn sha256 / 1000 bytes 4.8200 us/op 4.7240 us/op 1.02
fastMsgIdFn h32 xxhash / 1000 bytes 445.00 ns/op 262.00 ns/op 1.70
fastMsgIdFn h64 xxhash / 1000 bytes 462.00 ns/op 259.00 ns/op 1.78
fastMsgIdFn sha256 / 10000 bytes 40.727 us/op 41.791 us/op 0.97
fastMsgIdFn h32 xxhash / 10000 bytes 1.5030 us/op 1.2910 us/op 1.16
fastMsgIdFn h64 xxhash / 10000 bytes 1.0570 us/op 840.00 ns/op 1.26
send data - 1000 256B messages 4.0479 ms/op 4.0287 ms/op 1.00
send data - 1000 512B messages 4.5169 ms/op 4.1367 ms/op 1.09
send data - 1000 1024B messages 4.6075 ms/op 4.1591 ms/op 1.11
send data - 1000 1200B messages 4.6456 ms/op 4.3583 ms/op 1.07
send data - 1000 2048B messages 5.1240 ms/op 4.5123 ms/op 1.14
send data - 1000 4096B messages 5.7961 ms/op 5.3349 ms/op 1.09
send data - 1000 16384B messages 23.552 ms/op 14.188 ms/op 1.66
send data - 1000 65536B messages 215.33 ms/op 236.99 ms/op 0.91
enrSubnets - fastDeserialize 64 bits 962.00 ns/op 730.00 ns/op 1.32
enrSubnets - ssz BitVector 64 bits 491.00 ns/op 277.00 ns/op 1.77
enrSubnets - fastDeserialize 4 bits 300.00 ns/op 116.00 ns/op 2.59
enrSubnets - ssz BitVector 4 bits 496.00 ns/op 271.00 ns/op 1.83
prioritizePeers score -10:0 att 32-0.1 sync 2-0 218.17 us/op 202.59 us/op 1.08
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 234.33 us/op 243.22 us/op 0.96
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 357.25 us/op 337.44 us/op 1.06
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 614.24 us/op 598.04 us/op 1.03
prioritizePeers score 0:0 att 64-1 sync 4-1 703.93 us/op 699.42 us/op 1.01
array of 16000 items push then shift 1.2438 us/op 1.2865 us/op 0.97
LinkedList of 16000 items push then shift 8.0470 ns/op 7.0600 ns/op 1.14
array of 16000 items push then pop 68.761 ns/op 65.162 ns/op 1.06
LinkedList of 16000 items push then pop 6.2900 ns/op 5.9250 ns/op 1.06
array of 24000 items push then shift 1.8098 us/op 1.9108 us/op 0.95
LinkedList of 24000 items push then shift 7.7220 ns/op 6.5930 ns/op 1.17
array of 24000 items push then pop 95.468 ns/op 95.465 ns/op 1.00
LinkedList of 24000 items push then pop 6.2880 ns/op 5.9480 ns/op 1.06
intersect bitArray bitLen 8 4.8480 ns/op 4.7590 ns/op 1.02
intersect array and set length 8 29.190 ns/op 29.164 ns/op 1.00
intersect bitArray bitLen 128 23.792 ns/op 24.042 ns/op 0.99
intersect array and set length 128 494.37 ns/op 494.40 ns/op 1.00
bitArray.getTrueBitIndexes() bitLen 128 1.2920 us/op 1.0790 us/op 1.20
bitArray.getTrueBitIndexes() bitLen 248 2.0270 us/op 1.9310 us/op 1.05
bitArray.getTrueBitIndexes() bitLen 512 3.8950 us/op 3.8770 us/op 1.00
Full columns - reconstruct all 6 blobs 126.78 us/op 104.44 us/op 1.21
Full columns - reconstruct half of the blobs out of 6 97.185 us/op 89.304 us/op 1.09
Full columns - reconstruct single blob out of 6 33.527 us/op 32.974 us/op 1.02
Half columns - reconstruct all 6 blobs 376.11 ms/op 372.42 ms/op 1.01
Half columns - reconstruct half of the blobs out of 6 186.88 ms/op 190.67 ms/op 0.98
Half columns - reconstruct single blob out of 6 67.837 ms/op 65.978 ms/op 1.03
Full columns - reconstruct all 10 blobs 279.63 us/op 363.36 us/op 0.77
Full columns - reconstruct half of the blobs out of 10 148.99 us/op 121.49 us/op 1.23
Full columns - reconstruct single blob out of 10 31.296 us/op 30.421 us/op 1.03
Half columns - reconstruct all 10 blobs 617.19 ms/op 630.62 ms/op 0.98
Half columns - reconstruct half of the blobs out of 10 311.44 ms/op 313.11 ms/op 0.99
Half columns - reconstruct single blob out of 10 66.409 ms/op 67.738 ms/op 0.98
Full columns - reconstruct all 20 blobs 1.0767 ms/op 564.43 us/op 1.91
Full columns - reconstruct half of the blobs out of 20 213.76 us/op 280.25 us/op 0.76
Full columns - reconstruct single blob out of 20 28.592 us/op 30.226 us/op 0.95
Half columns - reconstruct all 20 blobs 1.2252 s/op 1.2997 s/op 0.94
Half columns - reconstruct half of the blobs out of 20 613.19 ms/op 629.47 ms/op 0.97
Half columns - reconstruct single blob out of 20 67.531 ms/op 65.668 ms/op 1.03
Set add up to 64 items then delete first 2.0527 us/op 2.1174 us/op 0.97
OrderedSet add up to 64 items then delete first 3.2352 us/op 3.3463 us/op 0.97
Set add up to 64 items then delete last 2.0260 us/op 3.0195 us/op 0.67
OrderedSet add up to 64 items then delete last 3.1445 us/op 3.7730 us/op 0.83
Set add up to 64 items then delete middle 2.0135 us/op 3.0041 us/op 0.67
OrderedSet add up to 64 items then delete middle 4.5177 us/op 5.1360 us/op 0.88
Set add up to 128 items then delete first 3.9627 us/op 5.6898 us/op 0.70
OrderedSet add up to 128 items then delete first 6.1213 us/op 6.8836 us/op 0.89
Set add up to 128 items then delete last 3.6605 us/op 5.8620 us/op 0.62
OrderedSet add up to 128 items then delete last 5.4935 us/op 6.8396 us/op 0.80
Set add up to 128 items then delete middle 3.5901 us/op 5.6123 us/op 0.64
OrderedSet add up to 128 items then delete middle 11.393 us/op 12.594 us/op 0.90
Set add up to 256 items then delete first 7.6251 us/op 10.733 us/op 0.71
OrderedSet add up to 256 items then delete first 11.938 us/op 12.775 us/op 0.93
Set add up to 256 items then delete last 7.3041 us/op 10.656 us/op 0.69
OrderedSet add up to 256 items then delete last 11.424 us/op 13.125 us/op 0.87
Set add up to 256 items then delete middle 7.6211 us/op 10.756 us/op 0.71
OrderedSet add up to 256 items then delete middle 34.237 us/op 36.653 us/op 0.93
pass gossip attestations to forkchoice per slot 2.4414 ms/op 2.5753 ms/op 0.95
forkChoice updateHead vc 100000 bc 64 eq 0 373.08 us/op 419.15 us/op 0.89
forkChoice updateHead vc 600000 bc 64 eq 0 2.2358 ms/op 2.4958 ms/op 0.90
forkChoice updateHead vc 1000000 bc 64 eq 0 3.7291 ms/op 4.1158 ms/op 0.91
forkChoice updateHead vc 600000 bc 320 eq 0 2.2058 ms/op 2.4261 ms/op 0.91
forkChoice updateHead vc 600000 bc 1200 eq 0 2.2726 ms/op 2.5021 ms/op 0.91
forkChoice updateHead vc 600000 bc 7200 eq 0 2.6866 ms/op 2.8250 ms/op 0.95
forkChoice updateHead vc 600000 bc 64 eq 1000 2.8158 ms/op 2.9515 ms/op 0.95
forkChoice updateHead vc 600000 bc 64 eq 10000 2.8844 ms/op 3.0406 ms/op 0.95
forkChoice updateHead vc 600000 bc 64 eq 300000 6.6360 ms/op 7.0836 ms/op 0.94
computeDeltas 1400000 validators 0% inactive 12.123 ms/op 12.652 ms/op 0.96
computeDeltas 1400000 validators 10% inactive 11.232 ms/op 11.878 ms/op 0.95
computeDeltas 1400000 validators 20% inactive 10.208 ms/op 10.751 ms/op 0.95
computeDeltas 1400000 validators 50% inactive 7.9213 ms/op 8.3382 ms/op 0.95
computeDeltas 2100000 validators 0% inactive 18.239 ms/op 18.936 ms/op 0.96
computeDeltas 2100000 validators 10% inactive 17.009 ms/op 17.962 ms/op 0.95
computeDeltas 2100000 validators 20% inactive 15.585 ms/op 16.352 ms/op 0.95
computeDeltas 2100000 validators 50% inactive 9.0058 ms/op 9.4651 ms/op 0.95
altair processAttestation - 250000 vs - 7PWei normalcase 2.0768 ms/op 1.6680 ms/op 1.25
altair processAttestation - 250000 vs - 7PWei worstcase 2.9513 ms/op 2.4298 ms/op 1.21
altair processAttestation - setStatus - 1/6 committees join 96.045 us/op 97.328 us/op 0.99
altair processAttestation - setStatus - 1/3 committees join 186.84 us/op 197.29 us/op 0.95
altair processAttestation - setStatus - 1/2 committees join 319.30 us/op 286.24 us/op 1.12
altair processAttestation - setStatus - 2/3 committees join 374.67 us/op 377.46 us/op 0.99
altair processAttestation - setStatus - 4/5 committees join 486.19 us/op 502.38 us/op 0.97
altair processAttestation - setStatus - 100% committees join 575.27 us/op 604.00 us/op 0.95
altair processBlock - 250000 vs - 7PWei normalcase 4.2772 ms/op 3.4070 ms/op 1.26
altair processBlock - 250000 vs - 7PWei normalcase hashState 15.473 ms/op 15.927 ms/op 0.97
altair processBlock - 250000 vs - 7PWei worstcase 20.245 ms/op 21.124 ms/op 0.96
altair processBlock - 250000 vs - 7PWei worstcase hashState 41.321 ms/op 42.849 ms/op 0.96
phase0 processBlock - 250000 vs - 7PWei normalcase 1.2710 ms/op 1.3990 ms/op 0.91
phase0 processBlock - 250000 vs - 7PWei worstcase 15.989 ms/op 17.001 ms/op 0.94
altair processEth1Data - 250000 vs - 7PWei normalcase 264.89 us/op 295.62 us/op 0.90
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.1900 us/op 5.4910 us/op 0.58
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 18.720 us/op 20.806 us/op 0.90
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 5.6010 us/op 5.8650 us/op 0.95
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.5430 us/op 3.6640 us/op 0.97
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 82.630 us/op 94.987 us/op 0.87
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.3037 ms/op 1.3944 ms/op 0.93
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.7077 ms/op 1.8539 ms/op 0.92
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.6987 ms/op 1.8366 ms/op 0.92
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.5253 ms/op 3.7639 ms/op 0.94
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.9238 ms/op 2.0906 ms/op 0.92
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.8308 ms/op 3.9796 ms/op 0.96
Tree 40 250000 create 294.20 ms/op 333.20 ms/op 0.88
Tree 40 250000 get(125000) 87.834 ns/op 94.943 ns/op 0.93
Tree 40 250000 set(125000) 955.27 ns/op 1.0425 us/op 0.92
Tree 40 250000 toArray() 12.018 ms/op 14.524 ms/op 0.83
Tree 40 250000 iterate all - toArray() + loop 12.370 ms/op 13.052 ms/op 0.95
Tree 40 250000 iterate all - get(i) 35.477 ms/op 41.859 ms/op 0.85
Array 250000 create 2.0598 ms/op 2.2156 ms/op 0.93
Array 250000 clone - spread 642.95 us/op 703.20 us/op 0.91
Array 250000 get(125000) 0.47100 ns/op 0.30300 ns/op 1.55
Array 250000 set(125000) 0.48900 ns/op 0.30500 ns/op 1.60
Array 250000 iterate all - loop 55.259 us/op 58.729 us/op 0.94
phase0 afterProcessEpoch - 250000 vs - 7PWei 37.391 ms/op 41.060 ms/op 0.91
Array.fill - length 1000000 1.9036 ms/op 2.2265 ms/op 0.85
Array push - length 1000000 7.1995 ms/op 8.1183 ms/op 0.89
Array.get 0.19475 ns/op 0.21217 ns/op 0.92
Uint8Array.get 0.23652 ns/op 0.24001 ns/op 0.99
phase0 beforeProcessEpoch - 250000 vs - 7PWei 17.217 ms/op 19.411 ms/op 0.89
altair processEpoch - mainnet_e81889 240.90 ms/op 257.66 ms/op 0.93
mainnet_e81889 - altair beforeProcessEpoch 14.054 ms/op 20.602 ms/op 0.68
mainnet_e81889 - altair processJustificationAndFinalization 5.8250 us/op 5.3840 us/op 1.08
mainnet_e81889 - altair processInactivityUpdates 3.5117 ms/op 3.4840 ms/op 1.01
mainnet_e81889 - altair processRewardsAndPenalties 19.036 ms/op 19.875 ms/op 0.96
mainnet_e81889 - altair processRegistryUpdates 769.00 ns/op 553.00 ns/op 1.39
mainnet_e81889 - altair processSlashings 355.00 ns/op 134.00 ns/op 2.65
mainnet_e81889 - altair processEth1DataReset 354.00 ns/op 132.00 ns/op 2.68
mainnet_e81889 - altair processEffectiveBalanceUpdates 2.1302 ms/op 1.7366 ms/op 1.23
mainnet_e81889 - altair processSlashingsReset 906.00 ns/op 822.00 ns/op 1.10
mainnet_e81889 - altair processRandaoMixesReset 1.3010 us/op 1.1420 us/op 1.14
mainnet_e81889 - altair processHistoricalRootsUpdate 352.00 ns/op 134.00 ns/op 2.63
mainnet_e81889 - altair processParticipationFlagUpdates 645.00 ns/op 436.00 ns/op 1.48
mainnet_e81889 - altair processSyncCommitteeUpdates 325.00 ns/op 108.00 ns/op 3.01
mainnet_e81889 - altair afterProcessEpoch 40.701 ms/op 43.834 ms/op 0.93
capella processEpoch - mainnet_e217614 800.16 ms/op 819.73 ms/op 0.98
mainnet_e217614 - capella beforeProcessEpoch 53.322 ms/op 57.596 ms/op 0.93
mainnet_e217614 - capella processJustificationAndFinalization 6.1010 us/op 6.5120 us/op 0.94
mainnet_e217614 - capella processInactivityUpdates 14.158 ms/op 13.150 ms/op 1.08
mainnet_e217614 - capella processRewardsAndPenalties 88.399 ms/op 94.694 ms/op 0.93
mainnet_e217614 - capella processRegistryUpdates 4.5360 us/op 4.6660 us/op 0.97
mainnet_e217614 - capella processSlashings 355.00 ns/op 140.00 ns/op 2.54
mainnet_e217614 - capella processEth1DataReset 346.00 ns/op 133.00 ns/op 2.60
mainnet_e217614 - capella processEffectiveBalanceUpdates 12.421 ms/op 19.915 ms/op 0.62
mainnet_e217614 - capella processSlashingsReset 891.00 ns/op 701.00 ns/op 1.27
mainnet_e217614 - capella processRandaoMixesReset 1.3910 us/op 1.3810 us/op 1.01
mainnet_e217614 - capella processHistoricalRootsUpdate 351.00 ns/op 137.00 ns/op 2.56
mainnet_e217614 - capella processParticipationFlagUpdates 645.00 ns/op 469.00 ns/op 1.38
mainnet_e217614 - capella afterProcessEpoch 107.73 ms/op 112.85 ms/op 0.95
phase0 processEpoch - mainnet_e58758 286.71 ms/op 314.32 ms/op 0.91
mainnet_e58758 - phase0 beforeProcessEpoch 61.171 ms/op 60.478 ms/op 1.01
mainnet_e58758 - phase0 processJustificationAndFinalization 6.2420 us/op 5.8120 us/op 1.07
mainnet_e58758 - phase0 processRewardsAndPenalties 15.359 ms/op 15.289 ms/op 1.00
mainnet_e58758 - phase0 processRegistryUpdates 2.4260 us/op 2.2880 us/op 1.06
mainnet_e58758 - phase0 processSlashings 349.00 ns/op 135.00 ns/op 2.59
mainnet_e58758 - phase0 processEth1DataReset 350.00 ns/op 130.00 ns/op 2.69
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 785.34 us/op 828.25 us/op 0.95
mainnet_e58758 - phase0 processSlashingsReset 1.0910 us/op 854.00 ns/op 1.28
mainnet_e58758 - phase0 processRandaoMixesReset 1.3350 us/op 1.3210 us/op 1.01
mainnet_e58758 - phase0 processHistoricalRootsUpdate 355.00 ns/op 139.00 ns/op 2.55
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.2670 us/op 1.0700 us/op 1.18
mainnet_e58758 - phase0 afterProcessEpoch 32.660 ms/op 34.603 ms/op 0.94
phase0 processEffectiveBalanceUpdates - 250000 normalcase 957.66 us/op 1.1076 ms/op 0.86
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.4947 ms/op 1.6031 ms/op 0.93
altair processInactivityUpdates - 250000 normalcase 11.276 ms/op 12.012 ms/op 0.94
altair processInactivityUpdates - 250000 worstcase 10.582 ms/op 10.717 ms/op 0.99
phase0 processRegistryUpdates - 250000 normalcase 2.5720 us/op 2.9220 us/op 0.88
phase0 processRegistryUpdates - 250000 badcase_full_deposits 138.70 us/op 154.54 us/op 0.90
phase0 processRegistryUpdates - 250000 worstcase 0.5 55.443 ms/op 61.794 ms/op 0.90
altair processRewardsAndPenalties - 250000 normalcase 16.512 ms/op 14.889 ms/op 1.11
altair processRewardsAndPenalties - 250000 worstcase 15.786 ms/op 15.442 ms/op 1.02
phase0 getAttestationDeltas - 250000 normalcase 5.2332 ms/op 5.4735 ms/op 0.96
phase0 getAttestationDeltas - 250000 worstcase 5.3734 ms/op 5.5126 ms/op 0.97
phase0 processSlashings - 250000 worstcase 60.614 us/op 59.234 us/op 1.02
altair processSyncCommitteeUpdates - 250000 9.9664 ms/op 10.166 ms/op 0.98
BeaconState.hashTreeRoot - No change 383.00 ns/op 168.00 ns/op 2.28
BeaconState.hashTreeRoot - 1 full validator 65.960 us/op 81.416 us/op 0.81
BeaconState.hashTreeRoot - 32 full validator 845.12 us/op 897.23 us/op 0.94
BeaconState.hashTreeRoot - 512 full validator 7.0702 ms/op 7.5230 ms/op 0.94
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 98.184 us/op 88.642 us/op 1.11
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.3188 ms/op 1.3269 ms/op 0.99
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 17.436 ms/op 15.992 ms/op 1.09
BeaconState.hashTreeRoot - 1 balances 75.526 us/op 78.067 us/op 0.97
BeaconState.hashTreeRoot - 32 balances 749.55 us/op 686.99 us/op 1.09
BeaconState.hashTreeRoot - 512 balances 7.3760 ms/op 5.3913 ms/op 1.37
BeaconState.hashTreeRoot - 250000 balances 115.99 ms/op 130.67 ms/op 0.89
aggregationBits - 2048 els - zipIndexesInBitList 20.421 us/op 19.802 us/op 1.03
regular array get 100000 times 22.844 us/op 23.009 us/op 0.99
wrappedArray get 100000 times 22.861 us/op 22.989 us/op 0.99
arrayWithProxy get 100000 times 9.4142 ms/op 10.438 ms/op 0.90
ssz.Root.equals 21.108 ns/op 21.599 ns/op 0.98
byteArrayEquals 21.082 ns/op 21.426 ns/op 0.98
Buffer.compare 8.9040 ns/op 8.8780 ns/op 1.00
processSlot - 1 slots 9.4140 us/op 9.4480 us/op 1.00
processSlot - 32 slots 2.2577 ms/op 2.1006 ms/op 1.07
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 5.7028 ms/op 3.5633 ms/op 1.60
getCommitteeAssignments - req 1 vs - 250000 vc 1.6591 ms/op 1.7073 ms/op 0.97
getCommitteeAssignments - req 100 vs - 250000 vc 3.3642 ms/op 3.5055 ms/op 0.96
getCommitteeAssignments - req 1000 vs - 250000 vc 3.5925 ms/op 3.7508 ms/op 0.96
findModifiedValidators - 10000 modified validators 794.95 ms/op 765.31 ms/op 1.04
findModifiedValidators - 1000 modified validators 451.76 ms/op 436.92 ms/op 1.03
findModifiedValidators - 100 modified validators 317.59 ms/op 311.81 ms/op 1.02
findModifiedValidators - 10 modified validators 220.53 ms/op 168.26 ms/op 1.31
findModifiedValidators - 1 modified validators 246.25 ms/op 181.65 ms/op 1.36
findModifiedValidators - no difference 182.22 ms/op 161.35 ms/op 1.13
migrate state 1500000 validators, 3400 modified, 2000 new 2.9588 s/op 3.0806 s/op 0.96
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 5.4100 ns/op 3.7600 ns/op 1.44
state getBlockRootAtSlot - 250000 vs - 7PWei 405.86 ns/op 377.13 ns/op 1.08
computeProposerIndex 100000 validators 1.3076 ms/op 1.3810 ms/op 0.95
getNextSyncCommitteeIndices 1000 validators 2.7959 ms/op 2.9293 ms/op 0.95
getNextSyncCommitteeIndices 10000 validators 24.473 ms/op 25.820 ms/op 0.95
getNextSyncCommitteeIndices 100000 validators 85.273 ms/op 91.544 ms/op 0.93
computeProposers - vc 250000 537.73 us/op 578.80 us/op 0.93
computeEpochShuffling - vc 250000 38.077 ms/op 42.500 ms/op 0.90
getNextSyncCommittee - vc 250000 9.3012 ms/op 10.012 ms/op 0.93
nodejs block root to RootHex using toHex 87.989 ns/op 113.18 ns/op 0.78
nodejs block root to RootHex using toRootHex 54.484 ns/op 69.415 ns/op 0.78
nodejs fromHex(blob) 739.43 us/op 831.80 us/op 0.89
nodejs fromHexInto(blob) 601.78 us/op 660.95 us/op 0.91
nodejs block root to RootHex using the deprecated toHexString 360.06 ns/op 489.51 ns/op 0.74
nodejs byteArrayEquals 32 bytes (block root) 25.053 ns/op 26.701 ns/op 0.94
nodejs byteArrayEquals 48 bytes (pubkey) 36.095 ns/op 38.563 ns/op 0.94
nodejs byteArrayEquals 96 bytes (signature) 32.594 ns/op 33.916 ns/op 0.96
nodejs byteArrayEquals 1024 bytes 38.572 ns/op 41.668 ns/op 0.93
nodejs byteArrayEquals 131072 bytes (blob) 1.6958 us/op 1.7765 us/op 0.95
browser block root to RootHex using toHex 140.86 ns/op 147.10 ns/op 0.96
browser block root to RootHex using toRootHex 123.55 ns/op 131.63 ns/op 0.94
browser fromHex(blob) 1.5235 ms/op 1.5890 ms/op 0.96
browser fromHexInto(blob) 605.64 us/op 637.06 us/op 0.95
browser block root to RootHex using the deprecated toHexString 463.49 ns/op 336.52 ns/op 1.38
browser byteArrayEquals 32 bytes (block root) 27.001 ns/op 28.235 ns/op 0.96
browser byteArrayEquals 48 bytes (pubkey) 37.774 ns/op 39.826 ns/op 0.95
browser byteArrayEquals 96 bytes (signature) 71.110 ns/op 74.482 ns/op 0.95
browser byteArrayEquals 1024 bytes 723.26 ns/op 762.47 ns/op 0.95
browser byteArrayEquals 131072 bytes (blob) 91.850 us/op 95.930 us/op 0.96

by benchmarkbot/action

@ensi321 ensi321 merged commit 433e692 into unstable Apr 17, 2026
18 of 19 checks passed
@ensi321 ensi321 deleted the nc/revert-regen branch April 17, 2026 23:29
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 17, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 52.53%. Comparing base (2870b59) to head (c484433).
⚠️ Report is 2 commits behind head on unstable.

Additional details and impacted files
@@            Coverage Diff            @@
##           unstable    #9218   +/-   ##
=========================================
  Coverage     52.53%   52.53%           
=========================================
  Files           848      848           
  Lines         61411    61411           
  Branches       4525     4525           
=========================================
  Hits          32262    32262           
  Misses        29084    29084           
  Partials         65       65           
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants