Skip to content

fix: reject repeat proposals in publish block API - #9818

Merged
nflaig merged 2 commits into
unstablefrom
nflaig/reject-repeat-proposal-api
Aug 17, 2026
Merged

fix: reject repeat proposals in publish block API#9818
nflaig merged 2 commits into
unstablefrom
nflaig/reject-repeat-proposal-api

Conversation

@nflaig

@nflaig nflaig commented Aug 13, 2026

Copy link
Copy Markdown
Member

Follow-up to #9805 and #9814

REPEAT_PROPOSAL now identifies a conflicting block root, but the publish block API still treated it like benign ALREADY_KNOWN and returned success.

Remove that special case so repeat proposals use the existing gossip validation error path. Keep ALREADY_KNOWN benign and add focused API coverage for both cases.

@nflaig
nflaig marked this pull request as ready for review August 13, 2026 13:55
@nflaig
nflaig requested a review from a team as a code owner August 13, 2026 13:55
@codecov

codecov Bot commented Aug 13, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 52.60%. Comparing base (25a4a1c) to head (9a3b2be).

Additional details and impacted files
@@            Coverage Diff            @@
##           unstable    #9818   +/-   ##
=========================================
  Coverage     52.60%   52.60%           
=========================================
  Files           848      848           
  Lines         59969    59969           
  Branches       4414     4414           
=========================================
  Hits          31545    31545           
  Misses        28365    28365           
  Partials         59       59           
🚀 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.

@github-actions

github-actions Bot commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 54ace5c Previous: 742db20 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.6016 ms/op 868.51 us/op 1.84
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 44.100 us/op 39.964 us/op 1.10
BLS verify - blst 721.56 us/op 737.55 us/op 0.98
BLS verifyMultipleSignatures 3 - blst 1.3620 ms/op 1.3784 ms/op 0.99
BLS verifyMultipleSignatures 8 - blst 2.1662 ms/op 2.1870 ms/op 0.99
BLS verifyMultipleSignatures 32 - blst 7.2266 ms/op 6.8353 ms/op 1.06
BLS verifyMultipleSignatures 64 - blst 13.122 ms/op 13.554 ms/op 0.97
BLS verifyMultipleSignatures 128 - blst 25.675 ms/op 25.747 ms/op 1.00
BLS deserializing 10000 signatures 650.78 ms/op 633.09 ms/op 1.03
BLS deserializing 100000 signatures 6.5340 s/op 6.3252 s/op 1.03
BLS verifyMultipleSignatures - same message - 3 - blst 810.24 us/op 826.25 us/op 0.98
BLS verifyMultipleSignatures - same message - 8 - blst 947.80 us/op 894.26 us/op 1.06
BLS verifyMultipleSignatures - same message - 32 - blst 1.5884 ms/op 1.5638 ms/op 1.02
BLS verifyMultipleSignatures - same message - 64 - blst 2.4293 ms/op 2.3877 ms/op 1.02
BLS verifyMultipleSignatures - same message - 128 - blst 4.1879 ms/op 4.0475 ms/op 1.03
BLS aggregatePubkeys 32 - blst 18.431 us/op 17.711 us/op 1.04
BLS aggregatePubkeys 128 - blst 63.834 us/op 63.062 us/op 1.01
getSlashingsAndExits - default max 46.774 us/op 48.294 us/op 0.97
getSlashingsAndExits - 2k 426.09 us/op 338.12 us/op 1.26
proposeBlockBody type=full, size=empty 846.21 us/op 672.26 us/op 1.26
isKnown best case - 1 super set check 174.00 ns/op 176.00 ns/op 0.99
isKnown normal case - 2 super set checks 334.00 ns/op 171.00 ns/op 1.95
isKnown worse case - 16 super set checks 176.00 ns/op 174.00 ns/op 1.01
validate api signedAggregateAndProof - struct 1.5239 ms/op 1.5409 ms/op 0.99
validate gossip signedAggregateAndProof - struct 1.5199 ms/op 1.5344 ms/op 0.99
batch validate gossip attestation - vc 640000 - chunk 32 110.52 us/op 108.59 us/op 1.02
batch validate gossip attestation - vc 640000 - chunk 64 101.62 us/op 94.203 us/op 1.08
batch validate gossip attestation - vc 640000 - chunk 128 90.753 us/op 87.097 us/op 1.04
batch validate gossip attestation - vc 640000 - chunk 256 88.122 us/op 83.579 us/op 1.05
bytes32 toHexString 293.00 ns/op 302.00 ns/op 0.97
bytes32 Buffer.toString(hex) 174.00 ns/op 167.00 ns/op 1.04
bytes32 Buffer.toString(hex) from Uint8Array 245.00 ns/op 241.00 ns/op 1.02
bytes32 Buffer.toString(hex) + 0x 180.00 ns/op 164.00 ns/op 1.10
Return object 10000 times 0.21650 ns/op 0.21350 ns/op 1.01
Throw Error 10000 times 3.3646 us/op 3.3296 us/op 1.01
toHex 96.418 ns/op 102.62 ns/op 0.94
Buffer.from 87.298 ns/op 93.600 ns/op 0.93
shared Buffer 59.452 ns/op 64.079 ns/op 0.93
fastMsgIdFn sha256 / 200 bytes 1.5240 us/op 1.4840 us/op 1.03
fastMsgIdFn h32 xxhash / 200 bytes 160.00 ns/op 156.00 ns/op 1.03
fastMsgIdFn h64 xxhash / 200 bytes 211.00 ns/op 210.00 ns/op 1.00
fastMsgIdFn sha256 / 1000 bytes 4.8360 us/op 4.7790 us/op 1.01
fastMsgIdFn h32 xxhash / 1000 bytes 249.00 ns/op 247.00 ns/op 1.01
fastMsgIdFn h64 xxhash / 1000 bytes 266.00 ns/op 261.00 ns/op 1.02
fastMsgIdFn sha256 / 10000 bytes 42.711 us/op 42.370 us/op 1.01
fastMsgIdFn h32 xxhash / 10000 bytes 1.2730 us/op 1.2750 us/op 1.00
fastMsgIdFn h64 xxhash / 10000 bytes 820.00 ns/op 838.00 ns/op 0.98
send data - 1000 256B messages 4.2073 ms/op 4.3894 ms/op 0.96
send data - 1000 512B messages 5.0091 ms/op 5.0190 ms/op 1.00
send data - 1000 1024B messages 5.6097 ms/op 5.2715 ms/op 1.06
send data - 1000 1200B messages 6.6793 ms/op 6.7043 ms/op 1.00
send data - 1000 2048B messages 22.148 ms/op 9.3945 ms/op 2.36
send data - 1000 4096B messages 72.517 ms/op 44.818 ms/op 1.62
send data - 1000 16384B messages 362.55 ms/op 451.93 ms/op 0.80
send data - 1000 65536B messages 1.4168 s/op 1.4241 s/op 0.99
enrSubnets - fastDeserialize 64 bits 779.00 ns/op 753.00 ns/op 1.03
enrSubnets - ssz BitVector 64 bits 261.00 ns/op 271.00 ns/op 0.96
enrSubnets - fastDeserialize 4 bits 107.00 ns/op 107.00 ns/op 1.00
enrSubnets - ssz BitVector 4 bits 259.00 ns/op 277.00 ns/op 0.94
prioritizePeers score -10:0 att 32-0.1 sync 2-0 204.65 us/op 207.01 us/op 0.99
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 268.87 us/op 235.33 us/op 1.14
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 347.27 us/op 345.29 us/op 1.01
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 644.74 us/op 604.66 us/op 1.07
prioritizePeers score 0:0 att 64-1 sync 4-1 836.16 us/op 695.91 us/op 1.20
array of 16000 items push then shift 1.3072 us/op 1.3165 us/op 0.99
LinkedList of 16000 items push then shift 7.8650 ns/op 6.8030 ns/op 1.16
array of 16000 items push then pop 71.700 ns/op 69.855 ns/op 1.03
LinkedList of 16000 items push then pop 6.2140 ns/op 6.0600 ns/op 1.03
array of 24000 items push then shift 1.9395 us/op 1.9525 us/op 0.99
LinkedList of 24000 items push then shift 7.5620 ns/op 6.4480 ns/op 1.17
array of 24000 items push then pop 106.61 ns/op 98.316 ns/op 1.08
LinkedList of 24000 items push then pop 6.3590 ns/op 6.0300 ns/op 1.05
intersect bitArray bitLen 8 3.9400 ns/op 3.8900 ns/op 1.01
intersect array and set length 8 30.520 ns/op 30.351 ns/op 1.01
intersect bitArray bitLen 128 23.929 ns/op 23.593 ns/op 1.01
intersect array and set length 128 511.60 ns/op 510.90 ns/op 1.00
bitArray.getTrueBitIndexes() bitLen 128 961.00 ns/op 926.00 ns/op 1.04
bitArray.getTrueBitIndexes() bitLen 248 1.7360 us/op 1.6690 us/op 1.04
bitArray.getTrueBitIndexes() bitLen 512 3.6680 us/op 3.4620 us/op 1.06
Full columns - reconstruct all 6 blobs 127.26 us/op 143.62 us/op 0.89
Full columns - reconstruct half of the blobs out of 6 73.389 us/op 69.023 us/op 1.06
Full columns - reconstruct single blob out of 6 35.753 us/op 37.703 us/op 0.95
Half columns - reconstruct all 6 blobs 399.25 ms/op 383.74 ms/op 1.04
Half columns - reconstruct half of the blobs out of 6 198.72 ms/op 192.25 ms/op 1.03
Half columns - reconstruct single blob out of 6 71.459 ms/op 67.744 ms/op 1.05
Set add up to 64 items then delete first 1.6561 us/op 1.7119 us/op 0.97
OrderedSet add up to 64 items then delete first 2.5597 us/op 2.5726 us/op 1.00
Set add up to 64 items then delete last 1.9006 us/op 1.9242 us/op 0.99
OrderedSet add up to 64 items then delete last 2.9493 us/op 2.8350 us/op 1.04
Set add up to 64 items then delete middle 1.9031 us/op 1.9161 us/op 0.99
OrderedSet add up to 64 items then delete middle 4.4970 us/op 4.3026 us/op 1.05
Set add up to 128 items then delete first 3.7407 us/op 3.8395 us/op 0.97
OrderedSet add up to 128 items then delete first 5.6055 us/op 5.7752 us/op 0.97
Set add up to 128 items then delete last 3.7384 us/op 3.6754 us/op 1.02
OrderedSet add up to 128 items then delete last 5.7156 us/op 5.4639 us/op 1.05
Set add up to 128 items then delete middle 3.6721 us/op 3.7059 us/op 0.99
OrderedSet add up to 128 items then delete middle 12.005 us/op 11.478 us/op 1.05
Set add up to 256 items then delete first 7.8905 us/op 7.6495 us/op 1.03
OrderedSet add up to 256 items then delete first 12.281 us/op 11.726 us/op 1.05
Set add up to 256 items then delete last 7.4806 us/op 7.2666 us/op 1.03
OrderedSet add up to 256 items then delete last 12.521 us/op 11.159 us/op 1.12
Set add up to 256 items then delete middle 7.6886 us/op 8.0053 us/op 0.96
OrderedSet add up to 256 items then delete middle 36.530 us/op 34.541 us/op 1.06
runFastConfirmationRules vc:100000 bc:96 eq:0 4.8050 ms/op 5.1585 ms/op 0.93
runFastConfirmationRules vc:600000 bc:96 eq:0 37.017 ms/op 34.400 ms/op 1.08
runFastConfirmationRules vc:1000000 bc:96 eq:0 63.045 ms/op 57.573 ms/op 1.10
runFastConfirmationRules vc:600000 bc:320 eq:0 37.976 ms/op 34.463 ms/op 1.10
runFastConfirmationRules vc:100000 bc:96 eq:1000 1.1787 s/op 1.1343 s/op 1.04
pass gossip attestations to forkchoice per slot 2.6794 ms/op 2.5680 ms/op 1.04
forkChoice updateHead vc 100000 bc 64 eq 0 413.48 us/op 455.84 us/op 0.91
forkChoice updateHead vc 600000 bc 64 eq 0 2.4839 ms/op 2.7015 ms/op 0.92
forkChoice updateHead vc 1000000 bc 64 eq 0 4.1563 ms/op 4.5334 ms/op 0.92
forkChoice updateHead vc 600000 bc 320 eq 0 2.5630 ms/op 2.7232 ms/op 0.94
forkChoice updateHead vc 600000 bc 1200 eq 0 2.5236 ms/op 2.7376 ms/op 0.92
forkChoice updateHead vc 600000 bc 7200 eq 0 2.8138 ms/op 3.1142 ms/op 0.90
forkChoice updateHead vc 600000 bc 64 eq 1000 2.4756 ms/op 2.7109 ms/op 0.91
forkChoice updateHead vc 600000 bc 64 eq 10000 2.5727 ms/op 2.8142 ms/op 0.91
forkChoice updateHead vc 600000 bc 64 eq 300000 7.0729 ms/op 7.1228 ms/op 0.99
computeDeltas 1400000 validators 0% inactive 12.238 ms/op 13.374 ms/op 0.92
computeDeltas 1400000 validators 10% inactive 11.642 ms/op 12.583 ms/op 0.93
computeDeltas 1400000 validators 20% inactive 10.988 ms/op 11.916 ms/op 0.92
computeDeltas 1400000 validators 50% inactive 9.0085 ms/op 9.6791 ms/op 0.93
computeDeltas 2100000 validators 0% inactive 18.483 ms/op 20.499 ms/op 0.90
computeDeltas 2100000 validators 10% inactive 17.551 ms/op 19.161 ms/op 0.92
computeDeltas 2100000 validators 20% inactive 16.658 ms/op 18.604 ms/op 0.90
computeDeltas 2100000 validators 50% inactive 10.954 ms/op 14.681 ms/op 0.75
altair processAttestation - 250000 vs - 7PWei normalcase 1.6805 ms/op 1.6122 ms/op 1.04
altair processAttestation - 250000 vs - 7PWei worstcase 2.4722 ms/op 2.4348 ms/op 1.02
altair processAttestation - setStatus - 1/6 committees join 105.15 us/op 104.80 us/op 1.00
altair processAttestation - setStatus - 1/3 committees join 203.86 us/op 207.61 us/op 0.98
altair processAttestation - setStatus - 1/2 committees join 292.73 us/op 290.25 us/op 1.01
altair processAttestation - setStatus - 2/3 committees join 379.69 us/op 388.39 us/op 0.98
altair processAttestation - setStatus - 4/5 committees join 545.66 us/op 520.25 us/op 1.05
altair processAttestation - setStatus - 100% committees join 626.90 us/op 623.47 us/op 1.01
altair processBlock - 250000 vs - 7PWei normalcase 3.0898 ms/op 3.0018 ms/op 1.03
altair processBlock - 250000 vs - 7PWei normalcase hashState 11.824 ms/op 12.340 ms/op 0.96
altair processBlock - 250000 vs - 7PWei worstcase 20.043 ms/op 20.823 ms/op 0.96
altair processBlock - 250000 vs - 7PWei worstcase hashState 40.197 ms/op 41.838 ms/op 0.96
phase0 processBlock - 250000 vs - 7PWei normalcase 1.2825 ms/op 1.3243 ms/op 0.97
phase0 processBlock - 250000 vs - 7PWei worstcase 17.196 ms/op 17.252 ms/op 1.00
altair processEth1Data - 250000 vs - 7PWei normalcase 287.66 us/op 299.76 us/op 0.96
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.7320 us/op 6.0770 us/op 0.61
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 22.082 us/op 26.779 us/op 0.82
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 6.0950 us/op 6.5890 us/op 0.93
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.5210 us/op 5.6140 us/op 0.63
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 91.014 us/op 96.505 us/op 0.94
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.3629 ms/op 1.3897 ms/op 0.98
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.7891 ms/op 1.8397 ms/op 0.97
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8019 ms/op 1.8283 ms/op 0.99
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.5361 ms/op 3.7648 ms/op 0.94
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.0245 ms/op 2.1032 ms/op 0.96
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.9727 ms/op 4.0732 ms/op 0.98
Tree 40 250000 create 302.30 ms/op 319.19 ms/op 0.95
Tree 40 250000 get(125000) 94.730 ns/op 102.79 ns/op 0.92
Tree 40 250000 set(125000) 1.0077 us/op 1.0834 us/op 0.93
Tree 40 250000 toArray() 9.0742 ms/op 9.6809 ms/op 0.94
Tree 40 250000 iterate all - toArray() + loop 9.1893 ms/op 9.6985 ms/op 0.95
Tree 40 250000 iterate all - get(i) 33.462 ms/op 36.500 ms/op 0.92
Array 250000 create 2.1654 ms/op 2.2675 ms/op 0.95
Array 250000 clone - spread 687.74 us/op 733.16 us/op 0.94
Array 250000 get(125000) 0.30000 ns/op 0.30500 ns/op 0.98
Array 250000 set(125000) 0.30200 ns/op 0.31300 ns/op 0.96
Array 250000 iterate all - loop 56.830 us/op 59.475 us/op 0.96
phase0 afterProcessEpoch - 250000 vs - 7PWei 38.819 ms/op 42.632 ms/op 0.91
Array.fill - length 1000000 3.2943 ms/op 3.5528 ms/op 0.93
Array push - length 1000000 12.313 ms/op 13.729 ms/op 0.90
Array.get 0.20632 ns/op 0.21917 ns/op 0.94
Uint8Array.get 0.24209 ns/op 0.24762 ns/op 0.98
phase0 beforeProcessEpoch - 250000 vs - 7PWei 13.123 ms/op 12.908 ms/op 1.02
altair processEpoch - mainnet_e81889 229.01 ms/op 294.92 ms/op 0.78
mainnet_e81889 - altair beforeProcessEpoch 18.515 ms/op 41.707 ms/op 0.44
mainnet_e81889 - altair processJustificationAndFinalization 6.2770 us/op 11.165 us/op 0.56
mainnet_e81889 - altair processInactivityUpdates 3.5045 ms/op 3.9244 ms/op 0.89
mainnet_e81889 - altair processRewardsAndPenalties 20.393 ms/op 21.856 ms/op 0.93
mainnet_e81889 - altair processRegistryUpdates 587.00 ns/op 1.2990 us/op 0.45
mainnet_e81889 - altair processSlashings 145.00 ns/op 240.00 ns/op 0.60
mainnet_e81889 - altair processEth1DataReset 136.00 ns/op 176.00 ns/op 0.77
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.4897 ms/op 1.3352 ms/op 1.12
mainnet_e81889 - altair processSlashingsReset 711.00 ns/op 1.2860 us/op 0.55
mainnet_e81889 - altair processRandaoMixesReset 1.5420 us/op 1.6530 us/op 0.93
mainnet_e81889 - altair processHistoricalRootsUpdate 140.00 ns/op 219.00 ns/op 0.64
mainnet_e81889 - altair processParticipationFlagUpdates 504.00 ns/op 492.00 ns/op 1.02
mainnet_e81889 - altair processSyncCommitteeUpdates 112.00 ns/op 120.00 ns/op 0.93
mainnet_e81889 - altair afterProcessEpoch 42.124 ms/op 42.012 ms/op 1.00
capella processEpoch - mainnet_e217614 762.68 ms/op 734.97 ms/op 1.04
mainnet_e217614 - capella beforeProcessEpoch 54.386 ms/op 58.151 ms/op 0.94
mainnet_e217614 - capella processJustificationAndFinalization 5.6540 us/op 5.2800 us/op 1.07
mainnet_e217614 - capella processInactivityUpdates 10.805 ms/op 11.571 ms/op 0.93
mainnet_e217614 - capella processRewardsAndPenalties 84.087 ms/op 85.885 ms/op 0.98
mainnet_e217614 - capella processRegistryUpdates 4.5220 us/op 4.6210 us/op 0.98
mainnet_e217614 - capella processSlashings 143.00 ns/op 122.00 ns/op 1.17
mainnet_e217614 - capella processEth1DataReset 138.00 ns/op 145.00 ns/op 0.95
mainnet_e217614 - capella processEffectiveBalanceUpdates 4.6436 ms/op 6.9471 ms/op 0.67
mainnet_e217614 - capella processSlashingsReset 680.00 ns/op 722.00 ns/op 0.94
mainnet_e217614 - capella processRandaoMixesReset 1.1390 us/op 1.4770 us/op 0.77
mainnet_e217614 - capella processHistoricalRootsUpdate 141.00 ns/op 147.00 ns/op 0.96
mainnet_e217614 - capella processParticipationFlagUpdates 437.00 ns/op 478.00 ns/op 0.91
mainnet_e217614 - capella afterProcessEpoch 107.15 ms/op 111.02 ms/op 0.97
phase0 processEpoch - mainnet_e58758 269.48 ms/op 279.38 ms/op 0.96
mainnet_e58758 - phase0 beforeProcessEpoch 52.453 ms/op 66.266 ms/op 0.79
mainnet_e58758 - phase0 processJustificationAndFinalization 5.5790 us/op 6.9220 us/op 0.81
mainnet_e58758 - phase0 processRewardsAndPenalties 14.581 ms/op 16.333 ms/op 0.89
mainnet_e58758 - phase0 processRegistryUpdates 2.2800 us/op 2.3380 us/op 0.98
mainnet_e58758 - phase0 processSlashings 154.00 ns/op 315.00 ns/op 0.49
mainnet_e58758 - phase0 processEth1DataReset 144.00 ns/op 149.00 ns/op 0.97
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 823.68 us/op 934.17 us/op 0.88
mainnet_e58758 - phase0 processSlashingsReset 838.00 ns/op 904.00 ns/op 0.93
mainnet_e58758 - phase0 processRandaoMixesReset 1.1320 us/op 1.4340 us/op 0.79
mainnet_e58758 - phase0 processHistoricalRootsUpdate 148.00 ns/op 146.00 ns/op 1.01
mainnet_e58758 - phase0 processParticipationRecordUpdates 997.00 ns/op 1.1210 us/op 0.89
mainnet_e58758 - phase0 afterProcessEpoch 33.437 ms/op 34.367 ms/op 0.97
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.0099 ms/op 1.2845 ms/op 0.79
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.7059 ms/op 1.6645 ms/op 1.02
altair processInactivityUpdates - 250000 normalcase 10.544 ms/op 11.059 ms/op 0.95
altair processInactivityUpdates - 250000 worstcase 10.509 ms/op 14.857 ms/op 0.71
phase0 processRegistryUpdates - 250000 normalcase 3.0760 us/op 3.9730 us/op 0.77
phase0 processRegistryUpdates - 250000 badcase_full_deposits 146.30 us/op 151.02 us/op 0.97
phase0 processRegistryUpdates - 250000 worstcase 0.5 65.045 ms/op 60.959 ms/op 1.07
altair processRewardsAndPenalties - 250000 normalcase 13.026 ms/op 13.004 ms/op 1.00
altair processRewardsAndPenalties - 250000 worstcase 12.734 ms/op 15.091 ms/op 0.84
phase0 getAttestationDeltas - 250000 normalcase 6.4526 ms/op 13.359 ms/op 0.48
phase0 getAttestationDeltas - 250000 worstcase 5.4294 ms/op 5.7150 ms/op 0.95
phase0 processSlashings - 250000 worstcase 60.205 us/op 68.426 us/op 0.88
altair processSyncCommitteeUpdates - 250000 10.110 ms/op 11.562 ms/op 0.87
BeaconState.hashTreeRoot - No change 175.00 ns/op 196.00 ns/op 0.89
BeaconState.hashTreeRoot - 1 full validator 54.932 us/op 79.182 us/op 0.69
BeaconState.hashTreeRoot - 32 full validator 631.19 us/op 922.25 us/op 0.68
BeaconState.hashTreeRoot - 512 full validator 5.9063 ms/op 8.3369 ms/op 0.71
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 69.603 us/op 107.10 us/op 0.65
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.0395 ms/op 1.5516 ms/op 0.67
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 12.712 ms/op 18.227 ms/op 0.70
BeaconState.hashTreeRoot - 1 balances 55.796 us/op 81.294 us/op 0.69
BeaconState.hashTreeRoot - 32 balances 544.29 us/op 802.03 us/op 0.68
BeaconState.hashTreeRoot - 512 balances 4.5993 ms/op 6.4903 ms/op 0.71
BeaconState.hashTreeRoot - 250000 balances 102.41 ms/op 139.14 ms/op 0.74
aggregationBits - 2048 els - zipIndexesInBitList 19.117 us/op 21.047 us/op 0.91
regular array get 100000 times 22.984 us/op 23.579 us/op 0.97
wrappedArray get 100000 times 23.030 us/op 23.505 us/op 0.98
arrayWithProxy get 100000 times 10.026 ms/op 10.668 ms/op 0.94
ssz.Root.equals 21.544 ns/op 21.965 ns/op 0.98
byteArrayEquals 21.334 ns/op 21.782 ns/op 0.98
Buffer.compare 8.8490 ns/op 9.0310 ns/op 0.98
processSlot - 1 slots 8.0510 us/op 9.8620 us/op 0.82
processSlot - 32 slots 1.5485 ms/op 2.2839 ms/op 0.68
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 2.4981 ms/op 2.3415 ms/op 1.07
getCommitteeAssignments - req 1 vs - 250000 vc 1.6831 ms/op 1.7343 ms/op 0.97
getCommitteeAssignments - req 100 vs - 250000 vc 3.4353 ms/op 3.5503 ms/op 0.97
getCommitteeAssignments - req 1000 vs - 250000 vc 3.7117 ms/op 3.8479 ms/op 0.96
findModifiedValidators - 10000 modified validators 768.93 ms/op 767.11 ms/op 1.00
findModifiedValidators - 1000 modified validators 553.81 ms/op 528.73 ms/op 1.05
findModifiedValidators - 100 modified validators 357.82 ms/op 370.76 ms/op 0.97
findModifiedValidators - 10 modified validators 278.67 ms/op 386.82 ms/op 0.72
findModifiedValidators - 1 modified validators 162.91 ms/op 275.34 ms/op 0.59
findModifiedValidators - no difference 219.62 ms/op 549.90 ms/op 0.40
migrate state 1500000 validators, 3400 modified, 2000 new 3.1756 s/op 3.6605 s/op 0.87
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.8400 ns/op 3.7400 ns/op 1.03
state getBlockRootAtSlot - 250000 vs - 7PWei 281.04 ns/op 436.50 ns/op 0.64
computeProposerIndex 100000 validators 1.3640 ms/op 1.4793 ms/op 0.92
getNextSyncCommitteeIndices 1000 validators 2.8870 ms/op 3.0598 ms/op 0.94
getNextSyncCommitteeIndices 10000 validators 26.079 ms/op 27.587 ms/op 0.95
getNextSyncCommitteeIndices 100000 validators 89.046 ms/op 93.956 ms/op 0.95
computeProposers - vc 250000 549.78 us/op 580.08 us/op 0.95
computeEpochShuffling - vc 250000 39.672 ms/op 42.132 ms/op 0.94
getNextSyncCommittee - vc 250000 9.6753 ms/op 10.325 ms/op 0.94
nodejs block root to RootHex using toHex 99.225 ns/op 103.18 ns/op 0.96
nodejs block root to RootHex using toRootHex 63.534 ns/op 66.320 ns/op 0.96
nodejs fromHex(blob) 770.50 us/op 1.0480 ms/op 0.74
nodejs fromHexInto(blob) 633.38 us/op 664.56 us/op 0.95
nodejs block root to RootHex using the deprecated toHexString 499.11 ns/op 528.17 ns/op 0.94
nodejs byteArrayEquals 32 bytes (block root) 25.926 ns/op 27.342 ns/op 0.95
nodejs byteArrayEquals 48 bytes (pubkey) 41.670 ns/op 39.723 ns/op 1.05
nodejs byteArrayEquals 96 bytes (signature) 36.327 ns/op 38.397 ns/op 0.95
nodejs byteArrayEquals 1024 bytes 44.842 ns/op 44.459 ns/op 1.01
nodejs byteArrayEquals 131072 bytes (blob) 1.7672 us/op 1.8464 us/op 0.96
browser block root to RootHex using toHex 145.75 ns/op 151.60 ns/op 0.96
browser block root to RootHex using toRootHex 130.65 ns/op 137.56 ns/op 0.95
browser fromHex(blob) 1.5265 ms/op 1.9126 ms/op 0.80
browser fromHexInto(blob) 630.07 us/op 657.10 us/op 0.96
browser block root to RootHex using the deprecated toHexString 342.99 ns/op 360.13 ns/op 0.95
browser byteArrayEquals 32 bytes (block root) 28.091 ns/op 29.211 ns/op 0.96
browser byteArrayEquals 48 bytes (pubkey) 39.661 ns/op 41.246 ns/op 0.96
browser byteArrayEquals 96 bytes (signature) 73.890 ns/op 77.203 ns/op 0.96
browser byteArrayEquals 1024 bytes 757.65 ns/op 789.49 ns/op 0.96
browser byteArrayEquals 131072 bytes (blob) 94.889 us/op 99.848 us/op 0.95

by benchmarkbot/action

@nflaig
nflaig merged commit 5ba1393 into unstable Aug 17, 2026
20 of 21 checks passed
@nflaig
nflaig deleted the nflaig/reject-repeat-proposal-api branch August 17, 2026 07:52
@github-project-automation github-project-automation Bot moved this from In Progress to Done in Lodestar Team Coordination Aug 17, 2026
@wemeetagain

Copy link
Copy Markdown
Member

🎉 This PR is included in v1.47.0 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

3 participants