Skip to content

fix: prune cache entries of repeat proposals that are not imported - #10083

Merged
twoeths merged 4 commits into
unstablefrom
nflaig/prune-unimported-repeat-proposals
Sep 17, 2026
Merged

twoeths merged 4 commits into
unstablefrom
nflaig/prune-unimported-repeat-proposals

Conversation

@nflaig

@nflaig nflaig commented Sep 14, 2026 •

Copy link
Copy Markdown
Member

Every block that reaches gossip validation seeds a block input, and on gloas a payload envelope input, before the checks run, and IGNORE keeps those entries until finalization or size pruning. Since #9805 only the first signature-verified repeat proposal of a proposer is imported, so any further one holds its full block in memory for nothing, and a proposer can send as many of those as it likes. This drops the entries of a repeat proposal that is not imported, sync re-downloads the block if a child or an attestation ever references it. The comment on the import gate now says what it actually is, the two-root cap in the seen cache is what bounds full imports over gossip to one alternate.

The dropped entry is removed with the block input cache's single-entry remove rather than prune, which follows the parent root and evicts every cached ancestor. A repeat proposal past the second one never had its signature verified, so with prune any peer could name a cached block as parent and evict it together with its downloaded data. The gossip REJECT path had the same walk for blocks that fail signature or proposer checks and is switched to remove as well.

The payload envelope input cache named its single-entry eviction prune too, which reads as if it walked ancestors like the block input cache's. It is renamed to remove, with its metric reason label, and pruneBelowParent stays the ancestor variant.

@github-actions

github-actions Bot commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: f7e035a Previous: 71549aa Ratio
getPubkeys - native cache - req 1000 vs - 250000 vc 469.64 us/op 403.01 us/op 1.17
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 35.695 us/op 34.483 us/op 1.04
BLS verify - blst 810.46 us/op 810.90 us/op 1.00
BLS verifyMultipleSignatures 3 - blst 898.10 us/op 889.61 us/op 1.01
BLS verifyMultipleSignatures 8 - blst 1.6601 ms/op 1.6344 ms/op 1.02
BLS verifyMultipleSignatures 32 - blst 4.8291 ms/op 4.7486 ms/op 1.02
BLS verifyMultipleSignatures 64 - blst 9.0783 ms/op 8.9876 ms/op 1.01
BLS verifyMultipleSignatures 128 - blst 17.424 ms/op 17.199 ms/op 1.01
BLS deserializing 10000 signatures 561.16 ms/op 549.52 ms/op 1.02
BLS deserializing 100000 signatures 5.6344 s/op 5.5295 s/op 1.02
BLS verifyMultipleSignatures - same message - 3 - blst 877.95 us/op 855.83 us/op 1.03
BLS verifyMultipleSignatures - same message - 8 - blst 980.34 us/op 961.54 us/op 1.02
BLS verifyMultipleSignatures - same message - 32 - blst 1.4915 ms/op 1.4700 ms/op 1.01
BLS verifyMultipleSignatures - same message - 64 - blst 2.1983 ms/op 2.1465 ms/op 1.02
BLS verifyMultipleSignatures - same message - 128 - blst 3.5434 ms/op 3.5002 ms/op 1.01
BLS aggregatePubkeys 32 - blst 16.715 us/op 16.403 us/op 1.02
BLS aggregatePubkeys 128 - blst 59.874 us/op 58.954 us/op 1.02
getSlashingsAndExits - default max 29.367 us/op 30.567 us/op 0.96
getSlashingsAndExits - 2k 279.00 us/op 278.56 us/op 1.00
proposeBlockBody type=full, size=empty 552.39 us/op 558.99 us/op 0.99
isKnown best case - 1 super set check 142.00 ns/op 140.00 ns/op 1.01
isKnown normal case - 2 super set checks 142.00 ns/op 140.00 ns/op 1.01
isKnown worse case - 16 super set checks 142.00 ns/op 140.00 ns/op 1.01
validate api signedAggregateAndProof - struct 1.0282 ms/op 1.0124 ms/op 1.02
validate gossip signedAggregateAndProof - struct 1.0245 ms/op 1.0123 ms/op 1.01
batch validate gossip attestation - vc 640000 - chunk 32 106.84 us/op 103.31 us/op 1.03
batch validate gossip attestation - vc 640000 - chunk 64 92.257 us/op 89.738 us/op 1.03
batch validate gossip attestation - vc 640000 - chunk 128 83.392 us/op 82.148 us/op 1.02
batch validate gossip attestation - vc 640000 - chunk 256 86.091 us/op 81.812 us/op 1.05
bytes32 toHexString 272.00 ns/op 278.00 ns/op 0.98
bytes32 Buffer.toString(hex) 160.00 ns/op 140.00 ns/op 1.14
bytes32 Buffer.toString(hex) from Uint8Array 225.00 ns/op 221.00 ns/op 1.02
bytes32 Buffer.toString(hex) + 0x 145.00 ns/op 145.00 ns/op 1.00
Return object 10000 times 0.23130 ns/op 0.22940 ns/op 1.01
Throw Error 10000 times 3.1632 us/op 3.2027 us/op 0.99
toHex 79.908 ns/op 78.847 ns/op 1.01
Buffer.from 75.220 ns/op 72.139 ns/op 1.04
shared Buffer 52.468 ns/op 48.081 ns/op 1.09
fastMsgIdFn sha256 / 200 bytes 1.4010 us/op 1.3600 us/op 1.03
fastMsgIdFn h32 xxhash / 200 bytes 125.00 ns/op 125.00 ns/op 1.00
fastMsgIdFn h64 xxhash / 200 bytes 208.00 ns/op 170.00 ns/op 1.22
fastMsgIdFn sha256 / 1000 bytes 4.4720 us/op 4.3040 us/op 1.04
fastMsgIdFn h32 xxhash / 1000 bytes 205.00 ns/op 205.00 ns/op 1.00
fastMsgIdFn h64 xxhash / 1000 bytes 235.00 ns/op 215.00 ns/op 1.09
fastMsgIdFn sha256 / 10000 bytes 38.875 us/op 37.901 us/op 1.03
fastMsgIdFn h32 xxhash / 10000 bytes 1.0900 us/op 1.1000 us/op 0.99
fastMsgIdFn h64 xxhash / 10000 bytes 703.00 ns/op 693.00 ns/op 1.01
send data - 1000 256B messages 4.1344 ms/op 3.9547 ms/op 1.05
send data - 1000 512B messages 5.0853 ms/op 4.6331 ms/op 1.10
send data - 1000 1024B messages 5.2315 ms/op 5.1707 ms/op 1.01
send data - 1000 1200B messages 5.9337 ms/op 5.5813 ms/op 1.06
send data - 1000 2048B messages 14.097 ms/op 15.076 ms/op 0.94
send data - 1000 4096B messages 29.393 ms/op 22.325 ms/op 1.32
send data - 1000 16384B messages 65.360 ms/op 63.498 ms/op 1.03
send data - 1000 65536B messages 212.11 ms/op 275.51 ms/op 0.77
enrSubnets - fastDeserialize 64 bits 754.00 ns/op 765.00 ns/op 0.99
enrSubnets - ssz BitVector 64 bits 264.00 ns/op 265.00 ns/op 1.00
enrSubnets - fastDeserialize 4 bits 80.000 ns/op 80.000 ns/op 1.00
enrSubnets - ssz BitVector 4 bits 272.00 ns/op 265.00 ns/op 1.03
prioritizePeers score -10:0 att 32-0.1 sync 2-0 180.13 us/op 177.84 us/op 1.01
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 201.47 us/op 199.76 us/op 1.01
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 293.31 us/op 291.22 us/op 1.01
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 529.02 us/op 525.72 us/op 1.01
prioritizePeers score 0:0 att 64-1 sync 4-1 624.25 us/op 618.56 us/op 1.01
archive index / 1 slot / archive root index lookup 8.6990 us/op 8.5200 us/op 1.02
archive index / 1 slot / archive block lookup, decode and hash 2.5174 ms/op 2.4916 ms/op 1.01
archive index / 1 slots / 1 columns / legacy 21.496 us/op 10.265 us/op 2.09
archive index / 1 slots / 1 columns / flat files 64.161 us/op 59.395 us/op 1.08
archive index / 1 slots / 8 columns / legacy 46.969 us/op 132.74 us/op 0.35
archive index / 1 slots / 8 columns / flat files 453.78 us/op 265.06 us/op 1.71
archive index / 1 slots / 128 columns / legacy 1.8399 ms/op 3.6153 ms/op 0.51
archive index / 1 slots / 128 columns / flat files 5.4395 ms/op 6.5551 ms/op 0.83
archive index / 8 slots / 1 columns / legacy 251.69 us/op 192.84 us/op 1.31
archive index / 8 slots / 1 columns / flat files 507.62 us/op 464.18 us/op 1.09
archive index / 8 slots / 8 columns / legacy 1.2567 ms/op 1.0401 ms/op 1.21
archive index / 8 slots / 8 columns / flat files 3.5081 ms/op 3.1748 ms/op 1.11
archive index / 8 slots / 128 columns / legacy 28.333 ms/op 34.830 ms/op 0.81
archive index / 8 slots / 128 columns / flat files 70.887 ms/op 66.505 ms/op 1.07
head state / 1 slot / archive root index lookup 8.6980 us/op 9.2750 us/op 0.94
head state / 1 slot / archive block lookup, decode and hash 2.4740 ms/op 2.4932 ms/op 0.99
head state / 1 slots / 1 columns / legacy 11.043 us/op 23.735 us/op 0.47
head state / 1 slots / 1 columns / flat files 57.688 us/op 52.392 us/op 1.10
head state / 1 slots / 8 columns / legacy 131.78 us/op 165.81 us/op 0.79
head state / 1 slots / 8 columns / flat files 256.43 us/op 400.17 us/op 0.64
head state / 1 slots / 128 columns / legacy 2.9449 ms/op 2.4686 ms/op 1.19
head state / 1 slots / 128 columns / flat files 4.0440 ms/op 8.5970 ms/op 0.47
head state / 8 slots / 1 columns / legacy 120.22 us/op 189.37 us/op 0.63
head state / 8 slots / 1 columns / flat files 418.77 us/op 452.38 us/op 0.93
head state / 8 slots / 8 columns / legacy 1.0585 ms/op 1.2185 ms/op 0.87
head state / 8 slots / 8 columns / flat files 3.5137 ms/op 3.3394 ms/op 1.05
head state / 8 slots / 128 columns / legacy 28.360 ms/op 33.458 ms/op 0.85
head state / 8 slots / 128 columns / flat files 60.139 ms/op 64.497 ms/op 0.93
array of 16000 items push then shift 1.0263 us/op 1.0230 us/op 1.00
LinkedList of 16000 items push then shift 5.5960 ns/op 5.5930 ns/op 1.00
array of 16000 items push then pop 45.226 ns/op 46.507 ns/op 0.97
LinkedList of 16000 items push then pop 5.0730 ns/op 4.9960 ns/op 1.02
array of 24000 items push then shift 1.5051 us/op 1.4961 us/op 1.01
LinkedList of 24000 items push then shift 5.2920 ns/op 5.2180 ns/op 1.01
array of 24000 items push then pop 63.942 ns/op 64.359 ns/op 0.99
LinkedList of 24000 items push then pop 5.1320 ns/op 5.1240 ns/op 1.00
intersect bitArray bitLen 8 2.8750 ns/op 2.8550 ns/op 1.01
intersect array and set length 8 25.634 ns/op 25.505 ns/op 1.01
intersect bitArray bitLen 128 19.093 ns/op 17.696 ns/op 1.08
intersect array and set length 128 439.38 ns/op 437.00 ns/op 1.01
bitArray.getTrueBitIndexes() bitLen 128 958.00 ns/op 973.00 ns/op 0.98
bitArray.getTrueBitIndexes() bitLen 248 1.7030 us/op 1.7400 us/op 0.98
bitArray.getTrueBitIndexes() bitLen 512 3.6920 us/op 3.7600 us/op 0.98
Full columns - reconstruct all 6 blobs 117.58 us/op 170.31 us/op 0.69
Full columns - reconstruct half of the blobs out of 6 77.596 us/op 69.041 us/op 1.12
Full columns - reconstruct single blob out of 6 28.983 us/op 20.564 us/op 1.41
Half columns - reconstruct all 6 blobs 215.44 ms/op 215.61 ms/op 1.00
Half columns - reconstruct half of the blobs out of 6 106.99 ms/op 109.16 ms/op 0.98
Half columns - reconstruct single blob out of 6 39.164 ms/op 40.396 ms/op 0.97
Set add up to 64 items then delete first 1.4690 us/op 1.4710 us/op 1.00
OrderedSet add up to 64 items then delete first 2.2221 us/op 2.2005 us/op 1.01
Set add up to 64 items then delete last 1.7926 us/op 1.7795 us/op 1.01
OrderedSet add up to 64 items then delete last 2.8182 us/op 2.7865 us/op 1.01
Set add up to 64 items then delete middle 1.7629 us/op 1.7656 us/op 1.00
OrderedSet add up to 64 items then delete middle 3.6168 us/op 3.6030 us/op 1.00
Set add up to 128 items then delete first 4.0780 us/op 4.0449 us/op 1.01
OrderedSet add up to 128 items then delete first 6.3155 us/op 6.2637 us/op 1.01
Set add up to 128 items then delete last 4.0136 us/op 3.9307 us/op 1.02
OrderedSet add up to 128 items then delete last 5.8901 us/op 5.8301 us/op 1.01
Set add up to 128 items then delete middle 4.0931 us/op 4.1132 us/op 1.00
OrderedSet add up to 128 items then delete middle 10.477 us/op 10.403 us/op 1.01
Set add up to 256 items then delete first 8.5456 us/op 8.5768 us/op 1.00
OrderedSet add up to 256 items then delete first 13.844 us/op 13.309 us/op 1.04
Set add up to 256 items then delete last 8.1067 us/op 8.0212 us/op 1.01
OrderedSet add up to 256 items then delete last 12.310 us/op 12.291 us/op 1.00
Set add up to 256 items then delete middle 8.4902 us/op 8.4214 us/op 1.01
OrderedSet add up to 256 items then delete middle 33.289 us/op 32.821 us/op 1.01
runFastConfirmationRules vc:100000 bc:96 eq:0 3.9667 ms/op 3.9473 ms/op 1.00
runFastConfirmationRules vc:600000 bc:96 eq:0 28.781 ms/op 31.492 ms/op 0.91
runFastConfirmationRules vc:1000000 bc:96 eq:0 53.415 ms/op 52.709 ms/op 1.01
runFastConfirmationRules vc:600000 bc:320 eq:0 31.211 ms/op 31.284 ms/op 1.00
runFastConfirmationRules vc:100000 bc:96 eq:1000 1.1006 s/op 1.0991 s/op 1.00
pass gossip attestations to forkchoice per slot 2.3513 ms/op 2.2960 ms/op 1.02
forkChoice updateHead vc 100000 bc 64 eq 0 366.03 us/op 357.78 us/op 1.02
forkChoice updateHead vc 600000 bc 64 eq 0 2.1940 ms/op 2.1226 ms/op 1.03
forkChoice updateHead vc 1000000 bc 64 eq 0 3.6642 ms/op 3.5489 ms/op 1.03
forkChoice updateHead vc 600000 bc 320 eq 0 2.2007 ms/op 2.1484 ms/op 1.02
forkChoice updateHead vc 600000 bc 1200 eq 0 2.2321 ms/op 2.1645 ms/op 1.03
forkChoice updateHead vc 600000 bc 7200 eq 0 2.7384 ms/op 2.5909 ms/op 1.06
forkChoice updateHead vc 600000 bc 64 eq 1000 2.2279 ms/op 2.1827 ms/op 1.02
forkChoice updateHead vc 600000 bc 64 eq 10000 2.3149 ms/op 2.2213 ms/op 1.04
forkChoice updateHead vc 600000 bc 64 eq 300000 5.3038 ms/op 5.3363 ms/op 0.99
forkChoice updateHead vc 600000 bc 64 eq 0 gloas boosted 2.1864 ms/op 2.1405 ms/op 1.02
computeDeltas 1400000 validators 0% inactive 9.8434 ms/op 9.8411 ms/op 1.00
computeDeltas 1400000 validators 10% inactive 9.5006 ms/op 9.3867 ms/op 1.01
computeDeltas 1400000 validators 20% inactive 8.9264 ms/op 8.8720 ms/op 1.01
computeDeltas 1400000 validators 50% inactive 7.4146 ms/op 7.3389 ms/op 1.01
computeDeltas 2100000 validators 0% inactive 14.844 ms/op 14.722 ms/op 1.01
computeDeltas 2100000 validators 10% inactive 14.108 ms/op 14.003 ms/op 1.01
computeDeltas 2100000 validators 20% inactive 13.376 ms/op 13.285 ms/op 1.01
computeDeltas 2100000 validators 50% inactive 11.079 ms/op 11.000 ms/op 1.01
altair processAttestation - 250000 vs - 7PWei normalcase 1.8106 ms/op 2.6253 ms/op 0.69
altair processAttestation - 250000 vs - 7PWei worstcase 2.6515 ms/op 3.5059 ms/op 0.76
altair processAttestation - setStatus - 1/6 committees join 98.974 us/op 95.753 us/op 1.03
altair processAttestation - setStatus - 1/3 committees join 192.01 us/op 188.24 us/op 1.02
altair processAttestation - setStatus - 1/2 committees join 274.08 us/op 265.01 us/op 1.03
altair processAttestation - setStatus - 2/3 committees join 352.15 us/op 343.94 us/op 1.02
altair processAttestation - setStatus - 4/5 committees join 488.06 us/op 459.98 us/op 1.06
altair processAttestation - setStatus - 100% committees join 601.36 us/op 545.54 us/op 1.10
altair processBlock - 250000 vs - 7PWei normalcase 5.6965 ms/op 5.7363 ms/op 0.99
altair processBlock - 250000 vs - 7PWei normalcase hashState 24.556 ms/op 28.131 ms/op 0.87
altair processBlock - 250000 vs - 7PWei worstcase 25.496 ms/op 24.774 ms/op 1.03
altair processBlock - 250000 vs - 7PWei worstcase hashState 57.536 ms/op 61.174 ms/op 0.94
phase0 processBlock - 250000 vs - 7PWei normalcase 1.2295 ms/op 1.2177 ms/op 1.01
phase0 processBlock - 250000 vs - 7PWei worstcase 18.764 ms/op 17.850 ms/op 1.05
altair processEth1Data - 250000 vs - 7PWei normalcase 260.07 us/op 239.13 us/op 1.09
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 2.7940 us/op 2.6840 us/op 1.04
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 21.236 us/op 19.914 us/op 1.07
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 5.6220 us/op 5.3480 us/op 1.05
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.1500 us/op 3.0150 us/op 1.04
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 93.889 us/op 91.033 us/op 1.03
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.2581 ms/op 1.2100 ms/op 1.04
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.6904 ms/op 1.5912 ms/op 1.06
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.6238 ms/op 1.5867 ms/op 1.02
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.0755 ms/op 3.1460 ms/op 0.98
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.8962 ms/op 1.8273 ms/op 1.04
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.3760 ms/op 3.4408 ms/op 0.98
Tree 40 250000 create 261.18 ms/op 260.23 ms/op 1.00
Tree 40 250000 get(125000) 85.983 ns/op 89.129 ns/op 0.96
Tree 40 250000 set(125000) 878.23 ns/op 863.35 ns/op 1.02
Tree 40 250000 toArray() 10.655 ms/op 14.967 ms/op 0.71
Tree 40 250000 iterate all - toArray() + loop 11.112 ms/op 14.677 ms/op 0.76
Tree 40 250000 iterate all - get(i) 33.434 ms/op 38.006 ms/op 0.88
Array 250000 create 1.5180 ms/op 1.5183 ms/op 1.00
Array 250000 clone - spread 467.99 us/op 457.23 us/op 1.02
Array 250000 get(125000) 0.32600 ns/op 0.31100 ns/op 1.05
Array 250000 set(125000) 0.33400 ns/op 0.31200 ns/op 1.07
Array 250000 iterate all - loop 56.709 us/op 55.623 us/op 1.02
phase0 afterProcessEpoch - 250000 vs - 7PWei 48.069 ms/op 45.924 ms/op 1.05
Array.fill - length 1000000 2.4475 ms/op 2.2193 ms/op 1.10
Array push - length 1000000 9.4630 ms/op 7.4485 ms/op 1.27
Array.get 0.22966 ns/op 0.22392 ns/op 1.03
Uint8Array.get 0.23354 ns/op 0.22528 ns/op 1.04
phase0 beforeProcessEpoch - 250000 vs - 7PWei 20.498 ms/op 17.630 ms/op 1.16
altair processEpoch - mainnet_e81889 264.09 ms/op 263.62 ms/op 1.00
mainnet_e81889 - altair beforeProcessEpoch 16.443 ms/op 23.699 ms/op 0.69
mainnet_e81889 - altair processJustificationAndFinalization 4.6900 us/op 4.8460 us/op 0.97
mainnet_e81889 - altair processInactivityUpdates 3.2349 ms/op 3.1125 ms/op 1.04
mainnet_e81889 - altair processRewardsAndPenalties 17.885 ms/op 16.462 ms/op 1.09
mainnet_e81889 - altair processRegistryUpdates 551.00 ns/op 514.00 ns/op 1.07
mainnet_e81889 - altair processSlashings 132.00 ns/op 131.00 ns/op 1.01
mainnet_e81889 - altair processEth1DataReset 130.00 ns/op 125.00 ns/op 1.04
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.0445 ms/op 1.0507 ms/op 0.99
mainnet_e81889 - altair processSlashingsReset 645.00 ns/op 638.00 ns/op 1.01
mainnet_e81889 - altair processRandaoMixesReset 887.00 ns/op 917.00 ns/op 0.97
mainnet_e81889 - altair processHistoricalRootsUpdate 141.00 ns/op 130.00 ns/op 1.08
mainnet_e81889 - altair processParticipationFlagUpdates 406.00 ns/op 398.00 ns/op 1.02
mainnet_e81889 - altair processSyncCommitteeUpdates 100.00 ns/op 100.00 ns/op 1.00
mainnet_e81889 - altair afterProcessEpoch 50.256 ms/op 48.462 ms/op 1.04
capella processEpoch - mainnet_e217614 775.93 ms/op 764.12 ms/op 1.02
mainnet_e217614 - capella beforeProcessEpoch 68.520 ms/op 46.904 ms/op 1.46
mainnet_e217614 - capella processJustificationAndFinalization 4.5200 us/op 4.5400 us/op 1.00
mainnet_e217614 - capella processInactivityUpdates 14.370 ms/op 13.391 ms/op 1.07
mainnet_e217614 - capella processRewardsAndPenalties 83.083 ms/op 82.078 ms/op 1.01
mainnet_e217614 - capella processRegistryUpdates 4.1820 us/op 4.0090 us/op 1.04
mainnet_e217614 - capella processSlashings 132.00 ns/op 132.00 ns/op 1.00
mainnet_e217614 - capella processEth1DataReset 127.00 ns/op 126.00 ns/op 1.01
mainnet_e217614 - capella processEffectiveBalanceUpdates 10.801 ms/op 9.1304 ms/op 1.18
mainnet_e217614 - capella processSlashingsReset 648.00 ns/op 634.00 ns/op 1.02
mainnet_e217614 - capella processRandaoMixesReset 903.00 ns/op 874.00 ns/op 1.03
mainnet_e217614 - capella processHistoricalRootsUpdate 133.00 ns/op 127.00 ns/op 1.05
mainnet_e217614 - capella processParticipationFlagUpdates 413.00 ns/op 401.00 ns/op 1.03
mainnet_e217614 - capella afterProcessEpoch 132.73 ms/op 126.95 ms/op 1.05
phase0 processEpoch - mainnet_e58758 261.94 ms/op 247.23 ms/op 1.06
mainnet_e58758 - phase0 beforeProcessEpoch 60.507 ms/op 47.526 ms/op 1.27
mainnet_e58758 - phase0 processJustificationAndFinalization 5.5630 us/op 4.6820 us/op 1.19
mainnet_e58758 - phase0 processRewardsAndPenalties 14.945 ms/op 16.571 ms/op 0.90
mainnet_e58758 - phase0 processRegistryUpdates 2.0990 us/op 2.1200 us/op 0.99
mainnet_e58758 - phase0 processSlashings 133.00 ns/op 130.00 ns/op 1.02
mainnet_e58758 - phase0 processEth1DataReset 132.00 ns/op 127.00 ns/op 1.04
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 635.70 us/op 605.40 us/op 1.05
mainnet_e58758 - phase0 processSlashingsReset 817.00 ns/op 799.00 ns/op 1.02
mainnet_e58758 - phase0 processRandaoMixesReset 1.0450 us/op 988.00 ns/op 1.06
mainnet_e58758 - phase0 processHistoricalRootsUpdate 130.00 ns/op 130.00 ns/op 1.00
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.2740 us/op 1.0470 us/op 1.22
mainnet_e58758 - phase0 afterProcessEpoch 40.526 ms/op 39.826 ms/op 1.02
phase0 processEffectiveBalanceUpdates - 250000 normalcase 810.71 us/op 791.86 us/op 1.02
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 970.53 us/op 941.56 us/op 1.03
gloas processInactivityUpdates - 250000 inactivity leak all eligible missed target 11.462 ms/op 10.594 ms/op 1.08
phase0 processRegistryUpdates - 250000 normalcase 1.6950 us/op 1.7450 us/op 0.97
phase0 processRegistryUpdates - 250000 badcase_full_deposits 133.40 us/op 128.87 us/op 1.04
phase0 processRegistryUpdates - 250000 worstcase 0.5 66.301 ms/op 62.052 ms/op 1.07
altair processRewardsAndPenalties - 250000 normalcase 13.789 ms/op 13.520 ms/op 1.02
altair processRewardsAndPenalties - 250000 worstcase 13.485 ms/op 13.097 ms/op 1.03
phase0 getAttestationDeltas - 250000 normalcase 4.5430 ms/op 4.3786 ms/op 1.04
phase0 getAttestationDeltas - 250000 worstcase 4.5436 ms/op 4.5496 ms/op 1.00
phase0 processSlashings - 250000 worstcase 52.522 us/op 50.635 us/op 1.04
altair processSyncCommitteeUpdates - 250000 11.014 ms/op 8.8685 ms/op 1.24
BeaconState.hashTreeRoot - No change 177.00 ns/op 160.00 ns/op 1.11
BeaconState.hashTreeRoot - 1 full validator 89.447 us/op 91.516 us/op 0.98
BeaconState.hashTreeRoot - 32 full validator 940.76 us/op 907.95 us/op 1.04
BeaconState.hashTreeRoot - 512 full validator 9.1317 ms/op 9.5822 ms/op 0.95
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 110.69 us/op 113.99 us/op 0.97
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.6514 ms/op 1.5011 ms/op 1.10
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 23.085 ms/op 19.851 ms/op 1.16
BeaconState.hashTreeRoot - 1 balances 87.687 us/op 80.066 us/op 1.10
BeaconState.hashTreeRoot - 32 balances 821.10 us/op 801.57 us/op 1.02
BeaconState.hashTreeRoot - 512 balances 7.5145 ms/op 6.5467 ms/op 1.15
BeaconState.hashTreeRoot - 250000 balances 143.66 ms/op 131.96 ms/op 1.09
aggregationBits - 2048 els - zipIndexesInBitList 18.344 us/op 16.816 us/op 1.09
regular array get 100000 times 24.011 us/op 22.347 us/op 1.07
wrappedArray get 100000 times 24.287 us/op 22.628 us/op 1.07
arrayWithProxy get 100000 times 9.4408 ms/op 8.2260 ms/op 1.15
ssz.Root.equals 19.282 ns/op 17.968 ns/op 1.07
byteArrayEquals 19.093 ns/op 17.340 ns/op 1.10
Buffer.compare 7.7640 ns/op 7.2150 ns/op 1.08
processSlot - 1 slots 11.864 us/op 10.542 us/op 1.13
processSlot - 32 slots 2.3674 ms/op 2.3693 ms/op 1.00
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 3.4925 ms/op 2.9759 ms/op 1.17
getCommitteeAssignments - req 1 vs - 250000 vc 1.8315 ms/op 1.6869 ms/op 1.09
getCommitteeAssignments - req 100 vs - 250000 vc 4.2018 ms/op 3.8892 ms/op 1.08
getCommitteeAssignments - req 1000 vs - 250000 vc 4.5122 ms/op 4.1483 ms/op 1.09
findModifiedValidators - 10000 modified validators 467.69 ms/op 527.21 ms/op 0.89
findModifiedValidators - 1000 modified validators 341.34 ms/op 365.09 ms/op 0.93
findModifiedValidators - 100 modified validators 236.51 ms/op 195.94 ms/op 1.21
findModifiedValidators - 10 modified validators 201.29 ms/op 147.01 ms/op 1.37
findModifiedValidators - 1 modified validators 192.24 ms/op 122.80 ms/op 1.57
findModifiedValidators - no difference 136.25 ms/op 116.98 ms/op 1.16
migrate state 1500000 validators, 3400 modified, 2000 new 2.5230 s/op 2.8122 s/op 0.90
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.0400 ns/op 3.0600 ns/op 0.99
state getBlockRootAtSlot - 250000 vs - 7PWei 353.44 ns/op 423.58 ns/op 0.83
computeProposerIndex 100000 validators 1.3509 ms/op 1.3564 ms/op 1.00
getNextSyncCommitteeIndices 1000 validators 2.7347 ms/op 2.7424 ms/op 1.00
getNextSyncCommitteeIndices 10000 validators 24.437 ms/op 24.292 ms/op 1.01
getNextSyncCommitteeIndices 100000 validators 81.054 ms/op 82.546 ms/op 0.98
computeProposers - vc 250000 590.95 us/op 580.30 us/op 1.02
computeEpochShuffling - vc 250000 46.012 ms/op 46.340 ms/op 0.99
getNextSyncCommittee - vc 250000 8.3911 ms/op 8.5944 ms/op 0.98
nodejs block root to RootHex using toHex 80.795 ns/op 80.592 ns/op 1.00
nodejs block root to RootHex using toRootHex 51.680 ns/op 50.344 ns/op 1.03
nodejs fromHex(blob) 632.12 us/op 646.98 us/op 0.98
nodejs fromHexInto(blob) 527.24 us/op 529.96 us/op 0.99
nodejs block root to RootHex using the deprecated toHexString 594.07 ns/op 606.80 ns/op 0.98
nodejs byteArrayEquals 32 bytes (block root) 20.941 ns/op 20.776 ns/op 1.01
nodejs byteArrayEquals 48 bytes (pubkey) 30.083 ns/op 29.877 ns/op 1.01
nodejs byteArrayEquals 96 bytes (signature) 30.849 ns/op 30.613 ns/op 1.01
nodejs byteArrayEquals 1024 bytes 35.624 ns/op 38.707 ns/op 0.92
nodejs byteArrayEquals 131072 bytes (blob) 1.1911 us/op 1.2763 us/op 0.93
browser block root to RootHex using toHex 132.88 ns/op 134.99 ns/op 0.98
browser block root to RootHex using toRootHex 127.23 ns/op 129.25 ns/op 0.98
browser fromHex(blob) 1.2028 ms/op 1.0348 ms/op 1.16
browser fromHexInto(blob) 528.32 us/op 528.11 us/op 1.00
browser block root to RootHex using the deprecated toHexString 592.01 ns/op 608.97 ns/op 0.97
browser byteArrayEquals 32 bytes (block root) 21.887 ns/op 21.798 ns/op 1.00
browser byteArrayEquals 48 bytes (pubkey) 31.113 ns/op 30.941 ns/op 1.01
browser byteArrayEquals 96 bytes (signature) 58.976 ns/op 58.114 ns/op 1.01
browser byteArrayEquals 1024 bytes 611.79 ns/op 603.38 ns/op 1.01
browser byteArrayEquals 131072 bytes (blob) 75.332 us/op 74.975 us/op 1.00

by benchmarkbot/action

@nflaig
nflaig marked this pull request as ready for review September 16, 2026 12:38
@nflaig
nflaig requested a review from a team as a code owner September 16, 2026 12:38
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 16, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-16T12:57:10.839744Z 2388eed Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@codecov

codecov Bot commented Sep 16, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 52.77%. Comparing base (042c961) to head (9f460ff).
⚠️ Report is 13 commits behind head on unstable.

Additional details and impacted files
@@            Coverage Diff            @@
##           unstable   #10083   +/-   ##
=========================================
  Coverage     52.77%   52.77%           
=========================================
  Files           848      848           
  Lines         58970    58970           
  Branches       4345     4345           
=========================================
  Hits          31122    31122           
  Misses        27791    27791           
  Partials         57       57           
🚀 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.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9f460ffae1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/beacon-node/src/network/processor/gossipHandlers.ts Outdated
@nflaig

nflaig commented Sep 16, 2026

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Already looking forward to the next diff.

Reviewed commit: 2388eeda29

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +256 to +258
chain.seenBlockInputCache.remove(blockRootHex);
if (isForkPostGloas(fork)) {
chain.seenPayloadEnvelopeInputCache.prune(blockRootHex);

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.

naming here is a bit confusing

  • seenBlockInputCache.prune removes the entry + all ancestors
  • seenPayloadEnvelopeInputCache.prune removes only the entry, same as seenBlockInputCache.remove

@matthewkeil matthewkeil moved this from In Progress to Awaiting Author in Lodestar Team Coordination Sep 16, 2026
Comment on lines -261 to +274
// both caches, keeping them consistent.
chain.seenBlockInputCache.prune(blockRootHex);
// both caches, keeping them consistent. The block may carry any parent root, so only its own entry is removed
chain.seenBlockInputCache.remove(blockRootHex);

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.

current code seems like a bug, we don't wanna drop the whole ancestry, anyone can send us an invalid block that can trigger this (unless I am missing something obvious why we did this)

@twoeths
twoeths merged commit 8d21f7a into unstable Sep 17, 2026
22 checks passed
@twoeths
twoeths deleted the nflaig/prune-unimported-repeat-proposals branch September 17, 2026 01:41
@github-project-automation github-project-automation Bot moved this from Awaiting Author to Done in Lodestar Team Coordination Sep 17, 2026
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