Skip to content

fix: prune old proposer preferences submissions#9591

Merged
nflaig merged 2 commits into
unstablefrom
nflaig/prune-proposer-preferences
Jul 6, 2026
Merged

fix: prune old proposer preferences submissions#9591
nflaig merged 2 commits into
unstablefrom
nflaig/prune-proposer-preferences

Conversation

@nflaig

@nflaig nflaig commented Jul 4, 2026

Copy link
Copy Markdown
Member

Motivation

Follow-up to #9571. The submitted map in ProposerPreferencesService tracks which preferences were sent per epoch but was never pruned, so it grows by one entry each epoch for the lifetime of the process. Raised in review by @twoeths.

Description

Drop tracking for past epochs at the start of each task run; only currentEpoch and currentEpoch + 1 are ever processed.

@nflaig nflaig requested a review from a team as a code owner July 4, 2026 20:43

@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 introduces a mechanism to prune past epochs from the submitted tracking map in ProposerPreferencesService, preventing unbounded memory growth. It also adds a corresponding unit test to verify that past epochs are correctly deleted while the current epoch is retained. There are no review comments, so no further feedback is provided.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

@nflaig nflaig force-pushed the nflaig/prune-proposer-preferences branch from d48f2b3 to 7583a02 Compare July 4, 2026 20:49
@nflaig nflaig force-pushed the nflaig/prune-proposer-preferences branch from 7583a02 to 0fb52bb Compare July 4, 2026 20:55

@nflaig nflaig left a comment

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.

LGTM, self-review since this was implemented by claude

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: d4a6ad8 Previous: 9d930bd Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 842.49 us/op 895.22 us/op 0.94
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 37.875 us/op 38.503 us/op 0.98
BLS verify - blst 745.34 us/op 740.93 us/op 1.01
BLS verifyMultipleSignatures 3 - blst 1.3537 ms/op 1.3504 ms/op 1.00
BLS verifyMultipleSignatures 8 - blst 2.1503 ms/op 2.1455 ms/op 1.00
BLS verifyMultipleSignatures 32 - blst 6.7273 ms/op 6.9171 ms/op 0.97
BLS verifyMultipleSignatures 64 - blst 13.065 ms/op 13.748 ms/op 0.95
BLS verifyMultipleSignatures 128 - blst 25.329 ms/op 25.552 ms/op 0.99
BLS deserializing 10000 signatures 628.18 ms/op 633.65 ms/op 0.99
BLS deserializing 100000 signatures 6.3361 s/op 6.2867 s/op 1.01
BLS verifyMultipleSignatures - same message - 3 - blst 811.98 us/op 753.35 us/op 1.08
BLS verifyMultipleSignatures - same message - 8 - blst 937.38 us/op 883.31 us/op 1.06
BLS verifyMultipleSignatures - same message - 32 - blst 1.5223 ms/op 1.5001 ms/op 1.01
BLS verifyMultipleSignatures - same message - 64 - blst 2.3760 ms/op 2.3448 ms/op 1.01
BLS verifyMultipleSignatures - same message - 128 - blst 4.0666 ms/op 4.0215 ms/op 1.01
BLS aggregatePubkeys 32 - blst 17.678 us/op 17.445 us/op 1.01
BLS aggregatePubkeys 128 - blst 63.306 us/op 62.414 us/op 1.01
getSlashingsAndExits - default max 46.453 us/op 44.435 us/op 1.05
getSlashingsAndExits - 2k 322.34 us/op 320.77 us/op 1.00
proposeBlockBody type=full, size=empty 664.37 us/op 681.06 us/op 0.98
isKnown best case - 1 super set check 167.00 ns/op 181.00 ns/op 0.92
isKnown normal case - 2 super set checks 163.00 ns/op 168.00 ns/op 0.97
isKnown worse case - 16 super set checks 163.00 ns/op 166.00 ns/op 0.98
validate api signedAggregateAndProof - struct 1.5091 ms/op 1.5165 ms/op 1.00
validate gossip signedAggregateAndProof - struct 1.5085 ms/op 1.5089 ms/op 1.00
batch validate gossip attestation - vc 640000 - chunk 32 106.94 us/op 106.78 us/op 1.00
batch validate gossip attestation - vc 640000 - chunk 64 93.728 us/op 92.320 us/op 1.02
batch validate gossip attestation - vc 640000 - chunk 128 86.488 us/op 85.842 us/op 1.01
batch validate gossip attestation - vc 640000 - chunk 256 82.895 us/op 82.561 us/op 1.00
bytes32 toHexString 289.00 ns/op 288.00 ns/op 1.00
bytes32 Buffer.toString(hex) 178.00 ns/op 166.00 ns/op 1.07
bytes32 Buffer.toString(hex) from Uint8Array 239.00 ns/op 237.00 ns/op 1.01
bytes32 Buffer.toString(hex) + 0x 175.00 ns/op 169.00 ns/op 1.04
Return object 10000 times 0.21340 ns/op 0.21210 ns/op 1.01
Throw Error 10000 times 3.3210 us/op 3.4264 us/op 0.97
toHex 98.072 ns/op 105.07 ns/op 0.93
Buffer.from 87.525 ns/op 87.876 ns/op 1.00
shared Buffer 62.210 ns/op 59.596 ns/op 1.04
fastMsgIdFn sha256 / 200 bytes 1.4760 us/op 1.4980 us/op 0.99
fastMsgIdFn h32 xxhash / 200 bytes 159.00 ns/op 156.00 ns/op 1.02
fastMsgIdFn h64 xxhash / 200 bytes 218.00 ns/op 203.00 ns/op 1.07
fastMsgIdFn sha256 / 1000 bytes 4.7660 us/op 4.7920 us/op 0.99
fastMsgIdFn h32 xxhash / 1000 bytes 254.00 ns/op 245.00 ns/op 1.04
fastMsgIdFn h64 xxhash / 1000 bytes 260.00 ns/op 254.00 ns/op 1.02
fastMsgIdFn sha256 / 10000 bytes 41.963 us/op 42.292 us/op 0.99
fastMsgIdFn h32 xxhash / 10000 bytes 1.2800 us/op 1.2550 us/op 1.02
fastMsgIdFn h64 xxhash / 10000 bytes 839.00 ns/op 814.00 ns/op 1.03
send data - 1000 256B messages 4.0342 ms/op 3.8873 ms/op 1.04
send data - 1000 512B messages 5.4719 ms/op 5.0659 ms/op 1.08
send data - 1000 1024B messages 5.5101 ms/op 5.4530 ms/op 1.01
send data - 1000 1200B messages 6.1334 ms/op 5.8379 ms/op 1.05
send data - 1000 2048B messages 21.635 ms/op 21.942 ms/op 0.99
send data - 1000 4096B messages 22.095 ms/op 63.625 ms/op 0.35
send data - 1000 16384B messages 225.53 ms/op 283.75 ms/op 0.79
send data - 1000 65536B messages 1.0411 s/op 956.60 ms/op 1.09
enrSubnets - fastDeserialize 64 bits 746.00 ns/op 730.00 ns/op 1.02
enrSubnets - ssz BitVector 64 bits 268.00 ns/op 271.00 ns/op 0.99
enrSubnets - fastDeserialize 4 bits 103.00 ns/op 105.00 ns/op 0.98
enrSubnets - ssz BitVector 4 bits 268.00 ns/op 270.00 ns/op 0.99
prioritizePeers score -10:0 att 32-0.1 sync 2-0 201.57 us/op 200.27 us/op 1.01
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 229.58 us/op 227.82 us/op 1.01
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 331.81 us/op 333.07 us/op 1.00
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 592.31 us/op 585.52 us/op 1.01
prioritizePeers score 0:0 att 64-1 sync 4-1 691.67 us/op 691.18 us/op 1.00
array of 16000 items push then shift 1.2862 us/op 1.2853 us/op 1.00
LinkedList of 16000 items push then shift 6.7430 ns/op 6.9930 ns/op 0.96
array of 16000 items push then pop 66.993 ns/op 65.420 ns/op 1.02
LinkedList of 16000 items push then pop 5.8830 ns/op 5.9110 ns/op 1.00
array of 24000 items push then shift 1.9110 us/op 1.8992 us/op 1.01
LinkedList of 24000 items push then shift 6.5750 ns/op 6.6000 ns/op 1.00
array of 24000 items push then pop 98.252 ns/op 88.603 ns/op 1.11
LinkedList of 24000 items push then pop 5.9320 ns/op 5.9120 ns/op 1.00
intersect bitArray bitLen 8 4.7720 ns/op 4.7320 ns/op 1.01
intersect array and set length 8 29.196 ns/op 29.143 ns/op 1.00
intersect bitArray bitLen 128 24.054 ns/op 24.066 ns/op 1.00
intersect array and set length 128 495.02 ns/op 491.55 ns/op 1.01
bitArray.getTrueBitIndexes() bitLen 128 1.0700 us/op 1.0290 us/op 1.04
bitArray.getTrueBitIndexes() bitLen 248 1.7680 us/op 1.7400 us/op 1.02
bitArray.getTrueBitIndexes() bitLen 512 3.5450 us/op 3.4610 us/op 1.02
Full columns - reconstruct all 6 blobs 278.71 us/op 143.76 us/op 1.94
Full columns - reconstruct half of the blobs out of 6 94.556 us/op 150.27 us/op 0.63
Full columns - reconstruct single blob out of 6 34.757 us/op 34.260 us/op 1.01
Half columns - reconstruct all 6 blobs 376.05 ms/op 371.72 ms/op 1.01
Half columns - reconstruct half of the blobs out of 6 187.79 ms/op 186.18 ms/op 1.01
Half columns - reconstruct single blob out of 6 66.399 ms/op 65.354 ms/op 1.02
Set add up to 64 items then delete first 1.6555 us/op 1.6285 us/op 1.02
OrderedSet add up to 64 items then delete first 2.5241 us/op 2.4896 us/op 1.01
Set add up to 64 items then delete last 1.9028 us/op 1.8726 us/op 1.02
OrderedSet add up to 64 items then delete last 2.8389 us/op 2.7543 us/op 1.03
Set add up to 64 items then delete middle 1.8935 us/op 1.8717 us/op 1.01
OrderedSet add up to 64 items then delete middle 4.2502 us/op 4.2246 us/op 1.01
Set add up to 128 items then delete first 3.7627 us/op 3.7290 us/op 1.01
OrderedSet add up to 128 items then delete first 5.7302 us/op 5.6922 us/op 1.01
Set add up to 128 items then delete last 3.6397 us/op 3.6232 us/op 1.00
OrderedSet add up to 128 items then delete last 5.3590 us/op 5.3176 us/op 1.01
Set add up to 128 items then delete middle 3.6287 us/op 3.5927 us/op 1.01
OrderedSet add up to 128 items then delete middle 11.159 us/op 11.107 us/op 1.00
Set add up to 256 items then delete first 7.5327 us/op 7.4322 us/op 1.01
OrderedSet add up to 256 items then delete first 11.621 us/op 11.584 us/op 1.00
Set add up to 256 items then delete last 7.1717 us/op 7.1692 us/op 1.00
OrderedSet add up to 256 items then delete last 10.956 us/op 10.882 us/op 1.01
Set add up to 256 items then delete middle 7.2368 us/op 7.0615 us/op 1.02
OrderedSet add up to 256 items then delete middle 34.009 us/op 33.982 us/op 1.00
runFastConfirmationRules vc:100000 bc:96 eq:0 3.4890 us/op 3.9030 us/op 0.89
runFastConfirmationRules vc:600000 bc:96 eq:0 3.5990 us/op 3.5120 us/op 1.02
runFastConfirmationRules vc:1000000 bc:96 eq:0 3.2530 us/op 3.5210 us/op 0.92
runFastConfirmationRules vc:600000 bc:320 eq:0 9.7160 us/op 10.468 us/op 0.93
runFastConfirmationRules vc:600000 bc:1200 eq:0 35.328 us/op 32.522 us/op 1.09
runFastConfirmationRules vc:600000 bc:96 eq:1000 3.3550 us/op 3.2230 us/op 1.04
runFastConfirmationRules vc:600000 bc:96 eq:10000 3.1640 us/op 3.2940 us/op 0.96
runFastConfirmationRules vc:600000 bc:96 eq:300000 3.3170 us/op 3.6310 us/op 0.91
pass gossip attestations to forkchoice per slot 2.6074 ms/op 2.5605 ms/op 1.02
forkChoice updateHead vc 100000 bc 64 eq 0 433.64 us/op 425.31 us/op 1.02
forkChoice updateHead vc 600000 bc 64 eq 0 2.5861 ms/op 2.4895 ms/op 1.04
forkChoice updateHead vc 1000000 bc 64 eq 0 5.4473 ms/op 4.1618 ms/op 1.31
forkChoice updateHead vc 600000 bc 320 eq 0 2.5945 ms/op 2.5053 ms/op 1.04
forkChoice updateHead vc 600000 bc 1200 eq 0 2.6598 ms/op 2.5255 ms/op 1.05
forkChoice updateHead vc 600000 bc 7200 eq 0 3.3761 ms/op 2.7946 ms/op 1.21
forkChoice updateHead vc 600000 bc 64 eq 1000 2.6863 ms/op 2.5494 ms/op 1.05
forkChoice updateHead vc 600000 bc 64 eq 10000 2.7840 ms/op 2.6748 ms/op 1.04
forkChoice updateHead vc 600000 bc 64 eq 300000 7.2506 ms/op 6.8163 ms/op 1.06
computeDeltas 1400000 validators 0% inactive 12.770 ms/op 12.785 ms/op 1.00
computeDeltas 1400000 validators 10% inactive 11.914 ms/op 12.061 ms/op 0.99
computeDeltas 1400000 validators 20% inactive 10.889 ms/op 10.790 ms/op 1.01
computeDeltas 1400000 validators 50% inactive 8.3667 ms/op 8.3181 ms/op 1.01
computeDeltas 2100000 validators 0% inactive 19.242 ms/op 19.015 ms/op 1.01
computeDeltas 2100000 validators 10% inactive 18.163 ms/op 17.953 ms/op 1.01
computeDeltas 2100000 validators 20% inactive 16.512 ms/op 16.289 ms/op 1.01
computeDeltas 2100000 validators 50% inactive 9.7183 ms/op 9.6147 ms/op 1.01
altair processAttestation - 250000 vs - 7PWei normalcase 1.6120 ms/op 1.6834 ms/op 0.96
altair processAttestation - 250000 vs - 7PWei worstcase 2.3857 ms/op 2.4596 ms/op 0.97
altair processAttestation - setStatus - 1/6 committees join 102.97 us/op 105.36 us/op 0.98
altair processAttestation - setStatus - 1/3 committees join 205.90 us/op 208.82 us/op 0.99
altair processAttestation - setStatus - 1/2 committees join 289.24 us/op 286.89 us/op 1.01
altair processAttestation - setStatus - 2/3 committees join 375.27 us/op 381.83 us/op 0.98
altair processAttestation - setStatus - 4/5 committees join 513.45 us/op 498.11 us/op 1.03
altair processAttestation - setStatus - 100% committees join 598.66 us/op 594.85 us/op 1.01
altair processBlock - 250000 vs - 7PWei normalcase 3.2383 ms/op 2.8976 ms/op 1.12
altair processBlock - 250000 vs - 7PWei normalcase hashState 12.267 ms/op 11.863 ms/op 1.03
altair processBlock - 250000 vs - 7PWei worstcase 19.972 ms/op 19.404 ms/op 1.03
altair processBlock - 250000 vs - 7PWei worstcase hashState 41.733 ms/op 38.828 ms/op 1.07
phase0 processBlock - 250000 vs - 7PWei normalcase 1.3149 ms/op 1.2703 ms/op 1.04
phase0 processBlock - 250000 vs - 7PWei worstcase 17.280 ms/op 17.324 ms/op 1.00
altair processEth1Data - 250000 vs - 7PWei normalcase 291.38 us/op 298.86 us/op 0.97
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.1260 us/op 3.3360 us/op 0.94
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 20.630 us/op 20.856 us/op 0.99
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 5.6920 us/op 5.9800 us/op 0.95
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.4610 us/op 3.5720 us/op 0.97
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 90.075 us/op 89.038 us/op 1.01
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.3725 ms/op 1.3637 ms/op 1.01
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.8445 ms/op 1.7923 ms/op 1.03
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8194 ms/op 1.7935 ms/op 1.01
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.7418 ms/op 3.2540 ms/op 1.15
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.1063 ms/op 2.0395 ms/op 1.03
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.0485 ms/op 3.5893 ms/op 1.13
Tree 40 250000 create 302.96 ms/op 303.35 ms/op 1.00
Tree 40 250000 get(125000) 96.041 ns/op 94.195 ns/op 1.02
Tree 40 250000 set(125000) 1.0437 us/op 1.0172 us/op 1.03
Tree 40 250000 toArray() 9.2329 ms/op 9.3968 ms/op 0.98
Tree 40 250000 iterate all - toArray() + loop 9.7533 ms/op 9.3401 ms/op 1.04
Tree 40 250000 iterate all - get(i) 38.513 ms/op 34.009 ms/op 1.13
Array 250000 create 2.1006 ms/op 2.1546 ms/op 0.97
Array 250000 clone - spread 664.06 us/op 675.15 us/op 0.98
Array 250000 get(125000) 0.29400 ns/op 0.29500 ns/op 1.00
Array 250000 set(125000) 0.29800 ns/op 0.30100 ns/op 0.99
Array 250000 iterate all - loop 57.830 us/op 57.553 us/op 1.00
phase0 afterProcessEpoch - 250000 vs - 7PWei 39.734 ms/op 40.750 ms/op 0.98
Array.fill - length 1000000 2.1866 ms/op 2.2510 ms/op 0.97
Array push - length 1000000 7.4438 ms/op 8.0352 ms/op 0.93
Array.get 0.20789 ns/op 0.20873 ns/op 1.00
Uint8Array.get 0.24519 ns/op 0.24280 ns/op 1.01
phase0 beforeProcessEpoch - 250000 vs - 7PWei 16.125 ms/op 11.452 ms/op 1.41
altair processEpoch - mainnet_e81889 231.44 ms/op 237.62 ms/op 0.97
mainnet_e81889 - altair beforeProcessEpoch 17.399 ms/op 19.604 ms/op 0.89
mainnet_e81889 - altair processJustificationAndFinalization 5.0880 us/op 4.9490 us/op 1.03
mainnet_e81889 - altair processInactivityUpdates 3.4653 ms/op 3.5363 ms/op 0.98
mainnet_e81889 - altair processRewardsAndPenalties 18.362 ms/op 16.648 ms/op 1.10
mainnet_e81889 - altair processRegistryUpdates 524.00 ns/op 519.00 ns/op 1.01
mainnet_e81889 - altair processSlashings 133.00 ns/op 133.00 ns/op 1.00
mainnet_e81889 - altair processEth1DataReset 132.00 ns/op 128.00 ns/op 1.03
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.1794 ms/op 1.1968 ms/op 0.99
mainnet_e81889 - altair processSlashingsReset 690.00 ns/op 696.00 ns/op 0.99
mainnet_e81889 - altair processRandaoMixesReset 976.00 ns/op 1.0490 us/op 0.93
mainnet_e81889 - altair processHistoricalRootsUpdate 134.00 ns/op 137.00 ns/op 0.98
mainnet_e81889 - altair processParticipationFlagUpdates 414.00 ns/op 417.00 ns/op 0.99
mainnet_e81889 - altair processSyncCommitteeUpdates 113.00 ns/op 106.00 ns/op 1.07
mainnet_e81889 - altair afterProcessEpoch 42.863 ms/op 41.876 ms/op 1.02
capella processEpoch - mainnet_e217614 774.08 ms/op 722.97 ms/op 1.07
mainnet_e217614 - capella beforeProcessEpoch 62.076 ms/op 58.680 ms/op 1.06
mainnet_e217614 - capella processJustificationAndFinalization 5.1870 us/op 5.0580 us/op 1.03
mainnet_e217614 - capella processInactivityUpdates 12.745 ms/op 11.132 ms/op 1.14
mainnet_e217614 - capella processRewardsAndPenalties 87.252 ms/op 82.817 ms/op 1.05
mainnet_e217614 - capella processRegistryUpdates 4.6600 us/op 4.5140 us/op 1.03
mainnet_e217614 - capella processSlashings 142.00 ns/op 133.00 ns/op 1.07
mainnet_e217614 - capella processEth1DataReset 143.00 ns/op 127.00 ns/op 1.13
mainnet_e217614 - capella processEffectiveBalanceUpdates 6.8862 ms/op 5.1886 ms/op 1.33
mainnet_e217614 - capella processSlashingsReset 673.00 ns/op 682.00 ns/op 0.99
mainnet_e217614 - capella processRandaoMixesReset 1.0460 us/op 1.0380 us/op 1.01
mainnet_e217614 - capella processHistoricalRootsUpdate 138.00 ns/op 127.00 ns/op 1.09
mainnet_e217614 - capella processParticipationFlagUpdates 425.00 ns/op 430.00 ns/op 0.99
mainnet_e217614 - capella afterProcessEpoch 108.54 ms/op 111.83 ms/op 0.97
phase0 processEpoch - mainnet_e58758 255.49 ms/op 271.25 ms/op 0.94
mainnet_e58758 - phase0 beforeProcessEpoch 48.192 ms/op 47.419 ms/op 1.02
mainnet_e58758 - phase0 processJustificationAndFinalization 4.7560 us/op 4.9560 us/op 0.96
mainnet_e58758 - phase0 processRewardsAndPenalties 15.227 ms/op 14.337 ms/op 1.06
mainnet_e58758 - phase0 processRegistryUpdates 2.2530 us/op 2.2300 us/op 1.01
mainnet_e58758 - phase0 processSlashings 141.00 ns/op 132.00 ns/op 1.07
mainnet_e58758 - phase0 processEth1DataReset 138.00 ns/op 128.00 ns/op 1.08
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 819.90 us/op 1.0531 ms/op 0.78
mainnet_e58758 - phase0 processSlashingsReset 908.00 ns/op 850.00 ns/op 1.07
mainnet_e58758 - phase0 processRandaoMixesReset 1.1360 us/op 1.0300 us/op 1.10
mainnet_e58758 - phase0 processHistoricalRootsUpdate 152.00 ns/op 137.00 ns/op 1.11
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.0120 us/op 974.00 ns/op 1.04
mainnet_e58758 - phase0 afterProcessEpoch 34.050 ms/op 32.846 ms/op 1.04
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.1058 ms/op 1.0106 ms/op 1.09
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.6255 ms/op 1.6326 ms/op 1.00
altair processInactivityUpdates - 250000 normalcase 10.420 ms/op 10.588 ms/op 0.98
altair processInactivityUpdates - 250000 worstcase 10.423 ms/op 10.620 ms/op 0.98
phase0 processRegistryUpdates - 250000 normalcase 2.1260 us/op 2.1980 us/op 0.97
phase0 processRegistryUpdates - 250000 badcase_full_deposits 140.43 us/op 136.77 us/op 1.03
phase0 processRegistryUpdates - 250000 worstcase 0.5 59.891 ms/op 53.192 ms/op 1.13
altair processRewardsAndPenalties - 250000 normalcase 13.182 ms/op 12.533 ms/op 1.05
altair processRewardsAndPenalties - 250000 worstcase 13.570 ms/op 12.859 ms/op 1.06
phase0 getAttestationDeltas - 250000 normalcase 5.3136 ms/op 5.2830 ms/op 1.01
phase0 getAttestationDeltas - 250000 worstcase 5.3727 ms/op 9.3270 ms/op 0.58
phase0 processSlashings - 250000 worstcase 71.302 us/op 59.362 us/op 1.20
altair processSyncCommitteeUpdates - 250000 9.9841 ms/op 10.192 ms/op 0.98
BeaconState.hashTreeRoot - No change 178.00 ns/op 164.00 ns/op 1.09
BeaconState.hashTreeRoot - 1 full validator 57.490 us/op 68.346 us/op 0.84
BeaconState.hashTreeRoot - 32 full validator 626.86 us/op 764.94 us/op 0.82
BeaconState.hashTreeRoot - 512 full validator 5.9785 ms/op 7.6233 ms/op 0.78
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 70.057 us/op 90.157 us/op 0.78
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.0559 ms/op 1.3044 ms/op 0.81
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 12.665 ms/op 15.109 ms/op 0.84
BeaconState.hashTreeRoot - 1 balances 56.027 us/op 72.718 us/op 0.77
BeaconState.hashTreeRoot - 32 balances 621.29 us/op 688.87 us/op 0.90
BeaconState.hashTreeRoot - 512 balances 4.6873 ms/op 5.8058 ms/op 0.81
BeaconState.hashTreeRoot - 250000 balances 105.50 ms/op 116.49 ms/op 0.91
aggregationBits - 2048 els - zipIndexesInBitList 18.760 us/op 18.763 us/op 1.00
regular array get 100000 times 22.680 us/op 22.630 us/op 1.00
wrappedArray get 100000 times 22.668 us/op 22.603 us/op 1.00
arrayWithProxy get 100000 times 10.513 ms/op 20.546 ms/op 0.51
ssz.Root.equals 21.536 ns/op 81.469 ns/op 0.26
byteArrayEquals 21.305 ns/op 21.392 ns/op 1.00
Buffer.compare 8.8650 ns/op 8.9010 ns/op 1.00
processSlot - 1 slots 7.8640 us/op 8.9460 us/op 0.88
processSlot - 32 slots 1.4971 ms/op 1.6456 ms/op 0.91
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 2.0548 ms/op 3.5787 ms/op 0.57
getCommitteeAssignments - req 1 vs - 250000 vc 1.6740 ms/op 1.6811 ms/op 1.00
getCommitteeAssignments - req 100 vs - 250000 vc 3.4101 ms/op 3.4368 ms/op 0.99
getCommitteeAssignments - req 1000 vs - 250000 vc 3.6689 ms/op 3.6897 ms/op 0.99
findModifiedValidators - 10000 modified validators 691.43 ms/op 614.00 ms/op 1.13
findModifiedValidators - 1000 modified validators 496.47 ms/op 445.64 ms/op 1.11
findModifiedValidators - 100 modified validators 312.01 ms/op 330.02 ms/op 0.95
findModifiedValidators - 10 modified validators 252.38 ms/op 164.00 ms/op 1.54
findModifiedValidators - 1 modified validators 169.36 ms/op 167.86 ms/op 1.01
findModifiedValidators - no difference 197.27 ms/op 142.01 ms/op 1.39
migrate state 1500000 validators, 3400 modified, 2000 new 2.5664 s/op 2.6088 s/op 0.98
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.7700 ns/op 3.7300 ns/op 1.01
state getBlockRootAtSlot - 250000 vs - 7PWei 260.75 ns/op 286.91 ns/op 0.91
computeProposerIndex 100000 validators 1.3101 ms/op 1.4207 ms/op 0.92
getNextSyncCommitteeIndices 1000 validators 2.8501 ms/op 2.8929 ms/op 0.99
getNextSyncCommitteeIndices 10000 validators 25.148 ms/op 25.572 ms/op 0.98
getNextSyncCommitteeIndices 100000 validators 86.592 ms/op 87.875 ms/op 0.99
computeProposers - vc 250000 553.94 us/op 559.04 us/op 0.99
computeEpochShuffling - vc 250000 38.376 ms/op 39.926 ms/op 0.96
getNextSyncCommittee - vc 250000 9.4178 ms/op 9.4257 ms/op 1.00
nodejs block root to RootHex using toHex 98.062 ns/op 100.13 ns/op 0.98
nodejs block root to RootHex using toRootHex 65.435 ns/op 63.044 ns/op 1.04
nodejs fromHex(blob) 762.50 us/op 733.90 us/op 1.04
nodejs fromHexInto(blob) 629.90 us/op 629.88 us/op 1.00
nodejs block root to RootHex using the deprecated toHexString 486.00 ns/op 474.48 ns/op 1.02
nodejs byteArrayEquals 32 bytes (block root) 25.907 ns/op 25.974 ns/op 1.00
nodejs byteArrayEquals 48 bytes (pubkey) 37.375 ns/op 37.576 ns/op 0.99
nodejs byteArrayEquals 96 bytes (signature) 37.565 ns/op 38.005 ns/op 0.99
nodejs byteArrayEquals 1024 bytes 44.905 ns/op 43.646 ns/op 1.03
nodejs byteArrayEquals 131072 bytes (blob) 1.7725 us/op 1.7625 us/op 1.01
browser block root to RootHex using toHex 145.07 ns/op 144.91 ns/op 1.00
browser block root to RootHex using toRootHex 130.92 ns/op 130.89 ns/op 1.00
browser fromHex(blob) 1.5371 ms/op 1.5157 ms/op 1.01
browser fromHexInto(blob) 627.22 us/op 631.57 us/op 0.99
browser block root to RootHex using the deprecated toHexString 339.08 ns/op 333.68 ns/op 1.02
browser byteArrayEquals 32 bytes (block root) 27.848 ns/op 28.039 ns/op 0.99
browser byteArrayEquals 48 bytes (pubkey) 39.190 ns/op 39.505 ns/op 0.99
browser byteArrayEquals 96 bytes (signature) 73.363 ns/op 73.996 ns/op 0.99
browser byteArrayEquals 1024 bytes 749.65 ns/op 755.98 ns/op 0.99
browser byteArrayEquals 131072 bytes (blob) 94.318 us/op 95.273 us/op 0.99

by benchmarkbot/action

@nflaig nflaig merged commit c6b2b7f into unstable Jul 6, 2026
19 checks passed
@nflaig nflaig deleted the nflaig/prune-proposer-preferences branch July 6, 2026 14:06
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.

2 participants