Skip to content

test: deneb and electra gossip validation spec tests#9372

Draft
nflaig wants to merge 8 commits into
unstablefrom
nflaig/deneb-gossip-spec-tests
Draft

test: deneb and electra gossip validation spec tests#9372
nflaig wants to merge 8 commits into
unstablefrom
nflaig/deneb-gossip-spec-tests

Conversation

@nflaig
Copy link
Copy Markdown
Member

@nflaig nflaig commented May 14, 2026

Copy link
Copy Markdown
Contributor

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

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 and refines gossip validation for blob sidecars to align with the Deneb specification, including tracking seen sidecar tuples, validating proposer indices, and checking finalized ancestors. It also updates attestation slot range verification for EIP-7045 and adds pre-Capella checks for BLS-to-execution changes. Feedback suggests updating a comment to correctly describe the sidecar tracking tuple and reordering validation steps to perform the expensive KZG proof verification after the proposer check to improve efficiency.

Comment thread packages/beacon-node/src/chain/errors/blobSidecarError.ts Outdated
Comment on lines +190 to +207
// [REJECT] The sidecar is proposed by the expected proposer_index
// (if shuffling is not available, IGNORE instead and MAY be queued for later)
const blockState = await chain.regen
.getBlockSlotState(parentBlock, blobSlot, {dontTransferCache: true}, RegenCaller.validateGossipBlock)
.catch(() => {
throw new BlobSidecarGossipError(GossipAction.IGNORE, {
code: BlobSidecarErrorCode.PARENT_UNKNOWN,
parentRoot,
blockRoot: blockHex,
slot: blobSlot,
});
});
if (blockState.getBeaconProposer(blobSlot) !== proposerIndex) {
throw new BlobSidecarGossipError(GossipAction.REJECT, {
code: BlobSidecarErrorCode.INCORRECT_PROPOSER,
proposerIndex,
});
}
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 proposer index validation (which may involve an expensive state regeneration via regen.getBlockSlotState) is currently performed after the expensive KZG proof verification (line 171).

Following the spec's recommended validation order, the proposer check should be performed before the blob (KZG) validation. If the proposer is incorrect, the sidecar should be rejected immediately without wasting CPU cycles on KZG verification.

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.

our check is as per spec, this is also dead code, generally we should follow spec order unless spec has a order that doesn't make sense in terms of running cheap vs. expensive checks first

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.

but this needs more review, ideally we wanna run cheap checks first

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 14, 2026

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: f5da76f Previous: 055b83c Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.1416 ms/op 1.2316 ms/op 0.93
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 39.650 us/op 39.964 us/op 0.99
BLS verify - blst 746.92 us/op 631.51 us/op 1.18
BLS verifyMultipleSignatures 3 - blst 1.3682 ms/op 1.3022 ms/op 1.05
BLS verifyMultipleSignatures 8 - blst 2.1753 ms/op 2.0754 ms/op 1.05
BLS verifyMultipleSignatures 32 - blst 6.9420 ms/op 6.4593 ms/op 1.07
BLS verifyMultipleSignatures 64 - blst 13.369 ms/op 12.760 ms/op 1.05
BLS verifyMultipleSignatures 128 - blst 26.359 ms/op 25.005 ms/op 1.05
BLS deserializing 10000 signatures 612.37 ms/op 622.44 ms/op 0.98
BLS deserializing 100000 signatures 6.1827 s/op 6.2463 s/op 0.99
BLS verifyMultipleSignatures - same message - 3 - blst 816.69 us/op 769.41 us/op 1.06
BLS verifyMultipleSignatures - same message - 8 - blst 927.28 us/op 817.55 us/op 1.13
BLS verifyMultipleSignatures - same message - 32 - blst 1.5755 ms/op 1.4765 ms/op 1.07
BLS verifyMultipleSignatures - same message - 64 - blst 2.4097 ms/op 2.2342 ms/op 1.08
BLS verifyMultipleSignatures - same message - 128 - blst 4.0503 ms/op 3.9335 ms/op 1.03
BLS aggregatePubkeys 32 - blst 17.901 us/op 17.595 us/op 1.02
BLS aggregatePubkeys 128 - blst 63.901 us/op 62.686 us/op 1.02
getSlashingsAndExits - default max 44.704 us/op 50.722 us/op 0.88
getSlashingsAndExits - 2k 340.70 us/op 413.55 us/op 0.82
proposeBlockBody type=full, size=empty 1.1840 ms/op 1.3840 ms/op 0.86
isKnown best case - 1 super set check 161.00 ns/op 183.00 ns/op 0.88
isKnown normal case - 2 super set checks 161.00 ns/op 176.00 ns/op 0.91
isKnown worse case - 16 super set checks 158.00 ns/op 181.00 ns/op 0.87
validate api signedAggregateAndProof - struct 1.5381 ms/op 1.4431 ms/op 1.07
validate gossip signedAggregateAndProof - struct 1.5340 ms/op 1.4392 ms/op 1.07
batch validate gossip attestation - vc 640000 - chunk 32 104.57 us/op 102.42 us/op 1.02
batch validate gossip attestation - vc 640000 - chunk 64 93.910 us/op 90.380 us/op 1.04
batch validate gossip attestation - vc 640000 - chunk 128 85.015 us/op 84.996 us/op 1.00
batch validate gossip attestation - vc 640000 - chunk 256 82.996 us/op 81.971 us/op 1.01
bytes32 toHexString 275.00 ns/op 293.00 ns/op 0.94
bytes32 Buffer.toString(hex) 152.00 ns/op 182.00 ns/op 0.84
bytes32 Buffer.toString(hex) from Uint8Array 213.00 ns/op 242.00 ns/op 0.88
bytes32 Buffer.toString(hex) + 0x 155.00 ns/op 186.00 ns/op 0.83
Return object 10000 times 0.20510 ns/op 0.21120 ns/op 0.97
Throw Error 10000 times 3.1783 us/op 3.1587 us/op 1.01
toHex 91.888 ns/op 85.446 ns/op 1.08
Buffer.from 75.631 ns/op 78.804 ns/op 0.96
shared Buffer 49.215 ns/op 49.846 ns/op 0.99
fastMsgIdFn sha256 / 200 bytes 1.4120 us/op 1.4250 us/op 0.99
fastMsgIdFn h32 xxhash / 200 bytes 151.00 ns/op 172.00 ns/op 0.88
fastMsgIdFn h64 xxhash / 200 bytes 203.00 ns/op 213.00 ns/op 0.95
fastMsgIdFn sha256 / 1000 bytes 4.7920 us/op 4.5640 us/op 1.05
fastMsgIdFn h32 xxhash / 1000 bytes 242.00 ns/op 257.00 ns/op 0.94
fastMsgIdFn h64 xxhash / 1000 bytes 253.00 ns/op 258.00 ns/op 0.98
fastMsgIdFn sha256 / 10000 bytes 42.373 us/op 40.351 us/op 1.05
fastMsgIdFn h32 xxhash / 10000 bytes 1.2800 us/op 1.2580 us/op 1.02
fastMsgIdFn h64 xxhash / 10000 bytes 826.00 ns/op 813.00 ns/op 1.02
send data - 1000 256B messages 4.0744 ms/op 4.2977 ms/op 0.95
send data - 1000 512B messages 4.2488 ms/op 4.5096 ms/op 0.94
send data - 1000 1024B messages 4.7363 ms/op 4.5447 ms/op 1.04
send data - 1000 1200B messages 4.8192 ms/op 4.9802 ms/op 0.97
send data - 1000 2048B messages 4.8670 ms/op 5.0919 ms/op 0.96
send data - 1000 4096B messages 5.6558 ms/op 6.2954 ms/op 0.90
send data - 1000 16384B messages 15.223 ms/op 36.593 ms/op 0.42
send data - 1000 65536B messages 170.53 ms/op 133.56 ms/op 1.28
enrSubnets - fastDeserialize 64 bits 723.00 ns/op 722.00 ns/op 1.00
enrSubnets - ssz BitVector 64 bits 257.00 ns/op 280.00 ns/op 0.92
enrSubnets - fastDeserialize 4 bits 100.00 ns/op 125.00 ns/op 0.80
enrSubnets - ssz BitVector 4 bits 269.00 ns/op 277.00 ns/op 0.97
prioritizePeers score -10:0 att 32-0.1 sync 2-0 206.58 us/op 199.66 us/op 1.03
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 236.31 us/op 239.16 us/op 0.99
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 362.37 us/op 338.31 us/op 1.07
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 632.56 us/op 592.93 us/op 1.07
prioritizePeers score 0:0 att 64-1 sync 4-1 711.55 us/op 688.19 us/op 1.03
array of 16000 items push then shift 1.2207 us/op 1.2257 us/op 1.00
LinkedList of 16000 items push then shift 7.6430 ns/op 7.2080 ns/op 1.06
array of 16000 items push then pop 71.342 ns/op 67.899 ns/op 1.05
LinkedList of 16000 items push then pop 6.0460 ns/op 5.7240 ns/op 1.06
array of 24000 items push then shift 1.7981 us/op 1.7490 us/op 1.03
LinkedList of 24000 items push then shift 7.8530 ns/op 7.0570 ns/op 1.11
array of 24000 items push then pop 99.538 ns/op 92.525 ns/op 1.08
LinkedList of 24000 items push then pop 5.9980 ns/op 5.7870 ns/op 1.04
intersect bitArray bitLen 8 4.5950 ns/op 4.5530 ns/op 1.01
intersect array and set length 8 28.442 ns/op 27.913 ns/op 1.02
intersect bitArray bitLen 128 23.146 ns/op 22.821 ns/op 1.01
intersect array and set length 128 481.12 ns/op 468.07 ns/op 1.03
bitArray.getTrueBitIndexes() bitLen 128 1.0370 us/op 950.00 ns/op 1.09
bitArray.getTrueBitIndexes() bitLen 248 1.7690 us/op 1.7010 us/op 1.04
bitArray.getTrueBitIndexes() bitLen 512 3.5490 us/op 3.4940 us/op 1.02
Full columns - reconstruct all 6 blobs 395.19 us/op 153.75 us/op 2.57
Full columns - reconstruct half of the blobs out of 6 73.029 us/op 92.647 us/op 0.79
Full columns - reconstruct single blob out of 6 29.850 us/op 45.862 us/op 0.65
Half columns - reconstruct all 6 blobs 388.82 ms/op 374.10 ms/op 1.04
Half columns - reconstruct half of the blobs out of 6 193.70 ms/op 186.64 ms/op 1.04
Half columns - reconstruct single blob out of 6 69.455 ms/op 67.360 ms/op 1.03
Full columns - reconstruct all 10 blobs 210.39 us/op 413.21 us/op 0.51
Full columns - reconstruct half of the blobs out of 10 104.55 us/op 145.45 us/op 0.72
Full columns - reconstruct single blob out of 10 31.225 us/op 44.638 us/op 0.70
Half columns - reconstruct all 10 blobs 643.80 ms/op 611.04 ms/op 1.05
Half columns - reconstruct half of the blobs out of 10 325.30 ms/op 308.57 ms/op 1.05
Half columns - reconstruct single blob out of 10 70.640 ms/op 65.880 ms/op 1.07
Full columns - reconstruct all 20 blobs 1.9366 ms/op 1.2830 ms/op 1.51
Full columns - reconstruct half of the blobs out of 20 197.53 us/op 399.63 us/op 0.49
Full columns - reconstruct single blob out of 20 31.265 us/op 46.565 us/op 0.67
Half columns - reconstruct all 20 blobs 1.2868 s/op 1.2174 s/op 1.06
Half columns - reconstruct half of the blobs out of 20 646.36 ms/op 620.07 ms/op 1.04
Half columns - reconstruct single blob out of 20 69.831 ms/op 67.167 ms/op 1.04
Set add up to 64 items then delete first 2.1645 us/op 2.0953 us/op 1.03
OrderedSet add up to 64 items then delete first 3.3758 us/op 3.3650 us/op 1.00
Set add up to 64 items then delete last 2.1589 us/op 2.0812 us/op 1.04
OrderedSet add up to 64 items then delete last 3.4352 us/op 3.2339 us/op 1.06
Set add up to 64 items then delete middle 2.1754 us/op 2.0834 us/op 1.04
OrderedSet add up to 64 items then delete middle 4.8981 us/op 4.6924 us/op 1.04
Set add up to 128 items then delete first 4.2314 us/op 4.1235 us/op 1.03
OrderedSet add up to 128 items then delete first 6.3403 us/op 6.2335 us/op 1.02
Set add up to 128 items then delete last 3.9872 us/op 3.7311 us/op 1.07
OrderedSet add up to 128 items then delete last 6.1515 us/op 5.7445 us/op 1.07
Set add up to 128 items then delete middle 3.9797 us/op 3.7094 us/op 1.07
OrderedSet add up to 128 items then delete middle 13.653 us/op 11.264 us/op 1.21
Set add up to 256 items then delete first 8.4314 us/op 7.7145 us/op 1.09
OrderedSet add up to 256 items then delete first 14.360 us/op 12.072 us/op 1.19
Set add up to 256 items then delete last 9.5848 us/op 7.5534 us/op 1.27
OrderedSet add up to 256 items then delete last 14.189 us/op 11.639 us/op 1.22
Set add up to 256 items then delete middle 8.0981 us/op 7.5265 us/op 1.08
OrderedSet add up to 256 items then delete middle 38.303 us/op 35.472 us/op 1.08
pass gossip attestations to forkchoice per slot 2.5692 ms/op 2.5360 ms/op 1.01
forkChoice updateHead vc 100000 bc 64 eq 0 433.52 us/op 381.97 us/op 1.13
forkChoice updateHead vc 600000 bc 64 eq 0 2.8267 ms/op 2.3104 ms/op 1.22
forkChoice updateHead vc 1000000 bc 64 eq 0 4.3251 ms/op 3.8110 ms/op 1.13
forkChoice updateHead vc 600000 bc 320 eq 0 2.7355 ms/op 2.3005 ms/op 1.19
forkChoice updateHead vc 600000 bc 1200 eq 0 2.6363 ms/op 2.3596 ms/op 1.12
forkChoice updateHead vc 600000 bc 7200 eq 0 2.9324 ms/op 3.0623 ms/op 0.96
forkChoice updateHead vc 600000 bc 64 eq 1000 3.0464 ms/op 2.8193 ms/op 1.08
forkChoice updateHead vc 600000 bc 64 eq 10000 3.1657 ms/op 2.9238 ms/op 1.08
forkChoice updateHead vc 600000 bc 64 eq 300000 7.1994 ms/op 7.0660 ms/op 1.02
computeDeltas 1400000 validators 0% inactive 12.921 ms/op 12.144 ms/op 1.06
computeDeltas 1400000 validators 10% inactive 12.294 ms/op 11.500 ms/op 1.07
computeDeltas 1400000 validators 20% inactive 11.161 ms/op 10.374 ms/op 1.08
computeDeltas 1400000 validators 50% inactive 8.5185 ms/op 8.0421 ms/op 1.06
computeDeltas 2100000 validators 0% inactive 19.378 ms/op 18.344 ms/op 1.06
computeDeltas 2100000 validators 10% inactive 18.211 ms/op 17.380 ms/op 1.05
computeDeltas 2100000 validators 20% inactive 16.845 ms/op 15.741 ms/op 1.07
computeDeltas 2100000 validators 50% inactive 10.197 ms/op 12.084 ms/op 0.84
altair processAttestation - 250000 vs - 7PWei normalcase 2.8029 ms/op 2.4130 ms/op 1.16
altair processAttestation - 250000 vs - 7PWei worstcase 2.5838 ms/op 3.1243 ms/op 0.83
altair processAttestation - setStatus - 1/6 committees join 111.56 us/op 102.60 us/op 1.09
altair processAttestation - setStatus - 1/3 committees join 210.23 us/op 194.05 us/op 1.08
altair processAttestation - setStatus - 1/2 committees join 288.20 us/op 283.11 us/op 1.02
altair processAttestation - setStatus - 2/3 committees join 361.06 us/op 372.26 us/op 0.97
altair processAttestation - setStatus - 4/5 committees join 488.53 us/op 518.13 us/op 0.94
altair processAttestation - setStatus - 100% committees join 622.71 us/op 608.20 us/op 1.02
altair processBlock - 250000 vs - 7PWei normalcase 3.7978 ms/op 4.6656 ms/op 0.81
altair processBlock - 250000 vs - 7PWei normalcase hashState 13.901 ms/op 17.304 ms/op 0.80
altair processBlock - 250000 vs - 7PWei worstcase 23.098 ms/op 23.217 ms/op 0.99
altair processBlock - 250000 vs - 7PWei worstcase hashState 42.775 ms/op 44.666 ms/op 0.96
phase0 processBlock - 250000 vs - 7PWei normalcase 1.6398 ms/op 1.4480 ms/op 1.13
phase0 processBlock - 250000 vs - 7PWei worstcase 19.678 ms/op 18.563 ms/op 1.06
altair processEth1Data - 250000 vs - 7PWei normalcase 308.97 us/op 295.68 us/op 1.04
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.6640 us/op 4.8060 us/op 0.76
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 21.868 us/op 22.411 us/op 0.98
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 6.9050 us/op 6.5290 us/op 1.06
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.8340 us/op 3.5970 us/op 1.07
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 94.827 us/op 95.605 us/op 0.99
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.4636 ms/op 1.3912 ms/op 1.05
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 2.1334 ms/op 1.8882 ms/op 1.13
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.9773 ms/op 2.0611 ms/op 0.96
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.6456 ms/op 4.6547 ms/op 0.78
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.1092 ms/op 2.4420 ms/op 0.86
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.8293 ms/op 5.5234 ms/op 0.69
Tree 40 250000 create 351.86 ms/op 373.08 ms/op 0.94
Tree 40 250000 get(125000) 91.162 ns/op 93.936 ns/op 0.97
Tree 40 250000 set(125000) 976.40 ns/op 1.2366 us/op 0.79
Tree 40 250000 toArray() 13.916 ms/op 22.739 ms/op 0.61
Tree 40 250000 iterate all - toArray() + loop 16.477 ms/op 21.597 ms/op 0.76
Tree 40 250000 iterate all - get(i) 37.728 ms/op 43.778 ms/op 0.86
Array 250000 create 2.0697 ms/op 2.3962 ms/op 0.86
Array 250000 clone - spread 649.42 us/op 748.31 us/op 0.87
Array 250000 get(125000) 0.28900 ns/op 0.30300 ns/op 0.95
Array 250000 set(125000) 0.28800 ns/op 0.30300 ns/op 0.95
Array 250000 iterate all - loop 55.686 us/op 58.726 us/op 0.95
phase0 afterProcessEpoch - 250000 vs - 7PWei 38.913 ms/op 39.730 ms/op 0.98
Array.fill - length 1000000 2.0155 ms/op 2.2044 ms/op 0.91
Array push - length 1000000 9.0075 ms/op 10.594 ms/op 0.85
Array.get 0.20221 ns/op 0.21668 ns/op 0.93
Uint8Array.get 0.23842 ns/op 0.24626 ns/op 0.97
phase0 beforeProcessEpoch - 250000 vs - 7PWei 19.676 ms/op 22.677 ms/op 0.87
altair processEpoch - mainnet_e81889 338.19 ms/op 326.33 ms/op 1.04
mainnet_e81889 - altair beforeProcessEpoch 35.725 ms/op 46.306 ms/op 0.77
mainnet_e81889 - altair processJustificationAndFinalization 6.7580 us/op 7.4960 us/op 0.90
mainnet_e81889 - altair processInactivityUpdates 5.0079 ms/op 8.0634 ms/op 0.62
mainnet_e81889 - altair processRewardsAndPenalties 21.085 ms/op 22.556 ms/op 0.93
mainnet_e81889 - altair processRegistryUpdates 524.00 ns/op 609.00 ns/op 0.86
mainnet_e81889 - altair processSlashings 126.00 ns/op 137.00 ns/op 0.92
mainnet_e81889 - altair processEth1DataReset 126.00 ns/op 138.00 ns/op 0.91
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.7385 ms/op 7.6145 ms/op 0.23
mainnet_e81889 - altair processSlashingsReset 709.00 ns/op 769.00 ns/op 0.92
mainnet_e81889 - altair processRandaoMixesReset 1.4240 us/op 1.6310 us/op 0.87
mainnet_e81889 - altair processHistoricalRootsUpdate 126.00 ns/op 139.00 ns/op 0.91
mainnet_e81889 - altair processParticipationFlagUpdates 425.00 ns/op 522.00 ns/op 0.81
mainnet_e81889 - altair processSyncCommitteeUpdates 101.00 ns/op 114.00 ns/op 0.89
mainnet_e81889 - altair afterProcessEpoch 41.333 ms/op 42.930 ms/op 0.96
capella processEpoch - mainnet_e217614 1.0328 s/op 883.70 ms/op 1.17
mainnet_e217614 - capella beforeProcessEpoch 54.752 ms/op 62.156 ms/op 0.88
mainnet_e217614 - capella processJustificationAndFinalization 6.8460 us/op 6.7050 us/op 1.02
mainnet_e217614 - capella processInactivityUpdates 12.184 ms/op 15.007 ms/op 0.81
mainnet_e217614 - capella processRewardsAndPenalties 98.083 ms/op 92.188 ms/op 1.06
mainnet_e217614 - capella processRegistryUpdates 4.5110 us/op 4.6520 us/op 0.97
mainnet_e217614 - capella processSlashings 135.00 ns/op 134.00 ns/op 1.01
mainnet_e217614 - capella processEth1DataReset 124.00 ns/op 133.00 ns/op 0.93
mainnet_e217614 - capella processEffectiveBalanceUpdates 18.818 ms/op 19.639 ms/op 0.96
mainnet_e217614 - capella processSlashingsReset 666.00 ns/op 707.00 ns/op 0.94
mainnet_e217614 - capella processRandaoMixesReset 1.3420 us/op 1.4100 us/op 0.95
mainnet_e217614 - capella processHistoricalRootsUpdate 132.00 ns/op 137.00 ns/op 0.96
mainnet_e217614 - capella processParticipationFlagUpdates 438.00 ns/op 450.00 ns/op 0.97
mainnet_e217614 - capella afterProcessEpoch 113.71 ms/op 111.52 ms/op 1.02
phase0 processEpoch - mainnet_e58758 363.96 ms/op 333.50 ms/op 1.09
mainnet_e58758 - phase0 beforeProcessEpoch 77.759 ms/op 90.479 ms/op 0.86
mainnet_e58758 - phase0 processJustificationAndFinalization 7.0340 us/op 7.0690 us/op 1.00
mainnet_e58758 - phase0 processRewardsAndPenalties 17.035 ms/op 17.449 ms/op 0.98
mainnet_e58758 - phase0 processRegistryUpdates 2.2780 us/op 2.3870 us/op 0.95
mainnet_e58758 - phase0 processSlashings 127.00 ns/op 135.00 ns/op 0.94
mainnet_e58758 - phase0 processEth1DataReset 195.00 ns/op 132.00 ns/op 1.48
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 805.71 us/op 1.1528 ms/op 0.70
mainnet_e58758 - phase0 processSlashingsReset 910.00 ns/op 983.00 ns/op 0.93
mainnet_e58758 - phase0 processRandaoMixesReset 1.5160 us/op 1.4670 us/op 1.03
mainnet_e58758 - phase0 processHistoricalRootsUpdate 127.00 ns/op 136.00 ns/op 0.93
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.3140 us/op 1.3610 us/op 0.97
mainnet_e58758 - phase0 afterProcessEpoch 34.580 ms/op 34.387 ms/op 1.01
phase0 processEffectiveBalanceUpdates - 250000 normalcase 967.62 us/op 1.0286 ms/op 0.94
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.6766 ms/op 1.5968 ms/op 1.05
altair processInactivityUpdates - 250000 normalcase 10.797 ms/op 13.512 ms/op 0.80
altair processInactivityUpdates - 250000 worstcase 10.793 ms/op 13.022 ms/op 0.83
phase0 processRegistryUpdates - 250000 normalcase 2.3410 us/op 2.5010 us/op 0.94
phase0 processRegistryUpdates - 250000 badcase_full_deposits 143.66 us/op 146.24 us/op 0.98
phase0 processRegistryUpdates - 250000 worstcase 0.5 64.786 ms/op 76.903 ms/op 0.84
altair processRewardsAndPenalties - 250000 normalcase 14.386 ms/op 16.425 ms/op 0.88
altair processRewardsAndPenalties - 250000 worstcase 14.288 ms/op 15.571 ms/op 0.92
phase0 getAttestationDeltas - 250000 normalcase 5.5065 ms/op 5.5228 ms/op 1.00
phase0 getAttestationDeltas - 250000 worstcase 5.5162 ms/op 5.7200 ms/op 0.96
phase0 processSlashings - 250000 worstcase 60.598 us/op 66.197 us/op 0.92
altair processSyncCommitteeUpdates - 250000 12.174 ms/op 12.932 ms/op 0.94
BeaconState.hashTreeRoot - No change 173.00 ns/op 173.00 ns/op 1.00
BeaconState.hashTreeRoot - 1 full validator 88.449 us/op 85.562 us/op 1.03
BeaconState.hashTreeRoot - 32 full validator 1.2018 ms/op 1.0037 ms/op 1.20
BeaconState.hashTreeRoot - 512 full validator 8.5138 ms/op 9.5720 ms/op 0.89
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 105.10 us/op 118.92 us/op 0.88
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 2.3118 ms/op 1.6583 ms/op 1.39
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 27.935 ms/op 23.333 ms/op 1.20
BeaconState.hashTreeRoot - 1 balances 100.31 us/op 91.758 us/op 1.09
BeaconState.hashTreeRoot - 32 balances 752.09 us/op 819.91 us/op 0.92
BeaconState.hashTreeRoot - 512 balances 5.4327 ms/op 6.7511 ms/op 0.80
BeaconState.hashTreeRoot - 250000 balances 186.25 ms/op 150.60 ms/op 1.24
aggregationBits - 2048 els - zipIndexesInBitList 21.297 us/op 21.243 us/op 1.00
regular array get 100000 times 23.381 us/op 22.619 us/op 1.03
wrappedArray get 100000 times 23.357 us/op 22.987 us/op 1.02
arrayWithProxy get 100000 times 10.318 ms/op 9.7791 ms/op 1.06
ssz.Root.equals 21.991 ns/op 21.420 ns/op 1.03
byteArrayEquals 21.775 ns/op 21.603 ns/op 1.01
Buffer.compare 9.0210 ns/op 9.0280 ns/op 1.00
processSlot - 1 slots 11.629 us/op 11.127 us/op 1.05
processSlot - 32 slots 2.1819 ms/op 2.3437 ms/op 0.93
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 2.4997 ms/op 4.4363 ms/op 0.56
getCommitteeAssignments - req 1 vs - 250000 vc 1.5892 ms/op 1.7161 ms/op 0.93
getCommitteeAssignments - req 100 vs - 250000 vc 3.2759 ms/op 3.4914 ms/op 0.94
getCommitteeAssignments - req 1000 vs - 250000 vc 3.5176 ms/op 3.7370 ms/op 0.94
findModifiedValidators - 10000 modified validators 757.38 ms/op 748.86 ms/op 1.01
findModifiedValidators - 1000 modified validators 468.98 ms/op 478.97 ms/op 0.98
findModifiedValidators - 100 modified validators 300.08 ms/op 303.68 ms/op 0.99
findModifiedValidators - 10 modified validators 270.17 ms/op 248.91 ms/op 1.09
findModifiedValidators - 1 modified validators 175.23 ms/op 183.92 ms/op 0.95
findModifiedValidators - no difference 182.70 ms/op 195.00 ms/op 0.94
migrate state 1500000 validators, 3400 modified, 2000 new 3.3882 s/op 3.0888 s/op 1.10
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.3400 ns/op 3.7700 ns/op 0.89
state getBlockRootAtSlot - 250000 vs - 7PWei 450.35 ns/op 419.79 ns/op 1.07
computeProposerIndex 100000 validators 1.2866 ms/op 1.3722 ms/op 0.94
getNextSyncCommitteeIndices 1000 validators 2.7576 ms/op 2.9130 ms/op 0.95
getNextSyncCommitteeIndices 10000 validators 23.900 ms/op 25.668 ms/op 0.93
getNextSyncCommitteeIndices 100000 validators 84.778 ms/op 85.798 ms/op 0.99
computeProposers - vc 250000 523.90 us/op 564.89 us/op 0.93
computeEpochShuffling - vc 250000 39.096 ms/op 39.305 ms/op 0.99
getNextSyncCommittee - vc 250000 9.1069 ms/op 9.7199 ms/op 0.94
nodejs block root to RootHex using toHex 99.032 ns/op 93.099 ns/op 1.06
nodejs block root to RootHex using toRootHex 59.082 ns/op 51.670 ns/op 1.14
nodejs fromHex(blob) 812.61 us/op 746.07 us/op 1.09
nodejs fromHexInto(blob) 649.95 us/op 620.50 us/op 1.05
nodejs block root to RootHex using the deprecated toHexString 501.58 ns/op 561.70 ns/op 0.89
nodejs byteArrayEquals 32 bytes (block root) 26.053 ns/op 26.084 ns/op 1.00
nodejs byteArrayEquals 48 bytes (pubkey) 37.606 ns/op 37.520 ns/op 1.00
nodejs byteArrayEquals 96 bytes (signature) 38.153 ns/op 34.023 ns/op 1.12
nodejs byteArrayEquals 1024 bytes 44.999 ns/op 41.083 ns/op 1.10
nodejs byteArrayEquals 131072 bytes (blob) 1.7656 us/op 1.7400 us/op 1.01
browser block root to RootHex using toHex 146.18 ns/op 142.55 ns/op 1.03
browser block root to RootHex using toRootHex 142.84 ns/op 130.72 ns/op 1.09
browser fromHex(blob) 1.6235 ms/op 1.5133 ms/op 1.07
browser fromHexInto(blob) 607.48 us/op 619.50 us/op 0.98
browser block root to RootHex using the deprecated toHexString 321.07 ns/op 363.12 ns/op 0.88
browser byteArrayEquals 32 bytes (block root) 27.457 ns/op 27.304 ns/op 1.01
browser byteArrayEquals 48 bytes (pubkey) 38.485 ns/op 38.586 ns/op 1.00
browser byteArrayEquals 96 bytes (signature) 72.044 ns/op 72.406 ns/op 1.00
browser byteArrayEquals 1024 bytes 739.60 ns/op 738.88 ns/op 1.00
browser byteArrayEquals 131072 bytes (blob) 92.992 us/op 92.051 us/op 1.01

by benchmarkbot/action

@nflaig nflaig changed the title test: deneb gossip validation spec tests test: deneb and electra gossip validation spec tests May 14, 2026
lodekeeper added a commit to lodekeeper/lodestar that referenced this pull request May 30, 2026
Adds runner support for the fulu `gossip_data_column_sidecar` networking
spec tests from consensus-specs PR ChainSafe#5246. Mirrors the existing
`gossip_blob_sidecar` arm: SSZ-decodes `fulu.DataColumnSidecar` and
invokes `validateGossipFuluDataColumnSidecar` with the fixture's
`subnet_id`.

Builds on top of ChainSafe#9372. Does not address `gossip_partial_data_column_sidecar`
(optional feature) nor the open `gossip_beacon_block__valid_at_blob_parameters_limit`
zero-parent harness gap.

🤖 Generated with AI assistance
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.

1 participant