Skip to content

feat: implement non-eip-7688 changes in alpha.12#9606

Draft
ensi321 wants to merge 7 commits into
unstablefrom
nc/alpha.12
Draft

feat: implement non-eip-7688 changes in alpha.12#9606
ensi321 wants to merge 7 commits into
unstablefrom
nc/alpha.12

Conversation

@ensi321

@ensi321 ensi321 commented Jul 7, 2026

Copy link
Copy Markdown
Member

Depends on #9390

…CR rework

Two new alpha.12 electra cases fail: getConfirmedRoot diverges for a slashed
large validator, and the recently-activated-validator empty-slot case hits
INVALID_STATE_ROOT. Lodestar's fast-confirmation rule needs a broader rework;
skip these two until then.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

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

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.

Code Review

This pull request updates the fast confirmation test suite to temporarily skip two failing Electra 'is_one_confirmed' test cases ('is_one_confirmed_fails_large_validator_slashed' and 'is_one_confirmed_fails_recently_activated_validator_voting_in_empty_slot') due to known issues that require a broader overhaul of the fast-confirmation rule (FCR). There are no review comments, so I have no feedback to provide.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

ensi321 and others added 3 commits July 6, 2026 23:22
- PAYLOAD_DUE_BPS 7500 -> 5000 (consensus-specs #5414)
- MIN_BUILDER_WITHDRAWABILITY_DELAY mainnet 8192 -> 64 (consensus-specs
#5426)
- MAX_BUILDER_DEPOSIT_REQUESTS_PER_PAYLOAD 256 -> 64 (consensus-specs
#5420)
- EnvelopesByRange cap uses MAX_REQUEST_PAYLOADS (consensus-specs #5383)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Aligns the builder withdrawal prefix with consensus-specs #5416 (was
0x03)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ethereum/consensus-specs#5429

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Performance Report

🚀🚀 Significant benchmark improvement detected

Benchmark suite Current: 2894801 Previous: 3b6dc7b Ratio
Full columns - reconstruct half of the blobs out of 6 107.89 us/op 15.500 ms/op 0.01
Full benchmark results
Benchmark suite Current: 2894801 Previous: 3b6dc7b Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 940.30 us/op 1.2345 ms/op 0.76
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 40.482 us/op 39.950 us/op 1.01
BLS verify - blst 729.61 us/op 722.81 us/op 1.01
BLS verifyMultipleSignatures 3 - blst 1.3428 ms/op 1.3710 ms/op 0.98
BLS verifyMultipleSignatures 8 - blst 2.1324 ms/op 2.1751 ms/op 0.98
BLS verifyMultipleSignatures 32 - blst 6.7511 ms/op 7.0545 ms/op 0.96
BLS verifyMultipleSignatures 64 - blst 13.097 ms/op 13.488 ms/op 0.97
BLS verifyMultipleSignatures 128 - blst 25.731 ms/op 25.863 ms/op 0.99
BLS deserializing 10000 signatures 650.23 ms/op 654.17 ms/op 0.99
BLS deserializing 100000 signatures 6.3961 s/op 6.5142 s/op 0.98
BLS verifyMultipleSignatures - same message - 3 - blst 710.13 us/op 824.47 us/op 0.86
BLS verifyMultipleSignatures - same message - 8 - blst 888.95 us/op 921.73 us/op 0.96
BLS verifyMultipleSignatures - same message - 32 - blst 1.4606 ms/op 1.5946 ms/op 0.92
BLS verifyMultipleSignatures - same message - 64 - blst 2.3277 ms/op 2.4668 ms/op 0.94
BLS verifyMultipleSignatures - same message - 128 - blst 4.0682 ms/op 4.1596 ms/op 0.98
BLS aggregatePubkeys 32 - blst 17.718 us/op 18.297 us/op 0.97
BLS aggregatePubkeys 128 - blst 63.458 us/op 64.809 us/op 0.98
getSlashingsAndExits - default max 46.262 us/op 54.642 us/op 0.85
getSlashingsAndExits - 2k 356.72 us/op 403.73 us/op 0.88
proposeBlockBody type=full, size=empty 667.73 us/op 663.07 us/op 1.01
isKnown best case - 1 super set check 169.00 ns/op 172.00 ns/op 0.98
isKnown normal case - 2 super set checks 168.00 ns/op 176.00 ns/op 0.95
isKnown worse case - 16 super set checks 164.00 ns/op 164.00 ns/op 1.00
validate api signedAggregateAndProof - struct 1.4952 ms/op 1.5618 ms/op 0.96
validate gossip signedAggregateAndProof - struct 1.4936 ms/op 1.5600 ms/op 0.96
batch validate gossip attestation - vc 640000 - chunk 32 108.47 us/op 111.40 us/op 0.97
batch validate gossip attestation - vc 640000 - chunk 64 96.831 us/op 99.694 us/op 0.97
batch validate gossip attestation - vc 640000 - chunk 128 90.175 us/op 92.467 us/op 0.98
batch validate gossip attestation - vc 640000 - chunk 256 87.984 us/op 84.686 us/op 1.04
bytes32 toHexString 292.00 ns/op 284.00 ns/op 1.03
bytes32 Buffer.toString(hex) 169.00 ns/op 160.00 ns/op 1.06
bytes32 Buffer.toString(hex) from Uint8Array 244.00 ns/op 237.00 ns/op 1.03
bytes32 Buffer.toString(hex) + 0x 172.00 ns/op 165.00 ns/op 1.04
Return object 10000 times 0.21290 ns/op 0.21790 ns/op 0.98
Throw Error 10000 times 3.3014 us/op 3.4854 us/op 0.95
toHex 101.20 ns/op 99.272 ns/op 1.02
Buffer.from 85.756 ns/op 89.844 ns/op 0.95
shared Buffer 58.243 ns/op 61.996 ns/op 0.94
fastMsgIdFn sha256 / 200 bytes 1.4700 us/op 1.5070 us/op 0.98
fastMsgIdFn h32 xxhash / 200 bytes 157.00 ns/op 152.00 ns/op 1.03
fastMsgIdFn h64 xxhash / 200 bytes 215.00 ns/op 206.00 ns/op 1.04
fastMsgIdFn sha256 / 1000 bytes 4.7090 us/op 4.7900 us/op 0.98
fastMsgIdFn h32 xxhash / 1000 bytes 245.00 ns/op 242.00 ns/op 1.01
fastMsgIdFn h64 xxhash / 1000 bytes 256.00 ns/op 253.00 ns/op 1.01
fastMsgIdFn sha256 / 10000 bytes 41.797 us/op 42.517 us/op 0.98
fastMsgIdFn h32 xxhash / 10000 bytes 1.2610 us/op 1.3130 us/op 0.96
fastMsgIdFn h64 xxhash / 10000 bytes 817.00 ns/op 856.00 ns/op 0.95
send data - 1000 256B messages 4.3301 ms/op 4.1536 ms/op 1.04
send data - 1000 512B messages 5.3875 ms/op 5.1670 ms/op 1.04
send data - 1000 1024B messages 5.7205 ms/op 5.7199 ms/op 1.00
send data - 1000 1200B messages 6.5829 ms/op 6.7168 ms/op 0.98
send data - 1000 2048B messages 14.484 ms/op 15.961 ms/op 0.91
send data - 1000 4096B messages 50.613 ms/op 142.51 ms/op 0.36
send data - 1000 16384B messages 284.90 ms/op 291.10 ms/op 0.98
send data - 1000 65536B messages 1.4037 s/op 1.3392 s/op 1.05
enrSubnets - fastDeserialize 64 bits 755.00 ns/op 757.00 ns/op 1.00
enrSubnets - ssz BitVector 64 bits 267.00 ns/op 268.00 ns/op 1.00
enrSubnets - fastDeserialize 4 bits 104.00 ns/op 112.00 ns/op 0.93
enrSubnets - ssz BitVector 4 bits 267.00 ns/op 271.00 ns/op 0.99
prioritizePeers score -10:0 att 32-0.1 sync 2-0 207.87 us/op 205.76 us/op 1.01
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 234.00 us/op 234.05 us/op 1.00
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 345.54 us/op 354.75 us/op 0.97
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 611.71 us/op 645.52 us/op 0.95
prioritizePeers score 0:0 att 64-1 sync 4-1 721.78 us/op 727.66 us/op 0.99
array of 16000 items push then shift 1.2876 us/op 1.3186 us/op 0.98
LinkedList of 16000 items push then shift 8.0310 ns/op 7.2730 ns/op 1.10
array of 16000 items push then pop 79.376 ns/op 72.723 ns/op 1.09
LinkedList of 16000 items push then pop 6.1980 ns/op 6.3660 ns/op 0.97
array of 24000 items push then shift 1.9089 us/op 1.9603 us/op 0.97
LinkedList of 24000 items push then shift 7.5420 ns/op 7.3510 ns/op 1.03
array of 24000 items push then pop 110.65 ns/op 99.123 ns/op 1.12
LinkedList of 24000 items push then pop 6.1240 ns/op 6.1710 ns/op 0.99
intersect bitArray bitLen 8 4.7820 ns/op 4.8970 ns/op 0.98
intersect array and set length 8 29.750 ns/op 29.886 ns/op 1.00
intersect bitArray bitLen 128 24.299 ns/op 24.504 ns/op 0.99
intersect array and set length 128 502.23 ns/op 519.30 ns/op 0.97
bitArray.getTrueBitIndexes() bitLen 128 1.0860 us/op 1.0920 us/op 0.99
bitArray.getTrueBitIndexes() bitLen 248 1.8320 us/op 1.8690 us/op 0.98
bitArray.getTrueBitIndexes() bitLen 512 3.7550 us/op 3.8720 us/op 0.97
Full columns - reconstruct all 6 blobs 152.09 us/op 136.82 us/op 1.11
Full columns - reconstruct half of the blobs out of 6 107.89 us/op 15.500 ms/op 0.01
Full columns - reconstruct single blob out of 6 31.918 us/op 36.373 us/op 0.88
Half columns - reconstruct all 6 blobs 394.10 ms/op 405.11 ms/op 0.97
Half columns - reconstruct half of the blobs out of 6 196.46 ms/op 204.47 ms/op 0.96
Half columns - reconstruct single blob out of 6 70.164 ms/op 74.568 ms/op 0.94
Set add up to 64 items then delete first 1.6853 us/op 1.7190 us/op 0.98
OrderedSet add up to 64 items then delete first 2.5666 us/op 2.6428 us/op 0.97
Set add up to 64 items then delete last 1.8936 us/op 1.9694 us/op 0.96
OrderedSet add up to 64 items then delete last 2.8290 us/op 2.9607 us/op 0.96
Set add up to 64 items then delete middle 1.8825 us/op 1.9815 us/op 0.95
OrderedSet add up to 64 items then delete middle 4.3358 us/op 4.4546 us/op 0.97
Set add up to 128 items then delete first 3.7402 us/op 3.8736 us/op 0.97
OrderedSet add up to 128 items then delete first 5.9751 us/op 5.9645 us/op 1.00
Set add up to 128 items then delete last 3.6140 us/op 3.6796 us/op 0.98
OrderedSet add up to 128 items then delete last 5.5824 us/op 5.4868 us/op 1.02
Set add up to 128 items then delete middle 3.6510 us/op 3.7148 us/op 0.98
OrderedSet add up to 128 items then delete middle 11.732 us/op 11.897 us/op 0.99
Set add up to 256 items then delete first 7.7901 us/op 7.9260 us/op 0.98
OrderedSet add up to 256 items then delete first 12.308 us/op 12.391 us/op 0.99
Set add up to 256 items then delete last 7.1499 us/op 7.7090 us/op 0.93
OrderedSet add up to 256 items then delete last 11.897 us/op 11.418 us/op 1.04
Set add up to 256 items then delete middle 7.6456 us/op 7.3322 us/op 1.04
OrderedSet add up to 256 items then delete middle 34.801 us/op 35.731 us/op 0.97
runFastConfirmationRules vc:100000 bc:96 eq:0 4.4816 ms/op 4.7177 ms/op 0.95
runFastConfirmationRules vc:600000 bc:96 eq:0 35.830 ms/op 36.345 ms/op 0.99
runFastConfirmationRules vc:1000000 bc:96 eq:0 60.166 ms/op 61.919 ms/op 0.97
runFastConfirmationRules vc:600000 bc:320 eq:0 36.348 ms/op 38.433 ms/op 0.95
runFastConfirmationRules vc:100000 bc:96 eq:1000 1.0950 s/op 1.1789 s/op 0.93
pass gossip attestations to forkchoice per slot 2.6077 ms/op 2.6365 ms/op 0.99
forkChoice updateHead vc 100000 bc 64 eq 0 407.51 us/op 432.36 us/op 0.94
forkChoice updateHead vc 600000 bc 64 eq 0 2.4108 ms/op 2.5633 ms/op 0.94
forkChoice updateHead vc 1000000 bc 64 eq 0 4.0406 ms/op 4.2659 ms/op 0.95
forkChoice updateHead vc 600000 bc 320 eq 0 2.4256 ms/op 2.6049 ms/op 0.93
forkChoice updateHead vc 600000 bc 1200 eq 0 2.4819 ms/op 2.6676 ms/op 0.93
forkChoice updateHead vc 600000 bc 7200 eq 0 3.2289 ms/op 3.1173 ms/op 1.04
forkChoice updateHead vc 600000 bc 64 eq 1000 2.3897 ms/op 2.6180 ms/op 0.91
forkChoice updateHead vc 600000 bc 64 eq 10000 2.4320 ms/op 2.7196 ms/op 0.89
forkChoice updateHead vc 600000 bc 64 eq 300000 6.4645 ms/op 6.8751 ms/op 0.94
computeDeltas 1400000 validators 0% inactive 11.757 ms/op 13.325 ms/op 0.88
computeDeltas 1400000 validators 10% inactive 11.136 ms/op 12.572 ms/op 0.89
computeDeltas 1400000 validators 20% inactive 10.412 ms/op 11.754 ms/op 0.89
computeDeltas 1400000 validators 50% inactive 8.6850 ms/op 9.4856 ms/op 0.92
computeDeltas 2100000 validators 0% inactive 17.610 ms/op 21.819 ms/op 0.81
computeDeltas 2100000 validators 10% inactive 22.719 ms/op 19.244 ms/op 1.18
computeDeltas 2100000 validators 20% inactive 16.055 ms/op 17.812 ms/op 0.90
computeDeltas 2100000 validators 50% inactive 10.413 ms/op 14.118 ms/op 0.74
altair processAttestation - 250000 vs - 7PWei normalcase 2.1289 ms/op 1.8749 ms/op 1.14
altair processAttestation - 250000 vs - 7PWei worstcase 3.9442 ms/op 2.5362 ms/op 1.56
altair processAttestation - setStatus - 1/6 committees join 103.21 us/op 100.53 us/op 1.03
altair processAttestation - setStatus - 1/3 committees join 202.83 us/op 198.64 us/op 1.02
altair processAttestation - setStatus - 1/2 committees join 309.87 us/op 273.59 us/op 1.13
altair processAttestation - setStatus - 2/3 committees join 388.48 us/op 372.57 us/op 1.04
altair processAttestation - setStatus - 4/5 committees join 560.53 us/op 532.74 us/op 1.05
altair processAttestation - setStatus - 100% committees join 615.63 us/op 612.89 us/op 1.00
altair processBlock - 250000 vs - 7PWei normalcase 4.6403 ms/op 3.5823 ms/op 1.30
altair processBlock - 250000 vs - 7PWei normalcase hashState 15.068 ms/op 12.465 ms/op 1.21
altair processBlock - 250000 vs - 7PWei worstcase 22.781 ms/op 22.111 ms/op 1.03
altair processBlock - 250000 vs - 7PWei worstcase hashState 43.567 ms/op 40.482 ms/op 1.08
phase0 processBlock - 250000 vs - 7PWei normalcase 1.4468 ms/op 1.3127 ms/op 1.10
phase0 processBlock - 250000 vs - 7PWei worstcase 19.164 ms/op 17.508 ms/op 1.09
altair processEth1Data - 250000 vs - 7PWei normalcase 294.09 us/op 320.64 us/op 0.92
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.7950 us/op 4.6230 us/op 0.82
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 23.852 us/op 21.010 us/op 1.14
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 6.3710 us/op 6.8570 us/op 0.93
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.6120 us/op 4.1580 us/op 0.87
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 90.053 us/op 91.114 us/op 0.99
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.3905 ms/op 1.4791 ms/op 0.94
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.7516 ms/op 1.9496 ms/op 0.90
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.7593 ms/op 1.9323 ms/op 0.91
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 4.4663 ms/op 3.7394 ms/op 1.19
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.0671 ms/op 2.2083 ms/op 0.94
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.0344 ms/op 4.1608 ms/op 0.97
Tree 40 250000 create 318.50 ms/op 315.03 ms/op 1.01
Tree 40 250000 get(125000) 89.702 ns/op 96.710 ns/op 0.93
Tree 40 250000 set(125000) 975.60 ns/op 1.0391 us/op 0.94
Tree 40 250000 toArray() 16.829 ms/op 10.321 ms/op 1.63
Tree 40 250000 iterate all - toArray() + loop 16.926 ms/op 11.575 ms/op 1.46
Tree 40 250000 iterate all - get(i) 38.640 ms/op 36.073 ms/op 1.07
Array 250000 create 2.4232 ms/op 2.3187 ms/op 1.05
Array 250000 clone - spread 741.50 us/op 712.72 us/op 1.04
Array 250000 get(125000) 0.28300 ns/op 0.30700 ns/op 0.92
Array 250000 set(125000) 0.29100 ns/op 0.30500 ns/op 0.95
Array 250000 iterate all - loop 56.052 us/op 58.301 us/op 0.96
phase0 afterProcessEpoch - 250000 vs - 7PWei 38.217 ms/op 38.482 ms/op 0.99
Array.fill - length 1000000 2.1712 ms/op 2.2409 ms/op 0.97
Array push - length 1000000 10.384 ms/op 8.5165 ms/op 1.22
Array.get 0.20623 ns/op 0.20944 ns/op 0.98
Uint8Array.get 0.24459 ns/op 0.24732 ns/op 0.99
phase0 beforeProcessEpoch - 250000 vs - 7PWei 18.074 ms/op 13.406 ms/op 1.35
altair processEpoch - mainnet_e81889 304.61 ms/op 247.31 ms/op 1.23
mainnet_e81889 - altair beforeProcessEpoch 41.352 ms/op 14.906 ms/op 2.77
mainnet_e81889 - altair processJustificationAndFinalization 9.6160 us/op 5.2780 us/op 1.82
mainnet_e81889 - altair processInactivityUpdates 8.4049 ms/op 3.5570 ms/op 2.36
mainnet_e81889 - altair processRewardsAndPenalties 22.945 ms/op 17.574 ms/op 1.31
mainnet_e81889 - altair processRegistryUpdates 603.00 ns/op 530.00 ns/op 1.14
mainnet_e81889 - altair processSlashings 132.00 ns/op 155.00 ns/op 0.85
mainnet_e81889 - altair processEth1DataReset 131.00 ns/op 140.00 ns/op 0.94
mainnet_e81889 - altair processEffectiveBalanceUpdates 8.3058 ms/op 1.6780 ms/op 4.95
mainnet_e81889 - altair processSlashingsReset 993.00 ns/op 707.00 ns/op 1.40
mainnet_e81889 - altair processRandaoMixesReset 1.6480 us/op 1.0780 us/op 1.53
mainnet_e81889 - altair processHistoricalRootsUpdate 129.00 ns/op 148.00 ns/op 0.87
mainnet_e81889 - altair processParticipationFlagUpdates 468.00 ns/op 443.00 ns/op 1.06
mainnet_e81889 - altair processSyncCommitteeUpdates 106.00 ns/op 128.00 ns/op 0.83
mainnet_e81889 - altair afterProcessEpoch 43.538 ms/op 40.670 ms/op 1.07
capella processEpoch - mainnet_e217614 994.89 ms/op 812.33 ms/op 1.22
mainnet_e217614 - capella beforeProcessEpoch 75.822 ms/op 56.781 ms/op 1.34
mainnet_e217614 - capella processJustificationAndFinalization 7.5960 us/op 5.6300 us/op 1.35
mainnet_e217614 - capella processInactivityUpdates 15.447 ms/op 12.190 ms/op 1.27
mainnet_e217614 - capella processRewardsAndPenalties 98.782 ms/op 90.746 ms/op 1.09
mainnet_e217614 - capella processRegistryUpdates 4.4040 us/op 4.5050 us/op 0.98
mainnet_e217614 - capella processSlashings 129.00 ns/op 151.00 ns/op 0.85
mainnet_e217614 - capella processEth1DataReset 122.00 ns/op 146.00 ns/op 0.84
mainnet_e217614 - capella processEffectiveBalanceUpdates 22.221 ms/op 6.1919 ms/op 3.59
mainnet_e217614 - capella processSlashingsReset 700.00 ns/op 695.00 ns/op 1.01
mainnet_e217614 - capella processRandaoMixesReset 1.5220 us/op 1.3560 us/op 1.12
mainnet_e217614 - capella processHistoricalRootsUpdate 125.00 ns/op 143.00 ns/op 0.87
mainnet_e217614 - capella processParticipationFlagUpdates 437.00 ns/op 441.00 ns/op 0.99
mainnet_e217614 - capella afterProcessEpoch 110.02 ms/op 112.36 ms/op 0.98
phase0 processEpoch - mainnet_e58758 371.28 ms/op 242.40 ms/op 1.53
mainnet_e58758 - phase0 beforeProcessEpoch 90.612 ms/op 47.712 ms/op 1.90
mainnet_e58758 - phase0 processJustificationAndFinalization 7.2610 us/op 5.2120 us/op 1.39
mainnet_e58758 - phase0 processRewardsAndPenalties 17.673 ms/op 15.677 ms/op 1.13
mainnet_e58758 - phase0 processRegistryUpdates 2.2670 us/op 2.2300 us/op 1.02
mainnet_e58758 - phase0 processSlashings 124.00 ns/op 150.00 ns/op 0.83
mainnet_e58758 - phase0 processEth1DataReset 124.00 ns/op 346.00 ns/op 0.36
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 818.72 us/op 858.93 us/op 0.95
mainnet_e58758 - phase0 processSlashingsReset 960.00 ns/op 824.00 ns/op 1.17
mainnet_e58758 - phase0 processRandaoMixesReset 1.4310 us/op 1.1150 us/op 1.28
mainnet_e58758 - phase0 processHistoricalRootsUpdate 129.00 ns/op 158.00 ns/op 0.82
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.2230 us/op 1.0240 us/op 1.19
mainnet_e58758 - phase0 afterProcessEpoch 35.270 ms/op 33.198 ms/op 1.06
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.1219 ms/op 1.0935 ms/op 1.03
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.6197 ms/op 1.6189 ms/op 1.00
altair processInactivityUpdates - 250000 normalcase 15.054 ms/op 10.491 ms/op 1.43
altair processInactivityUpdates - 250000 worstcase 15.255 ms/op 10.744 ms/op 1.42
phase0 processRegistryUpdates - 250000 normalcase 2.1560 us/op 2.2750 us/op 0.95
phase0 processRegistryUpdates - 250000 badcase_full_deposits 134.72 us/op 145.33 us/op 0.93
phase0 processRegistryUpdates - 250000 worstcase 0.5 70.694 ms/op 53.440 ms/op 1.32
altair processRewardsAndPenalties - 250000 normalcase 15.810 ms/op 13.249 ms/op 1.19
altair processRewardsAndPenalties - 250000 worstcase 15.453 ms/op 12.985 ms/op 1.19
phase0 getAttestationDeltas - 250000 normalcase 5.4796 ms/op 5.3410 ms/op 1.03
phase0 getAttestationDeltas - 250000 worstcase 7.6744 ms/op 5.3901 ms/op 1.42
phase0 processSlashings - 250000 worstcase 58.469 us/op 59.990 us/op 0.97
altair processSyncCommitteeUpdates - 250000 10.054 ms/op 10.026 ms/op 1.00
BeaconState.hashTreeRoot - No change 163.00 ns/op 185.00 ns/op 0.88
BeaconState.hashTreeRoot - 1 full validator 81.713 us/op 54.473 us/op 1.50
BeaconState.hashTreeRoot - 32 full validator 883.71 us/op 629.19 us/op 1.40
BeaconState.hashTreeRoot - 512 full validator 8.5057 ms/op 5.9755 ms/op 1.42
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 104.54 us/op 69.318 us/op 1.51
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.3704 ms/op 1.0294 ms/op 1.33
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 18.196 ms/op 12.673 ms/op 1.44
BeaconState.hashTreeRoot - 1 balances 77.724 us/op 53.000 us/op 1.47
BeaconState.hashTreeRoot - 32 balances 764.65 us/op 533.83 us/op 1.43
BeaconState.hashTreeRoot - 512 balances 5.9772 ms/op 4.5900 ms/op 1.30
BeaconState.hashTreeRoot - 250000 balances 119.52 ms/op 100.69 ms/op 1.19
aggregationBits - 2048 els - zipIndexesInBitList 19.178 us/op 18.948 us/op 1.01
regular array get 100000 times 22.653 us/op 22.615 us/op 1.00
wrappedArray get 100000 times 22.654 us/op 22.589 us/op 1.00
arrayWithProxy get 100000 times 18.309 ms/op 10.788 ms/op 1.70
ssz.Root.equals 72.185 ns/op 21.351 ns/op 3.38
byteArrayEquals 20.940 ns/op 21.146 ns/op 0.99
Buffer.compare 8.6330 ns/op 8.8700 ns/op 0.97
processSlot - 1 slots 10.144 us/op 7.8780 us/op 1.29
processSlot - 32 slots 2.0356 ms/op 1.5207 ms/op 1.34
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 4.5260 ms/op 2.1573 ms/op 2.10
getCommitteeAssignments - req 1 vs - 250000 vc 1.6261 ms/op 1.6698 ms/op 0.97
getCommitteeAssignments - req 100 vs - 250000 vc 3.3555 ms/op 3.3957 ms/op 0.99
getCommitteeAssignments - req 1000 vs - 250000 vc 3.5851 ms/op 3.6373 ms/op 0.99
findModifiedValidators - 10000 modified validators 750.43 ms/op 733.88 ms/op 1.02
findModifiedValidators - 1000 modified validators 400.77 ms/op 679.81 ms/op 0.59
findModifiedValidators - 100 modified validators 319.06 ms/op 399.71 ms/op 0.80
findModifiedValidators - 10 modified validators 151.29 ms/op 273.93 ms/op 0.55
findModifiedValidators - 1 modified validators 147.75 ms/op 196.90 ms/op 0.75
findModifiedValidators - no difference 138.71 ms/op 184.69 ms/op 0.75
migrate state 1500000 validators, 3400 modified, 2000 new 3.0660 s/op 2.7468 s/op 1.12
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.6200 ns/op 3.7700 ns/op 0.96
state getBlockRootAtSlot - 250000 vs - 7PWei 344.95 ns/op 277.71 ns/op 1.24
computeProposerIndex 100000 validators 1.3191 ms/op 1.3092 ms/op 1.01
getNextSyncCommitteeIndices 1000 validators 2.8035 ms/op 2.8709 ms/op 0.98
getNextSyncCommitteeIndices 10000 validators 24.981 ms/op 25.380 ms/op 0.98
getNextSyncCommitteeIndices 100000 validators 84.357 ms/op 83.828 ms/op 1.01
computeProposers - vc 250000 535.97 us/op 548.57 us/op 0.98
computeEpochShuffling - vc 250000 37.708 ms/op 38.793 ms/op 0.97
getNextSyncCommittee - vc 250000 9.3293 ms/op 9.4605 ms/op 0.99
nodejs block root to RootHex using toHex 93.165 ns/op 101.25 ns/op 0.92
nodejs block root to RootHex using toRootHex 59.786 ns/op 66.512 ns/op 0.90
nodejs fromHex(blob) 746.10 us/op 740.90 us/op 1.01
nodejs fromHexInto(blob) 613.04 us/op 665.84 us/op 0.92
nodejs block root to RootHex using the deprecated toHexString 440.68 ns/op 537.02 ns/op 0.82
nodejs byteArrayEquals 32 bytes (block root) 25.188 ns/op 25.839 ns/op 0.97
nodejs byteArrayEquals 48 bytes (pubkey) 36.789 ns/op 37.345 ns/op 0.99
nodejs byteArrayEquals 96 bytes (signature) 33.639 ns/op 39.779 ns/op 0.85
nodejs byteArrayEquals 1024 bytes 39.071 ns/op 42.572 ns/op 0.92
nodejs byteArrayEquals 131072 bytes (blob) 1.7059 us/op 1.7583 us/op 0.97
browser block root to RootHex using toHex 139.61 ns/op 145.86 ns/op 0.96
browser block root to RootHex using toRootHex 127.27 ns/op 132.29 ns/op 0.96
browser fromHex(blob) 1.5323 ms/op 1.5912 ms/op 0.96
browser fromHexInto(blob) 605.96 us/op 663.11 us/op 0.91
browser block root to RootHex using the deprecated toHexString 313.15 ns/op 368.13 ns/op 0.85
browser byteArrayEquals 32 bytes (block root) 27.206 ns/op 27.969 ns/op 0.97
browser byteArrayEquals 48 bytes (pubkey) 38.017 ns/op 39.419 ns/op 0.96
browser byteArrayEquals 96 bytes (signature) 71.579 ns/op 73.874 ns/op 0.97
browser byteArrayEquals 1024 bytes 731.01 ns/op 753.88 ns/op 0.97
browser byteArrayEquals 131072 bytes (blob) 92.241 us/op 94.863 us/op 0.97

by benchmarkbot/action

ensi321 added a commit that referenced this pull request Jul 7, 2026
ensi321 and others added 3 commits July 7, 2026 08:17
see ethereum/consensus-specs#5439

Builder deposit requests are ignored unless the withdrawal credentials
start with `BUILDER_WITHDRAWAL_PREFIX`. Accepted new builders are
registered with `PAYLOAD_BUILDER_VERSION`.

Checks:
- `pnpm exec biome check
packages/state-transition/src/block/processBuilderDepositRequest.ts
packages/state-transition/test/unit/block/processBuilderDepositRequest.test.ts
packages/state-transition/test/unit/block/processBuilderExitRequest.test.ts`
- `pnpm --filter @lodestar/state-transition check-types`

> This PR was written primarily by Codex.
@ensi321 ensi321 changed the title feat: upgrade to v1.7.0-alpha.12 spec feat: implement non-eip-7688 changes in alpha.12 Jul 16, 2026
ensi321 added a commit that referenced this pull request Jul 16, 2026
Enable the v1.7.0-alpha.12 consensus-spec-tests on the EIP-7688 branch.
With progressive containers in place the gloas ssz_static / state-transition
/ fork-choice suites pass; the remaining failures are all NOT EIP-7688 related
and handled elsewhere:

- ALPHA12-MISC (unskip in #9606): builder-deposit / builder-exit processing and
  the alpha.12 constant bumps (PAYLOAD_DUE_BPS, MIN_BUILDER_WITHDRAWABILITY_DELAY,
  MAX_BUILDER_DEPOSIT_REQUESTS_PER_PAYLOAD) land on the follow-up alpha.12-misc branch.
- FCR rework: gloas fast_confirmation suite + two is_one_confirmed cases.
- cell-level DAS: fulu PartialDataColumnGroupID ssz_static.
- ssz 1.6.2: consolidations-at-limit hits an @chainsafe/ssz@1.6.1 stack overflow
  at mainnet scale (issue #9656); clears when ssz 1.6.2 is synced via unstable.

Also:
- Bump spec-tests-version.json to v1.7.0-alpha.12.
- Re-sync ethspecify specrefs to v1.7.0-alpha.12: drop entries for spec objects
  removed/renamed at alpha.12 (get_dependent_root, get_proposer_dependent_root,
  get_proposer_preferences_signature, is_epoch_boundary, BUILDER_REGISTRY_LIMIT,
  BUILDER_PENDING_WITHDRAWALS_LIMIT), source the new gloas/electra SSZ types,
  gloas p2p size-bound presets, and get_shuffling_dependent_root /
  get_signed_proposer_preferences / is_valid_indexed_attestation / is_not_epoch_boundary,
  and except the unimplemented heze + attestation-upgrade + slot-based gindex helpers.
  `ethspecify check` reports 1144 valid references.
- Fix the ProgressiveTestStruct ssz_generic type: field A is ProgressiveList[byte]
  (a byte list, hex JSON) so it must be ProgressiveByteListType, not
  ProgressiveListBasicType. Fixes all phase0/ssz_generic/containers/ProgressiveTestStruct cases.

Verified green: minimal 55235, mainnet 7185, general 5367, bls 90, config-sync,
params-preset; ethspecify check 1144 valid. lint + check-types clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.

4 participants