test: enable is_one_confirmed deposit vectors - #9917
Conversation
The two is_one_confirmed vectors that activate a new validator carry placeholder deposit signatures (bls_setting=2). pyspec stubs bls.Verify to true for those so the deposit is applied; Lodestar verified it for real, skipped addValidatorToRegistry, and the block at the epoch boundary failed with INVALID_STATE_ROOT. Thread dangerouslyAssumeValidDepositSignatures from chain options through the regen and state transition opts down to processPendingDeposits. Defaults to false, only the spec test sets it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
馃挕 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 74e6c3b941
鈩癸笍 About Codex in GitHub
Your team has set up Codex to 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 馃憤.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| block0.message, | ||
| { | ||
| dontTransferCache: false, | ||
| dangerouslyAssumeValidDepositSignatures: opts.dangerouslyAssumeValidDepositSignatures, |
There was a problem hiding this comment.
Propagate the deposit option through block replay
When the parent is in the same epoch and its state has been evicted, StateRegenerator.getPreState() calls getState() without these options; getState() may then replay the epoch-boundary block using stateTransition() without dangerouslyAssumeValidDepositSignatures. For bls_setting=2 vectors whose pending deposit is processed at that boundary, replay rejects the placeholder signature and fails its state-root check, so this option only works while the relevant parent or checkpoint state remains cached. Carry the option into the replay path as well.
Useful? React with 馃憤聽/ 馃憥.
|
| Benchmark suite | Current: 3ab4301 | Previous: aa8303e | Ratio |
|---|---|---|---|
| enrSubnets - fastDeserialize 64 bits | 2.8430 us/op | 757.00 ns/op | 3.76 |
Full benchmark results
| Benchmark suite | Current: 3ab4301 | Previous: aa8303e | Ratio |
|---|---|---|---|
| getPubkeys - native cache - req 1000 vs - 250000 vc | 442.33 us/op | 572.80 us/op | 0.77 |
| getPubkeys - validatorsArr - req 1000 vs - 250000 vc | 41.056 us/op | 39.188 us/op | 1.05 |
| BLS verify - blst | 891.93 us/op | 887.74 us/op | 1.00 |
| BLS verifyMultipleSignatures 3 - blst | 1.4158 ms/op | 1.3494 ms/op | 1.05 |
| BLS verifyMultipleSignatures 8 - blst | 2.2721 ms/op | 2.2600 ms/op | 1.01 |
| BLS verifyMultipleSignatures 32 - blst | 7.5033 ms/op | 7.4684 ms/op | 1.00 |
| BLS verifyMultipleSignatures 64 - blst | 14.394 ms/op | 14.426 ms/op | 1.00 |
| BLS verifyMultipleSignatures 128 - blst | 27.366 ms/op | 26.866 ms/op | 1.02 |
| BLS deserializing 10000 signatures | 637.00 ms/op | 652.05 ms/op | 0.98 |
| BLS deserializing 100000 signatures | 6.5693 s/op | 6.4914 s/op | 1.01 |
| BLS verifyMultipleSignatures - same message - 3 - blst | 991.07 us/op | 965.65 us/op | 1.03 |
| BLS verifyMultipleSignatures - same message - 8 - blst | 1.1316 ms/op | 1.0975 ms/op | 1.03 |
| BLS verifyMultipleSignatures - same message - 32 - blst | 1.7679 ms/op | 1.7308 ms/op | 1.02 |
| BLS verifyMultipleSignatures - same message - 64 - blst | 2.6313 ms/op | 2.5491 ms/op | 1.03 |
| BLS verifyMultipleSignatures - same message - 128 - blst | 4.3481 ms/op | 4.2478 ms/op | 1.02 |
| BLS aggregatePubkeys 32 - blst | 21.015 us/op | 19.570 us/op | 1.07 |
| BLS aggregatePubkeys 128 - blst | 73.651 us/op | 71.143 us/op | 1.04 |
| getSlashingsAndExits - default max | 47.095 us/op | 42.694 us/op | 1.10 |
| getSlashingsAndExits - 2k | 446.78 us/op | 349.90 us/op | 1.28 |
| proposeBlockBody type=full, size=empty | 1.0355 ms/op | 723.28 us/op | 1.43 |
| isKnown best case - 1 super set check | 183.00 ns/op | 172.00 ns/op | 1.06 |
| isKnown normal case - 2 super set checks | 168.00 ns/op | 165.00 ns/op | 1.02 |
| isKnown worse case - 16 super set checks | 169.00 ns/op | 164.00 ns/op | 1.03 |
| validate api signedAggregateAndProof - struct | 1.5869 ms/op | 1.5122 ms/op | 1.05 |
| validate gossip signedAggregateAndProof - struct | 1.5835 ms/op | 1.5039 ms/op | 1.05 |
| batch validate gossip attestation - vc 640000 - chunk 32 | 135.16 us/op | 128.27 us/op | 1.05 |
| batch validate gossip attestation - vc 640000 - chunk 64 | 114.35 us/op | 107.55 us/op | 1.06 |
| batch validate gossip attestation - vc 640000 - chunk 128 | 102.39 us/op | 98.262 us/op | 1.04 |
| batch validate gossip attestation - vc 640000 - chunk 256 | 100.03 us/op | 99.107 us/op | 1.01 |
| bytes32 toHexString | 295.00 ns/op | 293.00 ns/op | 1.01 |
| bytes32 Buffer.toString(hex) | 171.00 ns/op | 175.00 ns/op | 0.98 |
| bytes32 Buffer.toString(hex) from Uint8Array | 239.00 ns/op | 237.00 ns/op | 1.01 |
| bytes32 Buffer.toString(hex) + 0x | 168.00 ns/op | 182.00 ns/op | 0.92 |
| Return object 10000 times | 0.21560 ns/op | 0.22010 ns/op | 0.98 |
| Throw Error 10000 times | 3.4459 us/op | 3.4364 us/op | 1.00 |
| toHex | 106.33 ns/op | 100.58 ns/op | 1.06 |
| Buffer.from | 101.18 ns/op | 87.352 ns/op | 1.16 |
| shared Buffer | 68.855 ns/op | 57.418 ns/op | 1.20 |
| fastMsgIdFn sha256 / 200 bytes | 1.5070 us/op | 1.4940 us/op | 1.01 |
| fastMsgIdFn h32 xxhash / 200 bytes | 155.00 ns/op | 153.00 ns/op | 1.01 |
| fastMsgIdFn h64 xxhash / 200 bytes | 204.00 ns/op | 207.00 ns/op | 0.99 |
| fastMsgIdFn sha256 / 1000 bytes | 4.8280 us/op | 4.7410 us/op | 1.02 |
| fastMsgIdFn h32 xxhash / 1000 bytes | 252.00 ns/op | 243.00 ns/op | 1.04 |
| fastMsgIdFn h64 xxhash / 1000 bytes | 255.00 ns/op | 257.00 ns/op | 0.99 |
| fastMsgIdFn sha256 / 10000 bytes | 44.009 us/op | 42.242 us/op | 1.04 |
| fastMsgIdFn h32 xxhash / 10000 bytes | 1.2990 us/op | 1.2850 us/op | 1.01 |
| fastMsgIdFn h64 xxhash / 10000 bytes | 850.00 ns/op | 837.00 ns/op | 1.02 |
| send data - 1000 256B messages | 4.2617 ms/op | 4.5835 ms/op | 0.93 |
| send data - 1000 512B messages | 5.0877 ms/op | 5.6716 ms/op | 0.90 |
| send data - 1000 1024B messages | 5.2834 ms/op | 6.0179 ms/op | 0.88 |
| send data - 1000 1200B messages | 6.1675 ms/op | 7.3609 ms/op | 0.84 |
| send data - 1000 2048B messages | 11.841 ms/op | 10.980 ms/op | 1.08 |
| send data - 1000 4096B messages | 139.89 ms/op | 93.731 ms/op | 1.49 |
| send data - 1000 16384B messages | 494.16 ms/op | 432.22 ms/op | 1.14 |
| send data - 1000 65536B messages | 2.0674 s/op | 2.4683 s/op | 0.84 |
| enrSubnets - fastDeserialize 64 bits | 2.8430 us/op | 757.00 ns/op | 3.76 |
| enrSubnets - ssz BitVector 64 bits | 263.00 ns/op | 269.00 ns/op | 0.98 |
| enrSubnets - fastDeserialize 4 bits | 100.00 ns/op | 102.00 ns/op | 0.98 |
| enrSubnets - ssz BitVector 4 bits | 265.00 ns/op | 277.00 ns/op | 0.96 |
| prioritizePeers score -10:0 att 32-0.1 sync 2-0 | 209.49 us/op | 212.27 us/op | 0.99 |
| prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 | 234.85 us/op | 242.89 us/op | 0.97 |
| prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 | 350.78 us/op | 354.20 us/op | 0.99 |
| prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 | 601.13 us/op | 627.30 us/op | 0.96 |
| prioritizePeers score 0:0 att 64-1 sync 4-1 | 713.82 us/op | 736.80 us/op | 0.97 |
| array of 16000 items push then shift | 1.3304 us/op | 1.2984 us/op | 1.02 |
| LinkedList of 16000 items push then shift | 6.9270 ns/op | 9.2390 ns/op | 0.75 |
| array of 16000 items push then pop | 78.311 ns/op | 86.625 ns/op | 0.90 |
| LinkedList of 16000 items push then pop | 6.1440 ns/op | 6.8360 ns/op | 0.90 |
| array of 24000 items push then shift | 1.9641 us/op | 1.9283 us/op | 1.02 |
| LinkedList of 24000 items push then shift | 6.4820 ns/op | 8.0870 ns/op | 0.80 |
| array of 24000 items push then pop | 114.58 ns/op | 126.40 ns/op | 0.91 |
| LinkedList of 24000 items push then pop | 6.0330 ns/op | 7.1970 ns/op | 0.84 |
| intersect bitArray bitLen 8 | 3.8950 ns/op | 3.9440 ns/op | 0.99 |
| intersect array and set length 8 | 30.209 ns/op | 30.380 ns/op | 0.99 |
| intersect bitArray bitLen 128 | 23.468 ns/op | 23.633 ns/op | 0.99 |
| intersect array and set length 128 | 511.43 ns/op | 497.19 ns/op | 1.03 |
| bitArray.getTrueBitIndexes() bitLen 128 | 911.00 ns/op | 949.00 ns/op | 0.96 |
| bitArray.getTrueBitIndexes() bitLen 248 | 1.6750 us/op | 1.7210 us/op | 0.97 |
| bitArray.getTrueBitIndexes() bitLen 512 | 3.4530 us/op | 3.6580 us/op | 0.94 |
| Full columns - reconstruct all 6 blobs | 146.85 us/op | 168.97 us/op | 0.87 |
| Full columns - reconstruct half of the blobs out of 6 | 83.960 us/op | 109.15 us/op | 0.77 |
| Full columns - reconstruct single blob out of 6 | 100.27 us/op | 38.839 us/op | 2.58 |
| Half columns - reconstruct all 6 blobs | 418.62 ms/op | 424.52 ms/op | 0.99 |
| Half columns - reconstruct half of the blobs out of 6 | 209.69 ms/op | 215.68 ms/op | 0.97 |
| Half columns - reconstruct single blob out of 6 | 72.726 ms/op | 76.819 ms/op | 0.95 |
| Set add up to 64 items then delete first | 1.7161 us/op | 2.3294 us/op | 0.74 |
| OrderedSet add up to 64 items then delete first | 2.6369 us/op | 3.7056 us/op | 0.71 |
| Set add up to 64 items then delete last | 1.9405 us/op | 2.5518 us/op | 0.76 |
| OrderedSet add up to 64 items then delete last | 2.8523 us/op | 3.5132 us/op | 0.81 |
| Set add up to 64 items then delete middle | 1.9295 us/op | 2.2222 us/op | 0.87 |
| OrderedSet add up to 64 items then delete middle | 4.3341 us/op | 5.0141 us/op | 0.86 |
| Set add up to 128 items then delete first | 4.1415 us/op | 4.5090 us/op | 0.92 |
| OrderedSet add up to 128 items then delete first | 6.2488 us/op | 6.9981 us/op | 0.89 |
| Set add up to 128 items then delete last | 3.8287 us/op | 4.3887 us/op | 0.87 |
| OrderedSet add up to 128 items then delete last | 6.5626 us/op | 6.3261 us/op | 1.04 |
| Set add up to 128 items then delete middle | 3.6920 us/op | 4.4196 us/op | 0.84 |
| OrderedSet add up to 128 items then delete middle | 11.547 us/op | 14.361 us/op | 0.80 |
| Set add up to 256 items then delete first | 8.1066 us/op | 9.9164 us/op | 0.82 |
| OrderedSet add up to 256 items then delete first | 13.059 us/op | 14.075 us/op | 0.93 |
| Set add up to 256 items then delete last | 7.2646 us/op | 7.9337 us/op | 0.92 |
| OrderedSet add up to 256 items then delete last | 11.944 us/op | 11.729 us/op | 1.02 |
| Set add up to 256 items then delete middle | 7.3026 us/op | 9.5845 us/op | 0.76 |
| OrderedSet add up to 256 items then delete middle | 35.890 us/op | 41.405 us/op | 0.87 |
| runFastConfirmationRules vc:100000 bc:96 eq:0 | 4.8008 ms/op | 7.4583 ms/op | 0.64 |
| runFastConfirmationRules vc:600000 bc:96 eq:0 | 37.661 ms/op | 39.985 ms/op | 0.94 |
| runFastConfirmationRules vc:1000000 bc:96 eq:0 | 62.985 ms/op | 74.992 ms/op | 0.84 |
| runFastConfirmationRules vc:600000 bc:320 eq:0 | 38.036 ms/op | 37.939 ms/op | 1.00 |
| runFastConfirmationRules vc:100000 bc:96 eq:1000 | 1.1884 s/op | 1.2242 s/op | 0.97 |
| pass gossip attestations to forkchoice per slot | 2.5621 ms/op | 3.2598 ms/op | 0.79 |
| forkChoice updateHead vc 100000 bc 64 eq 0 | 474.52 us/op | 413.14 us/op | 1.15 |
| forkChoice updateHead vc 600000 bc 64 eq 0 | 2.8317 ms/op | 2.4780 ms/op | 1.14 |
| forkChoice updateHead vc 1000000 bc 64 eq 0 | 4.9579 ms/op | 4.1273 ms/op | 1.20 |
| forkChoice updateHead vc 600000 bc 320 eq 0 | 2.7589 ms/op | 2.4846 ms/op | 1.11 |
| forkChoice updateHead vc 600000 bc 1200 eq 0 | 2.7342 ms/op | 2.5287 ms/op | 1.08 |
| forkChoice updateHead vc 600000 bc 7200 eq 0 | 3.1965 ms/op | 3.6817 ms/op | 0.87 |
| forkChoice updateHead vc 600000 bc 64 eq 1000 | 2.8209 ms/op | 2.4842 ms/op | 1.14 |
| forkChoice updateHead vc 600000 bc 64 eq 10000 | 2.9900 ms/op | 2.5265 ms/op | 1.18 |
| forkChoice updateHead vc 600000 bc 64 eq 300000 | 7.3158 ms/op | 7.1171 ms/op | 1.03 |
| computeDeltas 1400000 validators 0% inactive | 13.957 ms/op | 12.411 ms/op | 1.12 |
| computeDeltas 1400000 validators 10% inactive | 12.762 ms/op | 11.576 ms/op | 1.10 |
| computeDeltas 1400000 validators 20% inactive | 12.007 ms/op | 11.054 ms/op | 1.09 |
| computeDeltas 1400000 validators 50% inactive | 9.6045 ms/op | 8.8712 ms/op | 1.08 |
| computeDeltas 2100000 validators 0% inactive | 19.688 ms/op | 18.568 ms/op | 1.06 |
| computeDeltas 2100000 validators 10% inactive | 18.539 ms/op | 17.890 ms/op | 1.04 |
| computeDeltas 2100000 validators 20% inactive | 17.596 ms/op | 16.443 ms/op | 1.07 |
| computeDeltas 2100000 validators 50% inactive | 14.043 ms/op | 10.780 ms/op | 1.30 |
| altair processAttestation - 250000 vs - 7PWei normalcase | 2.0078 ms/op | 2.6693 ms/op | 0.75 |
| altair processAttestation - 250000 vs - 7PWei worstcase | 2.7470 ms/op | 3.4333 ms/op | 0.80 |
| altair processAttestation - setStatus - 1/6 committees join | 109.60 us/op | 105.55 us/op | 1.04 |
| altair processAttestation - setStatus - 1/3 committees join | 221.32 us/op | 203.47 us/op | 1.09 |
| altair processAttestation - setStatus - 1/2 committees join | 303.76 us/op | 292.85 us/op | 1.04 |
| altair processAttestation - setStatus - 2/3 committees join | 394.42 us/op | 371.06 us/op | 1.06 |
| altair processAttestation - setStatus - 4/5 committees join | 545.67 us/op | 572.44 us/op | 0.95 |
| altair processAttestation - setStatus - 100% committees join | 634.45 us/op | 663.07 us/op | 0.96 |
| altair processBlock - 250000 vs - 7PWei normalcase | 4.3893 ms/op | 5.6285 ms/op | 0.78 |
| altair processBlock - 250000 vs - 7PWei normalcase hashState | 19.614 ms/op | 28.847 ms/op | 0.68 |
| altair processBlock - 250000 vs - 7PWei worstcase | 23.307 ms/op | 27.833 ms/op | 0.84 |
| altair processBlock - 250000 vs - 7PWei worstcase hashState | 51.270 ms/op | 65.196 ms/op | 0.79 |
| phase0 processBlock - 250000 vs - 7PWei normalcase | 1.2868 ms/op | 1.5033 ms/op | 0.86 |
| phase0 processBlock - 250000 vs - 7PWei worstcase | 19.835 ms/op | 21.949 ms/op | 0.90 |
| altair processEth1Data - 250000 vs - 7PWei normalcase | 314.42 us/op | 301.93 us/op | 1.04 |
| getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 | 3.3940 us/op | 3.3340 us/op | 1.02 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 | 20.726 us/op | 20.660 us/op | 1.00 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 | 6.0820 us/op | 6.0830 us/op | 1.00 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 | 3.7560 us/op | 4.7190 us/op | 0.80 |
| getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 | 96.342 us/op | 93.808 us/op | 1.03 |
| getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 | 1.4583 ms/op | 1.4677 ms/op | 0.99 |
| getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 | 1.9327 ms/op | 2.0721 ms/op | 0.93 |
| getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 | 1.9329 ms/op | 1.8836 ms/op | 1.03 |
| getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 | 3.7628 ms/op | 3.7169 ms/op | 1.01 |
| getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 | 2.1596 ms/op | 2.0954 ms/op | 1.03 |
| getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 | 4.0326 ms/op | 3.9089 ms/op | 1.03 |
| Tree 40 250000 create | 328.67 ms/op | 354.70 ms/op | 0.93 |
| Tree 40 250000 get(125000) | 107.20 ns/op | 99.926 ns/op | 1.07 |
| Tree 40 250000 set(125000) | 1.1013 us/op | 1.0556 us/op | 1.04 |
| Tree 40 250000 toArray() | 10.286 ms/op | 11.074 ms/op | 0.93 |
| Tree 40 250000 iterate all - toArray() + loop | 10.141 ms/op | 10.133 ms/op | 1.00 |
| Tree 40 250000 iterate all - get(i) | 34.523 ms/op | 40.852 ms/op | 0.85 |
| Array 250000 create | 2.4516 ms/op | 2.6936 ms/op | 0.91 |
| Array 250000 clone - spread | 781.64 us/op | 827.19 us/op | 0.94 |
| Array 250000 get(125000) | 0.29500 ns/op | 0.30500 ns/op | 0.97 |
| Array 250000 set(125000) | 0.29700 ns/op | 0.30500 ns/op | 0.97 |
| Array 250000 iterate all - loop | 56.984 us/op | 59.482 us/op | 0.96 |
| phase0 afterProcessEpoch - 250000 vs - 7PWei | 72.717 ms/op | 40.817 ms/op | 1.78 |
| Array.fill - length 1000000 | 4.2507 ms/op | 4.2355 ms/op | 1.00 |
| Array push - length 1000000 | 14.201 ms/op | 51.354 ms/op | 0.28 |
| Array.get | 0.20814 ns/op | 0.21112 ns/op | 0.99 |
| Uint8Array.get | 0.27365 ns/op | 0.24329 ns/op | 1.12 |
| phase0 beforeProcessEpoch - 250000 vs - 7PWei | 19.035 ms/op | 19.215 ms/op | 0.99 |
| altair processEpoch - mainnet_e81889 | 203.27 ms/op | 296.23 ms/op | 0.69 |
| mainnet_e81889 - altair beforeProcessEpoch | 62.651 ms/op | 42.553 ms/op | 1.47 |
| mainnet_e81889 - altair processJustificationAndFinalization | 4.4290 us/op | 6.2510 us/op | 0.71 |
| mainnet_e81889 - altair processInactivityUpdates | 3.7155 ms/op | 7.4968 ms/op | 0.50 |
| mainnet_e81889 - altair processRewardsAndPenalties | 17.963 ms/op | 19.961 ms/op | 0.90 |
| mainnet_e81889 - altair processRegistryUpdates | 581.00 ns/op | 598.00 ns/op | 0.97 |
| mainnet_e81889 - altair processSlashings | 148.00 ns/op | 156.00 ns/op | 0.95 |
| mainnet_e81889 - altair processEth1DataReset | 148.00 ns/op | 149.00 ns/op | 0.99 |
| mainnet_e81889 - altair processEffectiveBalanceUpdates | 1.7476 ms/op | 8.2046 ms/op | 0.21 |
| mainnet_e81889 - altair processSlashingsReset | 731.00 ns/op | 739.00 ns/op | 0.99 |
| mainnet_e81889 - altair processRandaoMixesReset | 932.00 ns/op | 1.1400 us/op | 0.82 |
| mainnet_e81889 - altair processHistoricalRootsUpdate | 147.00 ns/op | 157.00 ns/op | 0.94 |
| mainnet_e81889 - altair processParticipationFlagUpdates | 454.00 ns/op | 485.00 ns/op | 0.94 |
| mainnet_e81889 - altair processSyncCommitteeUpdates | 117.00 ns/op | 131.00 ns/op | 0.89 |
| mainnet_e81889 - altair afterProcessEpoch | 42.340 ms/op | 42.490 ms/op | 1.00 |
| capella processEpoch - mainnet_e217614 | 636.53 ms/op | 863.27 ms/op | 0.74 |
| mainnet_e217614 - capella beforeProcessEpoch | 70.284 ms/op | 58.641 ms/op | 1.20 |
| mainnet_e217614 - capella processJustificationAndFinalization | 4.5570 us/op | 5.1790 us/op | 0.88 |
| mainnet_e217614 - capella processInactivityUpdates | 11.941 ms/op | 13.541 ms/op | 0.88 |
| mainnet_e217614 - capella processRewardsAndPenalties | 96.509 ms/op | 101.37 ms/op | 0.95 |
| mainnet_e217614 - capella processRegistryUpdates | 4.5640 us/op | 4.7660 us/op | 0.96 |
| mainnet_e217614 - capella processSlashings | 149.00 ns/op | 155.00 ns/op | 0.96 |
| mainnet_e217614 - capella processEth1DataReset | 145.00 ns/op | 152.00 ns/op | 0.95 |
| mainnet_e217614 - capella processEffectiveBalanceUpdates | 11.945 ms/op | 20.504 ms/op | 0.58 |
| mainnet_e217614 - capella processSlashingsReset | 715.00 ns/op | 719.00 ns/op | 0.99 |
| mainnet_e217614 - capella processRandaoMixesReset | 963.00 ns/op | 1.1140 us/op | 0.86 |
| mainnet_e217614 - capella processHistoricalRootsUpdate | 145.00 ns/op | 156.00 ns/op | 0.93 |
| mainnet_e217614 - capella processParticipationFlagUpdates | 463.00 ns/op | 478.00 ns/op | 0.97 |
| mainnet_e217614 - capella afterProcessEpoch | 106.27 ms/op | 112.22 ms/op | 0.95 |
| phase0 processEpoch - mainnet_e58758 | 186.84 ms/op | 268.78 ms/op | 0.70 |
| mainnet_e58758 - phase0 beforeProcessEpoch | 39.870 ms/op | 54.934 ms/op | 0.73 |
| mainnet_e58758 - phase0 processJustificationAndFinalization | 4.4100 us/op | 5.4690 us/op | 0.81 |
| mainnet_e58758 - phase0 processRewardsAndPenalties | 16.293 ms/op | 17.072 ms/op | 0.95 |
| mainnet_e58758 - phase0 processRegistryUpdates | 2.2870 us/op | 2.4360 us/op | 0.94 |
| mainnet_e58758 - phase0 processSlashings | 143.00 ns/op | 157.00 ns/op | 0.91 |
| mainnet_e58758 - phase0 processEth1DataReset | 279.00 ns/op | 155.00 ns/op | 1.80 |
| mainnet_e58758 - phase0 processEffectiveBalanceUpdates | 871.11 us/op | 962.56 us/op | 0.90 |
| mainnet_e58758 - phase0 processSlashingsReset | 861.00 ns/op | 959.00 ns/op | 0.90 |
| mainnet_e58758 - phase0 processRandaoMixesReset | 967.00 ns/op | 1.0780 us/op | 0.90 |
| mainnet_e58758 - phase0 processHistoricalRootsUpdate | 147.00 ns/op | 156.00 ns/op | 0.94 |
| mainnet_e58758 - phase0 processParticipationRecordUpdates | 948.00 ns/op | 1.0550 us/op | 0.90 |
| mainnet_e58758 - phase0 afterProcessEpoch | 33.196 ms/op | 36.326 ms/op | 0.91 |
| phase0 processEffectiveBalanceUpdates - 250000 normalcase | 1.0110 ms/op | 1.4024 ms/op | 0.72 |
| phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 | 1.2378 ms/op | 1.6846 ms/op | 0.73 |
| altair processInactivityUpdates - 250000 normalcase | 10.740 ms/op | 11.225 ms/op | 0.96 |
| altair processInactivityUpdates - 250000 worstcase | 10.689 ms/op | 11.243 ms/op | 0.95 |
| phase0 processRegistryUpdates - 250000 normalcase | 2.4310 us/op | 2.3940 us/op | 1.02 |
| phase0 processRegistryUpdates - 250000 badcase_full_deposits | 147.53 us/op | 151.00 us/op | 0.98 |
| phase0 processRegistryUpdates - 250000 worstcase 0.5 | 67.029 ms/op | 67.679 ms/op | 0.99 |
| altair processRewardsAndPenalties - 250000 normalcase | 14.827 ms/op | 15.757 ms/op | 0.94 |
| altair processRewardsAndPenalties - 250000 worstcase | 14.406 ms/op | 15.603 ms/op | 0.92 |
| phase0 getAttestationDeltas - 250000 normalcase | 6.1108 ms/op | 5.9537 ms/op | 1.03 |
| phase0 getAttestationDeltas - 250000 worstcase | 5.7056 ms/op | 9.0427 ms/op | 0.63 |
| phase0 processSlashings - 250000 worstcase | 61.480 us/op | 67.470 us/op | 0.91 |
| altair processSyncCommitteeUpdates - 250000 | 9.9556 ms/op | 14.224 ms/op | 0.70 |
| BeaconState.hashTreeRoot - No change | 177.00 ns/op | 189.00 ns/op | 0.94 |
| BeaconState.hashTreeRoot - 1 full validator | 59.789 us/op | 100.06 us/op | 0.60 |
| BeaconState.hashTreeRoot - 32 full validator | 658.08 us/op | 1.1916 ms/op | 0.55 |
| BeaconState.hashTreeRoot - 512 full validator | 6.3838 ms/op | 13.326 ms/op | 0.48 |
| BeaconState.hashTreeRoot - 1 validator.effectiveBalance | 72.736 us/op | 132.64 us/op | 0.55 |
| BeaconState.hashTreeRoot - 32 validator.effectiveBalance | 1.1392 ms/op | 2.0825 ms/op | 0.55 |
| BeaconState.hashTreeRoot - 512 validator.effectiveBalance | 13.720 ms/op | 17.900 ms/op | 0.77 |
| BeaconState.hashTreeRoot - 1 balances | 60.919 us/op | 111.06 us/op | 0.55 |
| BeaconState.hashTreeRoot - 32 balances | 566.01 us/op | 1.0864 ms/op | 0.52 |
| BeaconState.hashTreeRoot - 512 balances | 4.8646 ms/op | 7.9486 ms/op | 0.61 |
| BeaconState.hashTreeRoot - 250000 balances | 99.064 ms/op | 215.07 ms/op | 0.46 |
| aggregationBits - 2048 els - zipIndexesInBitList | 19.914 us/op | 20.722 us/op | 0.96 |
| regular array get 100000 times | 22.736 us/op | 23.243 us/op | 0.98 |
| wrappedArray get 100000 times | 22.689 us/op | 23.307 us/op | 0.97 |
| arrayWithProxy get 100000 times | 10.436 ms/op | 10.117 ms/op | 1.03 |
| ssz.Root.equals | 21.528 ns/op | 21.830 ns/op | 0.99 |
| byteArrayEquals | 21.342 ns/op | 21.632 ns/op | 0.99 |
| Buffer.compare | 9.4870 ns/op | 14.256 ns/op | 0.67 |
| processSlot - 1 slots | 8.2310 us/op | 12.072 us/op | 0.68 |
| processSlot - 32 slots | 1.5669 ms/op | 3.3730 ms/op | 0.46 |
| getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei | 3.6427 ms/op | 8.6024 ms/op | 0.42 |
| getCommitteeAssignments - req 1 vs - 250000 vc | 1.6966 ms/op | 1.7395 ms/op | 0.98 |
| getCommitteeAssignments - req 100 vs - 250000 vc | 3.4354 ms/op | 3.5427 ms/op | 0.97 |
| getCommitteeAssignments - req 1000 vs - 250000 vc | 3.7040 ms/op | 3.8751 ms/op | 0.96 |
| findModifiedValidators - 10000 modified validators | 759.75 ms/op | 927.66 ms/op | 0.82 |
| findModifiedValidators - 1000 modified validators | 630.15 ms/op | 790.41 ms/op | 0.80 |
| findModifiedValidators - 100 modified validators | 403.28 ms/op | 492.40 ms/op | 0.82 |
| findModifiedValidators - 10 modified validators | 354.41 ms/op | 361.16 ms/op | 0.98 |
| findModifiedValidators - 1 modified validators | 306.35 ms/op | 318.73 ms/op | 0.96 |
| findModifiedValidators - no difference | 232.18 ms/op | 272.00 ms/op | 0.85 |
| migrate state 1500000 validators, 3400 modified, 2000 new | 3.3485 s/op | 3.7385 s/op | 0.90 |
| RootCache.getBlockRootAtSlot - 250000 vs - 7PWei | 3.6000 ns/op | 3.5200 ns/op | 1.02 |
| state getBlockRootAtSlot - 250000 vs - 7PWei | 434.63 ns/op | 497.83 ns/op | 0.87 |
| computeProposerIndex 100000 validators | 1.4504 ms/op | 1.4316 ms/op | 1.01 |
| getNextSyncCommitteeIndices 1000 validators | 3.0158 ms/op | 3.0372 ms/op | 0.99 |
| getNextSyncCommitteeIndices 10000 validators | 26.970 ms/op | 27.408 ms/op | 0.98 |
| getNextSyncCommitteeIndices 100000 validators | 96.641 ms/op | 94.449 ms/op | 1.02 |
| computeProposers - vc 250000 | 606.65 us/op | 598.04 us/op | 1.01 |
| computeEpochShuffling - vc 250000 | 41.758 ms/op | 41.155 ms/op | 1.01 |
| getNextSyncCommittee - vc 250000 | 10.527 ms/op | 9.8714 ms/op | 1.07 |
| nodejs block root to RootHex using toHex | 101.91 ns/op | 101.66 ns/op | 1.00 |
| nodejs block root to RootHex using toRootHex | 66.585 ns/op | 65.559 ns/op | 1.02 |
| nodejs fromHex(blob) | 980.35 us/op | 1.0148 ms/op | 0.97 |
| nodejs fromHexInto(blob) | 675.28 us/op | 659.08 us/op | 1.02 |
| nodejs block root to RootHex using the deprecated toHexString | 607.80 ns/op | 618.61 ns/op | 0.98 |
| nodejs byteArrayEquals 32 bytes (block root) | 26.635 ns/op | 27.365 ns/op | 0.97 |
| nodejs byteArrayEquals 48 bytes (pubkey) | 38.435 ns/op | 39.307 ns/op | 0.98 |
| nodejs byteArrayEquals 96 bytes (signature) | 38.907 ns/op | 37.596 ns/op | 1.03 |
| nodejs byteArrayEquals 1024 bytes | 45.366 ns/op | 44.924 ns/op | 1.01 |
| nodejs byteArrayEquals 131072 bytes (blob) | 1.7879 us/op | 1.8467 us/op | 0.97 |
| browser block root to RootHex using toHex | 149.72 ns/op | 150.56 ns/op | 0.99 |
| browser block root to RootHex using toRootHex | 134.95 ns/op | 135.56 ns/op | 1.00 |
| browser fromHex(blob) | 1.9475 ms/op | 2.0623 ms/op | 0.94 |
| browser fromHexInto(blob) | 678.75 us/op | 655.39 us/op | 1.04 |
| browser block root to RootHex using the deprecated toHexString | 438.30 ns/op | 430.52 ns/op | 1.02 |
| browser byteArrayEquals 32 bytes (block root) | 28.620 ns/op | 28.935 ns/op | 0.99 |
| browser byteArrayEquals 48 bytes (pubkey) | 40.448 ns/op | 40.598 ns/op | 1.00 |
| browser byteArrayEquals 96 bytes (signature) | 75.362 ns/op | 75.896 ns/op | 0.99 |
| browser byteArrayEquals 1024 bytes | 770.03 ns/op | 771.38 ns/op | 1.00 |
| browser byteArrayEquals 131072 bytes (blob) | 96.846 us/op | 96.966 us/op | 1.00 |
by benchmarkbot/action
getState() replays blocks with stateTransition() and then checks the resulting state root itself, so a replay crossing an epoch boundary that applies a bls_setting=2 pending deposit would fail with REGEN_ERROR_INVALID_STATE_ROOT. Without this the option only worked while the parent or checkpoint state stayed cached. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
@nflaig Other simpler approach would be to have a utility function with module level variable. let validateDepositSignatures = true;
function dangerouslyDisableDepositSignaturesValidation () {
validateDepositSignatures = false;
}
function validateDepositSignatures() {
return validateDepositSignatures;
}This will remove all plumbing code, once called in the tests and once in the actual validation path. What do you think? |
Motivation
Two
is_one_confirmedfast_confirmation vectors were skipped. They carry placeholder deposit signatures (bls_setting=2), which pyspec treats as valid; Lodestar verified them for real, skippedaddValidatorToRegistry, and the block at the epoch boundary failed withINVALID_STATE_ROOT.Description
dangerouslyAssumeValidDepositSignaturestoEpochTransitionCacheOpts, carried onEpochTransitionCacheand read inprocessPendingDepositsBlockProcessOptsthroughregen.getPreStateandstateTransition; defaults tofalse, onlyfast_confirmation.test.tssets itshouldSkipentriesfast_confirmationspec tests: 1436 passed, 0 skipped (was 1428 + 8 skipped);pnpm check-typesandpnpm lintclean.AI disclosure: written with Claude Code.
馃 Generated with Claude Code