Skip to content

fix: refresh next-epoch proposer duties before the gloas fork#9590

Closed
nflaig wants to merge 1 commit into
unstablefrom
nflaig/refresh-next-epoch-proposer-duties
Closed

fix: refresh next-epoch proposer duties before the gloas fork#9590
nflaig wants to merge 1 commit into
unstablefrom
nflaig/refresh-next-epoch-proposer-duties

Conversation

@nflaig

@nflaig nflaig commented Jul 4, 2026

Copy link
Copy Markdown
Member

Motivation

Follow-up to #9571. In the final pre-Gloas epoch the validator submits proposer preferences for the first Gloas slots, which reads the next epoch's proposer duties from BlockDutiesService. Pre-Gloas, onNewHead cannot reorg-refresh those duties since the v1 head event does not expose the next-epoch proposer dep_root, and the boundary poll only fetches the next epoch when it is still pre-Gloas. A reorg in the last SUBMIT_BEFORE_PROPOSAL_SLOTS that shifts the Gloas epoch's dep_root therefore leaves the cached duties stale, the resubmit-on-shift check never fires, and the preferences go out under a stale dep_root which the beacon node ignores.

Description

Re-poll the next epoch each slot during the final pre-Gloas epoch so a dep_root shift is picked up and the pre-fork preferences resubmit under the current root.

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

@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 updates the BlockDutiesService to re-poll next-epoch proposer duties on every slot during the final pre-Gloas epoch. This ensures that proposer preferences remain fresh and any dependent root shifts (e.g., due to a reorg) are picked up, since the v1 head event does not expose the next-epoch dependent root. A unit test has been added to verify this behavior. The reviewer pointed out that on the first slot of the final pre-Gloas epoch, runEveryEpochTask already pre-fetches the upcoming Gloas epoch duties, making the call in runEverySlotTask redundant on that slot. A suggestion was provided to skip the first slot of the epoch to avoid duplicate API requests.

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 on lines +186 to +189
} else if (
!isForkPostGloas(this.config.getForkName(slot)) &&
isForkPostGloas(this.config.getForkName(nextEpochStartSlot))
) {

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.

medium

At the start of the final pre-Gloas epoch (the first slot of the epoch), runEveryEpochTask already pre-fetches the upcoming Gloas epoch duties via pollBeaconProposers(nextEpoch). Calling pollBeaconProposers(nextEpoch) again in runEverySlotTask on the very first slot results in a redundant concurrent API request to the beacon node.

We can avoid this redundant call by ensuring we do not re-poll on the first slot of the epoch.

Suggested change
} else if (
!isForkPostGloas(this.config.getForkName(slot)) &&
isForkPostGloas(this.config.getForkName(nextEpochStartSlot))
) {
} else if (
slot !== computeStartSlotAtEpoch(computeEpochAtSlot(slot)) &&
!isForkPostGloas(this.config.getForkName(slot)) &&
isForkPostGloas(this.config.getForkName(nextEpochStartSlot))
) {

@nflaig

nflaig commented Jul 4, 2026

Copy link
Copy Markdown
Member Author

A reorg in the last SUBMIT_BEFORE_PROPOSAL_SLOTS that shifts the Gloas epoch's dep_root therefore leaves the cached duties stale

I had claude open this PR because of #9571 (comment) but this is not something we should worry about

gonna close this again

@nflaig nflaig closed this Jul 4, 2026
@nflaig nflaig deleted the nflaig/refresh-next-epoch-proposer-duties branch July 4, 2026 20:45
@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: 8df61f2 Previous: 9d930bd Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 923.50 us/op 895.22 us/op 1.03
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 39.950 us/op 38.503 us/op 1.04
BLS verify - blst 756.11 us/op 740.93 us/op 1.02
BLS verifyMultipleSignatures 3 - blst 1.3854 ms/op 1.3504 ms/op 1.03
BLS verifyMultipleSignatures 8 - blst 2.2360 ms/op 2.1455 ms/op 1.04
BLS verifyMultipleSignatures 32 - blst 7.0302 ms/op 6.9171 ms/op 1.02
BLS verifyMultipleSignatures 64 - blst 13.990 ms/op 13.748 ms/op 1.02
BLS verifyMultipleSignatures 128 - blst 26.558 ms/op 25.552 ms/op 1.04
BLS deserializing 10000 signatures 614.22 ms/op 633.65 ms/op 0.97
BLS deserializing 100000 signatures 6.3192 s/op 6.2867 s/op 1.01
BLS verifyMultipleSignatures - same message - 3 - blst 729.42 us/op 753.35 us/op 0.97
BLS verifyMultipleSignatures - same message - 8 - blst 869.29 us/op 883.31 us/op 0.98
BLS verifyMultipleSignatures - same message - 32 - blst 1.6223 ms/op 1.5001 ms/op 1.08
BLS verifyMultipleSignatures - same message - 64 - blst 2.4746 ms/op 2.3448 ms/op 1.06
BLS verifyMultipleSignatures - same message - 128 - blst 4.1305 ms/op 4.0215 ms/op 1.03
BLS aggregatePubkeys 32 - blst 18.070 us/op 17.445 us/op 1.04
BLS aggregatePubkeys 128 - blst 64.753 us/op 62.414 us/op 1.04
getSlashingsAndExits - default max 44.435 us/op 44.435 us/op 1.00
getSlashingsAndExits - 2k 325.79 us/op 320.77 us/op 1.02
proposeBlockBody type=full, size=empty 518.22 us/op 681.06 us/op 0.76
isKnown best case - 1 super set check 190.00 ns/op 181.00 ns/op 1.05
isKnown normal case - 2 super set checks 161.00 ns/op 168.00 ns/op 0.96
isKnown worse case - 16 super set checks 168.00 ns/op 166.00 ns/op 1.01
validate api signedAggregateAndProof - struct 1.5343 ms/op 1.5165 ms/op 1.01
validate gossip signedAggregateAndProof - struct 1.5297 ms/op 1.5089 ms/op 1.01
batch validate gossip attestation - vc 640000 - chunk 32 109.73 us/op 106.78 us/op 1.03
batch validate gossip attestation - vc 640000 - chunk 64 95.014 us/op 92.320 us/op 1.03
batch validate gossip attestation - vc 640000 - chunk 128 88.357 us/op 85.842 us/op 1.03
batch validate gossip attestation - vc 640000 - chunk 256 84.650 us/op 82.561 us/op 1.03
bytes32 toHexString 298.00 ns/op 288.00 ns/op 1.03
bytes32 Buffer.toString(hex) 172.00 ns/op 166.00 ns/op 1.04
bytes32 Buffer.toString(hex) from Uint8Array 235.00 ns/op 237.00 ns/op 0.99
bytes32 Buffer.toString(hex) + 0x 168.00 ns/op 169.00 ns/op 0.99
Return object 10000 times 0.21620 ns/op 0.21210 ns/op 1.02
Throw Error 10000 times 3.4789 us/op 3.4264 us/op 1.02
toHex 107.51 ns/op 105.07 ns/op 1.02
Buffer.from 96.156 ns/op 87.876 ns/op 1.09
shared Buffer 64.737 ns/op 59.596 ns/op 1.09
fastMsgIdFn sha256 / 200 bytes 1.5170 us/op 1.4980 us/op 1.01
fastMsgIdFn h32 xxhash / 200 bytes 162.00 ns/op 156.00 ns/op 1.04
fastMsgIdFn h64 xxhash / 200 bytes 203.00 ns/op 203.00 ns/op 1.00
fastMsgIdFn sha256 / 1000 bytes 4.8550 us/op 4.7920 us/op 1.01
fastMsgIdFn h32 xxhash / 1000 bytes 255.00 ns/op 245.00 ns/op 1.04
fastMsgIdFn h64 xxhash / 1000 bytes 249.00 ns/op 254.00 ns/op 0.98
fastMsgIdFn sha256 / 10000 bytes 42.750 us/op 42.292 us/op 1.01
fastMsgIdFn h32 xxhash / 10000 bytes 1.3010 us/op 1.2550 us/op 1.04
fastMsgIdFn h64 xxhash / 10000 bytes 845.00 ns/op 814.00 ns/op 1.04
send data - 1000 256B messages 4.2053 ms/op 3.8873 ms/op 1.08
send data - 1000 512B messages 6.3637 ms/op 5.0659 ms/op 1.26
send data - 1000 1024B messages 6.0356 ms/op 5.4530 ms/op 1.11
send data - 1000 1200B messages 6.4830 ms/op 5.8379 ms/op 1.11
send data - 1000 2048B messages 8.8489 ms/op 21.942 ms/op 0.40
send data - 1000 4096B messages 76.403 ms/op 63.625 ms/op 1.20
send data - 1000 16384B messages 244.71 ms/op 283.75 ms/op 0.86
send data - 1000 65536B messages 1.4512 s/op 956.60 ms/op 1.52
enrSubnets - fastDeserialize 64 bits 744.00 ns/op 730.00 ns/op 1.02
enrSubnets - ssz BitVector 64 bits 248.00 ns/op 271.00 ns/op 0.92
enrSubnets - fastDeserialize 4 bits 103.00 ns/op 105.00 ns/op 0.98
enrSubnets - ssz BitVector 4 bits 255.00 ns/op 270.00 ns/op 0.94
prioritizePeers score -10:0 att 32-0.1 sync 2-0 202.45 us/op 200.27 us/op 1.01
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 235.13 us/op 227.82 us/op 1.03
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 348.74 us/op 333.07 us/op 1.05
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 622.71 us/op 585.52 us/op 1.06
prioritizePeers score 0:0 att 64-1 sync 4-1 737.43 us/op 691.18 us/op 1.07
array of 16000 items push then shift 1.3381 us/op 1.2853 us/op 1.04
LinkedList of 16000 items push then shift 7.1690 ns/op 6.9930 ns/op 1.03
array of 16000 items push then pop 71.485 ns/op 65.420 ns/op 1.09
LinkedList of 16000 items push then pop 5.7610 ns/op 5.9110 ns/op 0.97
array of 24000 items push then shift 1.8129 us/op 1.8992 us/op 0.95
LinkedList of 24000 items push then shift 6.9060 ns/op 6.6000 ns/op 1.05
array of 24000 items push then pop 103.25 ns/op 88.603 ns/op 1.17
LinkedList of 24000 items push then pop 5.8200 ns/op 5.9120 ns/op 0.98
intersect bitArray bitLen 8 4.5710 ns/op 4.7320 ns/op 0.97
intersect array and set length 8 28.306 ns/op 29.143 ns/op 0.97
intersect bitArray bitLen 128 23.049 ns/op 24.066 ns/op 0.96
intersect array and set length 128 468.69 ns/op 491.55 ns/op 0.95
bitArray.getTrueBitIndexes() bitLen 128 1.0320 us/op 1.0290 us/op 1.00
bitArray.getTrueBitIndexes() bitLen 248 1.7430 us/op 1.7400 us/op 1.00
bitArray.getTrueBitIndexes() bitLen 512 3.6080 us/op 3.4610 us/op 1.04
Full columns - reconstruct all 6 blobs 157.07 us/op 143.76 us/op 1.09
Full columns - reconstruct half of the blobs out of 6 65.664 us/op 150.27 us/op 0.44
Full columns - reconstruct single blob out of 6 35.669 us/op 34.260 us/op 1.04
Half columns - reconstruct all 6 blobs 391.85 ms/op 371.72 ms/op 1.05
Half columns - reconstruct half of the blobs out of 6 195.30 ms/op 186.18 ms/op 1.05
Half columns - reconstruct single blob out of 6 69.975 ms/op 65.354 ms/op 1.07
Set add up to 64 items then delete first 1.5212 us/op 1.6285 us/op 0.93
OrderedSet add up to 64 items then delete first 2.3530 us/op 2.4896 us/op 0.95
Set add up to 64 items then delete last 1.7492 us/op 1.8726 us/op 0.93
OrderedSet add up to 64 items then delete last 2.6561 us/op 2.7543 us/op 0.96
Set add up to 64 items then delete middle 1.7386 us/op 1.8717 us/op 0.93
OrderedSet add up to 64 items then delete middle 4.0102 us/op 4.2246 us/op 0.95
Set add up to 128 items then delete first 3.4958 us/op 3.7290 us/op 0.94
OrderedSet add up to 128 items then delete first 5.4478 us/op 5.6922 us/op 0.96
Set add up to 128 items then delete last 3.3866 us/op 3.6232 us/op 0.93
OrderedSet add up to 128 items then delete last 5.0879 us/op 5.3176 us/op 0.96
Set add up to 128 items then delete middle 3.3859 us/op 3.5927 us/op 0.94
OrderedSet add up to 128 items then delete middle 10.722 us/op 11.107 us/op 0.97
Set add up to 256 items then delete first 7.6201 us/op 7.4322 us/op 1.03
OrderedSet add up to 256 items then delete first 11.867 us/op 11.584 us/op 1.02
Set add up to 256 items then delete last 6.8975 us/op 7.1692 us/op 0.96
OrderedSet add up to 256 items then delete last 10.942 us/op 10.882 us/op 1.01
Set add up to 256 items then delete middle 6.9526 us/op 7.0615 us/op 0.98
OrderedSet add up to 256 items then delete middle 33.645 us/op 33.982 us/op 0.99
runFastConfirmationRules vc:100000 bc:96 eq:0 3.7960 us/op 3.9030 us/op 0.97
runFastConfirmationRules vc:600000 bc:96 eq:0 3.8270 us/op 3.5120 us/op 1.09
runFastConfirmationRules vc:1000000 bc:96 eq:0 3.8880 us/op 3.5210 us/op 1.10
runFastConfirmationRules vc:600000 bc:320 eq:0 8.8500 us/op 10.468 us/op 0.85
runFastConfirmationRules vc:600000 bc:1200 eq:0 37.546 us/op 32.522 us/op 1.15
runFastConfirmationRules vc:600000 bc:96 eq:1000 3.6680 us/op 3.2230 us/op 1.14
runFastConfirmationRules vc:600000 bc:96 eq:10000 3.8170 us/op 3.2940 us/op 1.16
runFastConfirmationRules vc:600000 bc:96 eq:300000 3.5070 us/op 3.6310 us/op 0.97
pass gossip attestations to forkchoice per slot 2.5118 ms/op 2.5605 ms/op 0.98
forkChoice updateHead vc 100000 bc 64 eq 0 400.16 us/op 425.31 us/op 0.94
forkChoice updateHead vc 600000 bc 64 eq 0 2.3556 ms/op 2.4895 ms/op 0.95
forkChoice updateHead vc 1000000 bc 64 eq 0 3.9623 ms/op 4.1618 ms/op 0.95
forkChoice updateHead vc 600000 bc 320 eq 0 2.3799 ms/op 2.5053 ms/op 0.95
forkChoice updateHead vc 600000 bc 1200 eq 0 2.4277 ms/op 2.5255 ms/op 0.96
forkChoice updateHead vc 600000 bc 7200 eq 0 2.9825 ms/op 2.7946 ms/op 1.07
forkChoice updateHead vc 600000 bc 64 eq 1000 2.3912 ms/op 2.5494 ms/op 0.94
forkChoice updateHead vc 600000 bc 64 eq 10000 2.5132 ms/op 2.6748 ms/op 0.94
forkChoice updateHead vc 600000 bc 64 eq 300000 6.6022 ms/op 6.8163 ms/op 0.97
computeDeltas 1400000 validators 0% inactive 12.215 ms/op 12.785 ms/op 0.96
computeDeltas 1400000 validators 10% inactive 11.533 ms/op 12.061 ms/op 0.96
computeDeltas 1400000 validators 20% inactive 10.542 ms/op 10.790 ms/op 0.98
computeDeltas 1400000 validators 50% inactive 8.2428 ms/op 8.3181 ms/op 0.99
computeDeltas 2100000 validators 0% inactive 18.275 ms/op 19.015 ms/op 0.96
computeDeltas 2100000 validators 10% inactive 16.947 ms/op 17.953 ms/op 0.94
computeDeltas 2100000 validators 20% inactive 15.523 ms/op 16.289 ms/op 0.95
computeDeltas 2100000 validators 50% inactive 9.2603 ms/op 9.6147 ms/op 0.96
altair processAttestation - 250000 vs - 7PWei normalcase 2.5967 ms/op 1.6834 ms/op 1.54
altair processAttestation - 250000 vs - 7PWei worstcase 3.3134 ms/op 2.4596 ms/op 1.35
altair processAttestation - setStatus - 1/6 committees join 99.677 us/op 105.36 us/op 0.95
altair processAttestation - setStatus - 1/3 committees join 192.00 us/op 208.82 us/op 0.92
altair processAttestation - setStatus - 1/2 committees join 284.69 us/op 286.89 us/op 0.99
altair processAttestation - setStatus - 2/3 committees join 351.01 us/op 381.83 us/op 0.92
altair processAttestation - setStatus - 4/5 committees join 475.55 us/op 498.11 us/op 0.95
altair processAttestation - setStatus - 100% committees join 572.45 us/op 594.85 us/op 0.96
altair processBlock - 250000 vs - 7PWei normalcase 3.7500 ms/op 2.8976 ms/op 1.29
altair processBlock - 250000 vs - 7PWei normalcase hashState 17.669 ms/op 11.863 ms/op 1.49
altair processBlock - 250000 vs - 7PWei worstcase 19.843 ms/op 19.404 ms/op 1.02
altair processBlock - 250000 vs - 7PWei worstcase hashState 41.663 ms/op 38.828 ms/op 1.07
phase0 processBlock - 250000 vs - 7PWei normalcase 1.4408 ms/op 1.2703 ms/op 1.13
phase0 processBlock - 250000 vs - 7PWei worstcase 16.693 ms/op 17.324 ms/op 0.96
altair processEth1Data - 250000 vs - 7PWei normalcase 321.70 us/op 298.86 us/op 1.08
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 5.1960 us/op 3.3360 us/op 1.56
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 23.169 us/op 20.856 us/op 1.11
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 9.2990 us/op 5.9800 us/op 1.56
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.9310 us/op 3.5720 us/op 1.10
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 101.12 us/op 89.038 us/op 1.14
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.4355 ms/op 1.3637 ms/op 1.05
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.9639 ms/op 1.7923 ms/op 1.10
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.7195 ms/op 1.7935 ms/op 0.96
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.7940 ms/op 3.2540 ms/op 1.17
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.1193 ms/op 2.0395 ms/op 1.04
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.7736 ms/op 3.5893 ms/op 1.05
Tree 40 250000 create 351.42 ms/op 303.35 ms/op 1.16
Tree 40 250000 get(125000) 87.873 ns/op 94.195 ns/op 0.93
Tree 40 250000 set(125000) 930.24 ns/op 1.0172 us/op 0.91
Tree 40 250000 toArray() 11.879 ms/op 9.3968 ms/op 1.26
Tree 40 250000 iterate all - toArray() + loop 11.637 ms/op 9.3401 ms/op 1.25
Tree 40 250000 iterate all - get(i) 33.873 ms/op 34.009 ms/op 1.00
Array 250000 create 2.3019 ms/op 2.1546 ms/op 1.07
Array 250000 clone - spread 721.54 us/op 675.15 us/op 1.07
Array 250000 get(125000) 0.28700 ns/op 0.29500 ns/op 0.97
Array 250000 set(125000) 0.28800 ns/op 0.30100 ns/op 0.96
Array 250000 iterate all - loop 54.555 us/op 57.553 us/op 0.95
phase0 afterProcessEpoch - 250000 vs - 7PWei 60.674 ms/op 40.750 ms/op 1.49
Array.fill - length 1000000 2.1117 ms/op 2.2510 ms/op 0.94
Array push - length 1000000 9.3797 ms/op 8.0352 ms/op 1.17
Array.get 0.20175 ns/op 0.20873 ns/op 0.97
Uint8Array.get 0.23671 ns/op 0.24280 ns/op 0.97
phase0 beforeProcessEpoch - 250000 vs - 7PWei 19.269 ms/op 11.452 ms/op 1.68
altair processEpoch - mainnet_e81889 332.49 ms/op 237.62 ms/op 1.40
mainnet_e81889 - altair beforeProcessEpoch 17.311 ms/op 19.604 ms/op 0.88
mainnet_e81889 - altair processJustificationAndFinalization 6.0870 us/op 4.9490 us/op 1.23
mainnet_e81889 - altair processInactivityUpdates 3.6519 ms/op 3.5363 ms/op 1.03
mainnet_e81889 - altair processRewardsAndPenalties 18.007 ms/op 16.648 ms/op 1.08
mainnet_e81889 - altair processRegistryUpdates 556.00 ns/op 519.00 ns/op 1.07
mainnet_e81889 - altair processSlashings 148.00 ns/op 133.00 ns/op 1.11
mainnet_e81889 - altair processEth1DataReset 143.00 ns/op 128.00 ns/op 1.12
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.4005 ms/op 1.1968 ms/op 1.17
mainnet_e81889 - altair processSlashingsReset 722.00 ns/op 696.00 ns/op 1.04
mainnet_e81889 - altair processRandaoMixesReset 1.3340 us/op 1.0490 us/op 1.27
mainnet_e81889 - altair processHistoricalRootsUpdate 149.00 ns/op 137.00 ns/op 1.09
mainnet_e81889 - altair processParticipationFlagUpdates 446.00 ns/op 417.00 ns/op 1.07
mainnet_e81889 - altair processSyncCommitteeUpdates 128.00 ns/op 106.00 ns/op 1.21
mainnet_e81889 - altair afterProcessEpoch 43.090 ms/op 41.876 ms/op 1.03
capella processEpoch - mainnet_e217614 953.84 ms/op 722.97 ms/op 1.32
mainnet_e217614 - capella beforeProcessEpoch 56.129 ms/op 58.680 ms/op 0.96
mainnet_e217614 - capella processJustificationAndFinalization 35.073 ms/op 5.0580 us/op 6934.16
mainnet_e217614 - capella processInactivityUpdates 13.435 ms/op 11.132 ms/op 1.21
mainnet_e217614 - capella processRewardsAndPenalties 98.799 ms/op 82.817 ms/op 1.19
mainnet_e217614 - capella processRegistryUpdates 4.8140 us/op 4.5140 us/op 1.07
mainnet_e217614 - capella processSlashings 144.00 ns/op 133.00 ns/op 1.08
mainnet_e217614 - capella processEth1DataReset 148.00 ns/op 127.00 ns/op 1.17
mainnet_e217614 - capella processEffectiveBalanceUpdates 5.3087 ms/op 5.1886 ms/op 1.02
mainnet_e217614 - capella processSlashingsReset 684.00 ns/op 682.00 ns/op 1.00
mainnet_e217614 - capella processRandaoMixesReset 1.3630 us/op 1.0380 us/op 1.31
mainnet_e217614 - capella processHistoricalRootsUpdate 146.00 ns/op 127.00 ns/op 1.15
mainnet_e217614 - capella processParticipationFlagUpdates 438.00 ns/op 430.00 ns/op 1.02
mainnet_e217614 - capella afterProcessEpoch 112.95 ms/op 111.83 ms/op 1.01
phase0 processEpoch - mainnet_e58758 352.11 ms/op 271.25 ms/op 1.30
mainnet_e58758 - phase0 beforeProcessEpoch 64.352 ms/op 47.419 ms/op 1.36
mainnet_e58758 - phase0 processJustificationAndFinalization 6.6130 us/op 4.9560 us/op 1.33
mainnet_e58758 - phase0 processRewardsAndPenalties 16.653 ms/op 14.337 ms/op 1.16
mainnet_e58758 - phase0 processRegistryUpdates 2.1860 us/op 2.2300 us/op 0.98
mainnet_e58758 - phase0 processSlashings 235.00 ns/op 132.00 ns/op 1.78
mainnet_e58758 - phase0 processEth1DataReset 131.00 ns/op 128.00 ns/op 1.02
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 784.57 us/op 1.0531 ms/op 0.75
mainnet_e58758 - phase0 processSlashingsReset 844.00 ns/op 850.00 ns/op 0.99
mainnet_e58758 - phase0 processRandaoMixesReset 1.3210 us/op 1.0300 us/op 1.28
mainnet_e58758 - phase0 processHistoricalRootsUpdate 135.00 ns/op 137.00 ns/op 0.99
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.2040 us/op 974.00 ns/op 1.24
mainnet_e58758 - phase0 afterProcessEpoch 33.890 ms/op 32.846 ms/op 1.03
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.0357 ms/op 1.0106 ms/op 1.02
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.5324 ms/op 1.6326 ms/op 0.94
altair processInactivityUpdates - 250000 normalcase 12.544 ms/op 10.588 ms/op 1.18
altair processInactivityUpdates - 250000 worstcase 14.647 ms/op 10.620 ms/op 1.38
phase0 processRegistryUpdates - 250000 normalcase 2.2410 us/op 2.1980 us/op 1.02
phase0 processRegistryUpdates - 250000 badcase_full_deposits 150.00 us/op 136.77 us/op 1.10
phase0 processRegistryUpdates - 250000 worstcase 0.5 70.050 ms/op 53.192 ms/op 1.32
altair processRewardsAndPenalties - 250000 normalcase 17.477 ms/op 12.533 ms/op 1.39
altair processRewardsAndPenalties - 250000 worstcase 15.382 ms/op 12.859 ms/op 1.20
phase0 getAttestationDeltas - 250000 normalcase 5.6447 ms/op 5.2830 ms/op 1.07
phase0 getAttestationDeltas - 250000 worstcase 5.6650 ms/op 9.3270 ms/op 0.61
phase0 processSlashings - 250000 worstcase 58.816 us/op 59.362 us/op 0.99
altair processSyncCommitteeUpdates - 250000 10.597 ms/op 10.192 ms/op 1.04
BeaconState.hashTreeRoot - No change 197.00 ns/op 164.00 ns/op 1.20
BeaconState.hashTreeRoot - 1 full validator 84.857 us/op 68.346 us/op 1.24
BeaconState.hashTreeRoot - 32 full validator 1.0048 ms/op 764.94 us/op 1.31
BeaconState.hashTreeRoot - 512 full validator 6.5742 ms/op 7.6233 ms/op 0.86
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 93.885 us/op 90.157 us/op 1.04
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.4089 ms/op 1.3044 ms/op 1.08
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 14.861 ms/op 15.109 ms/op 0.98
BeaconState.hashTreeRoot - 1 balances 75.443 us/op 72.718 us/op 1.04
BeaconState.hashTreeRoot - 32 balances 727.78 us/op 688.87 us/op 1.06
BeaconState.hashTreeRoot - 512 balances 5.1115 ms/op 5.8058 ms/op 0.88
BeaconState.hashTreeRoot - 250000 balances 179.06 ms/op 116.49 ms/op 1.54
aggregationBits - 2048 els - zipIndexesInBitList 19.302 us/op 18.763 us/op 1.03
regular array get 100000 times 22.422 us/op 22.630 us/op 0.99
wrappedArray get 100000 times 23.494 us/op 22.603 us/op 1.04
arrayWithProxy get 100000 times 9.9268 ms/op 20.546 ms/op 0.48
ssz.Root.equals 21.208 ns/op 81.469 ns/op 0.26
byteArrayEquals 21.730 ns/op 21.392 ns/op 1.02
Buffer.compare 8.8940 ns/op 8.9010 ns/op 1.00
processSlot - 1 slots 9.5050 us/op 8.9460 us/op 1.06
processSlot - 32 slots 2.3906 ms/op 1.6456 ms/op 1.45
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 4.3116 ms/op 3.5787 ms/op 1.20
getCommitteeAssignments - req 1 vs - 250000 vc 1.7103 ms/op 1.6811 ms/op 1.02
getCommitteeAssignments - req 100 vs - 250000 vc 3.2532 ms/op 3.4368 ms/op 0.95
getCommitteeAssignments - req 1000 vs - 250000 vc 3.6983 ms/op 3.6897 ms/op 1.00
findModifiedValidators - 10000 modified validators 781.35 ms/op 614.00 ms/op 1.27
findModifiedValidators - 1000 modified validators 468.32 ms/op 445.64 ms/op 1.05
findModifiedValidators - 100 modified validators 223.54 ms/op 330.02 ms/op 0.68
findModifiedValidators - 10 modified validators 215.91 ms/op 164.00 ms/op 1.32
findModifiedValidators - 1 modified validators 140.35 ms/op 167.86 ms/op 0.84
findModifiedValidators - no difference 170.29 ms/op 142.01 ms/op 1.20
migrate state 1500000 validators, 3400 modified, 2000 new 3.4333 s/op 2.6088 s/op 1.32
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.6200 ns/op 3.7300 ns/op 0.97
state getBlockRootAtSlot - 250000 vs - 7PWei 442.85 ns/op 286.91 ns/op 1.54
computeProposerIndex 100000 validators 1.3035 ms/op 1.4207 ms/op 0.92
getNextSyncCommitteeIndices 1000 validators 2.7322 ms/op 2.8929 ms/op 0.94
getNextSyncCommitteeIndices 10000 validators 24.059 ms/op 25.572 ms/op 0.94
getNextSyncCommitteeIndices 100000 validators 80.149 ms/op 87.875 ms/op 0.91
computeProposers - vc 250000 533.50 us/op 559.04 us/op 0.95
computeEpochShuffling - vc 250000 38.603 ms/op 39.926 ms/op 0.97
getNextSyncCommittee - vc 250000 9.7672 ms/op 9.4257 ms/op 1.04
nodejs block root to RootHex using toHex 97.171 ns/op 100.13 ns/op 0.97
nodejs block root to RootHex using toRootHex 61.010 ns/op 63.044 ns/op 0.97
nodejs fromHex(blob) 834.28 us/op 733.90 us/op 1.14
nodejs fromHexInto(blob) 592.68 us/op 629.88 us/op 0.94
nodejs block root to RootHex using the deprecated toHexString 439.63 ns/op 474.48 ns/op 0.93
nodejs byteArrayEquals 32 bytes (block root) 24.643 ns/op 25.974 ns/op 0.95
nodejs byteArrayEquals 48 bytes (pubkey) 35.814 ns/op 37.576 ns/op 0.95
nodejs byteArrayEquals 96 bytes (signature) 32.959 ns/op 38.005 ns/op 0.87
nodejs byteArrayEquals 1024 bytes 40.355 ns/op 43.646 ns/op 0.92
nodejs byteArrayEquals 131072 bytes (blob) 1.7044 us/op 1.7625 us/op 0.97
browser block root to RootHex using toHex 139.55 ns/op 144.91 ns/op 0.96
browser block root to RootHex using toRootHex 126.27 ns/op 130.89 ns/op 0.96
browser fromHex(blob) 1.7304 ms/op 1.5157 ms/op 1.14
browser fromHexInto(blob) 683.76 us/op 631.57 us/op 1.08
browser block root to RootHex using the deprecated toHexString 491.89 ns/op 333.68 ns/op 1.47
browser byteArrayEquals 32 bytes (block root) 28.988 ns/op 28.039 ns/op 1.03
browser byteArrayEquals 48 bytes (pubkey) 40.851 ns/op 39.505 ns/op 1.03
browser byteArrayEquals 96 bytes (signature) 76.447 ns/op 73.996 ns/op 1.03
browser byteArrayEquals 1024 bytes 780.46 ns/op 755.98 ns/op 1.03
browser byteArrayEquals 131072 bytes (blob) 97.532 us/op 95.273 us/op 1.02

by benchmarkbot/action

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.

1 participant