Skip to content

fix: scan all proto array nodes when counting payload reveals#9676

Open
nflaig wants to merge 1 commit into
unstablefrom
nflaig/fix-payload-reveal-counts-scan
Open

fix: scan all proto array nodes when counting payload reveals#9676
nflaig wants to merge 1 commit into
unstablefrom
nflaig/fix-payload-reveal-counts-scan

Conversation

@nflaig

@nflaig nflaig commented Jul 17, 2026

Copy link
Copy Markdown
Member

Motivation

getPayloadRevealCounts (used by the builder circuit breaker) iterated the proto array backward and stopped at the first out-of-window block node, assuming nodes are ordered by slot. Nodes are in import order, not slot order, an older block can be imported after newer ones (a late block on a competing branch, or ancestors imported while resolving a heavier fork), so its PENDING node lands at the end of the array. The backward scan then breaks on that trailing out-of-window node and misses the in-window nodes inserted earlier, undercounting blocks present and faults.

The truncated counts can wrongly activate or deactivate the circuit breaker, which fails open (fewer faults observed) exactly during the instability where out-of-order imports are common, leading to the wrong bid source being selected.

Pointed out by codex in #9674 (comment)

Description

  • replace the early break with a full scan that skips out-of-window nodes, matching the pre-gloas getSlotsPresent
  • add a regression test importing an older block after newer in-window blocks

@nflaig
nflaig requested a review from a team as a code owner July 17, 2026 21:58
@gemini-code-assist

This comment was marked as spam.

@nflaig
nflaig requested a review from twoeths July 17, 2026 22:07
@github-actions

Copy link
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: a25730c Previous: 27da921 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.3893 ms/op 1.2362 ms/op 1.12
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 41.983 us/op 39.670 us/op 1.06
BLS verify - blst 678.45 us/op 751.55 us/op 0.90
BLS verifyMultipleSignatures 3 - blst 1.3998 ms/op 1.3564 ms/op 1.03
BLS verifyMultipleSignatures 8 - blst 2.2159 ms/op 2.1595 ms/op 1.03
BLS verifyMultipleSignatures 32 - blst 7.0924 ms/op 6.8164 ms/op 1.04
BLS verifyMultipleSignatures 64 - blst 13.781 ms/op 13.555 ms/op 1.02
BLS verifyMultipleSignatures 128 - blst 26.581 ms/op 25.874 ms/op 1.03
BLS deserializing 10000 signatures 669.39 ms/op 640.88 ms/op 1.04
BLS deserializing 100000 signatures 6.6811 s/op 6.3913 s/op 1.05
BLS verifyMultipleSignatures - same message - 3 - blst 798.24 us/op 804.75 us/op 0.99
BLS verifyMultipleSignatures - same message - 8 - blst 971.68 us/op 933.10 us/op 1.04
BLS verifyMultipleSignatures - same message - 32 - blst 1.5127 ms/op 1.5457 ms/op 0.98
BLS verifyMultipleSignatures - same message - 64 - blst 2.4716 ms/op 2.3648 ms/op 1.05
BLS verifyMultipleSignatures - same message - 128 - blst 4.0950 ms/op 4.0503 ms/op 1.01
BLS aggregatePubkeys 32 - blst 18.877 us/op 17.580 us/op 1.07
BLS aggregatePubkeys 128 - blst 67.021 us/op 62.618 us/op 1.07
getSlashingsAndExits - default max 55.872 us/op 54.658 us/op 1.02
getSlashingsAndExits - 2k 399.53 us/op 367.74 us/op 1.09
proposeBlockBody type=full, size=empty 630.61 us/op 638.74 us/op 0.99
isKnown best case - 1 super set check 166.00 ns/op 166.00 ns/op 1.00
isKnown normal case - 2 super set checks 164.00 ns/op 164.00 ns/op 1.00
isKnown worse case - 16 super set checks 167.00 ns/op 166.00 ns/op 1.01
validate api signedAggregateAndProof - struct 1.5479 ms/op 1.5062 ms/op 1.03
validate gossip signedAggregateAndProof - struct 1.5488 ms/op 1.5042 ms/op 1.03
batch validate gossip attestation - vc 640000 - chunk 32 106.35 us/op 106.35 us/op 1.00
batch validate gossip attestation - vc 640000 - chunk 64 93.896 us/op 92.630 us/op 1.01
batch validate gossip attestation - vc 640000 - chunk 128 90.669 us/op 86.025 us/op 1.05
batch validate gossip attestation - vc 640000 - chunk 256 84.958 us/op 82.400 us/op 1.03
bytes32 toHexString 309.00 ns/op 296.00 ns/op 1.04
bytes32 Buffer.toString(hex) 169.00 ns/op 161.00 ns/op 1.05
bytes32 Buffer.toString(hex) from Uint8Array 231.00 ns/op 233.00 ns/op 0.99
bytes32 Buffer.toString(hex) + 0x 164.00 ns/op 164.00 ns/op 1.00
Return object 10000 times 0.21870 ns/op 0.21090 ns/op 1.04
Throw Error 10000 times 3.3684 us/op 3.4511 us/op 0.98
toHex 105.64 ns/op 97.261 ns/op 1.09
Buffer.from 113.74 ns/op 88.599 ns/op 1.28
shared Buffer 61.201 ns/op 60.967 ns/op 1.00
fastMsgIdFn sha256 / 200 bytes 1.5060 us/op 1.4680 us/op 1.03
fastMsgIdFn h32 xxhash / 200 bytes 154.00 ns/op 152.00 ns/op 1.01
fastMsgIdFn h64 xxhash / 200 bytes 208.00 ns/op 202.00 ns/op 1.03
fastMsgIdFn sha256 / 1000 bytes 4.8770 us/op 4.7630 us/op 1.02
fastMsgIdFn h32 xxhash / 1000 bytes 245.00 ns/op 243.00 ns/op 1.01
fastMsgIdFn h64 xxhash / 1000 bytes 252.00 ns/op 250.00 ns/op 1.01
fastMsgIdFn sha256 / 10000 bytes 42.637 us/op 41.697 us/op 1.02
fastMsgIdFn h32 xxhash / 10000 bytes 1.2980 us/op 1.2710 us/op 1.02
fastMsgIdFn h64 xxhash / 10000 bytes 845.00 ns/op 830.00 ns/op 1.02
send data - 1000 256B messages 4.2776 ms/op 4.1716 ms/op 1.03
send data - 1000 512B messages 5.0411 ms/op 5.1064 ms/op 0.99
send data - 1000 1024B messages 5.5422 ms/op 5.5459 ms/op 1.00
send data - 1000 1200B messages 6.3924 ms/op 6.0571 ms/op 1.06
send data - 1000 2048B messages 8.1480 ms/op 15.662 ms/op 0.52
send data - 1000 4096B messages 38.981 ms/op 54.685 ms/op 0.71
send data - 1000 16384B messages 307.61 ms/op 262.20 ms/op 1.17
send data - 1000 65536B messages 918.12 ms/op 795.72 ms/op 1.15
enrSubnets - fastDeserialize 64 bits 760.00 ns/op 722.00 ns/op 1.05
enrSubnets - ssz BitVector 64 bits 262.00 ns/op 254.00 ns/op 1.03
enrSubnets - fastDeserialize 4 bits 102.00 ns/op 98.000 ns/op 1.04
enrSubnets - ssz BitVector 4 bits 261.00 ns/op 253.00 ns/op 1.03
prioritizePeers score -10:0 att 32-0.1 sync 2-0 207.60 us/op 200.23 us/op 1.04
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 251.66 us/op 228.56 us/op 1.10
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 353.88 us/op 338.72 us/op 1.04
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 611.29 us/op 593.40 us/op 1.03
prioritizePeers score 0:0 att 64-1 sync 4-1 714.70 us/op 688.85 us/op 1.04
array of 16000 items push then shift 1.3253 us/op 1.2873 us/op 1.03
LinkedList of 16000 items push then shift 6.9240 ns/op 6.8720 ns/op 1.01
array of 16000 items push then pop 70.182 ns/op 65.458 ns/op 1.07
LinkedList of 16000 items push then pop 6.1030 ns/op 5.8900 ns/op 1.04
array of 24000 items push then shift 1.9713 us/op 1.9002 us/op 1.04
LinkedList of 24000 items push then shift 7.1110 ns/op 6.5930 ns/op 1.08
array of 24000 items push then pop 98.200 ns/op 91.480 ns/op 1.07
LinkedList of 24000 items push then pop 6.0770 ns/op 5.8720 ns/op 1.03
intersect bitArray bitLen 8 4.7980 ns/op 4.7410 ns/op 1.01
intersect array and set length 8 30.398 ns/op 29.071 ns/op 1.05
intersect bitArray bitLen 128 24.837 ns/op 23.933 ns/op 1.04
intersect array and set length 128 507.34 ns/op 495.49 ns/op 1.02
bitArray.getTrueBitIndexes() bitLen 128 1.1190 us/op 1.0690 us/op 1.05
bitArray.getTrueBitIndexes() bitLen 248 2.0820 us/op 1.8740 us/op 1.11
bitArray.getTrueBitIndexes() bitLen 512 4.2610 us/op 3.7640 us/op 1.13
Full columns - reconstruct all 6 blobs 115.71 us/op 150.78 us/op 0.77
Full columns - reconstruct half of the blobs out of 6 96.923 us/op 93.882 us/op 1.03
Full columns - reconstruct single blob out of 6 37.501 us/op 51.702 us/op 0.73
Half columns - reconstruct all 6 blobs 400.87 ms/op 380.30 ms/op 1.05
Half columns - reconstruct half of the blobs out of 6 194.19 ms/op 189.97 ms/op 1.02
Half columns - reconstruct single blob out of 6 68.472 ms/op 66.915 ms/op 1.02
Set add up to 64 items then delete first 1.7769 us/op 1.6418 us/op 1.08
OrderedSet add up to 64 items then delete first 2.6306 us/op 2.5336 us/op 1.04
Set add up to 64 items then delete last 1.9706 us/op 1.8865 us/op 1.04
OrderedSet add up to 64 items then delete last 2.8912 us/op 2.7940 us/op 1.03
Set add up to 64 items then delete middle 1.9756 us/op 1.8804 us/op 1.05
OrderedSet add up to 64 items then delete middle 4.3841 us/op 4.3006 us/op 1.02
Set add up to 128 items then delete first 3.9530 us/op 3.7476 us/op 1.05
OrderedSet add up to 128 items then delete first 5.9653 us/op 5.7827 us/op 1.03
Set add up to 128 items then delete last 3.8397 us/op 3.7287 us/op 1.03
OrderedSet add up to 128 items then delete last 5.6108 us/op 5.5197 us/op 1.02
Set add up to 128 items then delete middle 3.7555 us/op 3.5942 us/op 1.04
OrderedSet add up to 128 items then delete middle 11.826 us/op 11.467 us/op 1.03
Set add up to 256 items then delete first 7.6677 us/op 7.6934 us/op 1.00
OrderedSet add up to 256 items then delete first 12.124 us/op 11.795 us/op 1.03
Set add up to 256 items then delete last 7.5778 us/op 7.1251 us/op 1.06
OrderedSet add up to 256 items then delete last 11.610 us/op 10.918 us/op 1.06
Set add up to 256 items then delete middle 7.5917 us/op 7.1051 us/op 1.07
OrderedSet add up to 256 items then delete middle 36.690 us/op 34.079 us/op 1.08
runFastConfirmationRules vc:100000 bc:96 eq:0 4.9559 ms/op 4.4876 ms/op 1.10
runFastConfirmationRules vc:600000 bc:96 eq:0 35.259 ms/op 33.985 ms/op 1.04
runFastConfirmationRules vc:1000000 bc:96 eq:0 59.665 ms/op 57.236 ms/op 1.04
runFastConfirmationRules vc:600000 bc:320 eq:0 35.907 ms/op 34.014 ms/op 1.06
runFastConfirmationRules vc:100000 bc:96 eq:1000 1.3727 s/op 1.1447 s/op 1.20
pass gossip attestations to forkchoice per slot 2.7839 ms/op 2.6024 ms/op 1.07
forkChoice updateHead vc 100000 bc 64 eq 0 427.11 us/op 414.07 us/op 1.03
forkChoice updateHead vc 600000 bc 64 eq 0 2.5559 ms/op 2.4896 ms/op 1.03
forkChoice updateHead vc 1000000 bc 64 eq 0 4.3003 ms/op 4.1295 ms/op 1.04
forkChoice updateHead vc 600000 bc 320 eq 0 2.6308 ms/op 2.4877 ms/op 1.06
forkChoice updateHead vc 600000 bc 1200 eq 0 2.6828 ms/op 2.4913 ms/op 1.08
forkChoice updateHead vc 600000 bc 7200 eq 0 2.9358 ms/op 2.8884 ms/op 1.02
forkChoice updateHead vc 600000 bc 64 eq 1000 2.5973 ms/op 2.4493 ms/op 1.06
forkChoice updateHead vc 600000 bc 64 eq 10000 2.6402 ms/op 2.5434 ms/op 1.04
forkChoice updateHead vc 600000 bc 64 eq 300000 6.9155 ms/op 6.5508 ms/op 1.06
computeDeltas 1400000 validators 0% inactive 12.694 ms/op 12.187 ms/op 1.04
computeDeltas 1400000 validators 10% inactive 12.020 ms/op 11.618 ms/op 1.03
computeDeltas 1400000 validators 20% inactive 11.313 ms/op 10.978 ms/op 1.03
computeDeltas 1400000 validators 50% inactive 9.2001 ms/op 8.8811 ms/op 1.04
computeDeltas 2100000 validators 0% inactive 18.906 ms/op 18.362 ms/op 1.03
computeDeltas 2100000 validators 10% inactive 17.948 ms/op 17.647 ms/op 1.02
computeDeltas 2100000 validators 20% inactive 16.992 ms/op 16.526 ms/op 1.03
computeDeltas 2100000 validators 50% inactive 13.164 ms/op 11.024 ms/op 1.19
altair processAttestation - 250000 vs - 7PWei normalcase 1.7996 ms/op 1.6719 ms/op 1.08
altair processAttestation - 250000 vs - 7PWei worstcase 2.4687 ms/op 2.4184 ms/op 1.02
altair processAttestation - setStatus - 1/6 committees join 104.29 us/op 103.86 us/op 1.00
altair processAttestation - setStatus - 1/3 committees join 203.41 us/op 195.30 us/op 1.04
altair processAttestation - setStatus - 1/2 committees join 291.64 us/op 283.62 us/op 1.03
altair processAttestation - setStatus - 2/3 committees join 388.54 us/op 364.24 us/op 1.07
altair processAttestation - setStatus - 4/5 committees join 530.15 us/op 504.04 us/op 1.05
altair processAttestation - setStatus - 100% committees join 625.42 us/op 603.02 us/op 1.04
altair processBlock - 250000 vs - 7PWei normalcase 3.2064 ms/op 2.9146 ms/op 1.10
altair processBlock - 250000 vs - 7PWei normalcase hashState 12.935 ms/op 11.875 ms/op 1.09
altair processBlock - 250000 vs - 7PWei worstcase 22.137 ms/op 19.820 ms/op 1.12
altair processBlock - 250000 vs - 7PWei worstcase hashState 42.269 ms/op 38.342 ms/op 1.10
phase0 processBlock - 250000 vs - 7PWei normalcase 1.4132 ms/op 1.2888 ms/op 1.10
phase0 processBlock - 250000 vs - 7PWei worstcase 17.758 ms/op 16.086 ms/op 1.10
altair processEth1Data - 250000 vs - 7PWei normalcase 301.56 us/op 297.18 us/op 1.01
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.4270 us/op 3.1990 us/op 1.07
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 21.335 us/op 20.926 us/op 1.02
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 5.6580 us/op 6.0180 us/op 0.94
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 4.2670 us/op 3.7990 us/op 1.12
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 95.191 us/op 93.085 us/op 1.02
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.4118 ms/op 1.4107 ms/op 1.00
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.8743 ms/op 1.8769 ms/op 1.00
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8696 ms/op 1.8836 ms/op 0.99
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.7205 ms/op 3.7262 ms/op 1.00
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.1185 ms/op 2.0850 ms/op 1.02
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.1142 ms/op 4.0405 ms/op 1.02
Tree 40 250000 create 320.69 ms/op 310.29 ms/op 1.03
Tree 40 250000 get(125000) 104.90 ns/op 95.067 ns/op 1.10
Tree 40 250000 set(125000) 1.0841 us/op 1.0246 us/op 1.06
Tree 40 250000 toArray() 9.4046 ms/op 9.0260 ms/op 1.04
Tree 40 250000 iterate all - toArray() + loop 9.6312 ms/op 9.2267 ms/op 1.04
Tree 40 250000 iterate all - get(i) 37.434 ms/op 34.305 ms/op 1.09
Array 250000 create 2.2698 ms/op 2.1658 ms/op 1.05
Array 250000 clone - spread 726.13 us/op 671.50 us/op 1.08
Array 250000 get(125000) 0.30500 ns/op 0.29500 ns/op 1.03
Array 250000 set(125000) 0.30700 ns/op 0.29600 ns/op 1.04
Array 250000 iterate all - loop 60.090 us/op 57.806 us/op 1.04
phase0 afterProcessEpoch - 250000 vs - 7PWei 41.466 ms/op 61.007 ms/op 0.68
Array.fill - length 1000000 2.5127 ms/op 2.2202 ms/op 1.13
Array push - length 1000000 8.5777 ms/op 8.1796 ms/op 1.05
Array.get 0.21773 ns/op 0.20575 ns/op 1.06
Uint8Array.get 0.25047 ns/op 0.25414 ns/op 0.99
phase0 beforeProcessEpoch - 250000 vs - 7PWei 14.818 ms/op 16.292 ms/op 0.91
altair processEpoch - mainnet_e81889 279.61 ms/op 261.18 ms/op 1.07
mainnet_e81889 - altair beforeProcessEpoch 38.082 ms/op 19.969 ms/op 1.91
mainnet_e81889 - altair processJustificationAndFinalization 5.7550 us/op 5.6180 us/op 1.02
mainnet_e81889 - altair processInactivityUpdates 3.7488 ms/op 3.4682 ms/op 1.08
mainnet_e81889 - altair processRewardsAndPenalties 18.800 ms/op 18.019 ms/op 1.04
mainnet_e81889 - altair processRegistryUpdates 550.00 ns/op 565.00 ns/op 0.97
mainnet_e81889 - altair processSlashings 134.00 ns/op 156.00 ns/op 0.86
mainnet_e81889 - altair processEth1DataReset 130.00 ns/op 146.00 ns/op 0.89
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.6643 ms/op 1.1921 ms/op 1.40
mainnet_e81889 - altair processSlashingsReset 719.00 ns/op 746.00 ns/op 0.96
mainnet_e81889 - altair processRandaoMixesReset 1.1430 us/op 1.0950 us/op 1.04
mainnet_e81889 - altair processHistoricalRootsUpdate 134.00 ns/op 149.00 ns/op 0.90
mainnet_e81889 - altair processParticipationFlagUpdates 433.00 ns/op 432.00 ns/op 1.00
mainnet_e81889 - altair processSyncCommitteeUpdates 104.00 ns/op 104.00 ns/op 1.00
mainnet_e81889 - altair afterProcessEpoch 42.614 ms/op 43.315 ms/op 0.98
capella processEpoch - mainnet_e217614 821.00 ms/op 764.76 ms/op 1.07
mainnet_e217614 - capella beforeProcessEpoch 60.255 ms/op 55.580 ms/op 1.08
mainnet_e217614 - capella processJustificationAndFinalization 5.1990 us/op 5.4760 us/op 0.95
mainnet_e217614 - capella processInactivityUpdates 12.311 ms/op 12.299 ms/op 1.00
mainnet_e217614 - capella processRewardsAndPenalties 92.728 ms/op 91.491 ms/op 1.01
mainnet_e217614 - capella processRegistryUpdates 4.5300 us/op 4.4520 us/op 1.02
mainnet_e217614 - capella processSlashings 133.00 ns/op 147.00 ns/op 0.90
mainnet_e217614 - capella processEth1DataReset 143.00 ns/op 145.00 ns/op 0.99
mainnet_e217614 - capella processEffectiveBalanceUpdates 7.2462 ms/op 5.7287 ms/op 1.26
mainnet_e217614 - capella processSlashingsReset 699.00 ns/op 721.00 ns/op 0.97
mainnet_e217614 - capella processRandaoMixesReset 1.1780 us/op 1.2290 us/op 0.96
mainnet_e217614 - capella processHistoricalRootsUpdate 142.00 ns/op 147.00 ns/op 0.97
mainnet_e217614 - capella processParticipationFlagUpdates 439.00 ns/op 434.00 ns/op 1.01
mainnet_e217614 - capella afterProcessEpoch 108.72 ms/op 110.10 ms/op 0.99
phase0 processEpoch - mainnet_e58758 277.28 ms/op 278.06 ms/op 1.00
mainnet_e58758 - phase0 beforeProcessEpoch 54.227 ms/op 54.040 ms/op 1.00
mainnet_e58758 - phase0 processJustificationAndFinalization 5.1600 us/op 5.6140 us/op 0.92
mainnet_e58758 - phase0 processRewardsAndPenalties 16.413 ms/op 15.257 ms/op 1.08
mainnet_e58758 - phase0 processRegistryUpdates 2.3060 us/op 4.4560 us/op 0.52
mainnet_e58758 - phase0 processSlashings 136.00 ns/op 144.00 ns/op 0.94
mainnet_e58758 - phase0 processEth1DataReset 396.00 ns/op 145.00 ns/op 2.73
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 905.04 us/op 826.43 us/op 1.10
mainnet_e58758 - phase0 processSlashingsReset 892.00 ns/op 828.00 ns/op 1.08
mainnet_e58758 - phase0 processRandaoMixesReset 1.1440 us/op 1.0910 us/op 1.05
mainnet_e58758 - phase0 processHistoricalRootsUpdate 137.00 ns/op 146.00 ns/op 0.94
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.0600 us/op 1.0110 us/op 1.05
mainnet_e58758 - phase0 afterProcessEpoch 33.896 ms/op 33.596 ms/op 1.01
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.1208 ms/op 1.0119 ms/op 1.11
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.7788 ms/op 1.7887 ms/op 0.99
altair processInactivityUpdates - 250000 normalcase 12.385 ms/op 10.632 ms/op 1.16
altair processInactivityUpdates - 250000 worstcase 12.533 ms/op 11.186 ms/op 1.12
phase0 processRegistryUpdates - 250000 normalcase 2.4930 us/op 2.3270 us/op 1.07
phase0 processRegistryUpdates - 250000 badcase_full_deposits 150.30 us/op 140.89 us/op 1.07
phase0 processRegistryUpdates - 250000 worstcase 0.5 59.095 ms/op 61.334 ms/op 0.96
altair processRewardsAndPenalties - 250000 normalcase 14.736 ms/op 15.776 ms/op 0.93
altair processRewardsAndPenalties - 250000 worstcase 13.884 ms/op 15.059 ms/op 0.92
phase0 getAttestationDeltas - 250000 normalcase 5.4165 ms/op 8.7563 ms/op 0.62
phase0 getAttestationDeltas - 250000 worstcase 5.4461 ms/op 8.6709 ms/op 0.63
phase0 processSlashings - 250000 worstcase 61.111 us/op 63.346 us/op 0.96
altair processSyncCommitteeUpdates - 250000 10.251 ms/op 10.235 ms/op 1.00
BeaconState.hashTreeRoot - No change 167.00 ns/op 174.00 ns/op 0.96
BeaconState.hashTreeRoot - 1 full validator 76.767 us/op 71.694 us/op 1.07
BeaconState.hashTreeRoot - 32 full validator 875.94 us/op 859.62 us/op 1.02
BeaconState.hashTreeRoot - 512 full validator 6.2177 ms/op 6.1558 ms/op 1.01
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 91.776 us/op 83.298 us/op 1.10
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.3721 ms/op 1.2731 ms/op 1.08
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 14.865 ms/op 14.652 ms/op 1.01
BeaconState.hashTreeRoot - 1 balances 70.926 us/op 63.223 us/op 1.12
BeaconState.hashTreeRoot - 32 balances 573.52 us/op 741.93 us/op 0.77
BeaconState.hashTreeRoot - 512 balances 4.6923 ms/op 4.7887 ms/op 0.98
BeaconState.hashTreeRoot - 250000 balances 115.22 ms/op 113.88 ms/op 1.01
aggregationBits - 2048 els - zipIndexesInBitList 21.066 us/op 20.060 us/op 1.05
regular array get 100000 times 23.195 us/op 23.476 us/op 0.99
wrappedArray get 100000 times 23.494 us/op 23.452 us/op 1.00
arrayWithProxy get 100000 times 10.615 ms/op 10.484 ms/op 1.01
ssz.Root.equals 21.840 ns/op 21.800 ns/op 1.00
byteArrayEquals 21.644 ns/op 21.544 ns/op 1.00
Buffer.compare 9.0650 ns/op 8.9100 ns/op 1.02
processSlot - 1 slots 8.1890 us/op 8.3360 us/op 0.98
processSlot - 32 slots 1.5560 ms/op 1.5354 ms/op 1.01
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 2.6857 ms/op 2.8076 ms/op 0.96
getCommitteeAssignments - req 1 vs - 250000 vc 1.7062 ms/op 1.6868 ms/op 1.01
getCommitteeAssignments - req 100 vs - 250000 vc 3.4484 ms/op 3.4555 ms/op 1.00
getCommitteeAssignments - req 1000 vs - 250000 vc 3.7107 ms/op 3.7030 ms/op 1.00
findModifiedValidators - 10000 modified validators 772.63 ms/op 757.44 ms/op 1.02
findModifiedValidators - 1000 modified validators 547.10 ms/op 520.40 ms/op 1.05
findModifiedValidators - 100 modified validators 374.01 ms/op 306.47 ms/op 1.22
findModifiedValidators - 10 modified validators 180.34 ms/op 258.46 ms/op 0.70
findModifiedValidators - 1 modified validators 214.87 ms/op 192.58 ms/op 1.12
findModifiedValidators - no difference 170.84 ms/op 157.70 ms/op 1.08
migrate state 1500000 validators, 3400 modified, 2000 new 2.8461 s/op 3.2322 s/op 0.88
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.8200 ns/op 3.7600 ns/op 1.02
state getBlockRootAtSlot - 250000 vs - 7PWei 363.43 ns/op 283.09 ns/op 1.28
computeProposerIndex 100000 validators 1.3107 ms/op 1.4434 ms/op 0.91
getNextSyncCommitteeIndices 1000 validators 2.8717 ms/op 2.9166 ms/op 0.98
getNextSyncCommitteeIndices 10000 validators 25.305 ms/op 27.001 ms/op 0.94
getNextSyncCommitteeIndices 100000 validators 84.507 ms/op 89.673 ms/op 0.94
computeProposers - vc 250000 551.54 us/op 557.58 us/op 0.99
computeEpochShuffling - vc 250000 40.643 ms/op 40.495 ms/op 1.00
getNextSyncCommittee - vc 250000 9.5809 ms/op 9.5625 ms/op 1.00
nodejs block root to RootHex using toHex 107.58 ns/op 96.027 ns/op 1.12
nodejs block root to RootHex using toRootHex 69.484 ns/op 63.244 ns/op 1.10
nodejs fromHex(blob) 900.48 us/op 790.43 us/op 1.14
nodejs fromHexInto(blob) 666.72 us/op 635.07 us/op 1.05
nodejs block root to RootHex using the deprecated toHexString 575.89 ns/op 510.43 ns/op 1.13
nodejs byteArrayEquals 32 bytes (block root) 25.915 ns/op 26.455 ns/op 0.98
nodejs byteArrayEquals 48 bytes (pubkey) 37.341 ns/op 38.224 ns/op 0.98
nodejs byteArrayEquals 96 bytes (signature) 40.516 ns/op 35.431 ns/op 1.14
nodejs byteArrayEquals 1024 bytes 43.561 ns/op 45.413 ns/op 0.96
nodejs byteArrayEquals 131072 bytes (blob) 1.7579 us/op 1.7879 us/op 0.98
browser block root to RootHex using toHex 147.25 ns/op 146.84 ns/op 1.00
browser block root to RootHex using toRootHex 131.39 ns/op 132.88 ns/op 0.99
browser fromHex(blob) 1.5971 ms/op 1.6701 ms/op 0.96
browser fromHexInto(blob) 667.55 us/op 632.02 us/op 1.06
browser block root to RootHex using the deprecated toHexString 384.10 ns/op 350.01 ns/op 1.10
browser byteArrayEquals 32 bytes (block root) 27.797 ns/op 28.442 ns/op 0.98
browser byteArrayEquals 48 bytes (pubkey) 39.072 ns/op 40.033 ns/op 0.98
browser byteArrayEquals 96 bytes (signature) 73.474 ns/op 74.679 ns/op 0.98
browser byteArrayEquals 1024 bytes 744.02 ns/op 767.09 ns/op 0.97
browser byteArrayEquals 131072 bytes (blob) 93.798 us/op 96.522 us/op 0.97

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.

3 participants