Skip to content

fix: use parent block slot for attestation payload availability - #9731

Merged
twoeths merged 8 commits into
unstablefrom
nflaig/fix-attestation-payload-availability
Aug 3, 2026
Merged

fix: use parent block slot for attestation payload availability#9731
twoeths merged 8 commits into
unstablefrom
nflaig/fix-attestation-payload-availability

Conversation

@nflaig

@nflaig nflaig commented Jul 30, 2026

Copy link
Copy Markdown
Member

@github-actions

github-actions Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 26d621b Previous: b3cb0f6 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 864.35 us/op 1.0484 ms/op 0.82
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 39.397 us/op 40.844 us/op 0.96
BLS verify - blst 712.13 us/op 662.34 us/op 1.08
BLS verifyMultipleSignatures 3 - blst 1.3478 ms/op 1.3852 ms/op 0.97
BLS verifyMultipleSignatures 8 - blst 2.1446 ms/op 2.2027 ms/op 0.97
BLS verifyMultipleSignatures 32 - blst 6.7976 ms/op 6.9396 ms/op 0.98
BLS verifyMultipleSignatures 64 - blst 12.994 ms/op 13.781 ms/op 0.94
BLS verifyMultipleSignatures 128 - blst 25.558 ms/op 26.020 ms/op 0.98
BLS deserializing 10000 signatures 628.21 ms/op 642.55 ms/op 0.98
BLS deserializing 100000 signatures 6.2720 s/op 6.4661 s/op 0.97
BLS verifyMultipleSignatures - same message - 3 - blst 760.99 us/op 798.28 us/op 0.95
BLS verifyMultipleSignatures - same message - 8 - blst 885.76 us/op 948.21 us/op 0.93
BLS verifyMultipleSignatures - same message - 32 - blst 1.5051 ms/op 1.4735 ms/op 1.02
BLS verifyMultipleSignatures - same message - 64 - blst 2.3543 ms/op 2.3872 ms/op 0.99
BLS verifyMultipleSignatures - same message - 128 - blst 3.9809 ms/op 4.1394 ms/op 0.96
BLS aggregatePubkeys 32 - blst 17.596 us/op 17.809 us/op 0.99
BLS aggregatePubkeys 128 - blst 62.852 us/op 63.908 us/op 0.98
getSlashingsAndExits - default max 46.571 us/op 49.481 us/op 0.94
getSlashingsAndExits - 2k 333.96 us/op 353.29 us/op 0.95
proposeBlockBody type=full, size=empty 1.0407 ms/op 640.40 us/op 1.63
isKnown best case - 1 super set check 172.00 ns/op 170.00 ns/op 1.01
isKnown normal case - 2 super set checks 163.00 ns/op 165.00 ns/op 0.99
isKnown worse case - 16 super set checks 165.00 ns/op 169.00 ns/op 0.98
validate api signedAggregateAndProof - struct 1.5104 ms/op 1.5601 ms/op 0.97
validate gossip signedAggregateAndProof - struct 1.5052 ms/op 1.5566 ms/op 0.97
batch validate gossip attestation - vc 640000 - chunk 32 105.02 us/op 111.02 us/op 0.95
batch validate gossip attestation - vc 640000 - chunk 64 93.162 us/op 95.224 us/op 0.98
batch validate gossip attestation - vc 640000 - chunk 128 88.237 us/op 89.225 us/op 0.99
batch validate gossip attestation - vc 640000 - chunk 256 82.980 us/op 84.843 us/op 0.98
bytes32 toHexString 281.00 ns/op 292.00 ns/op 0.96
bytes32 Buffer.toString(hex) 168.00 ns/op 165.00 ns/op 1.02
bytes32 Buffer.toString(hex) from Uint8Array 240.00 ns/op 235.00 ns/op 1.02
bytes32 Buffer.toString(hex) + 0x 168.00 ns/op 165.00 ns/op 1.02
Return object 10000 times 0.21030 ns/op 0.21320 ns/op 0.99
Throw Error 10000 times 3.2816 us/op 3.4972 us/op 0.94
toHex 98.319 ns/op 100.52 ns/op 0.98
Buffer.from 90.035 ns/op 93.044 ns/op 0.97
shared Buffer 65.666 ns/op 64.170 ns/op 1.02
fastMsgIdFn sha256 / 200 bytes 1.4510 us/op 1.4950 us/op 0.97
fastMsgIdFn h32 xxhash / 200 bytes 153.00 ns/op 150.00 ns/op 1.02
fastMsgIdFn h64 xxhash / 200 bytes 194.00 ns/op 209.00 ns/op 0.93
fastMsgIdFn sha256 / 1000 bytes 4.6700 us/op 4.9010 us/op 0.95
fastMsgIdFn h32 xxhash / 1000 bytes 242.00 ns/op 240.00 ns/op 1.01
fastMsgIdFn h64 xxhash / 1000 bytes 249.00 ns/op 257.00 ns/op 0.97
fastMsgIdFn sha256 / 10000 bytes 41.328 us/op 43.245 us/op 0.96
fastMsgIdFn h32 xxhash / 10000 bytes 1.2720 us/op 1.2670 us/op 1.00
fastMsgIdFn h64 xxhash / 10000 bytes 821.00 ns/op 819.00 ns/op 1.00
send data - 1000 256B messages 4.0137 ms/op 4.1424 ms/op 0.97
send data - 1000 512B messages 5.1994 ms/op 4.9397 ms/op 1.05
send data - 1000 1024B messages 5.2031 ms/op 5.6226 ms/op 0.93
send data - 1000 1200B messages 5.7655 ms/op 6.0369 ms/op 0.96
send data - 1000 2048B messages 7.9810 ms/op 20.242 ms/op 0.39
send data - 1000 4096B messages 36.629 ms/op 47.211 ms/op 0.78
send data - 1000 16384B messages 262.71 ms/op 255.66 ms/op 1.03
send data - 1000 65536B messages 1.0451 s/op 1.2293 s/op 0.85
enrSubnets - fastDeserialize 64 bits 745.00 ns/op 784.00 ns/op 0.95
enrSubnets - ssz BitVector 64 bits 271.00 ns/op 266.00 ns/op 1.02
enrSubnets - fastDeserialize 4 bits 100.00 ns/op 104.00 ns/op 0.96
enrSubnets - ssz BitVector 4 bits 264.00 ns/op 269.00 ns/op 0.98
prioritizePeers score -10:0 att 32-0.1 sync 2-0 201.37 us/op 212.78 us/op 0.95
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 230.97 us/op 243.12 us/op 0.95
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 331.27 us/op 353.36 us/op 0.94
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 586.31 us/op 621.30 us/op 0.94
prioritizePeers score 0:0 att 64-1 sync 4-1 684.33 us/op 727.66 us/op 0.94
array of 16000 items push then shift 1.2857 us/op 1.3198 us/op 0.97
LinkedList of 16000 items push then shift 6.8940 ns/op 6.9230 ns/op 1.00
array of 16000 items push then pop 76.288 ns/op 66.659 ns/op 1.14
LinkedList of 16000 items push then pop 6.0840 ns/op 6.1480 ns/op 0.99
array of 24000 items push then shift 1.9070 us/op 1.9636 us/op 0.97
LinkedList of 24000 items push then shift 6.4630 ns/op 6.4990 ns/op 0.99
array of 24000 items push then pop 102.13 ns/op 93.766 ns/op 1.09
LinkedList of 24000 items push then pop 5.9330 ns/op 6.1320 ns/op 0.97
intersect bitArray bitLen 8 4.2700 ns/op 3.9010 ns/op 1.09
intersect array and set length 8 29.745 ns/op 30.630 ns/op 0.97
intersect bitArray bitLen 128 22.989 ns/op 23.527 ns/op 0.98
intersect array and set length 128 494.76 ns/op 517.67 ns/op 0.96
bitArray.getTrueBitIndexes() bitLen 128 939.00 ns/op 931.00 ns/op 1.01
bitArray.getTrueBitIndexes() bitLen 248 1.6770 us/op 1.6660 us/op 1.01
bitArray.getTrueBitIndexes() bitLen 512 3.4960 us/op 3.4810 us/op 1.00
Full columns - reconstruct all 6 blobs 116.42 us/op 165.69 us/op 0.70
Full columns - reconstruct half of the blobs out of 6 66.922 us/op 68.287 us/op 0.98
Full columns - reconstruct single blob out of 6 34.208 us/op 33.919 us/op 1.01
Half columns - reconstruct all 6 blobs 375.53 ms/op 396.72 ms/op 0.95
Half columns - reconstruct half of the blobs out of 6 186.78 ms/op 203.65 ms/op 0.92
Half columns - reconstruct single blob out of 6 65.886 ms/op 70.710 ms/op 0.93
Set add up to 64 items then delete first 1.6690 us/op 1.6887 us/op 0.99
OrderedSet add up to 64 items then delete first 2.5131 us/op 2.5696 us/op 0.98
Set add up to 64 items then delete last 1.9042 us/op 1.9749 us/op 0.96
OrderedSet add up to 64 items then delete last 2.9042 us/op 3.0060 us/op 0.97
Set add up to 64 items then delete middle 1.9473 us/op 2.0226 us/op 0.96
OrderedSet add up to 64 items then delete middle 4.4060 us/op 4.5528 us/op 0.97
Set add up to 128 items then delete first 3.7125 us/op 3.9387 us/op 0.94
OrderedSet add up to 128 items then delete first 5.4317 us/op 5.8714 us/op 0.93
Set add up to 128 items then delete last 3.6640 us/op 3.8884 us/op 0.94
OrderedSet add up to 128 items then delete last 5.5696 us/op 5.9316 us/op 0.94
Set add up to 128 items then delete middle 3.6566 us/op 3.8388 us/op 0.95
OrderedSet add up to 128 items then delete middle 11.579 us/op 11.878 us/op 0.97
Set add up to 256 items then delete first 7.4223 us/op 7.9006 us/op 0.94
OrderedSet add up to 256 items then delete first 11.215 us/op 12.067 us/op 0.93
Set add up to 256 items then delete last 7.3754 us/op 7.7172 us/op 0.96
OrderedSet add up to 256 items then delete last 11.472 us/op 12.126 us/op 0.95
Set add up to 256 items then delete middle 7.4369 us/op 7.6175 us/op 0.98
OrderedSet add up to 256 items then delete middle 34.977 us/op 35.825 us/op 0.98
runFastConfirmationRules vc:100000 bc:96 eq:0 4.7740 ms/op 5.1926 ms/op 0.92
runFastConfirmationRules vc:600000 bc:96 eq:0 34.285 ms/op 35.686 ms/op 0.96
runFastConfirmationRules vc:1000000 bc:96 eq:0 56.338 ms/op 59.620 ms/op 0.94
runFastConfirmationRules vc:600000 bc:320 eq:0 33.630 ms/op 35.735 ms/op 0.94
runFastConfirmationRules vc:100000 bc:96 eq:1000 1.4333 s/op 1.1033 s/op 1.30
pass gossip attestations to forkchoice per slot 2.5434 ms/op 2.6199 ms/op 0.97
forkChoice updateHead vc 100000 bc 64 eq 0 437.48 us/op 478.91 us/op 0.91
forkChoice updateHead vc 600000 bc 64 eq 0 2.6017 ms/op 2.7665 ms/op 0.94
forkChoice updateHead vc 1000000 bc 64 eq 0 4.3048 ms/op 4.6805 ms/op 0.92
forkChoice updateHead vc 600000 bc 320 eq 0 2.7343 ms/op 2.8882 ms/op 0.95
forkChoice updateHead vc 600000 bc 1200 eq 0 2.6538 ms/op 2.9500 ms/op 0.90
forkChoice updateHead vc 600000 bc 7200 eq 0 2.9459 ms/op 3.2581 ms/op 0.90
forkChoice updateHead vc 600000 bc 64 eq 1000 2.6548 ms/op 2.8826 ms/op 0.92
forkChoice updateHead vc 600000 bc 64 eq 10000 2.7511 ms/op 2.8364 ms/op 0.97
forkChoice updateHead vc 600000 bc 64 eq 300000 6.9632 ms/op 6.7289 ms/op 1.03
computeDeltas 1400000 validators 0% inactive 13.230 ms/op 13.518 ms/op 0.98
computeDeltas 1400000 validators 10% inactive 12.501 ms/op 12.777 ms/op 0.98
computeDeltas 1400000 validators 20% inactive 11.800 ms/op 12.095 ms/op 0.98
computeDeltas 1400000 validators 50% inactive 9.6731 ms/op 9.8352 ms/op 0.98
computeDeltas 2100000 validators 0% inactive 19.884 ms/op 20.162 ms/op 0.99
computeDeltas 2100000 validators 10% inactive 18.856 ms/op 19.316 ms/op 0.98
computeDeltas 2100000 validators 20% inactive 17.810 ms/op 17.943 ms/op 0.99
computeDeltas 2100000 validators 50% inactive 14.480 ms/op 14.621 ms/op 0.99
altair processAttestation - 250000 vs - 7PWei normalcase 1.6825 ms/op 1.6198 ms/op 1.04
altair processAttestation - 250000 vs - 7PWei worstcase 2.5996 ms/op 2.3987 ms/op 1.08
altair processAttestation - setStatus - 1/6 committees join 104.38 us/op 106.13 us/op 0.98
altair processAttestation - setStatus - 1/3 committees join 200.46 us/op 202.89 us/op 0.99
altair processAttestation - setStatus - 1/2 committees join 287.90 us/op 287.01 us/op 1.00
altair processAttestation - setStatus - 2/3 committees join 365.00 us/op 368.76 us/op 0.99
altair processAttestation - setStatus - 4/5 committees join 511.59 us/op 510.32 us/op 1.00
altair processAttestation - setStatus - 100% committees join 598.02 us/op 602.03 us/op 0.99
altair processBlock - 250000 vs - 7PWei normalcase 3.0365 ms/op 3.2142 ms/op 0.94
altair processBlock - 250000 vs - 7PWei normalcase hashState 16.232 ms/op 12.444 ms/op 1.30
altair processBlock - 250000 vs - 7PWei worstcase 19.278 ms/op 19.820 ms/op 0.97
altair processBlock - 250000 vs - 7PWei worstcase hashState 39.349 ms/op 38.508 ms/op 1.02
phase0 processBlock - 250000 vs - 7PWei normalcase 1.3106 ms/op 1.3453 ms/op 0.97
phase0 processBlock - 250000 vs - 7PWei worstcase 16.631 ms/op 17.320 ms/op 0.96
altair processEth1Data - 250000 vs - 7PWei normalcase 290.15 us/op 311.55 us/op 0.93
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.1070 us/op 3.7080 us/op 0.84
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 22.563 us/op 23.362 us/op 0.97
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 6.7060 us/op 6.5680 us/op 1.02
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 5.6350 us/op 5.2240 us/op 1.08
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 94.652 us/op 100.30 us/op 0.94
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.4308 ms/op 1.4170 ms/op 1.01
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.8436 ms/op 1.9115 ms/op 0.96
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8297 ms/op 1.8619 ms/op 0.98
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.6325 ms/op 3.7932 ms/op 0.96
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.0820 ms/op 2.0805 ms/op 1.00
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.0827 ms/op 4.0441 ms/op 1.01
Tree 40 250000 create 307.91 ms/op 320.02 ms/op 0.96
Tree 40 250000 get(125000) 99.965 ns/op 103.87 ns/op 0.96
Tree 40 250000 set(125000) 1.0312 us/op 1.0979 us/op 0.94
Tree 40 250000 toArray() 9.6555 ms/op 9.6388 ms/op 1.00
Tree 40 250000 iterate all - toArray() + loop 9.7776 ms/op 9.7342 ms/op 1.00
Tree 40 250000 iterate all - get(i) 35.741 ms/op 37.194 ms/op 0.96
Array 250000 create 2.3497 ms/op 2.0605 ms/op 1.14
Array 250000 clone - spread 750.89 us/op 648.88 us/op 1.16
Array 250000 get(125000) 0.29200 ns/op 0.29800 ns/op 0.98
Array 250000 set(125000) 0.29900 ns/op 0.30300 ns/op 0.99
Array 250000 iterate all - loop 56.089 us/op 57.337 us/op 0.98
phase0 afterProcessEpoch - 250000 vs - 7PWei 39.335 ms/op 39.436 ms/op 1.00
Array.fill - length 1000000 2.2895 ms/op 2.3815 ms/op 0.96
Array push - length 1000000 8.0898 ms/op 7.6183 ms/op 1.06
Array.get 0.20286 ns/op 0.20628 ns/op 0.98
Uint8Array.get 0.24289 ns/op 0.24774 ns/op 0.98
phase0 beforeProcessEpoch - 250000 vs - 7PWei 13.818 ms/op 12.241 ms/op 1.13
altair processEpoch - mainnet_e81889 203.17 ms/op 245.23 ms/op 0.83
mainnet_e81889 - altair beforeProcessEpoch 21.181 ms/op 19.548 ms/op 1.08
mainnet_e81889 - altair processJustificationAndFinalization 4.3030 us/op 5.1910 us/op 0.83
mainnet_e81889 - altair processInactivityUpdates 3.5240 ms/op 3.7644 ms/op 0.94
mainnet_e81889 - altair processRewardsAndPenalties 18.107 ms/op 17.382 ms/op 1.04
mainnet_e81889 - altair processRegistryUpdates 564.00 ns/op 587.00 ns/op 0.96
mainnet_e81889 - altair processSlashings 148.00 ns/op 160.00 ns/op 0.93
mainnet_e81889 - altair processEth1DataReset 143.00 ns/op 155.00 ns/op 0.92
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.6786 ms/op 1.7260 ms/op 0.97
mainnet_e81889 - altair processSlashingsReset 699.00 ns/op 714.00 ns/op 0.98
mainnet_e81889 - altair processRandaoMixesReset 965.00 ns/op 1.0960 us/op 0.88
mainnet_e81889 - altair processHistoricalRootsUpdate 148.00 ns/op 155.00 ns/op 0.95
mainnet_e81889 - altair processParticipationFlagUpdates 445.00 ns/op 462.00 ns/op 0.96
mainnet_e81889 - altair processSyncCommitteeUpdates 119.00 ns/op 130.00 ns/op 0.92
mainnet_e81889 - altair afterProcessEpoch 41.149 ms/op 40.583 ms/op 1.01
capella processEpoch - mainnet_e217614 597.72 ms/op 817.04 ms/op 0.73
mainnet_e217614 - capella beforeProcessEpoch 55.216 ms/op 59.005 ms/op 0.94
mainnet_e217614 - capella processJustificationAndFinalization 4.3560 us/op 5.6370 us/op 0.77
mainnet_e217614 - capella processInactivityUpdates 11.599 ms/op 12.247 ms/op 0.95
mainnet_e217614 - capella processRewardsAndPenalties 87.781 ms/op 96.748 ms/op 0.91
mainnet_e217614 - capella processRegistryUpdates 4.4400 us/op 4.5700 us/op 0.97
mainnet_e217614 - capella processSlashings 147.00 ns/op 147.00 ns/op 1.00
mainnet_e217614 - capella processEth1DataReset 141.00 ns/op 146.00 ns/op 0.97
mainnet_e217614 - capella processEffectiveBalanceUpdates 5.2437 ms/op 5.9866 ms/op 0.88
mainnet_e217614 - capella processSlashingsReset 666.00 ns/op 694.00 ns/op 0.96
mainnet_e217614 - capella processRandaoMixesReset 875.00 ns/op 1.3210 us/op 0.66
mainnet_e217614 - capella processHistoricalRootsUpdate 140.00 ns/op 155.00 ns/op 0.90
mainnet_e217614 - capella processParticipationFlagUpdates 439.00 ns/op 467.00 ns/op 0.94
mainnet_e217614 - capella afterProcessEpoch 106.43 ms/op 109.96 ms/op 0.97
phase0 processEpoch - mainnet_e58758 190.42 ms/op 315.15 ms/op 0.60
mainnet_e58758 - phase0 beforeProcessEpoch 42.715 ms/op 71.026 ms/op 0.60
mainnet_e58758 - phase0 processJustificationAndFinalization 4.3440 us/op 6.5470 us/op 0.66
mainnet_e58758 - phase0 processRewardsAndPenalties 15.524 ms/op 16.802 ms/op 0.92
mainnet_e58758 - phase0 processRegistryUpdates 2.2450 us/op 2.3240 us/op 0.97
mainnet_e58758 - phase0 processSlashings 143.00 ns/op 157.00 ns/op 0.91
mainnet_e58758 - phase0 processEth1DataReset 142.00 ns/op 156.00 ns/op 0.91
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 821.59 us/op 1.3485 ms/op 0.61
mainnet_e58758 - phase0 processSlashingsReset 888.00 ns/op 931.00 ns/op 0.95
mainnet_e58758 - phase0 processRandaoMixesReset 894.00 ns/op 1.3170 us/op 0.68
mainnet_e58758 - phase0 processHistoricalRootsUpdate 142.00 ns/op 161.00 ns/op 0.88
mainnet_e58758 - phase0 processParticipationRecordUpdates 908.00 ns/op 1.1530 us/op 0.79
mainnet_e58758 - phase0 afterProcessEpoch 33.383 ms/op 34.029 ms/op 0.98
phase0 processEffectiveBalanceUpdates - 250000 normalcase 2.5563 ms/op 1.0407 ms/op 2.46
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.7695 ms/op 1.6731 ms/op 1.06
altair processInactivityUpdates - 250000 normalcase 10.441 ms/op 10.910 ms/op 0.96
altair processInactivityUpdates - 250000 worstcase 10.497 ms/op 10.626 ms/op 0.99
phase0 processRegistryUpdates - 250000 normalcase 2.5740 us/op 2.4390 us/op 1.06
phase0 processRegistryUpdates - 250000 badcase_full_deposits 145.32 us/op 144.99 us/op 1.00
phase0 processRegistryUpdates - 250000 worstcase 0.5 55.922 ms/op 51.709 ms/op 1.08
altair processRewardsAndPenalties - 250000 normalcase 14.025 ms/op 15.201 ms/op 0.92
altair processRewardsAndPenalties - 250000 worstcase 13.723 ms/op 15.602 ms/op 0.88
phase0 getAttestationDeltas - 250000 normalcase 14.374 ms/op 5.4159 ms/op 2.65
phase0 getAttestationDeltas - 250000 worstcase 5.6065 ms/op 5.5034 ms/op 1.02
phase0 processSlashings - 250000 worstcase 64.879 us/op 62.399 us/op 1.04
altair processSyncCommitteeUpdates - 250000 9.9295 ms/op 10.201 ms/op 0.97
BeaconState.hashTreeRoot - No change 176.00 ns/op 191.00 ns/op 0.92
BeaconState.hashTreeRoot - 1 full validator 57.137 us/op 57.076 us/op 1.00
BeaconState.hashTreeRoot - 32 full validator 615.19 us/op 719.35 us/op 0.86
BeaconState.hashTreeRoot - 512 full validator 6.0428 ms/op 5.9999 ms/op 1.01
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 68.708 us/op 70.494 us/op 0.97
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.0116 ms/op 1.0456 ms/op 0.97
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 12.607 ms/op 12.820 ms/op 0.98
BeaconState.hashTreeRoot - 1 balances 57.148 us/op 55.867 us/op 1.02
BeaconState.hashTreeRoot - 32 balances 533.74 us/op 540.14 us/op 0.99
BeaconState.hashTreeRoot - 512 balances 4.5687 ms/op 4.6233 ms/op 0.99
BeaconState.hashTreeRoot - 250000 balances 96.685 ms/op 89.826 ms/op 1.08
aggregationBits - 2048 els - zipIndexesInBitList 19.549 us/op 20.194 us/op 0.97
regular array get 100000 times 22.819 us/op 22.932 us/op 1.00
wrappedArray get 100000 times 22.673 us/op 22.929 us/op 0.99
arrayWithProxy get 100000 times 10.504 ms/op 10.719 ms/op 0.98
ssz.Root.equals 21.256 ns/op 21.536 ns/op 0.99
byteArrayEquals 21.026 ns/op 21.362 ns/op 0.98
Buffer.compare 8.9000 ns/op 9.6450 ns/op 0.92
processSlot - 1 slots 7.8290 us/op 8.2710 us/op 0.95
processSlot - 32 slots 1.7428 ms/op 1.8571 ms/op 0.94
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 3.3593 ms/op 2.8854 ms/op 1.16
getCommitteeAssignments - req 1 vs - 250000 vc 1.6584 ms/op 1.6924 ms/op 0.98
getCommitteeAssignments - req 100 vs - 250000 vc 3.3938 ms/op 3.4554 ms/op 0.98
getCommitteeAssignments - req 1000 vs - 250000 vc 3.6410 ms/op 3.7095 ms/op 0.98
findModifiedValidators - 10000 modified validators 652.62 ms/op 661.28 ms/op 0.99
findModifiedValidators - 1000 modified validators 584.47 ms/op 556.43 ms/op 1.05
findModifiedValidators - 100 modified validators 335.58 ms/op 323.50 ms/op 1.04
findModifiedValidators - 10 modified validators 281.01 ms/op 279.33 ms/op 1.01
findModifiedValidators - 1 modified validators 234.20 ms/op 241.05 ms/op 0.97
findModifiedValidators - no difference 227.24 ms/op 204.13 ms/op 1.11
migrate state 1500000 validators, 3400 modified, 2000 new 3.2020 s/op 2.6743 s/op 1.20
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.7500 ns/op 3.8700 ns/op 0.97
state getBlockRootAtSlot - 250000 vs - 7PWei 379.61 ns/op 287.05 ns/op 1.32
computeProposerIndex 100000 validators 1.3265 ms/op 1.3246 ms/op 1.00
getNextSyncCommitteeIndices 1000 validators 2.8746 ms/op 2.8825 ms/op 1.00
getNextSyncCommitteeIndices 10000 validators 25.245 ms/op 25.180 ms/op 1.00
getNextSyncCommitteeIndices 100000 validators 85.263 ms/op 83.309 ms/op 1.02
computeProposers - vc 250000 564.60 us/op 549.11 us/op 1.03
computeEpochShuffling - vc 250000 41.422 ms/op 40.507 ms/op 1.02
getNextSyncCommittee - vc 250000 9.7198 ms/op 9.4038 ms/op 1.03
nodejs block root to RootHex using toHex 101.62 ns/op 104.82 ns/op 0.97
nodejs block root to RootHex using toRootHex 66.661 ns/op 69.665 ns/op 0.96
nodejs fromHex(blob) 1.0049 ms/op 809.38 us/op 1.24
nodejs fromHexInto(blob) 635.70 us/op 668.08 us/op 0.95
nodejs block root to RootHex using the deprecated toHexString 476.11 ns/op 486.38 ns/op 0.98
nodejs byteArrayEquals 32 bytes (block root) 26.249 ns/op 25.866 ns/op 1.01
nodejs byteArrayEquals 48 bytes (pubkey) 37.851 ns/op 37.414 ns/op 1.01
nodejs byteArrayEquals 96 bytes (signature) 36.844 ns/op 41.037 ns/op 0.90
nodejs byteArrayEquals 1024 bytes 44.329 ns/op 43.658 ns/op 1.02
nodejs byteArrayEquals 131072 bytes (blob) 1.7606 us/op 1.7615 us/op 1.00
browser block root to RootHex using toHex 145.48 ns/op 147.46 ns/op 0.99
browser block root to RootHex using toRootHex 131.19 ns/op 135.79 ns/op 0.97
browser fromHex(blob) 1.7122 ms/op 1.5818 ms/op 1.08
browser fromHexInto(blob) 637.01 us/op 670.45 us/op 0.95
browser block root to RootHex using the deprecated toHexString 330.91 ns/op 346.46 ns/op 0.96
browser byteArrayEquals 32 bytes (block root) 27.976 ns/op 27.966 ns/op 1.00
browser byteArrayEquals 48 bytes (pubkey) 39.407 ns/op 39.443 ns/op 1.00
browser byteArrayEquals 96 bytes (signature) 73.509 ns/op 73.660 ns/op 1.00
browser byteArrayEquals 1024 bytes 755.25 ns/op 751.59 ns/op 1.00
browser byteArrayEquals 131072 bytes (blob) 94.588 us/op 94.753 us/op 1.00

by benchmarkbot/action

wemeetagain
wemeetagain previously approved these changes Jul 30, 2026

@wemeetagain wemeetagain left a comment

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.

straightforward change

@nflaig

nflaig commented Jul 30, 2026

Copy link
Copy Markdown
Member Author

need alpha.13 release, I confirmed locally that we pass the relevant spec tests

@nflaig

nflaig commented Jul 30, 2026

Copy link
Copy Markdown
Member Author

merged into glamsterdam-devnet-8

: computeBlockAttestationRewardAltair(
config,
block as altair.BeaconBlock,
preState as CachedBeaconStateAltair,

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.

we don't apply parent execution payload for preState so executionPayloadAvailability passed in is not correct
but I'd resolve it in a different PR

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.

not sure I follow correctly, maybe you can make a proposal for that, if you are looking into that right now, can target my branch, I am not sure how to merge this unless we skip a lot of spec tests

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.

fixed in #9736

twoeths
twoeths previously approved these changes Jul 31, 2026
@twoeths
twoeths enabled auto-merge (squash) July 31, 2026 06:46
@nflaig

nflaig commented Jul 31, 2026

Copy link
Copy Markdown
Member Author

@twoeths we need a spec release to merge this, I could ignore failing spec tests, but it require to skip 59 tests

@nflaig
nflaig dismissed stale reviews from twoeths and wemeetagain via bec59bb August 1, 2026 09:49
// only the pyspec BLS stub accepts. Lodestar verifies the deposit proof of possession
// inside processPendingDeposits, so the validator is never onboarded and the state root
// diverges once the pending deposit is applied.
name.includes("is_one_confirmed_passes_with_new_validator_activated_in_head_state"),

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.

@nazarhussain this might be an issue with the test harness? in any case, I would like to keep this out of this PR, so skipping for now

// TODO-GLOAS: re-enable after the gloas should_apply_proposer_boost rule is implemented.
// New test suite added in v1.7.0-alpha.13 (consensus-specs #5441); Lodestar still applies
// the pre-gloas proposer boost, so the head weight differs by the boost amount.
/^gloas\/fork_choice\/should_apply_proposer_boost\/.*$/,

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.

@ensi321 looks like we are failing the new tests you added in ethereum/consensus-specs#5441

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.

Intentional. Supposed to pass with #9233

Comment thread specrefs/.ethspecify.yml
- get_weight#gloas
- has_compounding_withdrawal_credential#gloas
- is_ancestor#gloas
- is_bid_compatible_with_head#gloas

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.

well we do have this, but it's in a different pr here #9739 and not approved, so no way I can fix this now

@twoeths
twoeths merged commit d9065a2 into unstable Aug 3, 2026
19 checks passed
@twoeths
twoeths deleted the nflaig/fix-attestation-payload-availability branch August 3, 2026 08:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants