Skip to content

feat: allow proposer reorgs at epoch boundaries - #9769

Draft
nflaig wants to merge 1 commit into
unstablefrom
nflaig/proposer-epoch-reorg
Draft

feat: allow proposer reorgs at epoch boundaries#9769
nflaig wants to merge 1 commit into
unstablefrom
nflaig/proposer-epoch-reorg

Conversation

@nflaig

@nflaig nflaig commented Aug 4, 2026

Copy link
Copy Markdown
Member

@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: 3ae54fba14

鈩癸笍 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".

return {prelimProposerHead, prelimNotReorgedReason: NotReorgedReason.AtEpochBoundary};
}

// No reorg if headBlock and parentBlock are not ffg competitive

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Accept parent bids when enabling boundary reorgs

For a Gloas proposer reorg at the first slot of an epoch, this now selects the weak head's parent, but isBidCompatibleWithHead() in packages/beacon-node/src/chain/validation/executionPayloadBid.ts:63-66 still rejects every bid building on that parent when bidSlot is an epoch boundary. Because both gossip and API bid validation use that predicate, no matching bid reaches the pool queried during block production, forcing the proposer to discard valid builder bids precisely when this new reorg path is taken.

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.

yeah this is valid, and I was aware of it before, not sure we can solve this easily

@nflaig
nflaig marked this pull request as draft August 4, 2026 15:57
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Performance Report

鉁旓笍 no performance regression detected

Full benchmark results
Benchmark suite Current: bffb9e6 Previous: b22e481 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.0348 ms/op 992.62 us/op 1.04
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 38.975 us/op 42.752 us/op 0.91
BLS verify - blst 713.57 us/op 748.90 us/op 0.95
BLS verifyMultipleSignatures 3 - blst 1.3630 ms/op 1.4206 ms/op 0.96
BLS verifyMultipleSignatures 8 - blst 2.1676 ms/op 2.2686 ms/op 0.96
BLS verifyMultipleSignatures 32 - blst 6.9498 ms/op 7.1626 ms/op 0.97
BLS verifyMultipleSignatures 64 - blst 13.988 ms/op 14.014 ms/op 1.00
BLS verifyMultipleSignatures 128 - blst 25.966 ms/op 26.940 ms/op 0.96
BLS deserializing 10000 signatures 645.16 ms/op 680.19 ms/op 0.95
BLS deserializing 100000 signatures 6.4230 s/op 6.8753 s/op 0.93
BLS verifyMultipleSignatures - same message - 3 - blst 820.46 us/op 851.12 us/op 0.96
BLS verifyMultipleSignatures - same message - 8 - blst 903.04 us/op 968.47 us/op 0.93
BLS verifyMultipleSignatures - same message - 32 - blst 1.5337 ms/op 1.6932 ms/op 0.91
BLS verifyMultipleSignatures - same message - 64 - blst 2.4232 ms/op 2.6015 ms/op 0.93
BLS verifyMultipleSignatures - same message - 128 - blst 4.0892 ms/op 4.4292 ms/op 0.92
BLS aggregatePubkeys 32 - blst 18.046 us/op 19.240 us/op 0.94
BLS aggregatePubkeys 128 - blst 63.836 us/op 68.870 us/op 0.93
getSlashingsAndExits - default max 50.104 us/op 53.077 us/op 0.94
getSlashingsAndExits - 2k 339.10 us/op 336.14 us/op 1.01
proposeBlockBody type=full, size=empty 639.22 us/op 736.22 us/op 0.87
isKnown best case - 1 super set check 165.00 ns/op 177.00 ns/op 0.93
isKnown normal case - 2 super set checks 159.00 ns/op 177.00 ns/op 0.90
isKnown worse case - 16 super set checks 162.00 ns/op 174.00 ns/op 0.93
validate api signedAggregateAndProof - struct 1.5231 ms/op 1.6233 ms/op 0.94
validate gossip signedAggregateAndProof - struct 1.5227 ms/op 1.6216 ms/op 0.94
batch validate gossip attestation - vc 640000 - chunk 32 109.95 us/op 115.18 us/op 0.95
batch validate gossip attestation - vc 640000 - chunk 64 96.605 us/op 101.91 us/op 0.95
batch validate gossip attestation - vc 640000 - chunk 128 89.887 us/op 93.849 us/op 0.96
batch validate gossip attestation - vc 640000 - chunk 256 84.932 us/op 90.780 us/op 0.94
bytes32 toHexString 292.00 ns/op 303.00 ns/op 0.96
bytes32 Buffer.toString(hex) 187.00 ns/op 185.00 ns/op 1.01
bytes32 Buffer.toString(hex) from Uint8Array 249.00 ns/op 255.00 ns/op 0.98
bytes32 Buffer.toString(hex) + 0x 186.00 ns/op 185.00 ns/op 1.01
Return object 10000 times 0.21480 ns/op 0.23000 ns/op 0.93
Throw Error 10000 times 3.3031 us/op 3.5922 us/op 0.92
toHex 96.466 ns/op 108.53 ns/op 0.89
Buffer.from 87.136 ns/op 91.779 ns/op 0.95
shared Buffer 61.327 ns/op 62.037 ns/op 0.99
fastMsgIdFn sha256 / 200 bytes 1.4870 us/op 1.5830 us/op 0.94
fastMsgIdFn h32 xxhash / 200 bytes 155.00 ns/op 169.00 ns/op 0.92
fastMsgIdFn h64 xxhash / 200 bytes 214.00 ns/op 228.00 ns/op 0.94
fastMsgIdFn sha256 / 1000 bytes 4.7800 us/op 5.1290 us/op 0.93
fastMsgIdFn h32 xxhash / 1000 bytes 252.00 ns/op 274.00 ns/op 0.92
fastMsgIdFn h64 xxhash / 1000 bytes 268.00 ns/op 287.00 ns/op 0.93
fastMsgIdFn sha256 / 10000 bytes 42.156 us/op 44.860 us/op 0.94
fastMsgIdFn h32 xxhash / 10000 bytes 1.2690 us/op 1.3760 us/op 0.92
fastMsgIdFn h64 xxhash / 10000 bytes 837.00 ns/op 894.00 ns/op 0.94
send data - 1000 256B messages 4.4895 ms/op 4.3261 ms/op 1.04
send data - 1000 512B messages 5.4406 ms/op 5.3863 ms/op 1.01
send data - 1000 1024B messages 5.6461 ms/op 5.6378 ms/op 1.00
send data - 1000 1200B messages 6.3201 ms/op 7.6988 ms/op 0.82
send data - 1000 2048B messages 11.418 ms/op 11.448 ms/op 1.00
send data - 1000 4096B messages 41.899 ms/op 76.808 ms/op 0.55
send data - 1000 16384B messages 240.98 ms/op 437.06 ms/op 0.55
send data - 1000 65536B messages 867.78 ms/op 1.3453 s/op 0.65
enrSubnets - fastDeserialize 64 bits 889.00 ns/op 784.00 ns/op 1.13
enrSubnets - ssz BitVector 64 bits 357.00 ns/op 277.00 ns/op 1.29
enrSubnets - fastDeserialize 4 bits 204.00 ns/op 115.00 ns/op 1.77
enrSubnets - ssz BitVector 4 bits 356.00 ns/op 272.00 ns/op 1.31
prioritizePeers score -10:0 att 32-0.1 sync 2-0 205.51 us/op 217.30 us/op 0.95
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 234.90 us/op 249.65 us/op 0.94
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 342.81 us/op 362.38 us/op 0.95
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 600.88 us/op 647.73 us/op 0.93
prioritizePeers score 0:0 att 64-1 sync 4-1 698.21 us/op 765.74 us/op 0.91
array of 16000 items push then shift 1.2984 us/op 1.4232 us/op 0.91
LinkedList of 16000 items push then shift 6.9290 ns/op 7.7970 ns/op 0.89
array of 16000 items push then pop 64.583 ns/op 90.287 ns/op 0.72
LinkedList of 16000 items push then pop 6.5800 ns/op 6.5310 ns/op 1.01
array of 24000 items push then shift 1.9116 us/op 2.0548 us/op 0.93
LinkedList of 24000 items push then shift 6.8420 ns/op 7.2750 ns/op 0.94
array of 24000 items push then pop 86.811 ns/op 129.33 ns/op 0.67
LinkedList of 24000 items push then pop 6.6150 ns/op 6.5250 ns/op 1.01
intersect bitArray bitLen 8 3.9530 ns/op 4.2660 ns/op 0.93
intersect array and set length 8 48.602 ns/op 32.003 ns/op 1.52
intersect bitArray bitLen 128 23.611 ns/op 25.579 ns/op 0.92
intersect array and set length 128 552.38 ns/op 533.37 ns/op 1.04
bitArray.getTrueBitIndexes() bitLen 128 967.00 ns/op 1.0290 us/op 0.94
bitArray.getTrueBitIndexes() bitLen 248 1.6980 us/op 1.8000 us/op 0.94
bitArray.getTrueBitIndexes() bitLen 512 3.4540 us/op 3.8040 us/op 0.91
Full columns - reconstruct all 6 blobs 241.84 us/op 259.82 us/op 0.93
Full columns - reconstruct half of the blobs out of 6 86.035 us/op 92.843 us/op 0.93
Full columns - reconstruct single blob out of 6 37.024 us/op 34.110 us/op 1.09
Half columns - reconstruct all 6 blobs 376.60 ms/op 421.22 ms/op 0.89
Half columns - reconstruct half of the blobs out of 6 188.77 ms/op 210.48 ms/op 0.90
Half columns - reconstruct single blob out of 6 65.836 ms/op 74.696 ms/op 0.88
Set add up to 64 items then delete first 1.6481 us/op 1.7862 us/op 0.92
OrderedSet add up to 64 items then delete first 2.4997 us/op 2.7293 us/op 0.92
Set add up to 64 items then delete last 1.8648 us/op 2.0402 us/op 0.91
OrderedSet add up to 64 items then delete last 2.7650 us/op 3.0201 us/op 0.92
Set add up to 64 items then delete middle 1.8678 us/op 2.0351 us/op 0.92
OrderedSet add up to 64 items then delete middle 4.2183 us/op 4.6989 us/op 0.90
Set add up to 128 items then delete first 3.7197 us/op 4.0692 us/op 0.91
OrderedSet add up to 128 items then delete first 5.6572 us/op 6.3239 us/op 0.89
Set add up to 128 items then delete last 3.5693 us/op 3.8988 us/op 0.92
OrderedSet add up to 128 items then delete last 5.4117 us/op 5.8276 us/op 0.93
Set add up to 128 items then delete middle 3.6105 us/op 3.9127 us/op 0.92
OrderedSet add up to 128 items then delete middle 11.140 us/op 12.461 us/op 0.89
Set add up to 256 items then delete first 7.4003 us/op 8.0763 us/op 0.92
OrderedSet add up to 256 items then delete first 11.493 us/op 12.949 us/op 0.89
Set add up to 256 items then delete last 7.0373 us/op 7.6984 us/op 0.91
OrderedSet add up to 256 items then delete last 10.959 us/op 12.150 us/op 0.90
Set add up to 256 items then delete middle 7.1901 us/op 7.8553 us/op 0.92
OrderedSet add up to 256 items then delete middle 34.203 us/op 38.060 us/op 0.90
runFastConfirmationRules vc:100000 bc:96 eq:0 4.5426 ms/op 5.2037 ms/op 0.87
runFastConfirmationRules vc:600000 bc:96 eq:0 34.017 ms/op 37.959 ms/op 0.90
runFastConfirmationRules vc:1000000 bc:96 eq:0 61.509 ms/op 63.741 ms/op 0.96
runFastConfirmationRules vc:600000 bc:320 eq:0 34.005 ms/op 38.234 ms/op 0.89
runFastConfirmationRules vc:100000 bc:96 eq:1000 1.0855 s/op 1.4092 s/op 0.77
pass gossip attestations to forkchoice per slot 2.5350 ms/op 2.8333 ms/op 0.89
forkChoice updateHead vc 100000 bc 64 eq 0 427.60 us/op 451.10 us/op 0.95
forkChoice updateHead vc 600000 bc 64 eq 0 2.5557 ms/op 2.6674 ms/op 0.96
forkChoice updateHead vc 1000000 bc 64 eq 0 4.2888 ms/op 4.4167 ms/op 0.97
forkChoice updateHead vc 600000 bc 320 eq 0 2.5812 ms/op 2.6427 ms/op 0.98
forkChoice updateHead vc 600000 bc 1200 eq 0 2.5632 ms/op 2.6473 ms/op 0.97
forkChoice updateHead vc 600000 bc 7200 eq 0 2.8871 ms/op 3.1179 ms/op 0.93
forkChoice updateHead vc 600000 bc 64 eq 1000 2.5434 ms/op 2.6254 ms/op 0.97
forkChoice updateHead vc 600000 bc 64 eq 10000 2.6136 ms/op 2.7236 ms/op 0.96
forkChoice updateHead vc 600000 bc 64 eq 300000 6.5971 ms/op 7.4810 ms/op 0.88
computeDeltas 1400000 validators 0% inactive 12.464 ms/op 13.158 ms/op 0.95
computeDeltas 1400000 validators 10% inactive 11.877 ms/op 12.545 ms/op 0.95
computeDeltas 1400000 validators 20% inactive 11.292 ms/op 11.849 ms/op 0.95
computeDeltas 1400000 validators 50% inactive 9.1020 ms/op 9.7744 ms/op 0.93
computeDeltas 2100000 validators 0% inactive 19.041 ms/op 19.984 ms/op 0.95
computeDeltas 2100000 validators 10% inactive 18.040 ms/op 18.910 ms/op 0.95
computeDeltas 2100000 validators 20% inactive 17.281 ms/op 17.872 ms/op 0.97
computeDeltas 2100000 validators 50% inactive 11.261 ms/op 14.621 ms/op 0.77
altair processAttestation - 250000 vs - 7PWei normalcase 1.6186 ms/op 1.9329 ms/op 0.84
altair processAttestation - 250000 vs - 7PWei worstcase 2.3651 ms/op 2.8103 ms/op 0.84
altair processAttestation - setStatus - 1/6 committees join 103.25 us/op 116.57 us/op 0.89
altair processAttestation - setStatus - 1/3 committees join 200.22 us/op 225.44 us/op 0.89
altair processAttestation - setStatus - 1/2 committees join 287.04 us/op 308.15 us/op 0.93
altair processAttestation - setStatus - 2/3 committees join 374.24 us/op 403.94 us/op 0.93
altair processAttestation - setStatus - 4/5 committees join 501.89 us/op 570.03 us/op 0.88
altair processAttestation - setStatus - 100% committees join 598.90 us/op 676.25 us/op 0.89
altair processBlock - 250000 vs - 7PWei normalcase 2.9398 ms/op 3.7208 ms/op 0.79
altair processBlock - 250000 vs - 7PWei normalcase hashState 14.316 ms/op 13.053 ms/op 1.10
altair processBlock - 250000 vs - 7PWei worstcase 19.530 ms/op 22.288 ms/op 0.88
altair processBlock - 250000 vs - 7PWei worstcase hashState 38.985 ms/op 41.976 ms/op 0.93
phase0 processBlock - 250000 vs - 7PWei normalcase 1.2960 ms/op 1.4274 ms/op 0.91
phase0 processBlock - 250000 vs - 7PWei worstcase 16.463 ms/op 18.442 ms/op 0.89
altair processEth1Data - 250000 vs - 7PWei normalcase 292.44 us/op 304.21 us/op 0.96
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.5200 us/op 3.6100 us/op 0.98
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 20.537 us/op 20.571 us/op 1.00
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 5.9500 us/op 5.9470 us/op 1.00
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.8070 us/op 3.5870 us/op 1.06
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 94.015 us/op 97.554 us/op 0.96
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.3212 ms/op 1.4715 ms/op 0.90
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.7499 ms/op 1.9303 ms/op 0.91
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.7351 ms/op 1.9104 ms/op 0.91
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.5073 ms/op 3.8520 ms/op 0.91
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.9999 ms/op 2.2063 ms/op 0.91
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.8631 ms/op 4.2458 ms/op 0.91
Tree 40 250000 create 301.48 ms/op 317.21 ms/op 0.95
Tree 40 250000 get(125000) 98.618 ns/op 99.585 ns/op 0.99
Tree 40 250000 set(125000) 1.2327 us/op 1.0651 us/op 1.16
Tree 40 250000 toArray() 9.4211 ms/op 10.109 ms/op 0.93
Tree 40 250000 iterate all - toArray() + loop 9.2365 ms/op 10.180 ms/op 0.91
Tree 40 250000 iterate all - get(i) 35.365 ms/op 35.713 ms/op 0.99
Array 250000 create 1.9975 ms/op 2.7387 ms/op 0.73
Array 250000 clone - spread 639.03 us/op 738.23 us/op 0.87
Array 250000 get(125000) 0.35300 ns/op 0.30300 ns/op 1.17
Array 250000 set(125000) 0.38800 ns/op 0.30600 ns/op 1.27
Array 250000 iterate all - loop 57.087 us/op 58.611 us/op 0.97
phase0 afterProcessEpoch - 250000 vs - 7PWei 39.632 ms/op 55.108 ms/op 0.72
Array.fill - length 1000000 2.0748 ms/op 2.4620 ms/op 0.84
Array push - length 1000000 7.8280 ms/op 9.4467 ms/op 0.83
Array.get 0.20791 ns/op 0.22181 ns/op 0.94
Uint8Array.get 0.24375 ns/op 0.24914 ns/op 0.98
phase0 beforeProcessEpoch - 250000 vs - 7PWei 12.265 ms/op 12.210 ms/op 1.00
altair processEpoch - mainnet_e81889 240.58 ms/op 286.10 ms/op 0.84
mainnet_e81889 - altair beforeProcessEpoch 19.307 ms/op 15.313 ms/op 1.26
mainnet_e81889 - altair processJustificationAndFinalization 5.0140 us/op 6.3660 us/op 0.79
mainnet_e81889 - altair processInactivityUpdates 3.7550 ms/op 3.7313 ms/op 1.01
mainnet_e81889 - altair processRewardsAndPenalties 16.311 ms/op 22.782 ms/op 0.72
mainnet_e81889 - altair processRegistryUpdates 636.00 ns/op 617.00 ns/op 1.03
mainnet_e81889 - altair processSlashings 217.00 ns/op 146.00 ns/op 1.49
mainnet_e81889 - altair processEth1DataReset 208.00 ns/op 146.00 ns/op 1.42
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.8077 ms/op 1.6343 ms/op 1.11
mainnet_e81889 - altair processSlashingsReset 944.00 ns/op 754.00 ns/op 1.25
mainnet_e81889 - altair processRandaoMixesReset 1.2470 us/op 1.4210 us/op 0.88
mainnet_e81889 - altair processHistoricalRootsUpdate 207.00 ns/op 146.00 ns/op 1.42
mainnet_e81889 - altair processParticipationFlagUpdates 516.00 ns/op 454.00 ns/op 1.14
mainnet_e81889 - altair processSyncCommitteeUpdates 187.00 ns/op 117.00 ns/op 1.60
mainnet_e81889 - altair afterProcessEpoch 41.462 ms/op 43.139 ms/op 0.96
capella processEpoch - mainnet_e217614 856.80 ms/op 816.41 ms/op 1.05
mainnet_e217614 - capella beforeProcessEpoch 64.154 ms/op 62.072 ms/op 1.03
mainnet_e217614 - capella processJustificationAndFinalization 7.0630 us/op 6.6370 us/op 1.06
mainnet_e217614 - capella processInactivityUpdates 18.706 ms/op 14.699 ms/op 1.27
mainnet_e217614 - capella processRewardsAndPenalties 99.518 ms/op 93.647 ms/op 1.06
mainnet_e217614 - capella processRegistryUpdates 4.8840 us/op 4.7380 us/op 1.03
mainnet_e217614 - capella processSlashings 221.00 ns/op 150.00 ns/op 1.47
mainnet_e217614 - capella processEth1DataReset 208.00 ns/op 149.00 ns/op 1.40
mainnet_e217614 - capella processEffectiveBalanceUpdates 21.089 ms/op 7.2104 ms/op 2.92
mainnet_e217614 - capella processSlashingsReset 777.00 ns/op 740.00 ns/op 1.05
mainnet_e217614 - capella processRandaoMixesReset 1.4900 us/op 1.3310 us/op 1.12
mainnet_e217614 - capella processHistoricalRootsUpdate 209.00 ns/op 147.00 ns/op 1.42
mainnet_e217614 - capella processParticipationFlagUpdates 594.00 ns/op 479.00 ns/op 1.24
mainnet_e217614 - capella afterProcessEpoch 114.06 ms/op 118.30 ms/op 0.96
phase0 processEpoch - mainnet_e58758 284.34 ms/op 301.64 ms/op 0.94
mainnet_e58758 - phase0 beforeProcessEpoch 68.138 ms/op 64.659 ms/op 1.05
mainnet_e58758 - phase0 processJustificationAndFinalization 6.4060 us/op 6.5500 us/op 0.98
mainnet_e58758 - phase0 processRewardsAndPenalties 16.374 ms/op 16.779 ms/op 0.98
mainnet_e58758 - phase0 processRegistryUpdates 2.4480 us/op 2.4090 us/op 1.02
mainnet_e58758 - phase0 processSlashings 329.00 ns/op 145.00 ns/op 2.27
mainnet_e58758 - phase0 processEth1DataReset 207.00 ns/op 142.00 ns/op 1.46
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.5174 ms/op 1.1372 ms/op 1.33
mainnet_e58758 - phase0 processSlashingsReset 921.00 ns/op 984.00 ns/op 0.94
mainnet_e58758 - phase0 processRandaoMixesReset 1.3270 us/op 1.3990 us/op 0.95
mainnet_e58758 - phase0 processHistoricalRootsUpdate 204.00 ns/op 146.00 ns/op 1.40
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.0690 us/op 1.0630 us/op 1.01
mainnet_e58758 - phase0 afterProcessEpoch 35.235 ms/op 35.489 ms/op 0.99
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.6521 ms/op 1.0409 ms/op 1.59
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.8599 ms/op 1.7149 ms/op 1.08
altair processInactivityUpdates - 250000 normalcase 10.818 ms/op 11.491 ms/op 0.94
altair processInactivityUpdates - 250000 worstcase 10.713 ms/op 11.903 ms/op 0.90
phase0 processRegistryUpdates - 250000 normalcase 2.4780 us/op 2.4470 us/op 1.01
phase0 processRegistryUpdates - 250000 badcase_full_deposits 143.12 us/op 154.15 us/op 0.93
phase0 processRegistryUpdates - 250000 worstcase 0.5 57.319 ms/op 62.147 ms/op 0.92
altair processRewardsAndPenalties - 250000 normalcase 14.030 ms/op 14.955 ms/op 0.94
altair processRewardsAndPenalties - 250000 worstcase 14.269 ms/op 13.565 ms/op 1.05
phase0 getAttestationDeltas - 250000 normalcase 13.653 ms/op 6.1868 ms/op 2.21
phase0 getAttestationDeltas - 250000 worstcase 6.1624 ms/op 9.9782 ms/op 0.62
phase0 processSlashings - 250000 worstcase 70.367 us/op 63.606 us/op 1.11
altair processSyncCommitteeUpdates - 250000 10.186 ms/op 10.686 ms/op 0.95
BeaconState.hashTreeRoot - No change 244.00 ns/op 184.00 ns/op 1.33
BeaconState.hashTreeRoot - 1 full validator 57.881 us/op 87.260 us/op 0.66
BeaconState.hashTreeRoot - 32 full validator 633.98 us/op 798.74 us/op 0.79
BeaconState.hashTreeRoot - 512 full validator 5.9649 ms/op 6.6308 ms/op 0.90
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 69.187 us/op 112.84 us/op 0.61
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.0476 ms/op 1.1376 ms/op 0.92
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 12.412 ms/op 13.285 ms/op 0.93
BeaconState.hashTreeRoot - 1 balances 53.865 us/op 59.630 us/op 0.90
BeaconState.hashTreeRoot - 32 balances 537.75 us/op 594.08 us/op 0.91
BeaconState.hashTreeRoot - 512 balances 4.5882 ms/op 4.9612 ms/op 0.92
BeaconState.hashTreeRoot - 250000 balances 101.50 ms/op 112.27 ms/op 0.90
aggregationBits - 2048 els - zipIndexesInBitList 25.809 us/op 21.107 us/op 1.22
regular array get 100000 times 23.044 us/op 24.043 us/op 0.96
wrappedArray get 100000 times 23.037 us/op 23.972 us/op 0.96
arrayWithProxy get 100000 times 12.627 ms/op 10.270 ms/op 1.23
ssz.Root.equals 21.739 ns/op 22.602 ns/op 0.96
byteArrayEquals 21.540 ns/op 22.400 ns/op 0.96
Buffer.compare 8.9690 ns/op 9.3380 ns/op 0.96
processSlot - 1 slots 8.4120 us/op 8.4310 us/op 1.00
processSlot - 32 slots 1.5804 ms/op 1.6877 ms/op 0.94
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 3.4697 ms/op 3.5206 ms/op 0.99
getCommitteeAssignments - req 1 vs - 250000 vc 1.6932 ms/op 1.7375 ms/op 0.97
getCommitteeAssignments - req 100 vs - 250000 vc 3.7634 ms/op 3.5440 ms/op 1.06
getCommitteeAssignments - req 1000 vs - 250000 vc 4.0134 ms/op 3.8354 ms/op 1.05
findModifiedValidators - 10000 modified validators 731.43 ms/op 804.77 ms/op 0.91
findModifiedValidators - 1000 modified validators 605.85 ms/op 462.14 ms/op 1.31
findModifiedValidators - 100 modified validators 391.10 ms/op 323.78 ms/op 1.21
findModifiedValidators - 10 modified validators 297.65 ms/op 259.60 ms/op 1.15
findModifiedValidators - 1 modified validators 154.91 ms/op 182.88 ms/op 0.85
findModifiedValidators - no difference 180.89 ms/op 206.81 ms/op 0.87
migrate state 1500000 validators, 3400 modified, 2000 new 2.9067 s/op 2.8562 s/op 1.02
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.2600 ns/op 3.8700 ns/op 1.10
state getBlockRootAtSlot - 250000 vs - 7PWei 347.04 ns/op 394.82 ns/op 0.88
computeProposerIndex 100000 validators 1.4210 ms/op 1.4497 ms/op 0.98
getNextSyncCommitteeIndices 1000 validators 2.9052 ms/op 3.0222 ms/op 0.96
getNextSyncCommitteeIndices 10000 validators 25.645 ms/op 26.979 ms/op 0.95
getNextSyncCommitteeIndices 100000 validators 84.463 ms/op 92.858 ms/op 0.91
computeProposers - vc 250000 561.36 us/op 577.69 us/op 0.97
computeEpochShuffling - vc 250000 39.995 ms/op 42.336 ms/op 0.94
getNextSyncCommittee - vc 250000 9.7017 ms/op 10.066 ms/op 0.96
nodejs block root to RootHex using toHex 138.64 ns/op 102.92 ns/op 1.35
nodejs block root to RootHex using toRootHex 75.367 ns/op 65.830 ns/op 1.14
nodejs fromHex(blob) 897.51 us/op 786.43 us/op 1.14
nodejs fromHexInto(blob) 663.51 us/op 663.88 us/op 1.00
nodejs block root to RootHex using the deprecated toHexString 1.0138 us/op 526.42 ns/op 1.93
nodejs byteArrayEquals 32 bytes (block root) 26.799 ns/op 26.672 ns/op 1.00
nodejs byteArrayEquals 48 bytes (pubkey) 39.648 ns/op 38.598 ns/op 1.03
nodejs byteArrayEquals 96 bytes (signature) 39.214 ns/op 37.808 ns/op 1.04
nodejs byteArrayEquals 1024 bytes 50.075 ns/op 44.974 ns/op 1.11
nodejs byteArrayEquals 131072 bytes (blob) 1.7985 us/op 1.8216 us/op 0.99
browser block root to RootHex using toHex 242.06 ns/op 149.68 ns/op 1.62
browser block root to RootHex using toRootHex 135.60 ns/op 135.37 ns/op 1.00
browser fromHex(blob) 1.8999 ms/op 1.6405 ms/op 1.16
browser fromHexInto(blob) 612.57 us/op 653.94 us/op 0.94
browser block root to RootHex using the deprecated toHexString 994.50 ns/op 366.60 ns/op 2.71
browser byteArrayEquals 32 bytes (block root) 28.496 ns/op 28.920 ns/op 0.99
browser byteArrayEquals 48 bytes (pubkey) 40.218 ns/op 40.876 ns/op 0.98
browser byteArrayEquals 96 bytes (signature) 75.054 ns/op 76.295 ns/op 0.98
browser byteArrayEquals 1024 bytes 766.11 ns/op 785.40 ns/op 0.98
browser byteArrayEquals 131072 bytes (blob) 96.144 us/op 98.482 us/op 0.98

by benchmarkbot/action

@matthewkeil matthewkeil added this to the Glamsterdam milestone Aug 5, 2026
@matthewkeil matthewkeil moved this to In Progress in Lodestar Team Coordination Aug 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

2 participants