Skip to content

fix: process payload attestations before payload envelope import - #9159

Merged
twoeths merged 1 commit into
unstablefrom
nflaig/payload-attestation
Apr 3, 2026
Merged

fix: process payload attestations before payload envelope import#9159
twoeths merged 1 commit into
unstablefrom
nflaig/payload-attestation

Conversation

@nflaig

@nflaig nflaig commented Apr 2, 2026

Copy link
Copy Markdown
Member

Follow up to #9025, there is no need to delay processing payload attestations until the payload envelope is fully imported, the gossip validation and fork choice only require beacon block to be known.

This is mostly problematic because PTC members will cast their vote based on the fact that the payload and all data is available, but not that the payload is valid (as per execution layer) and fully imported.

This timing discrepancy means that it's very likely we receive payload_attestation_message on gossip before we have fully imported the corresponding payload and currently this means we would delay re-gossiping and importing these messages for no good reason.

@nflaig
nflaig requested a review from a team as a code owner April 2, 2026 16:20

@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 network processor to stop awaiting the full payload envelope for payload_attestation_message, as only the block is required for processing. It also clarifies documentation regarding messages that require full payload variants. Feedback suggests extending this logic to beacon_attestation and beacon_aggregate_and_proof when they act as PTC votes to ensure consistent behavior across similar message types.

Comment thread packages/beacon-node/src/network/processor/index.ts
@github-actions

github-actions Bot commented Apr 2, 2026

Copy link
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 984f45f Previous: 8b81ee6 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 842.09 us/op 897.89 us/op 0.94
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 39.756 us/op 38.221 us/op 1.04
BLS verify - blst 730.84 us/op 631.71 us/op 1.16
BLS verifyMultipleSignatures 3 - blst 1.3681 ms/op 1.2890 ms/op 1.06
BLS verifyMultipleSignatures 8 - blst 2.1838 ms/op 2.0581 ms/op 1.06
BLS verifyMultipleSignatures 32 - blst 6.8620 ms/op 6.5589 ms/op 1.05
BLS verifyMultipleSignatures 64 - blst 13.288 ms/op 12.616 ms/op 1.05
BLS verifyMultipleSignatures 128 - blst 25.740 ms/op 24.455 ms/op 1.05
BLS deserializing 10000 signatures 631.04 ms/op 620.54 ms/op 1.02
BLS deserializing 100000 signatures 6.3251 s/op 6.2137 s/op 1.02
BLS verifyMultipleSignatures - same message - 3 - blst 813.50 us/op 730.95 us/op 1.11
BLS verifyMultipleSignatures - same message - 8 - blst 914.77 us/op 805.76 us/op 1.14
BLS verifyMultipleSignatures - same message - 32 - blst 1.5941 ms/op 1.4922 ms/op 1.07
BLS verifyMultipleSignatures - same message - 64 - blst 2.4194 ms/op 2.3906 ms/op 1.01
BLS verifyMultipleSignatures - same message - 128 - blst 4.0307 ms/op 3.9794 ms/op 1.01
BLS aggregatePubkeys 32 - blst 17.773 us/op 17.032 us/op 1.04
BLS aggregatePubkeys 128 - blst 63.619 us/op 61.127 us/op 1.04
getSlashingsAndExits - default max 49.231 us/op 43.859 us/op 1.12
getSlashingsAndExits - 2k 386.78 us/op 356.92 us/op 1.08
proposeBlockBody type=full, size=empty 1.1527 ms/op 532.51 us/op 2.16
isKnown best case - 1 super set check 189.00 ns/op 183.00 ns/op 1.03
isKnown normal case - 2 super set checks 167.00 ns/op 163.00 ns/op 1.02
isKnown worse case - 16 super set checks 170.00 ns/op 165.00 ns/op 1.03
validate api signedAggregateAndProof - struct 1.5712 ms/op 1.4148 ms/op 1.11
validate gossip signedAggregateAndProof - struct 1.5605 ms/op 1.4225 ms/op 1.10
batch validate gossip attestation - vc 640000 - chunk 32 107.08 us/op 100.92 us/op 1.06
batch validate gossip attestation - vc 640000 - chunk 64 94.669 us/op 88.818 us/op 1.07
batch validate gossip attestation - vc 640000 - chunk 128 89.115 us/op 82.969 us/op 1.07
batch validate gossip attestation - vc 640000 - chunk 256 85.740 us/op 80.607 us/op 1.06
bytes32 toHexString 313.00 ns/op 267.00 ns/op 1.17
bytes32 Buffer.toString(hex) 186.00 ns/op 172.00 ns/op 1.08
bytes32 Buffer.toString(hex) from Uint8Array 266.00 ns/op 245.00 ns/op 1.09
bytes32 Buffer.toString(hex) + 0x 180.00 ns/op 173.00 ns/op 1.04
Return object 10000 times 0.21400 ns/op 0.20430 ns/op 1.05
Throw Error 10000 times 3.4290 us/op 3.1469 us/op 1.09
toHex 112.66 ns/op 90.732 ns/op 1.24
Buffer.from 96.114 ns/op 83.139 ns/op 1.16
shared Buffer 64.388 ns/op 56.957 ns/op 1.13
fastMsgIdFn sha256 / 200 bytes 1.4820 us/op 1.4110 us/op 1.05
fastMsgIdFn h32 xxhash / 200 bytes 162.00 ns/op 147.00 ns/op 1.10
fastMsgIdFn h64 xxhash / 200 bytes 196.00 ns/op 194.00 ns/op 1.01
fastMsgIdFn sha256 / 1000 bytes 4.7510 us/op 4.5000 us/op 1.06
fastMsgIdFn h32 xxhash / 1000 bytes 245.00 ns/op 234.00 ns/op 1.05
fastMsgIdFn h64 xxhash / 1000 bytes 253.00 ns/op 240.00 ns/op 1.05
fastMsgIdFn sha256 / 10000 bytes 43.933 us/op 39.868 us/op 1.10
fastMsgIdFn h32 xxhash / 10000 bytes 1.2570 us/op 1.2220 us/op 1.03
fastMsgIdFn h64 xxhash / 10000 bytes 818.00 ns/op 796.00 ns/op 1.03
send data - 1000 256B messages 4.0489 ms/op 4.2410 ms/op 0.95
send data - 1000 512B messages 4.1223 ms/op 4.1894 ms/op 0.98
send data - 1000 1024B messages 4.1609 ms/op 4.2691 ms/op 0.97
send data - 1000 1200B messages 4.4316 ms/op 4.6198 ms/op 0.96
send data - 1000 2048B messages 4.5816 ms/op 4.7627 ms/op 0.96
send data - 1000 4096B messages 5.2908 ms/op 5.4421 ms/op 0.97
send data - 1000 16384B messages 34.533 ms/op 29.233 ms/op 1.18
send data - 1000 65536B messages 202.06 ms/op 210.08 ms/op 0.96
enrSubnets - fastDeserialize 64 bits 750.00 ns/op 701.00 ns/op 1.07
enrSubnets - ssz BitVector 64 bits 266.00 ns/op 248.00 ns/op 1.07
enrSubnets - fastDeserialize 4 bits 105.00 ns/op 105.00 ns/op 1.00
enrSubnets - ssz BitVector 4 bits 268.00 ns/op 252.00 ns/op 1.06
prioritizePeers score -10:0 att 32-0.1 sync 2-0 208.49 us/op 194.99 us/op 1.07
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 251.13 us/op 223.24 us/op 1.12
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 348.50 us/op 332.40 us/op 1.05
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 606.84 us/op 575.68 us/op 1.05
prioritizePeers score 0:0 att 64-1 sync 4-1 711.52 us/op 674.80 us/op 1.05
array of 16000 items push then shift 1.2808 us/op 1.2372 us/op 1.04
LinkedList of 16000 items push then shift 6.8470 ns/op 7.2270 ns/op 0.95
array of 16000 items push then pop 67.278 ns/op 67.046 ns/op 1.00
LinkedList of 16000 items push then pop 6.0630 ns/op 5.7940 ns/op 1.05
array of 24000 items push then shift 1.9008 us/op 1.8070 us/op 1.05
LinkedList of 24000 items push then shift 6.4020 ns/op 6.8190 ns/op 0.94
array of 24000 items push then pop 92.614 ns/op 93.670 ns/op 0.99
LinkedList of 24000 items push then pop 6.0420 ns/op 5.8340 ns/op 1.04
intersect bitArray bitLen 8 4.7260 ns/op 4.6390 ns/op 1.02
intersect array and set length 8 32.327 ns/op 29.482 ns/op 1.10
intersect bitArray bitLen 128 24.877 ns/op 23.392 ns/op 1.06
intersect array and set length 128 509.23 ns/op 479.55 ns/op 1.06
bitArray.getTrueBitIndexes() bitLen 128 1.0030 us/op 1.0180 us/op 0.99
bitArray.getTrueBitIndexes() bitLen 248 1.7690 us/op 1.7130 us/op 1.03
bitArray.getTrueBitIndexes() bitLen 512 3.5750 us/op 3.4970 us/op 1.02
Full columns - reconstruct all 6 blobs 124.86 us/op 145.41 us/op 0.86
Full columns - reconstruct half of the blobs out of 6 68.134 us/op 124.54 us/op 0.55
Full columns - reconstruct single blob out of 6 31.731 us/op 31.465 us/op 1.01
Half columns - reconstruct all 6 blobs 377.51 ms/op 372.07 ms/op 1.01
Half columns - reconstruct half of the blobs out of 6 190.00 ms/op 187.02 ms/op 1.02
Half columns - reconstruct single blob out of 6 67.109 ms/op 67.171 ms/op 1.00
Full columns - reconstruct all 10 blobs 179.18 us/op 245.36 us/op 0.73
Full columns - reconstruct half of the blobs out of 10 141.24 us/op 139.53 us/op 1.01
Full columns - reconstruct single blob out of 10 34.967 us/op 43.945 us/op 0.80
Half columns - reconstruct all 10 blobs 625.63 ms/op 629.27 ms/op 0.99
Half columns - reconstruct half of the blobs out of 10 319.57 ms/op 308.78 ms/op 1.03
Half columns - reconstruct single blob out of 10 69.262 ms/op 65.549 ms/op 1.06
Full columns - reconstruct all 20 blobs 1.7326 ms/op 2.0418 ms/op 0.85
Full columns - reconstruct half of the blobs out of 20 173.27 us/op 376.49 us/op 0.46
Full columns - reconstruct single blob out of 20 33.315 us/op 25.707 us/op 1.30
Half columns - reconstruct all 20 blobs 1.3198 s/op 1.2100 s/op 1.09
Half columns - reconstruct half of the blobs out of 20 650.36 ms/op 615.53 ms/op 1.06
Half columns - reconstruct single blob out of 20 70.679 ms/op 67.258 ms/op 1.05
Set add up to 64 items then delete first 2.1798 us/op 2.0502 us/op 1.06
OrderedSet add up to 64 items then delete first 3.4058 us/op 3.2482 us/op 1.05
Set add up to 64 items then delete last 2.4215 us/op 2.0523 us/op 1.18
OrderedSet add up to 64 items then delete last 3.3208 us/op 3.1296 us/op 1.06
Set add up to 64 items then delete middle 2.1927 us/op 2.0259 us/op 1.08
OrderedSet add up to 64 items then delete middle 4.8050 us/op 4.4952 us/op 1.07
Set add up to 128 items then delete first 4.3756 us/op 4.0021 us/op 1.09
OrderedSet add up to 128 items then delete first 6.6716 us/op 5.9882 us/op 1.11
Set add up to 128 items then delete last 4.0624 us/op 3.6881 us/op 1.10
OrderedSet add up to 128 items then delete last 5.8625 us/op 5.5092 us/op 1.06
Set add up to 128 items then delete middle 4.0029 us/op 3.6629 us/op 1.09
OrderedSet add up to 128 items then delete middle 11.873 us/op 11.354 us/op 1.05
Set add up to 256 items then delete first 8.2594 us/op 7.5123 us/op 1.10
OrderedSet add up to 256 items then delete first 12.510 us/op 11.666 us/op 1.07
Set add up to 256 items then delete last 8.0608 us/op 7.3153 us/op 1.10
OrderedSet add up to 256 items then delete last 12.113 us/op 11.166 us/op 1.08
Set add up to 256 items then delete middle 7.9954 us/op 7.2048 us/op 1.11
OrderedSet add up to 256 items then delete middle 35.453 us/op 37.315 us/op 0.95
pass gossip attestations to forkchoice per slot 2.5590 ms/op 2.4796 ms/op 1.03
forkChoice updateHead vc 100000 bc 64 eq 0 485.12 us/op 381.16 us/op 1.27
forkChoice updateHead vc 600000 bc 64 eq 0 2.9487 ms/op 2.2751 ms/op 1.30
forkChoice updateHead vc 1000000 bc 64 eq 0 4.9237 ms/op 3.7688 ms/op 1.31
forkChoice updateHead vc 600000 bc 320 eq 0 2.9528 ms/op 2.2909 ms/op 1.29
forkChoice updateHead vc 600000 bc 1200 eq 0 3.1100 ms/op 2.3395 ms/op 1.33
forkChoice updateHead vc 600000 bc 7200 eq 0 3.4352 ms/op 2.6996 ms/op 1.27
forkChoice updateHead vc 600000 bc 64 eq 1000 3.4837 ms/op 2.8557 ms/op 1.22
forkChoice updateHead vc 600000 bc 64 eq 10000 3.6240 ms/op 2.9894 ms/op 1.21
forkChoice updateHead vc 600000 bc 64 eq 300000 8.1607 ms/op 7.5422 ms/op 1.08
computeDeltas 1400000 validators 0% inactive 11.669 ms/op 12.927 ms/op 0.90
computeDeltas 1400000 validators 10% inactive 10.636 ms/op 12.531 ms/op 0.85
computeDeltas 1400000 validators 20% inactive 9.6372 ms/op 10.973 ms/op 0.88
computeDeltas 1400000 validators 50% inactive 7.1705 ms/op 8.4396 ms/op 0.85
computeDeltas 2100000 validators 0% inactive 17.013 ms/op 19.131 ms/op 0.89
computeDeltas 2100000 validators 10% inactive 16.000 ms/op 17.984 ms/op 0.89
computeDeltas 2100000 validators 20% inactive 14.463 ms/op 16.265 ms/op 0.89
computeDeltas 2100000 validators 50% inactive 10.727 ms/op 12.465 ms/op 0.86
altair processAttestation - 250000 vs - 7PWei normalcase 1.7451 ms/op 2.0687 ms/op 0.84
altair processAttestation - 250000 vs - 7PWei worstcase 2.4039 ms/op 2.9528 ms/op 0.81
altair processAttestation - setStatus - 1/6 committees join 105.59 us/op 100.48 us/op 1.05
altair processAttestation - setStatus - 1/3 committees join 207.63 us/op 198.78 us/op 1.04
altair processAttestation - setStatus - 1/2 committees join 282.78 us/op 274.94 us/op 1.03
altair processAttestation - setStatus - 2/3 committees join 391.17 us/op 352.06 us/op 1.11
altair processAttestation - setStatus - 4/5 committees join 531.03 us/op 501.95 us/op 1.06
altair processAttestation - setStatus - 100% committees join 610.54 us/op 571.47 us/op 1.07
altair processBlock - 250000 vs - 7PWei normalcase 3.4357 ms/op 4.9806 ms/op 0.69
altair processBlock - 250000 vs - 7PWei normalcase hashState 15.976 ms/op 16.207 ms/op 0.99
altair processBlock - 250000 vs - 7PWei worstcase 21.595 ms/op 21.413 ms/op 1.01
altair processBlock - 250000 vs - 7PWei worstcase hashState 41.539 ms/op 44.937 ms/op 0.92
phase0 processBlock - 250000 vs - 7PWei normalcase 1.3384 ms/op 1.3962 ms/op 0.96
phase0 processBlock - 250000 vs - 7PWei worstcase 17.490 ms/op 17.162 ms/op 1.02
altair processEth1Data - 250000 vs - 7PWei normalcase 305.84 us/op 306.32 us/op 1.00
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.0780 us/op 3.2580 us/op 0.94
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 19.812 us/op 22.569 us/op 0.88
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 6.0040 us/op 6.0710 us/op 0.99
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.8780 us/op 4.0510 us/op 0.96
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 98.511 us/op 90.966 us/op 1.08
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.4313 ms/op 1.3343 ms/op 1.07
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.8886 ms/op 1.7402 ms/op 1.09
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.9343 ms/op 1.7240 ms/op 1.12
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.6642 ms/op 3.5574 ms/op 1.03
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.1664 ms/op 2.0206 ms/op 1.07
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.9870 ms/op 3.9670 ms/op 1.01
Tree 40 250000 create 331.53 ms/op 322.57 ms/op 1.03
Tree 40 250000 get(125000) 99.437 ns/op 88.707 ns/op 1.12
Tree 40 250000 set(125000) 1.0749 us/op 973.93 ns/op 1.10
Tree 40 250000 toArray() 9.8364 ms/op 14.299 ms/op 0.69
Tree 40 250000 iterate all - toArray() + loop 9.7808 ms/op 12.230 ms/op 0.80
Tree 40 250000 iterate all - get(i) 37.135 ms/op 37.712 ms/op 0.98
Array 250000 create 2.0703 ms/op 2.1518 ms/op 0.96
Array 250000 clone - spread 647.42 us/op 660.31 us/op 0.98
Array 250000 get(125000) 0.29800 ns/op 0.30100 ns/op 0.99
Array 250000 set(125000) 0.30200 ns/op 0.29600 ns/op 1.02
Array 250000 iterate all - loop 56.432 us/op 57.084 us/op 0.99
phase0 afterProcessEpoch - 250000 vs - 7PWei 39.762 ms/op 48.833 ms/op 0.81
Array.fill - length 1000000 2.3090 ms/op 2.0327 ms/op 1.14
Array push - length 1000000 7.9401 ms/op 8.6210 ms/op 0.92
Array.get 0.20435 ns/op 0.19556 ns/op 1.04
Uint8Array.get 0.24981 ns/op 0.22133 ns/op 1.13
phase0 beforeProcessEpoch - 250000 vs - 7PWei 14.638 ms/op 14.026 ms/op 1.04
altair processEpoch - mainnet_e81889 259.33 ms/op 257.89 ms/op 1.01
mainnet_e81889 - altair beforeProcessEpoch 20.047 ms/op 14.809 ms/op 1.35
mainnet_e81889 - altair processJustificationAndFinalization 5.5590 us/op 5.8320 us/op 0.95
mainnet_e81889 - altair processInactivityUpdates 3.6615 ms/op 4.4666 ms/op 0.82
mainnet_e81889 - altair processRewardsAndPenalties 18.925 ms/op 21.060 ms/op 0.90
mainnet_e81889 - altair processRegistryUpdates 538.00 ns/op 526.00 ns/op 1.02
mainnet_e81889 - altair processSlashings 133.00 ns/op 136.00 ns/op 0.98
mainnet_e81889 - altair processEth1DataReset 130.00 ns/op 126.00 ns/op 1.03
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.6980 ms/op 1.2895 ms/op 1.32
mainnet_e81889 - altair processSlashingsReset 688.00 ns/op 690.00 ns/op 1.00
mainnet_e81889 - altair processRandaoMixesReset 1.0750 us/op 1.1620 us/op 0.93
mainnet_e81889 - altair processHistoricalRootsUpdate 132.00 ns/op 127.00 ns/op 1.04
mainnet_e81889 - altair processParticipationFlagUpdates 412.00 ns/op 415.00 ns/op 0.99
mainnet_e81889 - altair processSyncCommitteeUpdates 106.00 ns/op 100.00 ns/op 1.06
mainnet_e81889 - altair afterProcessEpoch 40.872 ms/op 40.599 ms/op 1.01
capella processEpoch - mainnet_e217614 748.87 ms/op 817.38 ms/op 0.92
mainnet_e217614 - capella beforeProcessEpoch 60.189 ms/op 56.897 ms/op 1.06
mainnet_e217614 - capella processJustificationAndFinalization 5.4140 us/op 5.9900 us/op 0.90
mainnet_e217614 - capella processInactivityUpdates 13.363 ms/op 15.084 ms/op 0.89
mainnet_e217614 - capella processRewardsAndPenalties 94.012 ms/op 91.579 ms/op 1.03
mainnet_e217614 - capella processRegistryUpdates 4.4860 us/op 4.2890 us/op 1.05
mainnet_e217614 - capella processSlashings 133.00 ns/op 125.00 ns/op 1.06
mainnet_e217614 - capella processEth1DataReset 131.00 ns/op 123.00 ns/op 1.07
mainnet_e217614 - capella processEffectiveBalanceUpdates 5.6810 ms/op 13.188 ms/op 0.43
mainnet_e217614 - capella processSlashingsReset 672.00 ns/op 664.00 ns/op 1.01
mainnet_e217614 - capella processRandaoMixesReset 995.00 ns/op 1.1750 us/op 0.85
mainnet_e217614 - capella processHistoricalRootsUpdate 132.00 ns/op 127.00 ns/op 1.04
mainnet_e217614 - capella processParticipationFlagUpdates 422.00 ns/op 406.00 ns/op 1.04
mainnet_e217614 - capella afterProcessEpoch 110.54 ms/op 104.29 ms/op 1.06
phase0 processEpoch - mainnet_e58758 263.37 ms/op 310.67 ms/op 0.85
mainnet_e58758 - phase0 beforeProcessEpoch 51.464 ms/op 70.901 ms/op 0.73
mainnet_e58758 - phase0 processJustificationAndFinalization 5.2190 us/op 6.4140 us/op 0.81
mainnet_e58758 - phase0 processRewardsAndPenalties 16.488 ms/op 15.645 ms/op 1.05
mainnet_e58758 - phase0 processRegistryUpdates 2.2910 us/op 2.1620 us/op 1.06
mainnet_e58758 - phase0 processSlashings 132.00 ns/op 129.00 ns/op 1.02
mainnet_e58758 - phase0 processEth1DataReset 124.00 ns/op 123.00 ns/op 1.01
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.5327 ms/op 1.2125 ms/op 1.26
mainnet_e58758 - phase0 processSlashingsReset 865.00 ns/op 876.00 ns/op 0.99
mainnet_e58758 - phase0 processRandaoMixesReset 1.0860 us/op 1.3150 us/op 0.83
mainnet_e58758 - phase0 processHistoricalRootsUpdate 132.00 ns/op 129.00 ns/op 1.02
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.0240 us/op 1.1340 us/op 0.90
mainnet_e58758 - phase0 afterProcessEpoch 33.069 ms/op 33.375 ms/op 0.99
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.2810 ms/op 966.36 us/op 1.33
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.6370 ms/op 1.5378 ms/op 1.06
altair processInactivityUpdates - 250000 normalcase 10.727 ms/op 11.442 ms/op 0.94
altair processInactivityUpdates - 250000 worstcase 10.656 ms/op 10.811 ms/op 0.99
phase0 processRegistryUpdates - 250000 normalcase 2.6100 us/op 2.0610 us/op 1.27
phase0 processRegistryUpdates - 250000 badcase_full_deposits 164.51 us/op 136.02 us/op 1.21
phase0 processRegistryUpdates - 250000 worstcase 0.5 59.548 ms/op 67.360 ms/op 0.88
altair processRewardsAndPenalties - 250000 normalcase 14.603 ms/op 15.758 ms/op 0.93
altair processRewardsAndPenalties - 250000 worstcase 14.438 ms/op 15.005 ms/op 0.96
phase0 getAttestationDeltas - 250000 normalcase 5.3937 ms/op 5.2174 ms/op 1.03
phase0 getAttestationDeltas - 250000 worstcase 5.4334 ms/op 5.3097 ms/op 1.02
phase0 processSlashings - 250000 worstcase 68.711 us/op 63.371 us/op 1.08
altair processSyncCommitteeUpdates - 250000 10.030 ms/op 9.9210 ms/op 1.01
BeaconState.hashTreeRoot - No change 171.00 ns/op 163.00 ns/op 1.05
BeaconState.hashTreeRoot - 1 full validator 59.335 us/op 71.329 us/op 0.83
BeaconState.hashTreeRoot - 32 full validator 644.79 us/op 868.70 us/op 0.74
BeaconState.hashTreeRoot - 512 full validator 6.1267 ms/op 7.6902 ms/op 0.80
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 71.195 us/op 104.94 us/op 0.68
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.2861 ms/op 1.4138 ms/op 0.91
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 13.397 ms/op 17.271 ms/op 0.78
BeaconState.hashTreeRoot - 1 balances 55.802 us/op 83.880 us/op 0.67
BeaconState.hashTreeRoot - 32 balances 573.06 us/op 778.16 us/op 0.74
BeaconState.hashTreeRoot - 512 balances 4.7083 ms/op 5.8731 ms/op 0.80
BeaconState.hashTreeRoot - 250000 balances 117.37 ms/op 123.38 ms/op 0.95
aggregationBits - 2048 els - zipIndexesInBitList 20.986 us/op 19.298 us/op 1.09
regular array get 100000 times 22.904 us/op 22.467 us/op 1.02
wrappedArray get 100000 times 22.781 us/op 22.380 us/op 1.02
arrayWithProxy get 100000 times 11.039 ms/op 9.2294 ms/op 1.20
ssz.Root.equals 21.388 ns/op 20.743 ns/op 1.03
byteArrayEquals 21.200 ns/op 20.533 ns/op 1.03
Buffer.compare 9.7800 ns/op 8.5910 ns/op 1.14
processSlot - 1 slots 8.0220 us/op 8.3290 us/op 0.96
processSlot - 32 slots 1.5652 ms/op 2.0012 ms/op 0.78
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 3.8558 ms/op 5.1630 ms/op 0.75
getCommitteeAssignments - req 1 vs - 250000 vc 1.7383 ms/op 1.7021 ms/op 1.02
getCommitteeAssignments - req 100 vs - 250000 vc 3.4376 ms/op 3.4288 ms/op 1.00
getCommitteeAssignments - req 1000 vs - 250000 vc 3.6757 ms/op 3.7614 ms/op 0.98
findModifiedValidators - 10000 modified validators 754.47 ms/op 753.38 ms/op 1.00
findModifiedValidators - 1000 modified validators 490.35 ms/op 550.29 ms/op 0.89
findModifiedValidators - 100 modified validators 287.61 ms/op 367.83 ms/op 0.78
findModifiedValidators - 10 modified validators 218.46 ms/op 283.39 ms/op 0.77
findModifiedValidators - 1 modified validators 227.16 ms/op 188.46 ms/op 1.21
findModifiedValidators - no difference 184.06 ms/op 153.76 ms/op 1.20
migrate state 1500000 validators, 3400 modified, 2000 new 2.6893 s/op 3.2084 s/op 0.84
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.6800 ns/op 3.5400 ns/op 1.04
state getBlockRootAtSlot - 250000 vs - 7PWei 295.34 ns/op 395.23 ns/op 0.75
computeProposerIndex 100000 validators 1.3208 ms/op 1.2770 ms/op 1.03
getNextSyncCommitteeIndices 1000 validators 2.8449 ms/op 2.7419 ms/op 1.04
getNextSyncCommitteeIndices 10000 validators 25.084 ms/op 24.029 ms/op 1.04
getNextSyncCommitteeIndices 100000 validators 86.331 ms/op 78.952 ms/op 1.09
computeProposers - vc 250000 543.81 us/op 521.57 us/op 1.04
computeEpochShuffling - vc 250000 38.695 ms/op 36.731 ms/op 1.05
getNextSyncCommittee - vc 250000 9.5106 ms/op 8.9951 ms/op 1.06
nodejs block root to RootHex using toHex 119.33 ns/op 98.191 ns/op 1.22
nodejs block root to RootHex using toRootHex 76.836 ns/op 62.993 ns/op 1.22
nodejs fromHex(blob) 774.75 us/op 720.99 us/op 1.07
nodejs fromHexInto(blob) 663.66 us/op 593.87 us/op 1.12
nodejs block root to RootHex using the deprecated toHexString 498.91 ns/op 339.24 ns/op 1.47
nodejs byteArrayEquals 32 bytes (block root) 25.751 ns/op 24.618 ns/op 1.05
nodejs byteArrayEquals 48 bytes (pubkey) 37.379 ns/op 35.499 ns/op 1.05
nodejs byteArrayEquals 96 bytes (signature) 35.438 ns/op 31.034 ns/op 1.14
nodejs byteArrayEquals 1024 bytes 43.159 ns/op 37.023 ns/op 1.17
nodejs byteArrayEquals 131072 bytes (blob) 1.7652 us/op 1.6418 us/op 1.08
browser block root to RootHex using toHex 145.45 ns/op 136.29 ns/op 1.07
browser block root to RootHex using toRootHex 131.11 ns/op 123.32 ns/op 1.06
browser fromHex(blob) 1.6018 ms/op 1.4424 ms/op 1.11
browser fromHexInto(blob) 659.50 us/op 597.42 us/op 1.10
browser block root to RootHex using the deprecated toHexString 508.50 ns/op 447.52 ns/op 1.14
browser byteArrayEquals 32 bytes (block root) 27.513 ns/op 26.764 ns/op 1.03
browser byteArrayEquals 48 bytes (pubkey) 38.813 ns/op 37.439 ns/op 1.04
browser byteArrayEquals 96 bytes (signature) 73.010 ns/op 70.064 ns/op 1.04
browser byteArrayEquals 1024 bytes 741.72 ns/op 715.09 ns/op 1.04
browser byteArrayEquals 131072 bytes (blob) 93.322 us/op 90.022 us/op 1.04

by benchmarkbot/action

@twoeths
twoeths merged commit bc0be71 into unstable Apr 3, 2026
19 of 21 checks passed
@twoeths
twoeths deleted the nflaig/payload-attestation branch April 3, 2026 02:07
@codecov

codecov Bot commented Apr 3, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 52.52%. Comparing base (e8407e9) to head (aed1d92).
⚠️ Report is 2 commits behind head on unstable.

Additional details and impacted files
@@            Coverage Diff            @@
##           unstable    #9159   +/-   ##
=========================================
  Coverage     52.52%   52.52%           
=========================================
  Files           848      848           
  Lines         61447    61447           
  Branches       4528     4528           
=========================================
  Hits          32272    32272           
  Misses        29110    29110           
  Partials         65       65           
🚀 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.

@wemeetagain

Copy link
Copy Markdown
Member

🎉 This PR is included in v1.42.0 🎉

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.

3 participants