Skip to content

fix: add fallback handler for getProposerDuties#9518

Merged
nflaig merged 1 commit into
unstablefrom
te/fix_proposer_dep_root
Jun 17, 2026
Merged

fix: add fallback handler for getProposerDuties#9518
nflaig merged 1 commit into
unstablefrom
te/fix_proposer_dep_root

Conversation

@twoeths

@twoeths twoeths commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Motivation

  • got this error from vero
consensus-1  | Jun-09 21:45:56.328[rest]            error: Req req-qi getProposerDuties error - Can only get block root in the past currentSlot=14518127 slot=14518143
consensus-1  | Error: Can only get block root in the past currentSlot=14518127 slot=14518143
consensus-1  |     at getBlockRootAtSlot (file:///usr/app/packages/state-transition/src/util/blockRoot.ts:21:11)
consensus-1  |     at BeaconStateView.getBlockRootAtSlot (file:///usr/app/packages/state-transition/src/stateView/beaconStateView.ts:157:12)
consensus-1  |     at proposerShufflingDecisionRoot (file:///usr/app/packages/state-transition/src/util/shuffling.ts:36:16)
consensus-1  |     at Object.getProposerDuties (file:///usr/app/packages/beacon-node/src/api/impl/validator/index.ts:1298:9)
consensus-1  |     at processTicksAndRejections (node:internal/process/task_queues:104:5)
consensus-1  |     at Object.<anonymous> (file:///usr/app/packages/api/src/utils/server/handler.ts:105:22)

Description

  • this is how it was broken for unstable and how it worked for v1.43
###
lodestar unstable

vero requested for v1 at epoch 453692, lodestar detected it's not v2 
  => fork is phase0 => decision epoch = 453692 => decision slot = 14 518 143 => throw error

###
lodestar v1.43 did not care about requested epoch

  => based on state slot 14518127, decisionSlot is 14.518.111, which is luckily correct for requested epoch 453692 (previous slot of epoch 453691)

=> fallback toget_proposer_duties() v1, which is how it worked for v1.43

AI Assistance Disclosure

  • created with the help of Claude

@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 addresses a regression (#9380) where requesting proposer duties for the next epoch could throw an error. It updates proposerShufflingDecisionRoot to return null if the decision slot is in the future relative to the state's slot, preventing out-of-bounds state access. Additionally, the validator API is updated to handle fallback logic gracefully when the proposer shuffling decision root is not yet in the state, and improved error messages and logging are introduced. Unit tests have been added to verify these changes. There are no review comments, so I have no feedback to provide.

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.

@twoeths twoeths marked this pull request as ready for review June 17, 2026 06:38
@twoeths twoeths requested a review from a team as a code owner June 17, 2026 06:38
@codecov

codecov Bot commented Jun 17, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 52.58%. Comparing base (d01471e) to head (9184909).

Additional details and impacted files
@@             Coverage Diff              @@
##           unstable    #9518      +/-   ##
============================================
- Coverage     52.58%   52.58%   -0.01%     
============================================
  Files           848      848              
  Lines         60875    60871       -4     
  Branches       4483     4483              
============================================
- Hits          32013    32009       -4     
  Misses        28800    28800              
  Partials         62       62              
🚀 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 Jun 17, 2026

Copy link
Copy Markdown
Contributor

Performance Report

🚀🚀 Significant benchmark improvement detected

Benchmark suite Current: 95ff8da Previous: d01471e Ratio
enrSubnets - fastDeserialize 64 bits 743.00 ns/op 2.4670 us/op 0.30
Full benchmark results
Benchmark suite Current: 95ff8da Previous: d01471e Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 910.13 us/op 968.80 us/op 0.94
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 39.201 us/op 40.972 us/op 0.96
BLS verify - blst 651.32 us/op 665.50 us/op 0.98
BLS verifyMultipleSignatures 3 - blst 1.3631 ms/op 1.3576 ms/op 1.00
BLS verifyMultipleSignatures 8 - blst 2.1629 ms/op 2.1401 ms/op 1.01
BLS verifyMultipleSignatures 32 - blst 6.8851 ms/op 6.8788 ms/op 1.00
BLS verifyMultipleSignatures 64 - blst 13.204 ms/op 13.607 ms/op 0.97
BLS verifyMultipleSignatures 128 - blst 26.073 ms/op 26.024 ms/op 1.00
BLS deserializing 10000 signatures 648.30 ms/op 647.77 ms/op 1.00
BLS deserializing 100000 signatures 6.4093 s/op 6.4343 s/op 1.00
BLS verifyMultipleSignatures - same message - 3 - blst 774.50 us/op 765.10 us/op 1.01
BLS verifyMultipleSignatures - same message - 8 - blst 937.69 us/op 868.82 us/op 1.08
BLS verifyMultipleSignatures - same message - 32 - blst 1.5931 ms/op 1.5246 ms/op 1.04
BLS verifyMultipleSignatures - same message - 64 - blst 2.4129 ms/op 2.3112 ms/op 1.04
BLS verifyMultipleSignatures - same message - 128 - blst 4.0665 ms/op 4.0604 ms/op 1.00
BLS aggregatePubkeys 32 - blst 17.959 us/op 17.424 us/op 1.03
BLS aggregatePubkeys 128 - blst 63.721 us/op 62.290 us/op 1.02
getSlashingsAndExits - default max 48.587 us/op 49.581 us/op 0.98
getSlashingsAndExits - 2k 400.86 us/op 344.64 us/op 1.16
proposeBlockBody type=full, size=empty 777.66 us/op 655.41 us/op 1.19
isKnown best case - 1 super set check 197.00 ns/op 190.00 ns/op 1.04
isKnown normal case - 2 super set checks 163.00 ns/op 183.00 ns/op 0.89
isKnown worse case - 16 super set checks 159.00 ns/op 167.00 ns/op 0.95
validate api signedAggregateAndProof - struct 1.5728 ms/op 1.5204 ms/op 1.03
validate gossip signedAggregateAndProof - struct 1.5829 ms/op 1.5210 ms/op 1.04
batch validate gossip attestation - vc 640000 - chunk 32 111.28 us/op 109.52 us/op 1.02
batch validate gossip attestation - vc 640000 - chunk 64 99.001 us/op 101.35 us/op 0.98
batch validate gossip attestation - vc 640000 - chunk 128 93.296 us/op 98.437 us/op 0.95
batch validate gossip attestation - vc 640000 - chunk 256 89.055 us/op 101.12 us/op 0.88
bytes32 toHexString 290.00 ns/op 320.00 ns/op 0.91
bytes32 Buffer.toString(hex) 169.00 ns/op 162.00 ns/op 1.04
bytes32 Buffer.toString(hex) from Uint8Array 231.00 ns/op 240.00 ns/op 0.96
bytes32 Buffer.toString(hex) + 0x 173.00 ns/op 168.00 ns/op 1.03
Return object 10000 times 0.21800 ns/op 0.21740 ns/op 1.00
Throw Error 10000 times 3.4753 us/op 3.5135 us/op 0.99
toHex 92.502 ns/op 88.425 ns/op 1.05
Buffer.from 82.871 ns/op 80.691 ns/op 1.03
shared Buffer 54.293 ns/op 52.134 ns/op 1.04
fastMsgIdFn sha256 / 200 bytes 1.4950 us/op 1.4830 us/op 1.01
fastMsgIdFn h32 xxhash / 200 bytes 161.00 ns/op 159.00 ns/op 1.01
fastMsgIdFn h64 xxhash / 200 bytes 203.00 ns/op 213.00 ns/op 0.95
fastMsgIdFn sha256 / 1000 bytes 4.8190 us/op 4.7160 us/op 1.02
fastMsgIdFn h32 xxhash / 1000 bytes 243.00 ns/op 243.00 ns/op 1.00
fastMsgIdFn h64 xxhash / 1000 bytes 248.00 ns/op 250.00 ns/op 0.99
fastMsgIdFn sha256 / 10000 bytes 42.718 us/op 41.573 us/op 1.03
fastMsgIdFn h32 xxhash / 10000 bytes 1.3120 us/op 1.2680 us/op 1.03
fastMsgIdFn h64 xxhash / 10000 bytes 840.00 ns/op 837.00 ns/op 1.00
enrSubnets - fastDeserialize 64 bits 743.00 ns/op 2.4670 us/op 0.30
enrSubnets - ssz BitVector 64 bits 271.00 ns/op 256.00 ns/op 1.06
enrSubnets - fastDeserialize 4 bits 106.00 ns/op 102.00 ns/op 1.04
enrSubnets - ssz BitVector 4 bits 264.00 ns/op 257.00 ns/op 1.03
prioritizePeers score -10:0 att 32-0.1 sync 2-0 210.64 us/op 207.41 us/op 1.02
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 239.22 us/op 236.08 us/op 1.01
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 348.06 us/op 353.96 us/op 0.98
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 638.55 us/op 626.92 us/op 1.02
prioritizePeers score 0:0 att 64-1 sync 4-1 759.24 us/op 723.87 us/op 1.05
array of 16000 items push then shift 1.3226 us/op 1.2468 us/op 1.06
LinkedList of 16000 items push then shift 7.7890 ns/op 7.5040 ns/op 1.04
array of 16000 items push then pop 69.613 ns/op 67.250 ns/op 1.04
LinkedList of 16000 items push then pop 6.2910 ns/op 6.1340 ns/op 1.03
array of 24000 items push then shift 1.9620 us/op 1.8391 us/op 1.07
LinkedList of 24000 items push then shift 7.4260 ns/op 7.8540 ns/op 0.95
array of 24000 items push then pop 98.265 ns/op 95.429 ns/op 1.03
LinkedList of 24000 items push then pop 6.3450 ns/op 6.3290 ns/op 1.00
intersect bitArray bitLen 8 4.8940 ns/op 4.7090 ns/op 1.04
intersect array and set length 8 30.068 ns/op 29.012 ns/op 1.04
intersect bitArray bitLen 128 32.400 ns/op 23.621 ns/op 1.37
intersect array and set length 128 508.73 ns/op 492.50 ns/op 1.03
bitArray.getTrueBitIndexes() bitLen 128 1.0710 us/op 1.0660 us/op 1.00
bitArray.getTrueBitIndexes() bitLen 248 1.8000 us/op 1.7350 us/op 1.04
bitArray.getTrueBitIndexes() bitLen 512 3.6600 us/op 3.5320 us/op 1.04
Full columns - reconstruct all 6 blobs 127.46 us/op 224.40 us/op 0.57
Full columns - reconstruct half of the blobs out of 6 65.537 us/op 101.97 us/op 0.64
Full columns - reconstruct single blob out of 6 34.553 us/op 33.783 us/op 1.02
Half columns - reconstruct all 6 blobs 399.67 ms/op 387.32 ms/op 1.03
Half columns - reconstruct half of the blobs out of 6 199.33 ms/op 195.53 ms/op 1.02
Half columns - reconstruct single blob out of 6 71.931 ms/op 69.370 ms/op 1.04
Full columns - reconstruct all 10 blobs 207.13 us/op 320.80 us/op 0.65
Full columns - reconstruct half of the blobs out of 10 91.790 us/op 185.33 us/op 0.50
Full columns - reconstruct single blob out of 10 31.593 us/op 32.803 us/op 0.96
Half columns - reconstruct all 10 blobs 658.21 ms/op 645.01 ms/op 1.02
Half columns - reconstruct half of the blobs out of 10 330.53 ms/op 325.74 ms/op 1.01
Half columns - reconstruct single blob out of 10 72.968 ms/op 69.355 ms/op 1.05
Full columns - reconstruct all 20 blobs 1.7764 ms/op 595.00 us/op 2.99
Full columns - reconstruct half of the blobs out of 20 623.06 us/op 332.03 us/op 1.88
Full columns - reconstruct single blob out of 20 29.137 us/op 32.057 us/op 0.91
Half columns - reconstruct all 20 blobs 1.2985 s/op 1.2849 s/op 1.01
Half columns - reconstruct half of the blobs out of 20 651.47 ms/op 647.69 ms/op 1.01
Half columns - reconstruct single blob out of 20 71.423 ms/op 69.848 ms/op 1.02
Set add up to 64 items then delete first 2.1408 us/op 2.5242 us/op 0.85
OrderedSet add up to 64 items then delete first 3.3777 us/op 3.3037 us/op 1.02
Set add up to 64 items then delete last 2.1320 us/op 2.3574 us/op 0.90
OrderedSet add up to 64 items then delete last 3.2916 us/op 3.4091 us/op 0.97
Set add up to 64 items then delete middle 2.1235 us/op 2.2013 us/op 0.96
OrderedSet add up to 64 items then delete middle 4.7788 us/op 5.0398 us/op 0.95
Set add up to 128 items then delete first 4.2266 us/op 4.2929 us/op 0.98
OrderedSet add up to 128 items then delete first 6.5010 us/op 6.5743 us/op 0.99
Set add up to 128 items then delete last 3.8618 us/op 4.4340 us/op 0.87
OrderedSet add up to 128 items then delete last 5.8296 us/op 6.2388 us/op 0.93
Set add up to 128 items then delete middle 3.8501 us/op 4.2343 us/op 0.91
OrderedSet add up to 128 items then delete middle 11.725 us/op 13.102 us/op 0.89
Set add up to 256 items then delete first 7.8803 us/op 9.3771 us/op 0.84
OrderedSet add up to 256 items then delete first 12.266 us/op 12.685 us/op 0.97
Set add up to 256 items then delete last 7.6483 us/op 9.1118 us/op 0.84
OrderedSet add up to 256 items then delete last 11.553 us/op 13.663 us/op 0.85
Set add up to 256 items then delete middle 7.6125 us/op 9.4210 us/op 0.81
OrderedSet add up to 256 items then delete middle 35.097 us/op 39.511 us/op 0.89
runFastConfirmationRules vc:100000 bc:96 eq:0 2.5030 us/op 2.3380 us/op 1.07
runFastConfirmationRules vc:600000 bc:96 eq:0 2.2370 us/op 2.2450 us/op 1.00
runFastConfirmationRules vc:1000000 bc:96 eq:0 2.3960 us/op 2.1950 us/op 1.09
runFastConfirmationRules vc:600000 bc:320 eq:0 4.4010 us/op 5.1410 us/op 0.86
runFastConfirmationRules vc:600000 bc:1200 eq:0 17.756 us/op 19.674 us/op 0.90
runFastConfirmationRules vc:600000 bc:96 eq:1000 2.2120 us/op 1.9980 us/op 1.11
runFastConfirmationRules vc:600000 bc:96 eq:10000 2.2860 us/op 1.9910 us/op 1.15
runFastConfirmationRules vc:600000 bc:96 eq:300000 2.2930 us/op 2.0890 us/op 1.10
pass gossip attestations to forkchoice per slot 2.4473 ms/op 2.6623 ms/op 0.92
forkChoice updateHead vc 100000 bc 64 eq 0 394.19 us/op 419.61 us/op 0.94
forkChoice updateHead vc 600000 bc 64 eq 0 2.3682 ms/op 2.4781 ms/op 0.96
forkChoice updateHead vc 1000000 bc 64 eq 0 3.9017 ms/op 4.2457 ms/op 0.92
forkChoice updateHead vc 600000 bc 320 eq 0 2.3935 ms/op 2.5018 ms/op 0.96
forkChoice updateHead vc 600000 bc 1200 eq 0 2.4326 ms/op 2.5553 ms/op 0.95
forkChoice updateHead vc 600000 bc 7200 eq 0 2.9208 ms/op 4.0159 ms/op 0.73
forkChoice updateHead vc 600000 bc 64 eq 1000 2.5599 ms/op 2.4759 ms/op 1.03
forkChoice updateHead vc 600000 bc 64 eq 10000 2.6426 ms/op 2.5568 ms/op 1.03
forkChoice updateHead vc 600000 bc 64 eq 300000 6.8029 ms/op 6.8673 ms/op 0.99
computeDeltas 1400000 validators 0% inactive 12.716 ms/op 12.754 ms/op 1.00
computeDeltas 1400000 validators 10% inactive 11.889 ms/op 11.815 ms/op 1.01
computeDeltas 1400000 validators 20% inactive 10.833 ms/op 10.831 ms/op 1.00
computeDeltas 1400000 validators 50% inactive 8.4648 ms/op 8.3084 ms/op 1.02
computeDeltas 2100000 validators 0% inactive 19.140 ms/op 18.937 ms/op 1.01
computeDeltas 2100000 validators 10% inactive 17.858 ms/op 17.615 ms/op 1.01
computeDeltas 2100000 validators 20% inactive 16.476 ms/op 16.043 ms/op 1.03
computeDeltas 2100000 validators 50% inactive 9.5836 ms/op 9.4764 ms/op 1.01
altair processAttestation - 250000 vs - 7PWei normalcase 1.9480 ms/op 2.4848 ms/op 0.78
altair processAttestation - 250000 vs - 7PWei worstcase 2.6907 ms/op 3.8342 ms/op 0.70
altair processAttestation - setStatus - 1/6 committees join 101.54 us/op 102.17 us/op 0.99
altair processAttestation - setStatus - 1/3 committees join 196.94 us/op 206.36 us/op 0.95
altair processAttestation - setStatus - 1/2 committees join 291.88 us/op 291.84 us/op 1.00
altair processAttestation - setStatus - 2/3 committees join 376.70 us/op 382.95 us/op 0.98
altair processAttestation - setStatus - 4/5 committees join 508.74 us/op 546.66 us/op 0.93
altair processAttestation - setStatus - 100% committees join 607.70 us/op 633.77 us/op 0.96
altair processBlock - 250000 vs - 7PWei normalcase 3.8899 ms/op 4.5592 ms/op 0.85
altair processBlock - 250000 vs - 7PWei normalcase hashState 16.411 ms/op 17.453 ms/op 0.94
altair processBlock - 250000 vs - 7PWei worstcase 22.641 ms/op 22.560 ms/op 1.00
altair processBlock - 250000 vs - 7PWei worstcase hashState 44.652 ms/op 46.984 ms/op 0.95
phase0 processBlock - 250000 vs - 7PWei normalcase 1.2885 ms/op 1.5288 ms/op 0.84
phase0 processBlock - 250000 vs - 7PWei worstcase 18.234 ms/op 19.808 ms/op 0.92
altair processEth1Data - 250000 vs - 7PWei normalcase 284.41 us/op 311.33 us/op 0.91
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.8900 us/op 3.5800 us/op 1.09
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 19.932 us/op 22.138 us/op 0.90
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 5.6350 us/op 6.8800 us/op 0.82
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.4820 us/op 4.6290 us/op 0.75
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 91.368 us/op 94.181 us/op 0.97
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.3769 ms/op 1.4581 ms/op 0.94
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.7813 ms/op 1.8384 ms/op 0.97
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8033 ms/op 2.3788 ms/op 0.76
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.4437 ms/op 5.8083 ms/op 0.59
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.0591 ms/op 2.0995 ms/op 0.98
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.9025 ms/op 5.7136 ms/op 0.68
Tree 40 250000 create 341.18 ms/op 357.21 ms/op 0.96
Tree 40 250000 get(125000) 94.067 ns/op 100.12 ns/op 0.94
Tree 40 250000 set(125000) 1.0198 us/op 1.0817 us/op 0.94
Tree 40 250000 toArray() 9.1661 ms/op 18.584 ms/op 0.49
Tree 40 250000 iterate all - toArray() + loop 10.411 ms/op 17.824 ms/op 0.58
Tree 40 250000 iterate all - get(i) 40.833 ms/op 40.867 ms/op 1.00
Array 250000 create 2.1353 ms/op 2.3542 ms/op 0.91
Array 250000 clone - spread 670.64 us/op 706.65 us/op 0.95
Array 250000 get(125000) 0.29700 ns/op 0.30000 ns/op 0.99
Array 250000 set(125000) 0.30300 ns/op 0.32300 ns/op 0.94
Array 250000 iterate all - loop 57.658 us/op 58.868 us/op 0.98
phase0 afterProcessEpoch - 250000 vs - 7PWei 39.019 ms/op 40.278 ms/op 0.97
Array.fill - length 1000000 2.4053 ms/op 2.1231 ms/op 1.13
Array push - length 1000000 9.3829 ms/op 9.8359 ms/op 0.95
Array.get 0.20811 ns/op 0.21255 ns/op 0.98
Uint8Array.get 0.23948 ns/op 0.25342 ns/op 0.94
phase0 beforeProcessEpoch - 250000 vs - 7PWei 14.703 ms/op 19.580 ms/op 0.75
altair processEpoch - mainnet_e81889 311.53 ms/op 283.31 ms/op 1.10
mainnet_e81889 - altair beforeProcessEpoch 35.856 ms/op 16.499 ms/op 2.17
mainnet_e81889 - altair processJustificationAndFinalization 8.5230 us/op 6.3540 us/op 1.34
mainnet_e81889 - altair processInactivityUpdates 6.3977 ms/op 6.0367 ms/op 1.06
mainnet_e81889 - altair processRewardsAndPenalties 20.856 ms/op 20.757 ms/op 1.00
mainnet_e81889 - altair processRegistryUpdates 536.00 ns/op 570.00 ns/op 0.94
mainnet_e81889 - altair processSlashings 136.00 ns/op 134.00 ns/op 1.01
mainnet_e81889 - altair processEth1DataReset 134.00 ns/op 128.00 ns/op 1.05
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.7564 ms/op 5.9380 ms/op 0.30
mainnet_e81889 - altair processSlashingsReset 690.00 ns/op 704.00 ns/op 0.98
mainnet_e81889 - altair processRandaoMixesReset 1.3970 us/op 1.4190 us/op 0.98
mainnet_e81889 - altair processHistoricalRootsUpdate 133.00 ns/op 134.00 ns/op 0.99
mainnet_e81889 - altair processParticipationFlagUpdates 432.00 ns/op 437.00 ns/op 0.99
mainnet_e81889 - altair processSyncCommitteeUpdates 106.00 ns/op 106.00 ns/op 1.00
mainnet_e81889 - altair afterProcessEpoch 42.049 ms/op 42.389 ms/op 0.99
capella processEpoch - mainnet_e217614 957.66 ms/op 842.74 ms/op 1.14
mainnet_e217614 - capella beforeProcessEpoch 58.899 ms/op 56.342 ms/op 1.05
mainnet_e217614 - capella processJustificationAndFinalization 7.1070 us/op 6.0740 us/op 1.17
mainnet_e217614 - capella processInactivityUpdates 13.405 ms/op 16.528 ms/op 0.81
mainnet_e217614 - capella processRewardsAndPenalties 98.445 ms/op 91.286 ms/op 1.08
mainnet_e217614 - capella processRegistryUpdates 4.3080 us/op 4.5170 us/op 0.95
mainnet_e217614 - capella processSlashings 124.00 ns/op 129.00 ns/op 0.96
mainnet_e217614 - capella processEth1DataReset 121.00 ns/op 126.00 ns/op 0.96
mainnet_e217614 - capella processEffectiveBalanceUpdates 13.948 ms/op 15.181 ms/op 0.92
mainnet_e217614 - capella processSlashingsReset 660.00 ns/op 679.00 ns/op 0.97
mainnet_e217614 - capella processRandaoMixesReset 1.3490 us/op 1.3710 us/op 0.98
mainnet_e217614 - capella processHistoricalRootsUpdate 122.00 ns/op 131.00 ns/op 0.93
mainnet_e217614 - capella processParticipationFlagUpdates 408.00 ns/op 430.00 ns/op 0.95
mainnet_e217614 - capella afterProcessEpoch 104.62 ms/op 108.92 ms/op 0.96
phase0 processEpoch - mainnet_e58758 375.73 ms/op 325.89 ms/op 1.15
mainnet_e58758 - phase0 beforeProcessEpoch 63.227 ms/op 67.777 ms/op 0.93
mainnet_e58758 - phase0 processJustificationAndFinalization 6.4570 us/op 6.3560 us/op 1.02
mainnet_e58758 - phase0 processRewardsAndPenalties 17.255 ms/op 16.539 ms/op 1.04
mainnet_e58758 - phase0 processRegistryUpdates 2.2280 us/op 2.2420 us/op 0.99
mainnet_e58758 - phase0 processSlashings 131.00 ns/op 132.00 ns/op 0.99
mainnet_e58758 - phase0 processEth1DataReset 125.00 ns/op 128.00 ns/op 0.98
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.8997 ms/op 1.1032 ms/op 1.72
mainnet_e58758 - phase0 processSlashingsReset 874.00 ns/op 850.00 ns/op 1.03
mainnet_e58758 - phase0 processRandaoMixesReset 1.3920 us/op 1.2720 us/op 1.09
mainnet_e58758 - phase0 processHistoricalRootsUpdate 211.00 ns/op 132.00 ns/op 1.60
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.3540 us/op 1.1260 us/op 1.20
mainnet_e58758 - phase0 afterProcessEpoch 33.579 ms/op 34.342 ms/op 0.98
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.0223 ms/op 1.0825 ms/op 0.94
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 2.7724 ms/op 1.5579 ms/op 1.78
altair processInactivityUpdates - 250000 normalcase 11.911 ms/op 14.177 ms/op 0.84
altair processInactivityUpdates - 250000 worstcase 12.273 ms/op 11.224 ms/op 1.09
phase0 processRegistryUpdates - 250000 normalcase 2.1920 us/op 2.3650 us/op 0.93
phase0 processRegistryUpdates - 250000 badcase_full_deposits 146.52 us/op 140.16 us/op 1.05
phase0 processRegistryUpdates - 250000 worstcase 0.5 62.516 ms/op 62.356 ms/op 1.00
altair processRewardsAndPenalties - 250000 normalcase 16.266 ms/op 16.160 ms/op 1.01
altair processRewardsAndPenalties - 250000 worstcase 13.396 ms/op 16.009 ms/op 0.84
phase0 getAttestationDeltas - 250000 normalcase 5.4110 ms/op 5.4793 ms/op 0.99
phase0 getAttestationDeltas - 250000 worstcase 5.9189 ms/op 5.5040 ms/op 1.08
phase0 processSlashings - 250000 worstcase 59.614 us/op 61.541 us/op 0.97
altair processSyncCommitteeUpdates - 250000 10.026 ms/op 12.462 ms/op 0.80
BeaconState.hashTreeRoot - No change 162.00 ns/op 169.00 ns/op 0.96
BeaconState.hashTreeRoot - 1 full validator 89.991 us/op 77.203 us/op 1.17
BeaconState.hashTreeRoot - 32 full validator 924.45 us/op 870.82 us/op 1.06
BeaconState.hashTreeRoot - 512 full validator 6.4374 ms/op 8.3032 ms/op 0.78
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 90.225 us/op 103.53 us/op 0.87
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.4707 ms/op 1.5088 ms/op 0.97
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 14.791 ms/op 18.205 ms/op 0.81
BeaconState.hashTreeRoot - 1 balances 76.434 us/op 78.020 us/op 0.98
BeaconState.hashTreeRoot - 32 balances 882.84 us/op 769.61 us/op 1.15
BeaconState.hashTreeRoot - 512 balances 5.7718 ms/op 5.6868 ms/op 1.01
BeaconState.hashTreeRoot - 250000 balances 161.20 ms/op 138.28 ms/op 1.17
aggregationBits - 2048 els - zipIndexesInBitList 19.148 us/op 20.194 us/op 0.95
regular array get 100000 times 22.206 us/op 22.809 us/op 0.97
wrappedArray get 100000 times 22.325 us/op 22.947 us/op 0.97
arrayWithProxy get 100000 times 9.2835 ms/op 9.7158 ms/op 0.96
ssz.Root.equals 20.718 ns/op 21.449 ns/op 0.97
byteArrayEquals 20.553 ns/op 21.097 ns/op 0.97
Buffer.compare 8.6000 ns/op 8.7800 ns/op 0.98
processSlot - 1 slots 10.009 us/op 8.8940 us/op 1.13
processSlot - 32 slots 2.4855 ms/op 2.1855 ms/op 1.14
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 2.5579 ms/op 4.6051 ms/op 0.56
getCommitteeAssignments - req 1 vs - 250000 vc 1.6178 ms/op 1.6916 ms/op 0.96
getCommitteeAssignments - req 100 vs - 250000 vc 3.3567 ms/op 3.4569 ms/op 0.97
getCommitteeAssignments - req 1000 vs - 250000 vc 3.5692 ms/op 3.7487 ms/op 0.95
findModifiedValidators - 10000 modified validators 670.49 ms/op 744.91 ms/op 0.90
findModifiedValidators - 1000 modified validators 436.22 ms/op 477.59 ms/op 0.91
findModifiedValidators - 100 modified validators 252.30 ms/op 318.29 ms/op 0.79
findModifiedValidators - 10 modified validators 217.23 ms/op 291.63 ms/op 0.74
findModifiedValidators - 1 modified validators 176.85 ms/op 127.99 ms/op 1.38
findModifiedValidators - no difference 176.42 ms/op 193.71 ms/op 0.91
migrate state 1500000 validators, 3400 modified, 2000 new 3.8762 s/op 3.4122 s/op 1.14
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.8500 ns/op 3.6700 ns/op 1.05
state getBlockRootAtSlot - 250000 vs - 7PWei 423.54 ns/op 432.97 ns/op 0.98
computeProposerIndex 100000 validators 1.3740 ms/op 1.3885 ms/op 0.99
getNextSyncCommitteeIndices 1000 validators 2.9422 ms/op 2.9029 ms/op 1.01
getNextSyncCommitteeIndices 10000 validators 26.053 ms/op 25.997 ms/op 1.00
getNextSyncCommitteeIndices 100000 validators 88.818 ms/op 92.329 ms/op 0.96
computeProposers - vc 250000 569.16 us/op 562.18 us/op 1.01
computeEpochShuffling - vc 250000 40.936 ms/op 40.800 ms/op 1.00
getNextSyncCommittee - vc 250000 9.6658 ms/op 10.178 ms/op 0.95
nodejs block root to RootHex using toHex 91.144 ns/op 91.145 ns/op 1.00
nodejs block root to RootHex using toRootHex 54.621 ns/op 53.850 ns/op 1.01
nodejs fromHex(blob) 803.41 us/op 845.94 us/op 0.95
nodejs fromHexInto(blob) 642.12 us/op 646.47 us/op 0.99
nodejs block root to RootHex using the deprecated toHexString 505.90 ns/op 491.34 ns/op 1.03
nodejs byteArrayEquals 32 bytes (block root) 26.861 ns/op 26.664 ns/op 1.01
nodejs byteArrayEquals 48 bytes (pubkey) 38.358 ns/op 38.457 ns/op 1.00
nodejs byteArrayEquals 96 bytes (signature) 37.000 ns/op 33.940 ns/op 1.09
nodejs byteArrayEquals 1024 bytes 42.428 ns/op 42.330 ns/op 1.00
nodejs byteArrayEquals 131072 bytes (blob) 1.7759 us/op 1.7843 us/op 1.00
browser block root to RootHex using toHex 146.50 ns/op 147.40 ns/op 0.99
browser block root to RootHex using toRootHex 131.47 ns/op 133.55 ns/op 0.98
browser fromHex(blob) 1.6288 ms/op 1.5554 ms/op 1.05
browser fromHexInto(blob) 640.25 us/op 640.19 us/op 1.00
browser block root to RootHex using the deprecated toHexString 335.22 ns/op 322.56 ns/op 1.04
browser byteArrayEquals 32 bytes (block root) 28.208 ns/op 27.186 ns/op 1.04
browser byteArrayEquals 48 bytes (pubkey) 39.806 ns/op 38.274 ns/op 1.04
browser byteArrayEquals 96 bytes (signature) 74.490 ns/op 71.890 ns/op 1.04
browser byteArrayEquals 1024 bytes 765.13 ns/op 748.89 ns/op 1.02
browser byteArrayEquals 131072 bytes (blob) 96.397 us/op 95.527 us/op 1.01

by benchmarkbot/action

@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: 918490971a

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread packages/beacon-node/src/api/impl/validator/index.ts
@nflaig nflaig merged commit 864ddbe into unstable Jun 17, 2026
19 of 21 checks passed
@nflaig nflaig deleted the te/fix_proposer_dep_root branch June 17, 2026 08:17
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