Skip to content

fix: defer using proposer duties v2 to gloas#9519

Merged
nflaig merged 1 commit into
unstablefrom
nflaig/proposer-duties-v2-to-gloas
Jun 17, 2026
Merged

fix: defer using proposer duties v2 to gloas#9519
nflaig merged 1 commit into
unstablefrom
nflaig/proposer-duties-v2-to-gloas

Conversation

@nflaig

@nflaig nflaig commented Jun 17, 2026

Copy link
Copy Markdown
Member

per #9380 (comment), we cannot use getProposerDutiesV2 before gloas as clients might not have it implemented yet

@nflaig nflaig requested a review from a team as a code owner June 17, 2026 09:32

@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 defers the transition to the deterministic 1-epoch lookahead (EIP-7917) and the getProposerDutiesV2 endpoint from the Fulu fork to the Gloas fork to avoid depending on an endpoint that is not yet implemented by all clients. The review feedback points out that isForkPostFulu is still required in onNewHead to correctly determine the proposer dependent root during the Fulu fork, and suggests keeping its import alongside isForkPostGloas.

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.

Comment thread packages/validator/src/services/blockDuties.ts

@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: 1674755657

ℹ️ 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 +151 to 152
if (isForkPostGloas(this.config.getForkName(computeStartSlotAtEpoch(nextEpoch)))) {
await this.pollBeaconProposers(nextEpoch);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Avoid v2 prefetch before the Gloas boundary

When the current epoch is the final Fulu epoch, nextEpoch already resolves to ForkName.gloas, so this branch calls pollBeaconProposers(nextEpoch) immediately and that method selects getProposerDutiesV2 for the requested epoch. That still hits /eth/v2/validator/duties/proposer before the chain has reached Gloas—the compatibility case this change is trying to avoid—and if the connected BN does not serve v2 yet the prefetch fails; the last-slot boundary poll is also skipped because slot + 1 is Gloas, leaving first-Gloas-slot proposer duties to a boundary-time race.

Useful? React with 👍 / 👎.

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.

that's fine, at this point every bn should have proposer duties v2 implemented as node operators have to upgrade before the fork happens, ideally multiple epochs before

@github-actions

Copy link
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 9756b2d Previous: 864ddbe Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 933.45 us/op 1.3202 ms/op 0.71
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 40.329 us/op 40.255 us/op 1.00
BLS verify - blst 729.83 us/op 719.20 us/op 1.01
BLS verifyMultipleSignatures 3 - blst 1.3203 ms/op 1.3361 ms/op 0.99
BLS verifyMultipleSignatures 8 - blst 2.1112 ms/op 2.1019 ms/op 1.00
BLS verifyMultipleSignatures 32 - blst 6.8093 ms/op 6.5803 ms/op 1.03
BLS verifyMultipleSignatures 64 - blst 12.907 ms/op 12.814 ms/op 1.01
BLS verifyMultipleSignatures 128 - blst 24.714 ms/op 24.925 ms/op 0.99
BLS deserializing 10000 signatures 634.48 ms/op 615.77 ms/op 1.03
BLS deserializing 100000 signatures 6.4868 s/op 6.3018 s/op 1.03
BLS verifyMultipleSignatures - same message - 3 - blst 809.43 us/op 699.87 us/op 1.16
BLS verifyMultipleSignatures - same message - 8 - blst 962.08 us/op 915.02 us/op 1.05
BLS verifyMultipleSignatures - same message - 32 - blst 1.5438 ms/op 1.5274 ms/op 1.01
BLS verifyMultipleSignatures - same message - 64 - blst 2.4587 ms/op 2.3054 ms/op 1.07
BLS verifyMultipleSignatures - same message - 128 - blst 4.1453 ms/op 3.9725 ms/op 1.04
BLS aggregatePubkeys 32 - blst 18.429 us/op 17.368 us/op 1.06
BLS aggregatePubkeys 128 - blst 65.972 us/op 62.569 us/op 1.05
getSlashingsAndExits - default max 60.905 us/op 43.948 us/op 1.39
getSlashingsAndExits - 2k 372.67 us/op 335.63 us/op 1.11
proposeBlockBody type=full, size=empty 742.53 us/op 677.36 us/op 1.10
isKnown best case - 1 super set check 166.00 ns/op 174.00 ns/op 0.95
isKnown normal case - 2 super set checks 158.00 ns/op 238.00 ns/op 0.66
isKnown worse case - 16 super set checks 165.00 ns/op 178.00 ns/op 0.93
validate api signedAggregateAndProof - struct 1.4838 ms/op 1.5217 ms/op 0.98
validate gossip signedAggregateAndProof - struct 1.4793 ms/op 1.5048 ms/op 0.98
batch validate gossip attestation - vc 640000 - chunk 32 105.55 us/op 117.57 us/op 0.90
batch validate gossip attestation - vc 640000 - chunk 64 93.100 us/op 93.902 us/op 0.99
batch validate gossip attestation - vc 640000 - chunk 128 88.115 us/op 88.860 us/op 0.99
batch validate gossip attestation - vc 640000 - chunk 256 104.83 us/op 84.688 us/op 1.24
bytes32 toHexString 292.00 ns/op 285.00 ns/op 1.02
bytes32 Buffer.toString(hex) 178.00 ns/op 162.00 ns/op 1.10
bytes32 Buffer.toString(hex) from Uint8Array 229.00 ns/op 232.00 ns/op 0.99
bytes32 Buffer.toString(hex) + 0x 180.00 ns/op 162.00 ns/op 1.11
Return object 10000 times 0.21130 ns/op 0.21220 ns/op 1.00
Throw Error 10000 times 3.2904 us/op 3.4013 us/op 0.97
toHex 89.698 ns/op 87.492 ns/op 1.03
Buffer.from 83.067 ns/op 78.563 ns/op 1.06
shared Buffer 55.267 ns/op 50.887 ns/op 1.09
fastMsgIdFn sha256 / 200 bytes 1.4600 us/op 1.4390 us/op 1.01
fastMsgIdFn h32 xxhash / 200 bytes 155.00 ns/op 155.00 ns/op 1.00
fastMsgIdFn h64 xxhash / 200 bytes 203.00 ns/op 193.00 ns/op 1.05
fastMsgIdFn sha256 / 1000 bytes 4.8290 us/op 4.6350 us/op 1.04
fastMsgIdFn h32 xxhash / 1000 bytes 242.00 ns/op 240.00 ns/op 1.01
fastMsgIdFn h64 xxhash / 1000 bytes 246.00 ns/op 242.00 ns/op 1.02
fastMsgIdFn sha256 / 10000 bytes 41.404 us/op 40.706 us/op 1.02
fastMsgIdFn h32 xxhash / 10000 bytes 1.2490 us/op 1.2560 us/op 0.99
fastMsgIdFn h64 xxhash / 10000 bytes 804.00 ns/op 799.00 ns/op 1.01
enrSubnets - fastDeserialize 64 bits 759.00 ns/op 676.00 ns/op 1.12
enrSubnets - ssz BitVector 64 bits 267.00 ns/op 256.00 ns/op 1.04
enrSubnets - fastDeserialize 4 bits 106.00 ns/op 100.00 ns/op 1.06
enrSubnets - ssz BitVector 4 bits 267.00 ns/op 255.00 ns/op 1.05
prioritizePeers score -10:0 att 32-0.1 sync 2-0 208.21 us/op 193.82 us/op 1.07
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 251.57 us/op 222.92 us/op 1.13
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 352.18 us/op 332.08 us/op 1.06
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 620.03 us/op 580.35 us/op 1.07
prioritizePeers score 0:0 att 64-1 sync 4-1 715.43 us/op 678.56 us/op 1.05
array of 16000 items push then shift 1.2651 us/op 1.1999 us/op 1.05
LinkedList of 16000 items push then shift 8.4180 ns/op 7.2410 ns/op 1.16
array of 16000 items push then pop 73.674 ns/op 67.939 ns/op 1.08
LinkedList of 16000 items push then pop 6.5500 ns/op 6.0460 ns/op 1.08
array of 24000 items push then shift 1.9185 us/op 1.8481 us/op 1.04
LinkedList of 24000 items push then shift 7.5900 ns/op 7.3410 ns/op 1.03
array of 24000 items push then pop 97.640 ns/op 95.054 ns/op 1.03
LinkedList of 24000 items push then pop 6.3060 ns/op 6.2910 ns/op 1.00
intersect bitArray bitLen 8 4.8190 ns/op 4.6580 ns/op 1.03
intersect array and set length 8 30.463 ns/op 29.159 ns/op 1.04
intersect bitArray bitLen 128 24.684 ns/op 23.623 ns/op 1.04
intersect array and set length 128 497.74 ns/op 497.00 ns/op 1.00
bitArray.getTrueBitIndexes() bitLen 128 1.0400 us/op 1.0200 us/op 1.02
bitArray.getTrueBitIndexes() bitLen 248 1.8520 us/op 1.7310 us/op 1.07
bitArray.getTrueBitIndexes() bitLen 512 3.7700 us/op 3.5960 us/op 1.05
Full columns - reconstruct all 6 blobs 123.75 us/op 141.84 us/op 0.87
Full columns - reconstruct half of the blobs out of 6 70.328 us/op 74.280 us/op 0.95
Full columns - reconstruct single blob out of 6 34.762 us/op 34.596 us/op 1.00
Half columns - reconstruct all 6 blobs 394.60 ms/op 384.39 ms/op 1.03
Half columns - reconstruct half of the blobs out of 6 193.45 ms/op 192.17 ms/op 1.01
Half columns - reconstruct single blob out of 6 68.344 ms/op 68.087 ms/op 1.00
Full columns - reconstruct all 10 blobs 458.08 us/op 296.72 us/op 1.54
Full columns - reconstruct half of the blobs out of 10 147.51 us/op 159.71 us/op 0.92
Full columns - reconstruct single blob out of 10 33.979 us/op 32.133 us/op 1.06
Half columns - reconstruct all 10 blobs 635.69 ms/op 636.42 ms/op 1.00
Half columns - reconstruct half of the blobs out of 10 321.89 ms/op 321.21 ms/op 1.00
Half columns - reconstruct single blob out of 10 71.090 ms/op 69.456 ms/op 1.02
Full columns - reconstruct all 20 blobs 1.8054 ms/op 1.9986 ms/op 0.90
Full columns - reconstruct half of the blobs out of 20 407.49 us/op 473.83 us/op 0.86
Full columns - reconstruct single blob out of 20 47.545 us/op 29.266 us/op 1.62
Half columns - reconstruct all 20 blobs 1.2586 s/op 1.2794 s/op 0.98
Half columns - reconstruct half of the blobs out of 20 630.17 ms/op 642.61 ms/op 0.98
Half columns - reconstruct single blob out of 20 68.981 ms/op 69.472 ms/op 0.99
Set add up to 64 items then delete first 2.4487 us/op 2.1381 us/op 1.15
OrderedSet add up to 64 items then delete first 3.2401 us/op 3.3611 us/op 0.96
Set add up to 64 items then delete last 2.2059 us/op 2.2663 us/op 0.97
OrderedSet add up to 64 items then delete last 3.1218 us/op 3.7442 us/op 0.83
Set add up to 64 items then delete middle 2.0024 us/op 2.3440 us/op 0.85
OrderedSet add up to 64 items then delete middle 4.5788 us/op 5.3268 us/op 0.86
Set add up to 128 items then delete first 4.0635 us/op 5.0713 us/op 0.80
OrderedSet add up to 128 items then delete first 6.2984 us/op 6.7261 us/op 0.94
Set add up to 128 items then delete last 3.7504 us/op 4.7986 us/op 0.78
OrderedSet add up to 128 items then delete last 5.5625 us/op 6.9634 us/op 0.80
Set add up to 128 items then delete middle 3.7244 us/op 4.5425 us/op 0.82
OrderedSet add up to 128 items then delete middle 11.341 us/op 14.596 us/op 0.78
Set add up to 256 items then delete first 8.4703 us/op 9.4966 us/op 0.89
OrderedSet add up to 256 items then delete first 12.816 us/op 15.445 us/op 0.83
Set add up to 256 items then delete last 7.5841 us/op 9.3161 us/op 0.81
OrderedSet add up to 256 items then delete last 14.104 us/op 14.149 us/op 1.00
Set add up to 256 items then delete middle 7.5936 us/op 9.1895 us/op 0.83
OrderedSet add up to 256 items then delete middle 34.417 us/op 40.168 us/op 0.86
runFastConfirmationRules vc:100000 bc:96 eq:0 2.1180 us/op 2.4060 us/op 0.88
runFastConfirmationRules vc:600000 bc:96 eq:0 2.2490 us/op 2.2130 us/op 1.02
runFastConfirmationRules vc:1000000 bc:96 eq:0 2.2440 us/op 2.2870 us/op 0.98
runFastConfirmationRules vc:600000 bc:320 eq:0 5.2560 us/op 5.0440 us/op 1.04
runFastConfirmationRules vc:600000 bc:1200 eq:0 15.358 us/op 16.975 us/op 0.90
runFastConfirmationRules vc:600000 bc:96 eq:1000 2.2390 us/op 2.1460 us/op 1.04
runFastConfirmationRules vc:600000 bc:96 eq:10000 2.1020 us/op 2.1960 us/op 0.96
runFastConfirmationRules vc:600000 bc:96 eq:300000 2.1880 us/op 2.2650 us/op 0.97
pass gossip attestations to forkchoice per slot 2.8222 ms/op 2.5522 ms/op 1.11
forkChoice updateHead vc 100000 bc 64 eq 0 419.96 us/op 403.20 us/op 1.04
forkChoice updateHead vc 600000 bc 64 eq 0 2.5111 ms/op 2.4278 ms/op 1.03
forkChoice updateHead vc 1000000 bc 64 eq 0 4.0827 ms/op 4.0752 ms/op 1.00
forkChoice updateHead vc 600000 bc 320 eq 0 2.4716 ms/op 2.4478 ms/op 1.01
forkChoice updateHead vc 600000 bc 1200 eq 0 2.6098 ms/op 2.5228 ms/op 1.03
forkChoice updateHead vc 600000 bc 7200 eq 0 3.5647 ms/op 3.5418 ms/op 1.01
forkChoice updateHead vc 600000 bc 64 eq 1000 2.5105 ms/op 2.4449 ms/op 1.03
forkChoice updateHead vc 600000 bc 64 eq 10000 2.6058 ms/op 2.5631 ms/op 1.02
forkChoice updateHead vc 600000 bc 64 eq 300000 7.2199 ms/op 6.9059 ms/op 1.05
computeDeltas 1400000 validators 0% inactive 12.887 ms/op 12.688 ms/op 1.02
computeDeltas 1400000 validators 10% inactive 12.044 ms/op 11.821 ms/op 1.02
computeDeltas 1400000 validators 20% inactive 10.916 ms/op 10.689 ms/op 1.02
computeDeltas 1400000 validators 50% inactive 8.3268 ms/op 8.2125 ms/op 1.01
computeDeltas 2100000 validators 0% inactive 19.064 ms/op 19.002 ms/op 1.00
computeDeltas 2100000 validators 10% inactive 18.043 ms/op 17.652 ms/op 1.02
computeDeltas 2100000 validators 20% inactive 16.505 ms/op 16.102 ms/op 1.03
computeDeltas 2100000 validators 50% inactive 12.772 ms/op 9.2697 ms/op 1.38
altair processAttestation - 250000 vs - 7PWei normalcase 2.3328 ms/op 2.4921 ms/op 0.94
altair processAttestation - 250000 vs - 7PWei worstcase 3.7149 ms/op 3.1296 ms/op 1.19
altair processAttestation - setStatus - 1/6 committees join 112.67 us/op 93.956 us/op 1.20
altair processAttestation - setStatus - 1/3 committees join 215.16 us/op 189.07 us/op 1.14
altair processAttestation - setStatus - 1/2 committees join 298.61 us/op 271.52 us/op 1.10
altair processAttestation - setStatus - 2/3 committees join 384.59 us/op 349.81 us/op 1.10
altair processAttestation - setStatus - 4/5 committees join 568.45 us/op 473.25 us/op 1.20
altair processAttestation - setStatus - 100% committees join 644.24 us/op 567.35 us/op 1.14
altair processBlock - 250000 vs - 7PWei normalcase 4.0141 ms/op 3.8740 ms/op 1.04
altair processBlock - 250000 vs - 7PWei normalcase hashState 15.957 ms/op 15.894 ms/op 1.00
altair processBlock - 250000 vs - 7PWei worstcase 21.013 ms/op 21.188 ms/op 0.99
altair processBlock - 250000 vs - 7PWei worstcase hashState 42.690 ms/op 41.835 ms/op 1.02
phase0 processBlock - 250000 vs - 7PWei normalcase 1.4985 ms/op 1.2549 ms/op 1.19
phase0 processBlock - 250000 vs - 7PWei worstcase 20.542 ms/op 18.845 ms/op 1.09
altair processEth1Data - 250000 vs - 7PWei normalcase 309.19 us/op 295.31 us/op 1.05
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 4.5870 us/op 3.3260 us/op 1.38
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 22.635 us/op 20.471 us/op 1.11
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 7.6970 us/op 7.2200 us/op 1.07
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 8.0540 us/op 4.0940 us/op 1.97
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 98.729 us/op 96.463 us/op 1.02
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.4714 ms/op 1.4221 ms/op 1.03
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 2.1156 ms/op 2.0832 ms/op 1.02
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 2.1700 ms/op 1.7915 ms/op 1.21
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 5.3654 ms/op 3.1920 ms/op 1.68
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.2784 ms/op 2.2761 ms/op 1.00
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 5.8989 ms/op 4.9282 ms/op 1.20
Tree 40 250000 create 375.78 ms/op 347.04 ms/op 1.08
Tree 40 250000 get(125000) 95.168 ns/op 89.980 ns/op 1.06
Tree 40 250000 set(125000) 1.1162 us/op 986.24 ns/op 1.13
Tree 40 250000 toArray() 20.771 ms/op 16.185 ms/op 1.28
Tree 40 250000 iterate all - toArray() + loop 17.390 ms/op 16.322 ms/op 1.07
Tree 40 250000 iterate all - get(i) 41.957 ms/op 40.636 ms/op 1.03
Array 250000 create 2.4465 ms/op 2.1732 ms/op 1.13
Array 250000 clone - spread 716.27 us/op 665.48 us/op 1.08
Array 250000 get(125000) 0.30200 ns/op 0.29300 ns/op 1.03
Array 250000 set(125000) 0.30100 ns/op 0.29600 ns/op 1.02
Array 250000 iterate all - loop 58.553 us/op 56.117 us/op 1.04
phase0 afterProcessEpoch - 250000 vs - 7PWei 50.892 ms/op 38.300 ms/op 1.33
Array.fill - length 1000000 2.5877 ms/op 3.1884 ms/op 0.81
Array push - length 1000000 11.430 ms/op 9.8920 ms/op 1.16
Array.get 0.21275 ns/op 0.20127 ns/op 1.06
Uint8Array.get 0.24666 ns/op 0.22924 ns/op 1.08
phase0 beforeProcessEpoch - 250000 vs - 7PWei 18.114 ms/op 16.657 ms/op 1.09
altair processEpoch - mainnet_e81889 311.44 ms/op 285.31 ms/op 1.09
mainnet_e81889 - altair beforeProcessEpoch 19.028 ms/op 17.443 ms/op 1.09
mainnet_e81889 - altair processJustificationAndFinalization 6.4920 us/op 12.485 us/op 0.52
mainnet_e81889 - altair processInactivityUpdates 6.9218 ms/op 8.1826 ms/op 0.85
mainnet_e81889 - altair processRewardsAndPenalties 20.962 ms/op 21.657 ms/op 0.97
mainnet_e81889 - altair processRegistryUpdates 580.00 ns/op 541.00 ns/op 1.07
mainnet_e81889 - altair processSlashings 134.00 ns/op 128.00 ns/op 1.05
mainnet_e81889 - altair processEth1DataReset 132.00 ns/op 126.00 ns/op 1.05
mainnet_e81889 - altair processEffectiveBalanceUpdates 4.7472 ms/op 7.3458 ms/op 0.65
mainnet_e81889 - altair processSlashingsReset 935.00 ns/op 706.00 ns/op 1.32
mainnet_e81889 - altair processRandaoMixesReset 1.4350 us/op 1.6490 us/op 0.87
mainnet_e81889 - altair processHistoricalRootsUpdate 133.00 ns/op 132.00 ns/op 1.01
mainnet_e81889 - altair processParticipationFlagUpdates 454.00 ns/op 455.00 ns/op 1.00
mainnet_e81889 - altair processSyncCommitteeUpdates 110.00 ns/op 114.00 ns/op 0.96
mainnet_e81889 - altair afterProcessEpoch 41.957 ms/op 42.628 ms/op 0.98
capella processEpoch - mainnet_e217614 896.05 ms/op 814.91 ms/op 1.10
mainnet_e217614 - capella beforeProcessEpoch 65.573 ms/op 65.404 ms/op 1.00
mainnet_e217614 - capella processJustificationAndFinalization 7.2870 us/op 6.6590 us/op 1.09
mainnet_e217614 - capella processInactivityUpdates 19.704 ms/op 16.761 ms/op 1.18
mainnet_e217614 - capella processRewardsAndPenalties 105.17 ms/op 95.305 ms/op 1.10
mainnet_e217614 - capella processRegistryUpdates 4.6430 us/op 4.4170 us/op 1.05
mainnet_e217614 - capella processSlashings 134.00 ns/op 128.00 ns/op 1.05
mainnet_e217614 - capella processEth1DataReset 135.00 ns/op 124.00 ns/op 1.09
mainnet_e217614 - capella processEffectiveBalanceUpdates 20.577 ms/op 16.969 ms/op 1.21
mainnet_e217614 - capella processSlashingsReset 717.00 ns/op 664.00 ns/op 1.08
mainnet_e217614 - capella processRandaoMixesReset 1.4690 us/op 1.3650 us/op 1.08
mainnet_e217614 - capella processHistoricalRootsUpdate 132.00 ns/op 130.00 ns/op 1.02
mainnet_e217614 - capella processParticipationFlagUpdates 480.00 ns/op 417.00 ns/op 1.15
mainnet_e217614 - capella afterProcessEpoch 111.02 ms/op 103.17 ms/op 1.08
phase0 processEpoch - mainnet_e58758 370.85 ms/op 359.78 ms/op 1.03
mainnet_e58758 - phase0 beforeProcessEpoch 84.051 ms/op 68.267 ms/op 1.23
mainnet_e58758 - phase0 processJustificationAndFinalization 6.9460 us/op 6.5910 us/op 1.05
mainnet_e58758 - phase0 processRewardsAndPenalties 17.942 ms/op 16.625 ms/op 1.08
mainnet_e58758 - phase0 processRegistryUpdates 2.3480 us/op 2.1850 us/op 1.07
mainnet_e58758 - phase0 processSlashings 133.00 ns/op 125.00 ns/op 1.06
mainnet_e58758 - phase0 processEth1DataReset 128.00 ns/op 202.00 ns/op 0.63
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 832.86 us/op 791.96 us/op 1.05
mainnet_e58758 - phase0 processSlashingsReset 982.00 ns/op 863.00 ns/op 1.14
mainnet_e58758 - phase0 processRandaoMixesReset 1.4480 us/op 1.3140 us/op 1.10
mainnet_e58758 - phase0 processHistoricalRootsUpdate 206.00 ns/op 126.00 ns/op 1.63
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.2580 us/op 1.1580 us/op 1.09
mainnet_e58758 - phase0 afterProcessEpoch 33.267 ms/op 31.913 ms/op 1.04
phase0 processEffectiveBalanceUpdates - 250000 normalcase 975.36 us/op 953.01 us/op 1.02
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.5743 ms/op 1.7475 ms/op 0.90
altair processInactivityUpdates - 250000 normalcase 12.881 ms/op 11.890 ms/op 1.08
altair processInactivityUpdates - 250000 worstcase 12.313 ms/op 12.426 ms/op 0.99
phase0 processRegistryUpdates - 250000 normalcase 3.3610 us/op 2.3030 us/op 1.46
phase0 processRegistryUpdates - 250000 badcase_full_deposits 139.17 us/op 141.57 us/op 0.98
phase0 processRegistryUpdates - 250000 worstcase 0.5 60.488 ms/op 58.517 ms/op 1.03
altair processRewardsAndPenalties - 250000 normalcase 15.834 ms/op 15.524 ms/op 1.02
altair processRewardsAndPenalties - 250000 worstcase 14.981 ms/op 15.335 ms/op 0.98
phase0 getAttestationDeltas - 250000 normalcase 5.1176 ms/op 5.2059 ms/op 0.98
phase0 getAttestationDeltas - 250000 worstcase 5.2658 ms/op 5.3547 ms/op 0.98
phase0 processSlashings - 250000 worstcase 57.719 us/op 57.823 us/op 1.00
altair processSyncCommitteeUpdates - 250000 12.692 ms/op 11.902 ms/op 1.07
BeaconState.hashTreeRoot - No change 163.00 ns/op 163.00 ns/op 1.00
BeaconState.hashTreeRoot - 1 full validator 81.214 us/op 78.706 us/op 1.03
BeaconState.hashTreeRoot - 32 full validator 865.86 us/op 837.07 us/op 1.03
BeaconState.hashTreeRoot - 512 full validator 8.1262 ms/op 8.9089 ms/op 0.91
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 100.83 us/op 106.10 us/op 0.95
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.4221 ms/op 1.3591 ms/op 1.05
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 18.722 ms/op 21.368 ms/op 0.88
BeaconState.hashTreeRoot - 1 balances 79.285 us/op 79.071 us/op 1.00
BeaconState.hashTreeRoot - 32 balances 743.50 us/op 792.03 us/op 0.94
BeaconState.hashTreeRoot - 512 balances 6.4346 ms/op 6.2052 ms/op 1.04
BeaconState.hashTreeRoot - 250000 balances 132.49 ms/op 142.74 ms/op 0.93
aggregationBits - 2048 els - zipIndexesInBitList 19.212 us/op 19.331 us/op 0.99
regular array get 100000 times 22.313 us/op 22.544 us/op 0.99
wrappedArray get 100000 times 22.181 us/op 22.503 us/op 0.99
arrayWithProxy get 100000 times 9.2072 ms/op 9.3749 ms/op 0.98
ssz.Root.equals 20.923 ns/op 21.104 ns/op 0.99
byteArrayEquals 20.626 ns/op 20.892 ns/op 0.99
Buffer.compare 8.5750 ns/op 8.6390 ns/op 0.99
processSlot - 1 slots 10.626 us/op 9.3510 us/op 1.14
processSlot - 32 slots 2.1299 ms/op 2.1680 ms/op 0.98
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 5.0508 ms/op 6.3565 ms/op 0.79
getCommitteeAssignments - req 1 vs - 250000 vc 1.6377 ms/op 1.6637 ms/op 0.98
getCommitteeAssignments - req 100 vs - 250000 vc 3.3814 ms/op 3.4530 ms/op 0.98
getCommitteeAssignments - req 1000 vs - 250000 vc 3.6469 ms/op 3.7254 ms/op 0.98
findModifiedValidators - 10000 modified validators 714.37 ms/op 837.84 ms/op 0.85
findModifiedValidators - 1000 modified validators 382.24 ms/op 493.26 ms/op 0.77
findModifiedValidators - 100 modified validators 318.40 ms/op 344.34 ms/op 0.92
findModifiedValidators - 10 modified validators 214.86 ms/op 329.83 ms/op 0.65
findModifiedValidators - 1 modified validators 167.58 ms/op 210.70 ms/op 0.80
findModifiedValidators - no difference 183.80 ms/op 217.79 ms/op 0.84
migrate state 1500000 validators, 3400 modified, 2000 new 3.5636 s/op 2.8699 s/op 1.24
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.7800 ns/op 3.5400 ns/op 1.07
state getBlockRootAtSlot - 250000 vs - 7PWei 419.72 ns/op 269.08 ns/op 1.56
computeProposerIndex 100000 validators 1.3912 ms/op 1.3019 ms/op 1.07
getNextSyncCommitteeIndices 1000 validators 2.9475 ms/op 2.7614 ms/op 1.07
getNextSyncCommitteeIndices 10000 validators 26.169 ms/op 24.285 ms/op 1.08
getNextSyncCommitteeIndices 100000 validators 95.663 ms/op 84.802 ms/op 1.13
computeProposers - vc 250000 559.12 us/op 554.23 us/op 1.01
computeEpochShuffling - vc 250000 39.978 ms/op 39.747 ms/op 1.01
getNextSyncCommittee - vc 250000 11.209 ms/op 10.952 ms/op 1.02
nodejs block root to RootHex using toHex 94.509 ns/op 92.322 ns/op 1.02
nodejs block root to RootHex using toRootHex 53.524 ns/op 51.461 ns/op 1.04
nodejs fromHex(blob) 887.01 us/op 966.12 us/op 0.92
nodejs fromHexInto(blob) 634.83 us/op 620.03 us/op 1.02
nodejs block root to RootHex using the deprecated toHexString 469.35 ns/op 359.31 ns/op 1.31
nodejs byteArrayEquals 32 bytes (block root) 26.170 ns/op 25.528 ns/op 1.03
nodejs byteArrayEquals 48 bytes (pubkey) 37.869 ns/op 37.006 ns/op 1.02
nodejs byteArrayEquals 96 bytes (signature) 34.088 ns/op 32.829 ns/op 1.04
nodejs byteArrayEquals 1024 bytes 40.411 ns/op 45.060 ns/op 0.90
nodejs byteArrayEquals 131072 bytes (blob) 1.7851 us/op 1.7111 us/op 1.04
browser block root to RootHex using toHex 145.59 ns/op 141.27 ns/op 1.03
browser block root to RootHex using toRootHex 130.29 ns/op 128.58 ns/op 1.01
browser fromHex(blob) 1.5600 ms/op 1.5869 ms/op 0.98
browser fromHexInto(blob) 650.42 us/op 631.02 us/op 1.03
browser block root to RootHex using the deprecated toHexString 317.56 ns/op 462.22 ns/op 0.69
browser byteArrayEquals 32 bytes (block root) 27.491 ns/op 27.685 ns/op 0.99
browser byteArrayEquals 48 bytes (pubkey) 39.347 ns/op 38.922 ns/op 1.01
browser byteArrayEquals 96 bytes (signature) 73.028 ns/op 72.869 ns/op 1.00
browser byteArrayEquals 1024 bytes 741.32 ns/op 744.57 ns/op 1.00
browser byteArrayEquals 131072 bytes (blob) 94.013 us/op 93.331 us/op 1.01

by benchmarkbot/action

@wemeetagain wemeetagain left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

straightforward, LGTM

@nflaig nflaig merged commit c04b424 into unstable Jun 17, 2026
18 of 19 checks passed
@nflaig nflaig deleted the nflaig/proposer-duties-v2-to-gloas branch June 17, 2026 10:04
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