refactor: revert dual-state from regen, block production, and metrics#9218
refactor: revert dual-state from regen, block production, and metrics#9218
Conversation
There was a problem hiding this comment.
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.
| // TODO GLOAS: stateRoot is no longer computed during block production. | ||
| // This field will be removed when we implement defer payload processing | ||
| stateRoot: ZERO_HASH, |
There was a problem hiding this comment.
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.
| this.checkpointStateCache.processState(blockRootHex, postState).catch((e) => { | ||
| this.logger.debug("Error processing block state", {blockRootHex, slot: postState.slot}, e); | ||
| }); |
There was a problem hiding this comment.
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.
| 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); | |
| }); |
f314268 to
c484433
Compare
There was a problem hiding this comment.
💡 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, |
There was a problem hiding this comment.
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 👍 / 👎.
|
| 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
Codecov Report✅ All modified and coverable lines are covered by tests. 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:
|
Summary
Depends on #9215
payloadPresentparameter from regen interfaces (addCheckpointState,updatePreComputedCheckpoint,getCheckpointStateOrBytes,getCheckpointStateSync)processPayloadState,upgradeForGloasfromIStateRegeneratorPayloadStatus→payloadPresentconversion logic from regen (queued.ts, regen.ts)UNEXPECTED_PAYLOAD_STATUSandINTERNAL_ERRORregen error codesCheckpointHexPayloadtype andfcCheckpointToHexPayloadhelper — all callers now useCheckpointHexcomputePayloadEnvelopeStateRoot()and removepayloadEnvelopeStateRootfromProduceFullGloastypecomputePayloadEnvelopeStateRootfromStateHashTreeRootSourceenumprocessBlockState→processStateandpostBlockState→postStateto remove dual-state namingReverts #9175
Test plan
pnpm check-typespassespnpm lintpasses🤖 Generated with Claude Code