Skip to content

feat: upgrade to alpha.8 spec - #9375

Closed
nflaig wants to merge 0 commit into
unstablefrom
glamsterdam-devnet-4
Closed

feat: upgrade to alpha.8 spec#9375
nflaig wants to merge 0 commit into
unstablefrom
glamsterdam-devnet-4

Conversation

@nflaig

@nflaig nflaig commented May 16, 2026

Copy link
Copy Markdown
Member

No description provided.

): number {
const pubkey = state.getValidator(proposerIndex).pubkey;
const registeredGasLimit = chain.executionBuilder?.getValidatorRegistration(pubkey)?.gasLimit;
return registeredGasLimit ?? Number(state.latestExecutionPayloadBid.gasLimit);

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

this is obviously wrong, but we need proposer preferences to properly handle this and a unified cache

@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 implements the Gloas fork, introducing updates to payload attributes, builder onboarding logic, and configuration parameters across the codebase. The reviewer identified a potential type mismatch in the getProposerTargetGasLimit function, noting that registeredGasLimit might be a bigint while the function expects a number, and suggested wrapping the return value in Number() to ensure type consistency.

): number {
const pubkey = state.getValidator(proposerIndex).pubkey;
const registeredGasLimit = chain.executionBuilder?.getValidatorRegistration(pubkey)?.gasLimit;
return registeredGasLimit ?? Number(state.latestExecutionPayloadBid.gasLimit);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

The registeredGasLimit retrieved from the executionBuilder is likely a bigint (matching the UintNum64 type in SSZ), while the return type of this function is number. Directly using the nullish coalescing operator with a number fallback will result in a type mismatch error in TypeScript (bigint | number is not assignable to number). It is safer to wrap the entire expression in Number() to ensure a consistent return type.

Suggested change
return registeredGasLimit ?? Number(state.latestExecutionPayloadBid.gasLimit);
return Number(registeredGasLimit ?? state.latestExecutionPayloadBid.gasLimit);

@github-actions

Copy link
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: fa6ec11 Previous: 8e18007 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 878.16 us/op 1.2498 ms/op 0.70
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 39.744 us/op 41.042 us/op 0.97
BLS verify - blst 707.41 us/op 773.91 us/op 0.91
BLS verifyMultipleSignatures 3 - blst 1.3646 ms/op 1.3786 ms/op 0.99
BLS verifyMultipleSignatures 8 - blst 2.1726 ms/op 2.1928 ms/op 0.99
BLS verifyMultipleSignatures 32 - blst 6.8534 ms/op 7.0620 ms/op 0.97
BLS verifyMultipleSignatures 64 - blst 13.391 ms/op 13.776 ms/op 0.97
BLS verifyMultipleSignatures 128 - blst 26.071 ms/op 26.428 ms/op 0.99
BLS deserializing 10000 signatures 639.75 ms/op 640.15 ms/op 1.00
BLS deserializing 100000 signatures 6.3685 s/op 6.4026 s/op 0.99
BLS verifyMultipleSignatures - same message - 3 - blst 711.12 us/op 770.84 us/op 0.92
BLS verifyMultipleSignatures - same message - 8 - blst 938.20 us/op 941.61 us/op 1.00
BLS verifyMultipleSignatures - same message - 32 - blst 1.4389 ms/op 1.5590 ms/op 0.92
BLS verifyMultipleSignatures - same message - 64 - blst 2.3916 ms/op 2.3251 ms/op 1.03
BLS verifyMultipleSignatures - same message - 128 - blst 4.0497 ms/op 4.1554 ms/op 0.97
BLS aggregatePubkeys 32 - blst 17.600 us/op 18.121 us/op 0.97
BLS aggregatePubkeys 128 - blst 63.008 us/op 64.685 us/op 0.97
getSlashingsAndExits - default max 49.054 us/op 48.160 us/op 1.02
getSlashingsAndExits - 2k 356.11 us/op 331.33 us/op 1.07
proposeBlockBody type=full, size=empty 600.91 us/op 682.04 us/op 0.88
isKnown best case - 1 super set check 166.00 ns/op 175.00 ns/op 0.95
isKnown normal case - 2 super set checks 164.00 ns/op 168.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.5130 ms/op 1.5594 ms/op 0.97
validate gossip signedAggregateAndProof - struct 1.5083 ms/op 1.5512 ms/op 0.97
batch validate gossip attestation - vc 640000 - chunk 32 107.91 us/op 121.82 us/op 0.89
batch validate gossip attestation - vc 640000 - chunk 64 93.216 us/op 96.761 us/op 0.96
batch validate gossip attestation - vc 640000 - chunk 128 86.253 us/op 90.720 us/op 0.95
batch validate gossip attestation - vc 640000 - chunk 256 82.397 us/op 83.483 us/op 0.99
bytes32 toHexString 282.00 ns/op 290.00 ns/op 0.97
bytes32 Buffer.toString(hex) 171.00 ns/op 172.00 ns/op 0.99
bytes32 Buffer.toString(hex) from Uint8Array 249.00 ns/op 248.00 ns/op 1.00
bytes32 Buffer.toString(hex) + 0x 168.00 ns/op 177.00 ns/op 0.95
Return object 10000 times 0.21000 ns/op 0.21500 ns/op 0.98
Throw Error 10000 times 3.4374 us/op 3.3371 us/op 1.03
toHex 97.705 ns/op 98.367 ns/op 0.99
Buffer.from 88.787 ns/op 93.848 ns/op 0.95
shared Buffer 60.455 ns/op 61.862 ns/op 0.98
fastMsgIdFn sha256 / 200 bytes 1.4740 us/op 1.4890 us/op 0.99
fastMsgIdFn h32 xxhash / 200 bytes 152.00 ns/op 158.00 ns/op 0.96
fastMsgIdFn h64 xxhash / 200 bytes 215.00 ns/op 205.00 ns/op 1.05
fastMsgIdFn sha256 / 1000 bytes 4.7670 us/op 4.7980 us/op 0.99
fastMsgIdFn h32 xxhash / 1000 bytes 240.00 ns/op 250.00 ns/op 0.96
fastMsgIdFn h64 xxhash / 1000 bytes 255.00 ns/op 253.00 ns/op 1.01
fastMsgIdFn sha256 / 10000 bytes 41.888 us/op 42.256 us/op 0.99
fastMsgIdFn h32 xxhash / 10000 bytes 1.2530 us/op 1.3020 us/op 0.96
fastMsgIdFn h64 xxhash / 10000 bytes 802.00 ns/op 845.00 ns/op 0.95
send data - 1000 256B messages 3.9971 ms/op 4.3068 ms/op 0.93
send data - 1000 512B messages 4.1233 ms/op 4.2857 ms/op 0.96
send data - 1000 1024B messages 4.2749 ms/op 4.3108 ms/op 0.99
send data - 1000 1200B messages 4.6470 ms/op 4.6181 ms/op 1.01
send data - 1000 2048B messages 4.7480 ms/op 5.3986 ms/op 0.88
send data - 1000 4096B messages 5.3070 ms/op 6.2288 ms/op 0.85
send data - 1000 16384B messages 24.540 ms/op 14.761 ms/op 1.66
send data - 1000 65536B messages 181.52 ms/op 208.79 ms/op 0.87
enrSubnets - fastDeserialize 64 bits 708.00 ns/op 718.00 ns/op 0.99
enrSubnets - ssz BitVector 64 bits 266.00 ns/op 258.00 ns/op 1.03
enrSubnets - fastDeserialize 4 bits 102.00 ns/op 102.00 ns/op 1.00
enrSubnets - ssz BitVector 4 bits 268.00 ns/op 256.00 ns/op 1.05
prioritizePeers score -10:0 att 32-0.1 sync 2-0 203.37 us/op 221.11 us/op 0.92
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 242.01 us/op 233.87 us/op 1.03
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 343.79 us/op 345.73 us/op 0.99
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 604.22 us/op 614.24 us/op 0.98
prioritizePeers score 0:0 att 64-1 sync 4-1 702.57 us/op 745.17 us/op 0.94
array of 16000 items push then shift 1.2996 us/op 1.2925 us/op 1.01
LinkedList of 16000 items push then shift 7.0440 ns/op 7.2550 ns/op 0.97
array of 16000 items push then pop 70.493 ns/op 63.826 ns/op 1.10
LinkedList of 16000 items push then pop 5.9700 ns/op 5.7660 ns/op 1.04
array of 24000 items push then shift 1.9131 us/op 1.7800 us/op 1.07
LinkedList of 24000 items push then shift 6.5650 ns/op 7.0690 ns/op 0.93
array of 24000 items push then pop 98.711 ns/op 90.650 ns/op 1.09
LinkedList of 24000 items push then pop 5.9350 ns/op 5.9710 ns/op 0.99
intersect bitArray bitLen 8 4.7260 ns/op 4.7650 ns/op 0.99
intersect array and set length 8 29.192 ns/op 29.508 ns/op 0.99
intersect bitArray bitLen 128 23.923 ns/op 24.165 ns/op 0.99
intersect array and set length 128 496.32 ns/op 500.38 ns/op 0.99
bitArray.getTrueBitIndexes() bitLen 128 991.00 ns/op 973.00 ns/op 1.02
bitArray.getTrueBitIndexes() bitLen 248 1.7350 us/op 1.7070 us/op 1.02
bitArray.getTrueBitIndexes() bitLen 512 3.5480 us/op 3.5480 us/op 1.00
Full columns - reconstruct all 6 blobs 117.60 us/op 166.27 us/op 0.71
Full columns - reconstruct half of the blobs out of 6 73.296 us/op 61.505 us/op 1.19
Full columns - reconstruct single blob out of 6 35.385 us/op 30.945 us/op 1.14
Half columns - reconstruct all 6 blobs 376.02 ms/op 386.58 ms/op 0.97
Half columns - reconstruct half of the blobs out of 6 189.54 ms/op 191.43 ms/op 0.99
Half columns - reconstruct single blob out of 6 66.349 ms/op 69.242 ms/op 0.96
Full columns - reconstruct all 10 blobs 187.60 us/op 271.61 us/op 0.69
Full columns - reconstruct half of the blobs out of 10 119.22 us/op 95.437 us/op 1.25
Full columns - reconstruct single blob out of 10 35.033 us/op 31.772 us/op 1.10
Half columns - reconstruct all 10 blobs 626.38 ms/op 635.25 ms/op 0.99
Half columns - reconstruct half of the blobs out of 10 315.18 ms/op 318.60 ms/op 0.99
Half columns - reconstruct single blob out of 10 67.002 ms/op 68.874 ms/op 0.97
Full columns - reconstruct all 20 blobs 1.5001 ms/op 531.93 us/op 2.82
Full columns - reconstruct half of the blobs out of 20 248.48 us/op 164.22 us/op 1.51
Full columns - reconstruct single blob out of 20 30.692 us/op 27.810 us/op 1.10
Half columns - reconstruct all 20 blobs 1.2512 s/op 1.2558 s/op 1.00
Half columns - reconstruct half of the blobs out of 20 625.69 ms/op 630.55 ms/op 0.99
Half columns - reconstruct single blob out of 20 67.221 ms/op 68.313 ms/op 0.98
Set add up to 64 items then delete first 2.2106 us/op 2.1356 us/op 1.04
OrderedSet add up to 64 items then delete first 3.4766 us/op 3.3264 us/op 1.05
Set add up to 64 items then delete last 2.1648 us/op 2.3105 us/op 0.94
OrderedSet add up to 64 items then delete last 3.3603 us/op 3.2714 us/op 1.03
Set add up to 64 items then delete middle 2.1722 us/op 2.1287 us/op 1.02
OrderedSet add up to 64 items then delete middle 4.8548 us/op 4.7424 us/op 1.02
Set add up to 128 items then delete first 4.3534 us/op 4.2436 us/op 1.03
OrderedSet add up to 128 items then delete first 6.6452 us/op 6.5483 us/op 1.01
Set add up to 128 items then delete last 4.0277 us/op 3.8948 us/op 1.03
OrderedSet add up to 128 items then delete last 5.9353 us/op 5.7882 us/op 1.03
Set add up to 128 items then delete middle 3.9414 us/op 3.8849 us/op 1.01
OrderedSet add up to 128 items then delete middle 11.686 us/op 11.618 us/op 1.01
Set add up to 256 items then delete first 7.9338 us/op 7.8676 us/op 1.01
OrderedSet add up to 256 items then delete first 12.235 us/op 12.149 us/op 1.01
Set add up to 256 items then delete last 7.6853 us/op 7.6549 us/op 1.00
OrderedSet add up to 256 items then delete last 11.545 us/op 11.617 us/op 0.99
Set add up to 256 items then delete middle 7.6376 us/op 7.6002 us/op 1.00
OrderedSet add up to 256 items then delete middle 34.854 us/op 34.656 us/op 1.01
pass gossip attestations to forkchoice per slot 2.5264 ms/op 2.5252 ms/op 1.00
forkChoice updateHead vc 100000 bc 64 eq 0 408.62 us/op 450.73 us/op 0.91
forkChoice updateHead vc 600000 bc 64 eq 0 2.5088 ms/op 2.7300 ms/op 0.92
forkChoice updateHead vc 1000000 bc 64 eq 0 4.1522 ms/op 4.4497 ms/op 0.93
forkChoice updateHead vc 600000 bc 320 eq 0 2.4359 ms/op 2.7140 ms/op 0.90
forkChoice updateHead vc 600000 bc 1200 eq 0 2.6179 ms/op 2.6943 ms/op 0.97
forkChoice updateHead vc 600000 bc 7200 eq 0 2.8092 ms/op 2.4969 ms/op 1.13
forkChoice updateHead vc 600000 bc 64 eq 1000 2.9598 ms/op 2.7183 ms/op 1.09
forkChoice updateHead vc 600000 bc 64 eq 10000 3.0706 ms/op 2.8270 ms/op 1.09
forkChoice updateHead vc 600000 bc 64 eq 300000 7.0311 ms/op 6.2779 ms/op 1.12
computeDeltas 1400000 validators 0% inactive 12.870 ms/op 11.896 ms/op 1.08
computeDeltas 1400000 validators 10% inactive 12.117 ms/op 13.041 ms/op 0.93
computeDeltas 1400000 validators 20% inactive 10.917 ms/op 10.032 ms/op 1.09
computeDeltas 1400000 validators 50% inactive 8.3527 ms/op 7.7114 ms/op 1.08
computeDeltas 2100000 validators 0% inactive 19.219 ms/op 17.946 ms/op 1.07
computeDeltas 2100000 validators 10% inactive 17.868 ms/op 16.737 ms/op 1.07
computeDeltas 2100000 validators 20% inactive 16.473 ms/op 15.141 ms/op 1.09
computeDeltas 2100000 validators 50% inactive 9.5981 ms/op 8.8061 ms/op 1.09
altair processAttestation - 250000 vs - 7PWei normalcase 1.6938 ms/op 2.6296 ms/op 0.64
altair processAttestation - 250000 vs - 7PWei worstcase 2.4484 ms/op 2.8859 ms/op 0.85
altair processAttestation - setStatus - 1/6 committees join 102.27 us/op 97.331 us/op 1.05
altair processAttestation - setStatus - 1/3 committees join 199.02 us/op 188.58 us/op 1.06
altair processAttestation - setStatus - 1/2 committees join 279.40 us/op 266.14 us/op 1.05
altair processAttestation - setStatus - 2/3 committees join 374.52 us/op 350.37 us/op 1.07
altair processAttestation - setStatus - 4/5 committees join 510.44 us/op 481.40 us/op 1.06
altair processAttestation - setStatus - 100% committees join 600.33 us/op 578.62 us/op 1.04
altair processBlock - 250000 vs - 7PWei normalcase 3.0556 ms/op 4.1204 ms/op 0.74
altair processBlock - 250000 vs - 7PWei normalcase hashState 12.433 ms/op 14.375 ms/op 0.86
altair processBlock - 250000 vs - 7PWei worstcase 19.967 ms/op 19.547 ms/op 1.02
altair processBlock - 250000 vs - 7PWei worstcase hashState 40.157 ms/op 39.734 ms/op 1.01
phase0 processBlock - 250000 vs - 7PWei normalcase 1.3004 ms/op 1.5087 ms/op 0.86
phase0 processBlock - 250000 vs - 7PWei worstcase 17.662 ms/op 17.995 ms/op 0.98
altair processEth1Data - 250000 vs - 7PWei normalcase 309.47 us/op 300.89 us/op 1.03
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.3130 us/op 5.0580 us/op 0.66
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 20.634 us/op 20.190 us/op 1.02
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 5.5750 us/op 5.7460 us/op 0.97
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.5080 us/op 3.6390 us/op 0.96
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 89.834 us/op 88.765 us/op 1.01
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.3880 ms/op 1.3645 ms/op 1.02
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.8059 ms/op 1.7894 ms/op 1.01
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.7950 ms/op 1.7687 ms/op 1.01
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.6266 ms/op 3.5890 ms/op 1.01
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.0261 ms/op 1.9898 ms/op 1.02
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.8881 ms/op 4.0143 ms/op 0.97
Tree 40 250000 create 304.04 ms/op 349.19 ms/op 0.87
Tree 40 250000 get(125000) 94.933 ns/op 89.372 ns/op 1.06
Tree 40 250000 set(125000) 1.0097 us/op 975.62 ns/op 1.03
Tree 40 250000 toArray() 9.2861 ms/op 13.246 ms/op 0.70
Tree 40 250000 iterate all - toArray() + loop 9.0375 ms/op 14.418 ms/op 0.63
Tree 40 250000 iterate all - get(i) 34.736 ms/op 37.117 ms/op 0.94
Array 250000 create 2.0185 ms/op 2.1265 ms/op 0.95
Array 250000 clone - spread 660.66 us/op 674.34 us/op 0.98
Array 250000 get(125000) 0.29300 ns/op 0.29700 ns/op 0.99
Array 250000 set(125000) 0.29500 ns/op 0.30000 ns/op 0.98
Array 250000 iterate all - loop 56.425 us/op 58.325 us/op 0.97
phase0 afterProcessEpoch - 250000 vs - 7PWei 51.948 ms/op 62.950 ms/op 0.83
Array.fill - length 1000000 2.2461 ms/op 2.2050 ms/op 1.02
Array push - length 1000000 7.5821 ms/op 7.5576 ms/op 1.00
Array.get 0.20497 ns/op 0.20599 ns/op 1.00
Uint8Array.get 0.25530 ns/op 0.23175 ns/op 1.10
phase0 beforeProcessEpoch - 250000 vs - 7PWei 12.509 ms/op 13.090 ms/op 0.96
altair processEpoch - mainnet_e81889 248.96 ms/op 329.24 ms/op 0.76
mainnet_e81889 - altair beforeProcessEpoch 14.198 ms/op 37.529 ms/op 0.38
mainnet_e81889 - altair processJustificationAndFinalization 5.1360 us/op 6.2060 us/op 0.83
mainnet_e81889 - altair processInactivityUpdates 3.4589 ms/op 3.6094 ms/op 0.96
mainnet_e81889 - altair processRewardsAndPenalties 16.782 ms/op 19.451 ms/op 0.86
mainnet_e81889 - altair processRegistryUpdates 542.00 ns/op 521.00 ns/op 1.04
mainnet_e81889 - altair processSlashings 127.00 ns/op 132.00 ns/op 0.96
mainnet_e81889 - altair processEth1DataReset 126.00 ns/op 127.00 ns/op 0.99
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.7166 ms/op 1.2884 ms/op 1.33
mainnet_e81889 - altair processSlashingsReset 701.00 ns/op 693.00 ns/op 1.01
mainnet_e81889 - altair processRandaoMixesReset 1.0620 us/op 1.5700 us/op 0.68
mainnet_e81889 - altair processHistoricalRootsUpdate 126.00 ns/op 130.00 ns/op 0.97
mainnet_e81889 - altair processParticipationFlagUpdates 425.00 ns/op 452.00 ns/op 0.94
mainnet_e81889 - altair processSyncCommitteeUpdates 100.00 ns/op 96.000 ns/op 1.04
mainnet_e81889 - altair afterProcessEpoch 41.667 ms/op 41.515 ms/op 1.00
capella processEpoch - mainnet_e217614 747.43 ms/op 988.99 ms/op 0.76
mainnet_e217614 - capella beforeProcessEpoch 55.360 ms/op 58.561 ms/op 0.95
mainnet_e217614 - capella processJustificationAndFinalization 5.1770 us/op 34.753 ms/op 0.00
mainnet_e217614 - capella processInactivityUpdates 11.255 ms/op 14.710 ms/op 0.77
mainnet_e217614 - capella processRewardsAndPenalties 90.334 ms/op 95.384 ms/op 0.95
mainnet_e217614 - capella processRegistryUpdates 4.4710 us/op 4.3040 us/op 1.04
mainnet_e217614 - capella processSlashings 126.00 ns/op 126.00 ns/op 1.00
mainnet_e217614 - capella processEth1DataReset 125.00 ns/op 123.00 ns/op 1.02
mainnet_e217614 - capella processEffectiveBalanceUpdates 5.2266 ms/op 6.0374 ms/op 0.87
mainnet_e217614 - capella processSlashingsReset 690.00 ns/op 696.00 ns/op 0.99
mainnet_e217614 - capella processRandaoMixesReset 1.1020 us/op 1.3900 us/op 0.79
mainnet_e217614 - capella processHistoricalRootsUpdate 124.00 ns/op 132.00 ns/op 0.94
mainnet_e217614 - capella processParticipationFlagUpdates 426.00 ns/op 425.00 ns/op 1.00
mainnet_e217614 - capella afterProcessEpoch 105.96 ms/op 111.29 ms/op 0.95
phase0 processEpoch - mainnet_e58758 267.12 ms/op 338.76 ms/op 0.79
mainnet_e58758 - phase0 beforeProcessEpoch 51.901 ms/op 71.174 ms/op 0.73
mainnet_e58758 - phase0 processJustificationAndFinalization 5.3710 us/op 6.7860 us/op 0.79
mainnet_e58758 - phase0 processRewardsAndPenalties 14.982 ms/op 15.149 ms/op 0.99
mainnet_e58758 - phase0 processRegistryUpdates 2.2540 us/op 2.2420 us/op 1.01
mainnet_e58758 - phase0 processSlashings 126.00 ns/op 135.00 ns/op 0.93
mainnet_e58758 - phase0 processEth1DataReset 126.00 ns/op 127.00 ns/op 0.99
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 853.98 us/op 824.55 us/op 1.04
mainnet_e58758 - phase0 processSlashingsReset 815.00 ns/op 810.00 ns/op 1.01
mainnet_e58758 - phase0 processRandaoMixesReset 1.1200 us/op 1.3610 us/op 0.82
mainnet_e58758 - phase0 processHistoricalRootsUpdate 134.00 ns/op 130.00 ns/op 1.03
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.0060 us/op 1.1700 us/op 0.86
mainnet_e58758 - phase0 afterProcessEpoch 32.472 ms/op 33.528 ms/op 0.97
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.0105 ms/op 1.0187 ms/op 0.99
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.2292 ms/op 1.7786 ms/op 0.69
altair processInactivityUpdates - 250000 normalcase 10.498 ms/op 10.644 ms/op 0.99
altair processInactivityUpdates - 250000 worstcase 10.424 ms/op 10.583 ms/op 0.98
phase0 processRegistryUpdates - 250000 normalcase 2.3750 us/op 2.4130 us/op 0.98
phase0 processRegistryUpdates - 250000 badcase_full_deposits 146.18 us/op 144.56 us/op 1.01
phase0 processRegistryUpdates - 250000 worstcase 0.5 57.886 ms/op 49.842 ms/op 1.16
altair processRewardsAndPenalties - 250000 normalcase 13.699 ms/op 15.036 ms/op 0.91
altair processRewardsAndPenalties - 250000 worstcase 13.397 ms/op 15.982 ms/op 0.84
phase0 getAttestationDeltas - 250000 normalcase 5.4483 ms/op 5.2207 ms/op 1.04
phase0 getAttestationDeltas - 250000 worstcase 5.4310 ms/op 5.2375 ms/op 1.04
phase0 processSlashings - 250000 worstcase 59.885 us/op 58.550 us/op 1.02
altair processSyncCommitteeUpdates - 250000 10.356 ms/op 10.261 ms/op 1.01
BeaconState.hashTreeRoot - No change 169.00 ns/op 165.00 ns/op 1.02
BeaconState.hashTreeRoot - 1 full validator 68.269 us/op 93.093 us/op 0.73
BeaconState.hashTreeRoot - 32 full validator 922.83 us/op 1.1902 ms/op 0.78
BeaconState.hashTreeRoot - 512 full validator 7.3285 ms/op 8.0072 ms/op 0.92
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 90.152 us/op 117.85 us/op 0.76
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.4111 ms/op 1.5431 ms/op 0.91
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 15.308 ms/op 21.487 ms/op 0.71
BeaconState.hashTreeRoot - 1 balances 76.159 us/op 84.274 us/op 0.90
BeaconState.hashTreeRoot - 32 balances 790.30 us/op 775.25 us/op 1.02
BeaconState.hashTreeRoot - 512 balances 5.2088 ms/op 7.8348 ms/op 0.66
BeaconState.hashTreeRoot - 250000 balances 130.87 ms/op 278.41 ms/op 0.47
aggregationBits - 2048 els - zipIndexesInBitList 19.996 us/op 20.798 us/op 0.96
regular array get 100000 times 23.243 us/op 23.129 us/op 1.00
wrappedArray get 100000 times 23.179 us/op 23.292 us/op 1.00
arrayWithProxy get 100000 times 10.039 ms/op 10.129 ms/op 0.99
ssz.Root.equals 21.646 ns/op 21.909 ns/op 0.99
byteArrayEquals 21.415 ns/op 21.718 ns/op 0.99
Buffer.compare 8.9600 ns/op 9.0150 ns/op 0.99
processSlot - 1 slots 8.2770 us/op 11.145 us/op 0.74
processSlot - 32 slots 1.9585 ms/op 2.6121 ms/op 0.75
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 4.1825 ms/op 2.8386 ms/op 1.47
getCommitteeAssignments - req 1 vs - 250000 vc 1.6893 ms/op 1.6916 ms/op 1.00
getCommitteeAssignments - req 100 vs - 250000 vc 3.4503 ms/op 3.5071 ms/op 0.98
getCommitteeAssignments - req 1000 vs - 250000 vc 3.7265 ms/op 3.7216 ms/op 1.00
findModifiedValidators - 10000 modified validators 665.62 ms/op 809.92 ms/op 0.82
findModifiedValidators - 1000 modified validators 447.32 ms/op 433.94 ms/op 1.03
findModifiedValidators - 100 modified validators 319.58 ms/op 251.86 ms/op 1.27
findModifiedValidators - 10 modified validators 232.85 ms/op 160.91 ms/op 1.45
findModifiedValidators - 1 modified validators 188.42 ms/op 147.39 ms/op 1.28
findModifiedValidators - no difference 152.93 ms/op 161.33 ms/op 0.95
migrate state 1500000 validators, 3400 modified, 2000 new 2.7986 s/op 4.0613 s/op 0.69
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.8400 ns/op 3.5900 ns/op 1.07
state getBlockRootAtSlot - 250000 vs - 7PWei 292.33 ns/op 459.66 ns/op 0.64
computeProposerIndex 100000 validators 1.3648 ms/op 1.4422 ms/op 0.95
getNextSyncCommitteeIndices 1000 validators 2.9146 ms/op 2.7865 ms/op 1.05
getNextSyncCommitteeIndices 10000 validators 25.359 ms/op 24.489 ms/op 1.04
getNextSyncCommitteeIndices 100000 validators 88.520 ms/op 85.673 ms/op 1.03
computeProposers - vc 250000 589.22 us/op 547.29 us/op 1.08
computeEpochShuffling - vc 250000 40.942 ms/op 39.273 ms/op 1.04
getNextSyncCommittee - vc 250000 9.7384 ms/op 9.2817 ms/op 1.05
nodejs block root to RootHex using toHex 99.239 ns/op 89.573 ns/op 1.11
nodejs block root to RootHex using toRootHex 59.424 ns/op 54.605 ns/op 1.09
nodejs fromHex(blob) 770.51 us/op 842.72 us/op 0.91
nodejs fromHexInto(blob) 632.11 us/op 642.74 us/op 0.98
nodejs block root to RootHex using the deprecated toHexString 560.64 ns/op 486.18 ns/op 1.15
nodejs byteArrayEquals 32 bytes (block root) 26.183 ns/op 26.317 ns/op 0.99
nodejs byteArrayEquals 48 bytes (pubkey) 37.943 ns/op 38.149 ns/op 0.99
nodejs byteArrayEquals 96 bytes (signature) 37.017 ns/op 36.204 ns/op 1.02
nodejs byteArrayEquals 1024 bytes 44.331 ns/op 44.109 ns/op 1.01
nodejs byteArrayEquals 131072 bytes (blob) 1.7712 us/op 1.7726 us/op 1.00
browser block root to RootHex using toHex 145.77 ns/op 147.63 ns/op 0.99
browser block root to RootHex using toRootHex 131.58 ns/op 134.31 ns/op 0.98
browser fromHex(blob) 1.5558 ms/op 1.6549 ms/op 0.94
browser fromHexInto(blob) 632.11 us/op 601.06 us/op 1.05
browser block root to RootHex using the deprecated toHexString 380.40 ns/op 322.92 ns/op 1.18
browser byteArrayEquals 32 bytes (block root) 28.225 ns/op 31.910 ns/op 0.88
browser byteArrayEquals 48 bytes (pubkey) 39.864 ns/op 38.726 ns/op 1.03
browser byteArrayEquals 96 bytes (signature) 74.777 ns/op 73.088 ns/op 1.02
browser byteArrayEquals 1024 bytes 757.47 ns/op 747.03 ns/op 1.01
browser byteArrayEquals 131072 bytes (blob) 94.737 us/op 93.071 us/op 1.02

by benchmarkbot/action

function keepPending(deposit: CompositeViewDU<typeof ssz.electra.PendingDeposit>): void {
remainingPendingDeposits.push(deposit);
if (
isValidDepositSignature(

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

this is inefficient, we should not eagerly validate pending deposit signature as specified in the spec https://github.com/ethereum/consensus-specs/pull/5254/changes#diff-e37d6d50b0282d164b6ec932ac0dcc33d02a13861b6c884a088eaced1436087bR87

addressed in #9374

@ensi321

ensi321 commented May 18, 2026

Copy link
Copy Markdown
Member

We also need to update our code to actually use PAYLOAD_DUE_BPS instead of PAYLOAD_ATTESTATION_DUE_BPS

wemeetagain added a commit that referenced this pull request May 20, 2026
**Motivation**

Upgrade Lodestar to the `v1.7.0-alpha.8` following #9375

**What's changed since #9375**
- consume ProposerPreferencesPool in #9377
- use `PAYLOAD_DUE_BPS` instead of `PAYLOAD_ATTESTATION_DUE_BPS`
- the onboard builder is implemented in #9374, reenable spec tests

**Detailed Description**

- Bump `spec-tests-version.json` to `v1.7.0-alpha.8` and apply the
matching `specrefs/*` updates.
- Config: `MIN_BUILDER_WITHDRAWABILITY_DELAY` `64 → 8192`; add
`PAYLOAD_DUE_BPS` (mainnet/minimal/types + validator critical params).
- Add Gloas `targetGasLimit` to `PayloadAttributes` (SSZ,
execution-engine `PayloadAttributes`/RPC + serialize/deserialize).
- Rename `ProposerPreferences.gasLimit → targetGasLimit` (alpha.8) and
update the unstable-only consumers not present on the #9375 branch:
`validatorStore.signProposerPreferences`, gossip
`validateExecutionPayloadBid`, and test/event fixtures. The gossip
bid-validation rule keeps strict equality (rename only);
`is_gas_limit_target_compatible` is a separate follow-up.
- `upgradeStateToGloas`: set `latestExecutionPayloadBid.gasLimit` from
the Fulu header and bump the spec-comment URL. The existing
`onboardBuildersFromPendingDeposits` is already spec-equivalent and is
left as-is; the previously-skipped
`fork_invalid_validator_deposit_followed_by_builder_credentials` spec
test is re-enabled and passes.
- `produceBlockBody`: resolve the Gloas payload-attributes
`targetGasLimit` from the `ProposerPreferencesPool` (same `(slot,
dependent_root)` lookup as bid validation), falling back to the parent
payload gas limit when no preferences are pooled. Addresses the #9375
review note that the builder-registration source was incorrect.
- Add `getPayloadDueMs()` to `forkConfig` (spec `get_payload_due_ms`,
`PAYLOAD_DUE_BPS`) and gate `producePayloadAttestationData`'s
`payloadPresent` on the execution payload envelope being seen before
that deadline (uses the envelope's own arrival time). Addresses the
#9375 review note about using `PAYLOAD_DUE_BPS` instead of
`PAYLOAD_ATTESTATION_DUE_BPS`.
- Skip the new `gloas/fork_choice/on_payload_attestation_message` spec
suite (PTC fork choice not yet implemented).


**AI Assistance Disclosure**

Used Claude Code to port and adapt the changes, address the PR review
comments, and run verification.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Tuyen Nguyen <twoeths@users.noreply.github.com>
Co-authored-by: Cayman <caymannava@gmail.com>
@wemeetagain
wemeetagain force-pushed the glamsterdam-devnet-4 branch from a07e25c to 1d0e0b9 Compare May 20, 2026 13:29
@wemeetagain

Copy link
Copy Markdown
Member

automatically closed now that glamsterdam-devnet-4 branch now == unstable branch

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