Skip to content

feat: glamsterdam-devnet-7 - #9587

Closed
ensi321 wants to merge 25 commits into
unstablefrom
glamsterdam-devnet-7
Closed

feat: glamsterdam-devnet-7#9587
ensi321 wants to merge 25 commits into
unstablefrom
glamsterdam-devnet-7

Conversation

@ensi321

@ensi321 ensi321 commented Jul 4, 2026

Copy link
Copy Markdown
Member

No description provided.

@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 upgrades the @chainsafe/ssz and @chainsafe/persistent-merkle-tree dependencies to integrate EIP-7688 progressive containers and lists for the Gloas fork. It refactors various SSZ types, state transition operations, and light-client components to use these progressive types and their corresponding generalized indices. Additionally, it enhances the robustness of range sync and payload envelope processing during periods of poor chain liveness by preventing deadlocks on empty epochs and deduplicating in-flight imports. As there are no review comments, 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.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 1665166 Previous: 2e78647 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 855.91 us/op 978.24 us/op 0.87
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 39.658 us/op 42.137 us/op 0.94
BLS verify - blst 712.88 us/op 680.79 us/op 1.05
BLS verifyMultipleSignatures 3 - blst 1.3873 ms/op 1.4225 ms/op 0.98
BLS verifyMultipleSignatures 8 - blst 2.2208 ms/op 2.2357 ms/op 0.99
BLS verifyMultipleSignatures 32 - blst 6.9054 ms/op 7.1271 ms/op 0.97
BLS verifyMultipleSignatures 64 - blst 13.285 ms/op 13.944 ms/op 0.95
BLS verifyMultipleSignatures 128 - blst 25.816 ms/op 26.622 ms/op 0.97
BLS deserializing 10000 signatures 625.40 ms/op 662.52 ms/op 0.94
BLS deserializing 100000 signatures 6.4134 s/op 6.6248 s/op 0.97
BLS verifyMultipleSignatures - same message - 3 - blst 800.74 us/op 805.10 us/op 0.99
BLS verifyMultipleSignatures - same message - 8 - blst 880.23 us/op 962.10 us/op 0.91
BLS verifyMultipleSignatures - same message - 32 - blst 1.5460 ms/op 1.4968 ms/op 1.03
BLS verifyMultipleSignatures - same message - 64 - blst 2.4001 ms/op 2.3647 ms/op 1.01
BLS verifyMultipleSignatures - same message - 128 - blst 4.0339 ms/op 4.2184 ms/op 0.96
BLS aggregatePubkeys 32 - blst 17.775 us/op 18.266 us/op 0.97
BLS aggregatePubkeys 128 - blst 63.817 us/op 65.210 us/op 0.98
getSlashingsAndExits - default max 49.818 us/op 50.541 us/op 0.99
getSlashingsAndExits - 2k 354.31 us/op 375.35 us/op 0.94
proposeBlockBody type=full, size=empty 608.91 us/op 647.19 us/op 0.94
isKnown best case - 1 super set check 175.00 ns/op 171.00 ns/op 1.02
isKnown normal case - 2 super set checks 164.00 ns/op 167.00 ns/op 0.98
isKnown worse case - 16 super set checks 164.00 ns/op 165.00 ns/op 0.99
validate api signedAggregateAndProof - struct 1.5486 ms/op 1.5281 ms/op 1.01
validate gossip signedAggregateAndProof - struct 1.5447 ms/op 1.5295 ms/op 1.01
batch validate gossip attestation - vc 640000 - chunk 32 105.89 us/op 106.73 us/op 0.99
batch validate gossip attestation - vc 640000 - chunk 64 93.007 us/op 94.815 us/op 0.98
batch validate gossip attestation - vc 640000 - chunk 128 88.490 us/op 90.795 us/op 0.97
batch validate gossip attestation - vc 640000 - chunk 256 85.429 us/op 86.420 us/op 0.99
bytes32 toHexString 278.00 ns/op 282.00 ns/op 0.99
bytes32 Buffer.toString(hex) 158.00 ns/op 175.00 ns/op 0.90
bytes32 Buffer.toString(hex) from Uint8Array 217.00 ns/op 252.00 ns/op 0.86
bytes32 Buffer.toString(hex) + 0x 162.00 ns/op 175.00 ns/op 0.93
Return object 10000 times 0.21440 ns/op 0.21450 ns/op 1.00
Throw Error 10000 times 3.4517 us/op 3.3881 us/op 1.02
toHex 96.573 ns/op 111.23 ns/op 0.87
Buffer.from 88.231 ns/op 97.202 ns/op 0.91
shared Buffer 64.488 ns/op 63.651 ns/op 1.01
fastMsgIdFn sha256 / 200 bytes 1.4810 us/op 1.4910 us/op 0.99
fastMsgIdFn h32 xxhash / 200 bytes 152.00 ns/op 153.00 ns/op 0.99
fastMsgIdFn h64 xxhash / 200 bytes 196.00 ns/op 211.00 ns/op 0.93
fastMsgIdFn sha256 / 1000 bytes 4.7370 us/op 4.8180 us/op 0.98
fastMsgIdFn h32 xxhash / 1000 bytes 244.00 ns/op 245.00 ns/op 1.00
fastMsgIdFn h64 xxhash / 1000 bytes 244.00 ns/op 259.00 ns/op 0.94
fastMsgIdFn sha256 / 10000 bytes 40.787 us/op 42.323 us/op 0.96
fastMsgIdFn h32 xxhash / 10000 bytes 1.2490 us/op 1.2750 us/op 0.98
fastMsgIdFn h64 xxhash / 10000 bytes 797.00 ns/op 839.00 ns/op 0.95
send data - 1000 256B messages 4.3585 ms/op 4.7221 ms/op 0.92
send data - 1000 512B messages 5.4232 ms/op 5.2628 ms/op 1.03
send data - 1000 1024B messages 6.0839 ms/op 5.6094 ms/op 1.08
send data - 1000 1200B messages 6.7820 ms/op 6.2860 ms/op 1.08
send data - 1000 2048B messages 44.069 ms/op 15.070 ms/op 2.92
send data - 1000 4096B messages 96.872 ms/op 48.128 ms/op 2.01
send data - 1000 16384B messages 394.50 ms/op 216.95 ms/op 1.82
send data - 1000 65536B messages 1.5044 s/op 1.3525 s/op 1.11
enrSubnets - fastDeserialize 64 bits 772.00 ns/op 783.00 ns/op 0.99
enrSubnets - ssz BitVector 64 bits 277.00 ns/op 270.00 ns/op 1.03
enrSubnets - fastDeserialize 4 bits 101.00 ns/op 106.00 ns/op 0.95
enrSubnets - ssz BitVector 4 bits 275.00 ns/op 270.00 ns/op 1.02
prioritizePeers score -10:0 att 32-0.1 sync 2-0 209.03 us/op 206.66 us/op 1.01
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 232.08 us/op 237.68 us/op 0.98
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 337.98 us/op 345.90 us/op 0.98
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 634.59 us/op 611.50 us/op 1.04
prioritizePeers score 0:0 att 64-1 sync 4-1 807.11 us/op 705.30 us/op 1.14
array of 16000 items push then shift 1.3120 us/op 1.3107 us/op 1.00
LinkedList of 16000 items push then shift 7.3260 ns/op 7.0080 ns/op 1.05
array of 16000 items push then pop 68.488 ns/op 68.972 ns/op 0.99
LinkedList of 16000 items push then pop 6.1480 ns/op 6.0300 ns/op 1.02
array of 24000 items push then shift 1.9222 us/op 1.9934 us/op 0.96
LinkedList of 24000 items push then shift 6.5980 ns/op 6.8720 ns/op 0.96
array of 24000 items push then pop 97.461 ns/op 100.96 ns/op 0.97
LinkedList of 24000 items push then pop 6.1630 ns/op 6.0970 ns/op 1.01
intersect bitArray bitLen 8 4.7800 ns/op 4.8250 ns/op 0.99
intersect array and set length 8 30.347 ns/op 29.761 ns/op 1.02
intersect bitArray bitLen 128 24.210 ns/op 24.359 ns/op 0.99
intersect array and set length 128 504.41 ns/op 502.75 ns/op 1.00
bitArray.getTrueBitIndexes() bitLen 128 929.00 ns/op 1.0670 us/op 0.87
bitArray.getTrueBitIndexes() bitLen 248 1.6700 us/op 1.8140 us/op 0.92
bitArray.getTrueBitIndexes() bitLen 512 3.4940 us/op 3.7330 us/op 0.94
Full columns - reconstruct all 6 blobs 113.92 us/op 152.95 us/op 0.74
Full columns - reconstruct half of the blobs out of 6 165.24 us/op 92.801 us/op 1.78
Full columns - reconstruct single blob out of 6 34.172 us/op 36.586 us/op 0.93
Half columns - reconstruct all 6 blobs 397.73 ms/op 392.30 ms/op 1.01
Half columns - reconstruct half of the blobs out of 6 202.21 ms/op 201.42 ms/op 1.00
Half columns - reconstruct single blob out of 6 72.791 ms/op 69.228 ms/op 1.05
Set add up to 64 items then delete first 1.5634 us/op 1.7008 us/op 0.92
OrderedSet add up to 64 items then delete first 2.4727 us/op 2.5950 us/op 0.95
Set add up to 64 items then delete last 1.8332 us/op 2.0107 us/op 0.91
OrderedSet add up to 64 items then delete last 2.7455 us/op 2.9978 us/op 0.92
Set add up to 64 items then delete middle 1.8445 us/op 1.9583 us/op 0.94
OrderedSet add up to 64 items then delete middle 4.1915 us/op 4.5796 us/op 0.92
Set add up to 128 items then delete first 3.6463 us/op 3.8155 us/op 0.96
OrderedSet add up to 128 items then delete first 5.6610 us/op 5.7512 us/op 0.98
Set add up to 128 items then delete last 3.5275 us/op 3.8222 us/op 0.92
OrderedSet add up to 128 items then delete last 5.2971 us/op 6.0359 us/op 0.88
Set add up to 128 items then delete middle 3.4505 us/op 3.9141 us/op 0.88
OrderedSet add up to 128 items then delete middle 11.292 us/op 12.402 us/op 0.91
Set add up to 256 items then delete first 7.7935 us/op 7.6544 us/op 1.02
OrderedSet add up to 256 items then delete first 12.107 us/op 11.533 us/op 1.05
Set add up to 256 items then delete last 7.9024 us/op 7.5830 us/op 1.04
OrderedSet add up to 256 items then delete last 11.636 us/op 12.026 us/op 0.97
Set add up to 256 items then delete middle 7.4131 us/op 7.4175 us/op 1.00
OrderedSet add up to 256 items then delete middle 35.147 us/op 36.153 us/op 0.97
runFastConfirmationRules vc:100000 bc:96 eq:0 5.1876 ms/op 4.5628 ms/op 1.14
runFastConfirmationRules vc:600000 bc:96 eq:0 37.204 ms/op 38.174 ms/op 0.97
runFastConfirmationRules vc:1000000 bc:96 eq:0 61.843 ms/op 61.878 ms/op 1.00
runFastConfirmationRules vc:600000 bc:320 eq:0 37.905 ms/op 38.103 ms/op 0.99
runFastConfirmationRules vc:100000 bc:96 eq:1000 1.1382 s/op 1.3070 s/op 0.87
pass gossip attestations to forkchoice per slot 2.5985 ms/op 2.7433 ms/op 0.95
forkChoice updateHead vc 100000 bc 64 eq 0 399.63 us/op 427.10 us/op 0.94
forkChoice updateHead vc 600000 bc 64 eq 0 2.4563 ms/op 2.5073 ms/op 0.98
forkChoice updateHead vc 1000000 bc 64 eq 0 3.9582 ms/op 4.3270 ms/op 0.91
forkChoice updateHead vc 600000 bc 320 eq 0 2.3948 ms/op 2.7619 ms/op 0.87
forkChoice updateHead vc 600000 bc 1200 eq 0 2.5249 ms/op 2.6204 ms/op 0.96
forkChoice updateHead vc 600000 bc 7200 eq 0 3.3526 ms/op 3.4396 ms/op 0.97
forkChoice updateHead vc 600000 bc 64 eq 1000 2.4085 ms/op 2.5657 ms/op 0.94
forkChoice updateHead vc 600000 bc 64 eq 10000 2.5202 ms/op 2.6344 ms/op 0.96
forkChoice updateHead vc 600000 bc 64 eq 300000 6.5096 ms/op 6.6695 ms/op 0.98
computeDeltas 1400000 validators 0% inactive 12.178 ms/op 12.527 ms/op 0.97
computeDeltas 1400000 validators 10% inactive 11.682 ms/op 11.855 ms/op 0.99
computeDeltas 1400000 validators 20% inactive 10.854 ms/op 11.141 ms/op 0.97
computeDeltas 1400000 validators 50% inactive 8.7942 ms/op 9.1957 ms/op 0.96
computeDeltas 2100000 validators 0% inactive 18.228 ms/op 18.906 ms/op 0.96
computeDeltas 2100000 validators 10% inactive 17.195 ms/op 17.716 ms/op 0.97
computeDeltas 2100000 validators 20% inactive 16.594 ms/op 16.662 ms/op 1.00
computeDeltas 2100000 validators 50% inactive 10.841 ms/op 11.117 ms/op 0.98
altair processAttestation - 250000 vs - 7PWei normalcase 2.4213 ms/op 2.0237 ms/op 1.20
altair processAttestation - 250000 vs - 7PWei worstcase 2.4789 ms/op 3.1843 ms/op 0.78
altair processAttestation - setStatus - 1/6 committees join 109.35 us/op 105.58 us/op 1.04
altair processAttestation - setStatus - 1/3 committees join 208.49 us/op 205.07 us/op 1.02
altair processAttestation - setStatus - 1/2 committees join 292.94 us/op 288.75 us/op 1.01
altair processAttestation - setStatus - 2/3 committees join 370.59 us/op 372.32 us/op 1.00
altair processAttestation - setStatus - 4/5 committees join 511.91 us/op 526.52 us/op 0.97
altair processAttestation - setStatus - 100% committees join 617.34 us/op 613.54 us/op 1.01
altair processBlock - 250000 vs - 7PWei normalcase 3.1662 ms/op 4.3069 ms/op 0.74
altair processBlock - 250000 vs - 7PWei normalcase hashState 15.515 ms/op 16.625 ms/op 0.93
altair processBlock - 250000 vs - 7PWei worstcase 22.929 ms/op 22.512 ms/op 1.02
altair processBlock - 250000 vs - 7PWei worstcase hashState 47.506 ms/op 42.705 ms/op 1.11
phase0 processBlock - 250000 vs - 7PWei normalcase 1.5334 ms/op 1.4593 ms/op 1.05
phase0 processBlock - 250000 vs - 7PWei worstcase 18.611 ms/op 17.411 ms/op 1.07
altair processEth1Data - 250000 vs - 7PWei normalcase 306.21 us/op 308.80 us/op 0.99
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.3050 us/op 3.0600 us/op 1.08
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 20.042 us/op 20.242 us/op 0.99
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 6.0460 us/op 6.4020 us/op 0.94
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.8930 us/op 3.5130 us/op 1.11
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 97.573 us/op 90.083 us/op 1.08
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.3812 ms/op 1.4083 ms/op 0.98
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.8629 ms/op 1.8653 ms/op 1.00
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8344 ms/op 1.8627 ms/op 0.98
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.7471 ms/op 3.8453 ms/op 0.97
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.0358 ms/op 2.0910 ms/op 0.97
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.0145 ms/op 4.1783 ms/op 0.96
Tree 40 250000 create 335.71 ms/op 336.82 ms/op 1.00
Tree 40 250000 get(125000) 90.935 ns/op 95.760 ns/op 0.95
Tree 40 250000 set(125000) 974.75 ns/op 1.0281 us/op 0.95
Tree 40 250000 toArray() 15.530 ms/op 15.712 ms/op 0.99
Tree 40 250000 iterate all - toArray() + loop 15.742 ms/op 14.966 ms/op 1.05
Tree 40 250000 iterate all - get(i) 38.040 ms/op 41.270 ms/op 0.92
Array 250000 create 2.1231 ms/op 2.2524 ms/op 0.94
Array 250000 clone - spread 657.52 us/op 700.29 us/op 0.94
Array 250000 get(125000) 0.28700 ns/op 0.31500 ns/op 0.91
Array 250000 set(125000) 0.28800 ns/op 0.32600 ns/op 0.88
Array 250000 iterate all - loop 56.776 us/op 58.013 us/op 0.98
phase0 afterProcessEpoch - 250000 vs - 7PWei 40.210 ms/op 40.026 ms/op 1.00
Array.fill - length 1000000 2.1650 ms/op 2.3110 ms/op 0.94
Array push - length 1000000 8.7943 ms/op 9.9245 ms/op 0.89
Array.get 0.20874 ns/op 0.20878 ns/op 1.00
Uint8Array.get 0.25012 ns/op 0.24350 ns/op 1.03
phase0 beforeProcessEpoch - 250000 vs - 7PWei 16.313 ms/op 15.192 ms/op 1.07
altair processEpoch - mainnet_e81889 320.80 ms/op 262.23 ms/op 1.22
mainnet_e81889 - altair beforeProcessEpoch 40.583 ms/op 16.076 ms/op 2.52
mainnet_e81889 - altair processJustificationAndFinalization 6.2490 us/op 6.3550 us/op 0.98
mainnet_e81889 - altair processInactivityUpdates 3.6086 ms/op 3.5651 ms/op 1.01
mainnet_e81889 - altair processRewardsAndPenalties 17.747 ms/op 20.397 ms/op 0.87
mainnet_e81889 - altair processRegistryUpdates 518.00 ns/op 554.00 ns/op 0.94
mainnet_e81889 - altair processSlashings 133.00 ns/op 133.00 ns/op 1.00
mainnet_e81889 - altair processEth1DataReset 131.00 ns/op 129.00 ns/op 1.02
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.7002 ms/op 1.1962 ms/op 1.42
mainnet_e81889 - altair processSlashingsReset 691.00 ns/op 711.00 ns/op 0.97
mainnet_e81889 - altair processRandaoMixesReset 1.3120 us/op 1.3170 us/op 1.00
mainnet_e81889 - altair processHistoricalRootsUpdate 130.00 ns/op 133.00 ns/op 0.98
mainnet_e81889 - altair processParticipationFlagUpdates 420.00 ns/op 442.00 ns/op 0.95
mainnet_e81889 - altair processSyncCommitteeUpdates 104.00 ns/op 109.00 ns/op 0.95
mainnet_e81889 - altair afterProcessEpoch 42.242 ms/op 42.165 ms/op 1.00
capella processEpoch - mainnet_e217614 947.63 ms/op 745.34 ms/op 1.27
mainnet_e217614 - capella beforeProcessEpoch 64.715 ms/op 55.755 ms/op 1.16
mainnet_e217614 - capella processJustificationAndFinalization 7.8160 us/op 5.2810 us/op 1.48
mainnet_e217614 - capella processInactivityUpdates 14.066 ms/op 11.058 ms/op 1.27
mainnet_e217614 - capella processRewardsAndPenalties 103.30 ms/op 89.684 ms/op 1.15
mainnet_e217614 - capella processRegistryUpdates 4.4880 us/op 4.4860 us/op 1.00
mainnet_e217614 - capella processSlashings 126.00 ns/op 134.00 ns/op 0.94
mainnet_e217614 - capella processEth1DataReset 132.00 ns/op 133.00 ns/op 0.99
mainnet_e217614 - capella processEffectiveBalanceUpdates 6.8865 ms/op 5.1598 ms/op 1.33
mainnet_e217614 - capella processSlashingsReset 689.00 ns/op 667.00 ns/op 1.03
mainnet_e217614 - capella processRandaoMixesReset 1.3490 us/op 1.1780 us/op 1.15
mainnet_e217614 - capella processHistoricalRootsUpdate 126.00 ns/op 127.00 ns/op 0.99
mainnet_e217614 - capella processParticipationFlagUpdates 429.00 ns/op 418.00 ns/op 1.03
mainnet_e217614 - capella afterProcessEpoch 109.51 ms/op 110.14 ms/op 0.99
phase0 processEpoch - mainnet_e58758 334.20 ms/op 239.74 ms/op 1.39
mainnet_e58758 - phase0 beforeProcessEpoch 64.439 ms/op 43.070 ms/op 1.50
mainnet_e58758 - phase0 processJustificationAndFinalization 6.7440 us/op 4.9140 us/op 1.37
mainnet_e58758 - phase0 processRewardsAndPenalties 16.407 ms/op 15.025 ms/op 1.09
mainnet_e58758 - phase0 processRegistryUpdates 2.2390 us/op 2.2100 us/op 1.01
mainnet_e58758 - phase0 processSlashings 130.00 ns/op 135.00 ns/op 0.96
mainnet_e58758 - phase0 processEth1DataReset 124.00 ns/op 128.00 ns/op 0.97
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 815.86 us/op 967.52 us/op 0.84
mainnet_e58758 - phase0 processSlashingsReset 893.00 ns/op 803.00 ns/op 1.11
mainnet_e58758 - phase0 processRandaoMixesReset 1.3990 us/op 1.0300 us/op 1.36
mainnet_e58758 - phase0 processHistoricalRootsUpdate 130.00 ns/op 133.00 ns/op 0.98
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.2010 us/op 963.00 ns/op 1.25
mainnet_e58758 - phase0 afterProcessEpoch 33.060 ms/op 33.507 ms/op 0.99
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.0275 ms/op 1.0058 ms/op 1.02
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.6411 ms/op 1.6825 ms/op 0.98
altair processInactivityUpdates - 250000 normalcase 10.507 ms/op 10.573 ms/op 0.99
altair processInactivityUpdates - 250000 worstcase 10.543 ms/op 12.083 ms/op 0.87
phase0 processRegistryUpdates - 250000 normalcase 2.1970 us/op 4.7570 us/op 0.46
phase0 processRegistryUpdates - 250000 badcase_full_deposits 155.31 us/op 297.00 us/op 0.52
phase0 processRegistryUpdates - 250000 worstcase 0.5 51.654 ms/op 59.115 ms/op 0.87
altair processRewardsAndPenalties - 250000 normalcase 14.373 ms/op 14.137 ms/op 1.02
altair processRewardsAndPenalties - 250000 worstcase 14.021 ms/op 15.446 ms/op 0.91
phase0 getAttestationDeltas - 250000 normalcase 5.3089 ms/op 5.4226 ms/op 0.98
phase0 getAttestationDeltas - 250000 worstcase 9.1127 ms/op 5.4500 ms/op 1.67
phase0 processSlashings - 250000 worstcase 57.084 us/op 59.030 us/op 0.97
altair processSyncCommitteeUpdates - 250000 10.155 ms/op 10.115 ms/op 1.00
BeaconState.hashTreeRoot - No change 155.00 ns/op 173.00 ns/op 0.90
BeaconState.hashTreeRoot - 1 full validator 92.426 us/op 58.213 us/op 1.59
BeaconState.hashTreeRoot - 32 full validator 1.0843 ms/op 756.78 us/op 1.43
BeaconState.hashTreeRoot - 512 full validator 7.6201 ms/op 6.0222 ms/op 1.27
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 101.16 us/op 69.959 us/op 1.45
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.4470 ms/op 1.0763 ms/op 1.34
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 14.597 ms/op 12.732 ms/op 1.15
BeaconState.hashTreeRoot - 1 balances 84.231 us/op 64.838 us/op 1.30
BeaconState.hashTreeRoot - 32 balances 890.69 us/op 671.65 us/op 1.33
BeaconState.hashTreeRoot - 512 balances 5.4182 ms/op 4.7021 ms/op 1.15
BeaconState.hashTreeRoot - 250000 balances 166.38 ms/op 101.17 ms/op 1.64
aggregationBits - 2048 els - zipIndexesInBitList 21.601 us/op 19.615 us/op 1.10
regular array get 100000 times 22.670 us/op 23.158 us/op 0.98
wrappedArray get 100000 times 22.755 us/op 23.084 us/op 0.99
arrayWithProxy get 100000 times 17.579 ms/op 10.894 ms/op 1.61
ssz.Root.equals 78.653 ns/op 21.727 ns/op 3.62
byteArrayEquals 21.413 ns/op 21.551 ns/op 0.99
Buffer.compare 9.5230 ns/op 8.9360 ns/op 1.07
processSlot - 1 slots 10.744 us/op 8.1050 us/op 1.33
processSlot - 32 slots 2.4548 ms/op 1.5304 ms/op 1.60
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 3.9034 ms/op 2.7763 ms/op 1.41
getCommitteeAssignments - req 1 vs - 250000 vc 1.7057 ms/op 1.6845 ms/op 1.01
getCommitteeAssignments - req 100 vs - 250000 vc 3.4452 ms/op 3.4203 ms/op 1.01
getCommitteeAssignments - req 1000 vs - 250000 vc 3.6877 ms/op 3.6814 ms/op 1.00
findModifiedValidators - 10000 modified validators 802.67 ms/op 720.09 ms/op 1.11
findModifiedValidators - 1000 modified validators 503.06 ms/op 468.19 ms/op 1.07
findModifiedValidators - 100 modified validators 286.72 ms/op 294.29 ms/op 0.97
findModifiedValidators - 10 modified validators 213.89 ms/op 143.14 ms/op 1.49
findModifiedValidators - 1 modified validators 153.82 ms/op 164.30 ms/op 0.94
findModifiedValidators - no difference 148.94 ms/op 188.76 ms/op 0.79
migrate state 1500000 validators, 3400 modified, 2000 new 3.6264 s/op 3.0742 s/op 1.18
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.6800 ns/op 3.7700 ns/op 0.98
state getBlockRootAtSlot - 250000 vs - 7PWei 402.62 ns/op 323.84 ns/op 1.24
computeProposerIndex 100000 validators 1.3307 ms/op 1.3873 ms/op 0.96
getNextSyncCommitteeIndices 1000 validators 2.8274 ms/op 2.9093 ms/op 0.97
getNextSyncCommitteeIndices 10000 validators 25.198 ms/op 25.559 ms/op 0.99
getNextSyncCommitteeIndices 100000 validators 83.687 ms/op 84.163 ms/op 0.99
computeProposers - vc 250000 546.20 us/op 576.83 us/op 0.95
computeEpochShuffling - vc 250000 39.859 ms/op 40.482 ms/op 0.98
getNextSyncCommittee - vc 250000 9.9230 ms/op 9.7329 ms/op 1.02
nodejs block root to RootHex using toHex 103.91 ns/op 99.209 ns/op 1.05
nodejs block root to RootHex using toRootHex 68.898 ns/op 65.524 ns/op 1.05
nodejs fromHex(blob) 747.67 us/op 752.54 us/op 0.99
nodejs fromHexInto(blob) 651.88 us/op 633.93 us/op 1.03
nodejs block root to RootHex using the deprecated toHexString 481.44 ns/op 490.01 ns/op 0.98
nodejs byteArrayEquals 32 bytes (block root) 26.196 ns/op 26.097 ns/op 1.00
nodejs byteArrayEquals 48 bytes (pubkey) 37.967 ns/op 37.674 ns/op 1.01
nodejs byteArrayEquals 96 bytes (signature) 36.231 ns/op 37.770 ns/op 0.96
nodejs byteArrayEquals 1024 bytes 44.377 ns/op 44.647 ns/op 0.99
nodejs byteArrayEquals 131072 bytes (blob) 1.7829 us/op 1.7585 us/op 1.01
browser block root to RootHex using toHex 146.68 ns/op 145.12 ns/op 1.01
browser block root to RootHex using toRootHex 132.16 ns/op 131.26 ns/op 1.01
browser fromHex(blob) 1.6589 ms/op 1.5483 ms/op 1.07
browser fromHexInto(blob) 656.92 us/op 630.27 us/op 1.04
browser block root to RootHex using the deprecated toHexString 344.78 ns/op 336.35 ns/op 1.03
browser byteArrayEquals 32 bytes (block root) 27.969 ns/op 28.096 ns/op 1.00
browser byteArrayEquals 48 bytes (pubkey) 39.430 ns/op 39.652 ns/op 0.99
browser byteArrayEquals 96 bytes (signature) 73.787 ns/op 74.416 ns/op 0.99
browser byteArrayEquals 1024 bytes 752.44 ns/op 756.36 ns/op 0.99
browser byteArrayEquals 131072 bytes (blob) 94.623 us/op 95.654 us/op 0.99

by benchmarkbot/action

@nflaig nflaig added the status-do-not-merge Merging this issue will break the build. Do not merge! label Jul 4, 2026
@codecov

codecov Bot commented Jul 4, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 52.54%. Comparing base (0c3761f) to head (22af939).

Additional details and impacted files
@@             Coverage Diff              @@
##           unstable    #9587      +/-   ##
============================================
+ Coverage     52.50%   52.54%   +0.03%     
============================================
  Files           848      848              
  Lines         60531    60472      -59     
  Branches       4476     4473       -3     
============================================
- Hits          31781    31772       -9     
+ Misses        28688    28638      -50     
  Partials         62       62              
🚀 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.

@ensi321
ensi321 force-pushed the glamsterdam-devnet-7 branch from 22af939 to e6f0368 Compare July 7, 2026 04:24
ensi321 added 4 commits July 6, 2026 23:47
Squashed eip7688 implementation from the eip-7688 branch (#9390): progressive
containers/lists for Gloas, @chainsafe/ssz ^1.6.1, light-client gindices,
apply_parent_execution_payload length asserts, MAX_SIGNED_BEACON_BLOCK_SIZE
synced to alpha.12 (4027336/1938012), and block-gossip count REJECTs.
@ensi321
ensi321 force-pushed the glamsterdam-devnet-7 branch from e6f0368 to 451c93b Compare July 7, 2026 06:50
nflaig and others added 19 commits July 7, 2026 08:33
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.
)

Port of #9401 (stateless `publishExecutionPayloadEnvelope`) onto
`glamsterdam-devnet-5` instead of `unstable`. Same 7 commits,
cherry-picked clean.

- Accepts both `SignedExecutionPayloadEnvelopeContents` (envelope +
blobs + KZG proofs, stateless) and bare `SignedExecutionPayloadEnvelope`
(stateful), discriminated by JSON key / first SSZ offset.
- KZG-verifies supplied blobs and proofs against bid `kzg_commitments`;
rejects partial wrapper inputs.
- Endpoint paths already pluralized on gd5 base per beacon-APIs #613
(`execution_payload_envelopes`, `execution_payload_bids`).

Path, request shape, headers, query, and body codec match #580's
`envelope_post.yaml`. Known gaps left as-is (pre-existing TODOs
referencing #580):
- `broadcast_validation` not yet honored (always gossip-level).
- No `202` response branch (success always `200`).

- [ ] `pnpm check-types`
- [ ] `pnpm test:unit` (api + beacon-node envelope publish tests)
- [ ] Devnet smoke test of envelope publish (stateless + stateful)

Branch creation, cherry-pick, and this PR description were AI-assisted
(Claude Code).

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
# Conflicts:
#	packages/beacon-node/test/unit/network/gossip/topic.test.ts
All lodestar nodes on glamsterdam-devnet-7 were permanently stuck at the
last pre-gloas slot: importing any gloas block threw
"RangeError: Maximum call stack size exceeded" from
getNodesAtProgressiveDepth, which spread >125k subtree nodes as function
arguments when iterating the 503,600-entry validator registry
(EIP-7688 makes BeaconState.validators a ProgressiveList at gloas).

ssz 1.6.2 replaces the spread with an index loop. Verified locally:
forEachValue over 503,600 validators completes in ~13ms.

Fixes #9656

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

nflaig commented Jul 30, 2026

Copy link
Copy Markdown
Member
image

@nflaig nflaig closed this Jul 30, 2026
nflaig pushed a commit that referenced this pull request Aug 4, 2026
**Motivation**

Port of an outstanding fix from the `glamsterdam-devnet-7` branch
(#9587) that never landed on `unstable`.

#9050 added the `ExecutionPayloadEnvelopesByRange` req/resp method with
a `byPeer` quota of `MAX_REQUEST_BLOCKS_DENEB` (128), while the spec
caps envelope range requests at `MAX_REQUEST_PAYLOADS` per
https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.12/specs/gloas/p2p-interface.md#executionpayloadenvelopesbyrange-v1.
The `getRequestCount` side already uses `MAX_REQUEST_PAYLOADS`; the
`byPeer` quota was left inconsistent.

**Description**

- Use `config.MAX_REQUEST_PAYLOADS` for the
`ExecutionPayloadEnvelopesByRange` `byPeer` quota
- Add a unit test asserting the quota matches `MAX_REQUEST_PAYLOADS`

Cherry-picked from `glamsterdam-devnet-7` (88b8052, original author
@nflaig); applied without conflicts.

**AI Assistance Disclosure**

- [x] I have read the [contributor
guidelines](https://github.com/ChainSafe/lodestar/blob/unstable/CONTRIBUTING.md#ai-assistance-notice)
and disclosed my usage of AI below.

Cherry-pick selection and verification done with AI assistance (Claude
Code); original commit authored by @nflaig on the devnet-7 branch.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status-do-not-merge Merging this issue will break the build. Do not merge!

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

4 participants