Skip to content

feat: count signed repeat proposals as proposer equivocations - #10082

Draft
nflaig wants to merge 1 commit into
unstablefrom
nflaig/proposer-equivocation-record
Draft

nflaig wants to merge 1 commit into
unstablefrom
nflaig/proposer-equivocation-record

Conversation

@nflaig

@nflaig nflaig commented Sep 14, 2026

Copy link
Copy Markdown
Member

should_apply_proposer_boost and is_proposer_equivocation read proposer equivocations from store.blocks, so only valid blocks count. Nodes have to bound how many repeat proposals they fully validate, we import at most one alternate over gossip (#9805, #9795), and with that bound the view depends on arrival order. Given blocks A, B, C from one proposer with C invalid, nodes that see A and B first record the equivocation while nodes that see A and C first never learn that B exists, so the two groups disagree on the boost of the next block and on the equivocation reorg.

Counting signed blocks instead removes that. Two signature checks per proposer and slot are all a node ever does, and since siblings arrive in order the first two signed roots are always the most timely ones, so a two-root record per proposer and slot answers should_apply_proposer_boost exactly. Every effect of a junk signed sibling lands on the attacker's own slot, the next proposer sees the same early sibling as the attesters and reorgs a weak head as get_proposer_head already asks it to.

  • fork choice keeps a record of signed block roots per slot and proposer with their PTC timeliness, capped at the first two, pruned below the finalized epoch
  • onBlock records imported blocks, the new onSignedBlockHeader records blocks that were seen with a valid proposer signature but not imported
  • hasEquivocatingBlock reads that record instead of scanning the proto array
  • the gossip handler records every block whose proposer signature was verified, imported or not, with isPtcTimely evaluated at arrival

This deviates from the current spec text, which is why it is a draft. The spec change is a store field of signed sibling roots and their timeliness fed by a handler taking a signature-valid header, like on_attester_slashing, with the two fork choice functions reading it and the p2p spec noting that ignored repeat proposals feed it. Supersedes #10070.

@github-actions

github-actions Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Performance Report

馃殌馃殌 Significant benchmark improvement detected

Benchmark suite Current: df12e21 Previous: 042c961 Ratio
archive index / 1 slots / 8 columns / legacy 88.596 us/op 291.92 us/op 0.30
Full benchmark results
Benchmark suite Current: df12e21 Previous: 042c961 Ratio
getPubkeys - native cache - req 1000 vs - 250000 vc 458.70 us/op 509.47 us/op 0.90
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 39.100 us/op 36.392 us/op 1.07
BLS verify - blst 880.92 us/op 840.28 us/op 1.05
BLS verifyMultipleSignatures 3 - blst 1.3176 ms/op 1.4115 ms/op 0.93
BLS verifyMultipleSignatures 8 - blst 2.2163 ms/op 2.2001 ms/op 1.01
BLS verifyMultipleSignatures 32 - blst 7.1696 ms/op 7.2846 ms/op 0.98
BLS verifyMultipleSignatures 64 - blst 13.801 ms/op 14.110 ms/op 0.98
BLS verifyMultipleSignatures 128 - blst 26.177 ms/op 26.750 ms/op 0.98
BLS deserializing 10000 signatures 631.23 ms/op 599.91 ms/op 1.05
BLS deserializing 100000 signatures 6.3479 s/op 6.0980 s/op 1.04
BLS verifyMultipleSignatures - same message - 3 - blst 936.72 us/op 929.53 us/op 1.01
BLS verifyMultipleSignatures - same message - 8 - blst 1.0696 ms/op 1.0535 ms/op 1.02
BLS verifyMultipleSignatures - same message - 32 - blst 1.6756 ms/op 1.6521 ms/op 1.01
BLS verifyMultipleSignatures - same message - 64 - blst 2.4925 ms/op 2.4463 ms/op 1.02
BLS verifyMultipleSignatures - same message - 128 - blst 4.1566 ms/op 4.0163 ms/op 1.03
BLS aggregatePubkeys 32 - blst 20.374 us/op 19.559 us/op 1.04
BLS aggregatePubkeys 128 - blst 74.028 us/op 70.550 us/op 1.05
getSlashingsAndExits - default max 43.505 us/op 37.961 us/op 1.15
getSlashingsAndExits - 2k 367.36 us/op 334.51 us/op 1.10
proposeBlockBody type=full, size=empty 509.57 us/op 444.18 us/op 1.15
isKnown best case - 1 super set check 188.00 ns/op 195.00 ns/op 0.96
isKnown normal case - 2 super set checks 155.00 ns/op 168.00 ns/op 0.92
isKnown worse case - 16 super set checks 158.00 ns/op 160.00 ns/op 0.99
validate api signedAggregateAndProof - struct 1.4960 ms/op 1.4531 ms/op 1.03
validate gossip signedAggregateAndProof - struct 1.4973 ms/op 1.5605 ms/op 0.96
batch validate gossip attestation - vc 640000 - chunk 32 128.04 us/op 120.88 us/op 1.06
batch validate gossip attestation - vc 640000 - chunk 64 112.47 us/op 102.51 us/op 1.10
batch validate gossip attestation - vc 640000 - chunk 128 102.34 us/op 94.312 us/op 1.09
batch validate gossip attestation - vc 640000 - chunk 256 100.30 us/op 94.984 us/op 1.06
bytes32 toHexString 283.00 ns/op 273.00 ns/op 1.04
bytes32 Buffer.toString(hex) 158.00 ns/op 168.00 ns/op 0.94
bytes32 Buffer.toString(hex) from Uint8Array 234.00 ns/op 223.00 ns/op 1.05
bytes32 Buffer.toString(hex) + 0x 160.00 ns/op 162.00 ns/op 0.99
Return object 10000 times 0.21570 ns/op 0.20170 ns/op 1.07
Throw Error 10000 times 3.5563 us/op 3.1424 us/op 1.13
toHex 93.873 ns/op 90.565 ns/op 1.04
Buffer.from 85.309 ns/op 81.833 ns/op 1.04
shared Buffer 57.202 ns/op 55.534 ns/op 1.03
fastMsgIdFn sha256 / 200 bytes 1.4390 us/op 1.3970 us/op 1.03
fastMsgIdFn h32 xxhash / 200 bytes 152.00 ns/op 153.00 ns/op 0.99
fastMsgIdFn h64 xxhash / 200 bytes 201.00 ns/op 194.00 ns/op 1.04
fastMsgIdFn sha256 / 1000 bytes 4.6670 us/op 4.4560 us/op 1.05
fastMsgIdFn h32 xxhash / 1000 bytes 244.00 ns/op 235.00 ns/op 1.04
fastMsgIdFn h64 xxhash / 1000 bytes 246.00 ns/op 241.00 ns/op 1.02
fastMsgIdFn sha256 / 10000 bytes 41.190 us/op 39.370 us/op 1.05
fastMsgIdFn h32 xxhash / 10000 bytes 1.2610 us/op 1.2160 us/op 1.04
fastMsgIdFn h64 xxhash / 10000 bytes 827.00 ns/op 794.00 ns/op 1.04
send data - 1000 256B messages 4.8412 ms/op 4.1179 ms/op 1.18
send data - 1000 512B messages 5.6898 ms/op 4.8670 ms/op 1.17
send data - 1000 1024B messages 5.7014 ms/op 5.3303 ms/op 1.07
send data - 1000 1200B messages 6.4043 ms/op 6.1379 ms/op 1.04
send data - 1000 2048B messages 16.637 ms/op 9.9054 ms/op 1.68
send data - 1000 4096B messages 27.486 ms/op 46.750 ms/op 0.59
send data - 1000 16384B messages 432.28 ms/op 480.90 ms/op 0.90
send data - 1000 65536B messages 1.7663 s/op 1.7466 s/op 1.01
enrSubnets - fastDeserialize 64 bits 769.00 ns/op 791.00 ns/op 0.97
enrSubnets - ssz BitVector 64 bits 253.00 ns/op 323.00 ns/op 0.78
enrSubnets - fastDeserialize 4 bits 100.00 ns/op 99.000 ns/op 1.01
enrSubnets - ssz BitVector 4 bits 256.00 ns/op 261.00 ns/op 0.98
prioritizePeers score -10:0 att 32-0.1 sync 2-0 204.05 us/op 213.57 us/op 0.96
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 232.09 us/op 217.44 us/op 1.07
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 334.16 us/op 331.38 us/op 1.01
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 599.17 us/op 560.26 us/op 1.07
prioritizePeers score 0:0 att 64-1 sync 4-1 710.37 us/op 688.79 us/op 1.03
archive index / 1 slot / archive root index lookup 17.975 us/op 21.827 us/op 0.82
archive index / 1 slot / archive block lookup, decode and hash 2.9457 ms/op 2.6895 ms/op 1.10
archive index / 1 slots / 1 columns / legacy 24.997 us/op 26.326 us/op 0.95
archive index / 1 slots / 1 columns / flat files 153.16 us/op 190.16 us/op 0.81
archive index / 1 slots / 8 columns / legacy 88.596 us/op 291.92 us/op 0.30
archive index / 1 slots / 8 columns / flat files 1.0500 ms/op 390.37 us/op 2.69
archive index / 1 slots / 128 columns / legacy 13.006 ms/op 10.799 ms/op 1.20
archive index / 1 slots / 128 columns / flat files 5.8252 ms/op 5.2780 ms/op 1.10
archive index / 8 slots / 1 columns / legacy 207.88 us/op 178.09 us/op 1.17
archive index / 8 slots / 1 columns / flat files 1.1599 ms/op 1.3468 ms/op 0.86
archive index / 8 slots / 8 columns / legacy 1.4543 ms/op 924.98 us/op 1.57
archive index / 8 slots / 8 columns / flat files 4.4167 ms/op 3.3309 ms/op 1.33
archive index / 8 slots / 128 columns / legacy 97.317 ms/op 92.001 ms/op 1.06
archive index / 8 slots / 128 columns / flat files 299.93 ms/op 217.84 ms/op 1.38
head state / 1 slot / archive root index lookup 18.809 us/op 21.693 us/op 0.87
head state / 1 slot / archive block lookup, decode and hash 2.9430 ms/op 2.7340 ms/op 1.08
head state / 1 slots / 1 columns / legacy 24.463 us/op 24.230 us/op 1.01
head state / 1 slots / 1 columns / flat files 133.43 us/op 162.64 us/op 0.82
head state / 1 slots / 8 columns / legacy 85.479 us/op 84.224 us/op 1.01
head state / 1 slots / 8 columns / flat files 367.05 us/op 369.14 us/op 0.99
head state / 1 slots / 128 columns / legacy 11.978 ms/op 10.039 ms/op 1.19
head state / 1 slots / 128 columns / flat files 6.7631 ms/op 4.4091 ms/op 1.53
head state / 8 slots / 1 columns / legacy 206.41 us/op 180.05 us/op 1.15
head state / 8 slots / 1 columns / flat files 1.0707 ms/op 1.1111 ms/op 0.96
head state / 8 slots / 8 columns / legacy 953.00 us/op 685.11 us/op 1.39
head state / 8 slots / 8 columns / flat files 4.1129 ms/op 3.0014 ms/op 1.37
head state / 8 slots / 128 columns / legacy 117.26 ms/op 77.576 ms/op 1.51
head state / 8 slots / 128 columns / flat files 322.96 ms/op 230.87 ms/op 1.40
array of 16000 items push then shift 1.2710 us/op 1.2894 us/op 0.99
LinkedList of 16000 items push then shift 8.0060 ns/op 6.7810 ns/op 1.18
array of 16000 items push then pop 83.621 ns/op 77.960 ns/op 1.07
LinkedList of 16000 items push then pop 6.3190 ns/op 6.0000 ns/op 1.05
array of 24000 items push then shift 1.8579 us/op 1.8204 us/op 1.02
LinkedList of 24000 items push then shift 7.8280 ns/op 7.2630 ns/op 1.08
array of 24000 items push then pop 120.98 ns/op 111.17 ns/op 1.09
LinkedList of 24000 items push then pop 6.4900 ns/op 6.0490 ns/op 1.07
intersect bitArray bitLen 8 3.8800 ns/op 3.7430 ns/op 1.04
intersect array and set length 8 29.480 ns/op 28.230 ns/op 1.04
intersect bitArray bitLen 128 23.345 ns/op 22.362 ns/op 1.04
intersect array and set length 128 495.77 ns/op 476.90 ns/op 1.04
bitArray.getTrueBitIndexes() bitLen 128 939.00 ns/op 905.00 ns/op 1.04
bitArray.getTrueBitIndexes() bitLen 248 1.6950 us/op 1.6580 us/op 1.02
bitArray.getTrueBitIndexes() bitLen 512 3.5420 us/op 3.4800 us/op 1.02
Full columns - reconstruct all 6 blobs 175.45 us/op 152.03 us/op 1.15
Full columns - reconstruct half of the blobs out of 6 82.263 us/op 68.669 us/op 1.20
Full columns - reconstruct single blob out of 6 36.672 us/op 33.697 us/op 1.09
Half columns - reconstruct all 6 blobs 392.49 ms/op 389.39 ms/op 1.01
Half columns - reconstruct half of the blobs out of 6 196.12 ms/op 194.16 ms/op 1.01
Half columns - reconstruct single blob out of 6 70.433 ms/op 69.153 ms/op 1.02
Set add up to 64 items then delete first 2.2226 us/op 1.6841 us/op 1.32
OrderedSet add up to 64 items then delete first 3.5140 us/op 2.5506 us/op 1.38
Set add up to 64 items then delete last 2.4132 us/op 1.9269 us/op 1.25
OrderedSet add up to 64 items then delete last 3.5763 us/op 2.8219 us/op 1.27
Set add up to 64 items then delete middle 2.4190 us/op 1.8998 us/op 1.27
OrderedSet add up to 64 items then delete middle 6.0574 us/op 4.2250 us/op 1.43
Set add up to 128 items then delete first 4.9146 us/op 3.7283 us/op 1.32
OrderedSet add up to 128 items then delete first 7.0851 us/op 6.2267 us/op 1.14
Set add up to 128 items then delete last 4.3267 us/op 3.6703 us/op 1.18
OrderedSet add up to 128 items then delete last 7.5554 us/op 5.3879 us/op 1.40
Set add up to 128 items then delete middle 4.6309 us/op 3.6836 us/op 1.26
OrderedSet add up to 128 items then delete middle 14.497 us/op 11.067 us/op 1.31
Set add up to 256 items then delete first 10.051 us/op 7.7624 us/op 1.29
OrderedSet add up to 256 items then delete first 15.797 us/op 11.804 us/op 1.34
Set add up to 256 items then delete last 9.9005 us/op 7.1244 us/op 1.39
OrderedSet add up to 256 items then delete last 15.685 us/op 11.218 us/op 1.40
Set add up to 256 items then delete middle 10.027 us/op 7.2890 us/op 1.38
OrderedSet add up to 256 items then delete middle 41.139 us/op 34.404 us/op 1.20
runFastConfirmationRules vc:100000 bc:96 eq:0 6.9423 ms/op 5.0102 ms/op 1.39
runFastConfirmationRules vc:600000 bc:96 eq:0 41.080 ms/op 35.117 ms/op 1.17
runFastConfirmationRules vc:1000000 bc:96 eq:0 61.168 ms/op 59.167 ms/op 1.03
runFastConfirmationRules vc:600000 bc:320 eq:0 36.915 ms/op 35.408 ms/op 1.04
runFastConfirmationRules vc:100000 bc:96 eq:1000 1.1612 s/op 1.0830 s/op 1.07
pass gossip attestations to forkchoice per slot 2.6017 ms/op 2.5663 ms/op 1.01
forkChoice updateHead vc 100000 bc 64 eq 0 403.62 us/op 464.42 us/op 0.87
forkChoice updateHead vc 600000 bc 64 eq 0 2.4128 ms/op 2.7798 ms/op 0.87
forkChoice updateHead vc 1000000 bc 64 eq 0 4.0556 ms/op 4.6577 ms/op 0.87
forkChoice updateHead vc 600000 bc 320 eq 0 2.4614 ms/op 2.8202 ms/op 0.87
forkChoice updateHead vc 600000 bc 1200 eq 0 2.4729 ms/op 2.8804 ms/op 0.86
forkChoice updateHead vc 600000 bc 7200 eq 0 3.8693 ms/op 2.7491 ms/op 1.41
forkChoice updateHead vc 600000 bc 64 eq 1000 2.4508 ms/op 2.3080 ms/op 1.06
forkChoice updateHead vc 600000 bc 64 eq 10000 2.5115 ms/op 2.3867 ms/op 1.05
forkChoice updateHead vc 600000 bc 64 eq 300000 6.9973 ms/op 6.8688 ms/op 1.02
forkChoice updateHead vc 600000 bc 64 eq 0 gloas boosted 2.5405 ms/op 2.4485 ms/op 1.04
computeDeltas 1400000 validators 0% inactive 11.993 ms/op 11.787 ms/op 1.02
computeDeltas 1400000 validators 10% inactive 11.358 ms/op 11.229 ms/op 1.01
computeDeltas 1400000 validators 20% inactive 10.746 ms/op 10.678 ms/op 1.01
computeDeltas 1400000 validators 50% inactive 8.7242 ms/op 8.8446 ms/op 0.99
computeDeltas 2100000 validators 0% inactive 18.082 ms/op 17.808 ms/op 1.02
computeDeltas 2100000 validators 10% inactive 17.043 ms/op 17.042 ms/op 1.00
computeDeltas 2100000 validators 20% inactive 16.138 ms/op 16.132 ms/op 1.00
computeDeltas 2100000 validators 50% inactive 10.749 ms/op 10.529 ms/op 1.02
altair processAttestation - 250000 vs - 7PWei normalcase 2.3773 ms/op 2.1910 ms/op 1.09
altair processAttestation - 250000 vs - 7PWei worstcase 3.2467 ms/op 3.1073 ms/op 1.04
altair processAttestation - setStatus - 1/6 committees join 103.02 us/op 98.381 us/op 1.05
altair processAttestation - setStatus - 1/3 committees join 213.18 us/op 210.19 us/op 1.01
altair processAttestation - setStatus - 1/2 committees join 286.75 us/op 272.54 us/op 1.05
altair processAttestation - setStatus - 2/3 committees join 359.89 us/op 345.88 us/op 1.04
altair processAttestation - setStatus - 4/5 committees join 535.45 us/op 485.81 us/op 1.10
altair processAttestation - setStatus - 100% committees join 612.24 us/op 574.49 us/op 1.07
altair processBlock - 250000 vs - 7PWei normalcase 5.3468 ms/op 4.9497 ms/op 1.08
altair processBlock - 250000 vs - 7PWei normalcase hashState 24.122 ms/op 23.484 ms/op 1.03
altair processBlock - 250000 vs - 7PWei worstcase 26.642 ms/op 22.327 ms/op 1.19
altair processBlock - 250000 vs - 7PWei worstcase hashState 58.004 ms/op 45.764 ms/op 1.27
phase0 processBlock - 250000 vs - 7PWei normalcase 1.4014 ms/op 1.5408 ms/op 0.91
phase0 processBlock - 250000 vs - 7PWei worstcase 21.324 ms/op 18.820 ms/op 1.13
altair processEth1Data - 250000 vs - 7PWei normalcase 301.17 us/op 300.61 us/op 1.00
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.1670 us/op 8.3790 us/op 0.38
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 19.719 us/op 18.092 us/op 1.09
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 5.5780 us/op 6.0630 us/op 0.92
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.6540 us/op 3.9360 us/op 0.93
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 89.709 us/op 84.646 us/op 1.06
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.4121 ms/op 1.4387 ms/op 0.98
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.8963 ms/op 1.9147 ms/op 0.99
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8292 ms/op 1.8900 ms/op 0.97
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 4.2137 ms/op 3.6266 ms/op 1.16
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.1853 ms/op 2.1836 ms/op 1.00
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.5030 ms/op 3.9189 ms/op 1.15
Tree 40 250000 create 341.54 ms/op 362.42 ms/op 0.94
Tree 40 250000 get(125000) 91.517 ns/op 100.19 ns/op 0.91
Tree 40 250000 set(125000) 986.38 ns/op 942.65 ns/op 1.05
Tree 40 250000 toArray() 17.145 ms/op 12.347 ms/op 1.39
Tree 40 250000 iterate all - toArray() + loop 17.399 ms/op 12.195 ms/op 1.43
Tree 40 250000 iterate all - get(i) 39.906 ms/op 34.618 ms/op 1.15
Array 250000 create 2.6165 ms/op 2.3538 ms/op 1.11
Array 250000 clone - spread 849.34 us/op 758.91 us/op 1.12
Array 250000 get(125000) 0.29500 ns/op 0.28300 ns/op 1.04
Array 250000 set(125000) 0.29800 ns/op 0.28400 ns/op 1.05
Array 250000 iterate all - loop 58.100 us/op 55.537 us/op 1.05
phase0 afterProcessEpoch - 250000 vs - 7PWei 39.647 ms/op 63.567 ms/op 0.62
Array.fill - length 1000000 4.8561 ms/op 3.9985 ms/op 1.21
Array push - length 1000000 19.731 ms/op 15.171 ms/op 1.30
Array.get 0.20341 ns/op 0.19553 ns/op 1.04
Uint8Array.get 0.24073 ns/op 0.23231 ns/op 1.04
phase0 beforeProcessEpoch - 250000 vs - 7PWei 19.899 ms/op 15.270 ms/op 1.30
altair processEpoch - mainnet_e81889 251.10 ms/op 267.56 ms/op 0.94
mainnet_e81889 - altair beforeProcessEpoch 38.282 ms/op 44.631 ms/op 0.86
mainnet_e81889 - altair processJustificationAndFinalization 5.2700 us/op 5.2000 us/op 1.01
mainnet_e81889 - altair processInactivityUpdates 6.8394 ms/op 3.3798 ms/op 2.02
mainnet_e81889 - altair processRewardsAndPenalties 19.978 ms/op 17.313 ms/op 1.15
mainnet_e81889 - altair processRegistryUpdates 590.00 ns/op 544.00 ns/op 1.08
mainnet_e81889 - altair processSlashings 142.00 ns/op 134.00 ns/op 1.06
mainnet_e81889 - altair processEth1DataReset 137.00 ns/op 132.00 ns/op 1.04
mainnet_e81889 - altair processEffectiveBalanceUpdates 7.0178 ms/op 1.9470 ms/op 3.60
mainnet_e81889 - altair processSlashingsReset 702.00 ns/op 665.00 ns/op 1.06
mainnet_e81889 - altair processRandaoMixesReset 970.00 ns/op 922.00 ns/op 1.05
mainnet_e81889 - altair processHistoricalRootsUpdate 137.00 ns/op 133.00 ns/op 1.03
mainnet_e81889 - altair processParticipationFlagUpdates 464.00 ns/op 424.00 ns/op 1.09
mainnet_e81889 - altair processSyncCommitteeUpdates 106.00 ns/op 100.00 ns/op 1.06
mainnet_e81889 - altair afterProcessEpoch 43.261 ms/op 41.184 ms/op 1.05
capella processEpoch - mainnet_e217614 770.18 ms/op 804.45 ms/op 0.96
mainnet_e217614 - capella beforeProcessEpoch 75.899 ms/op 69.272 ms/op 1.10
mainnet_e217614 - capella processJustificationAndFinalization 5.3200 us/op 5.6240 us/op 0.95
mainnet_e217614 - capella processInactivityUpdates 16.698 ms/op 14.268 ms/op 1.17
mainnet_e217614 - capella processRewardsAndPenalties 91.691 ms/op 94.372 ms/op 0.97
mainnet_e217614 - capella processRegistryUpdates 4.5200 us/op 4.5200 us/op 1.00
mainnet_e217614 - capella processSlashings 139.00 ns/op 138.00 ns/op 1.01
mainnet_e217614 - capella processEth1DataReset 134.00 ns/op 137.00 ns/op 0.98
mainnet_e217614 - capella processEffectiveBalanceUpdates 16.940 ms/op 6.2573 ms/op 2.71
mainnet_e217614 - capella processSlashingsReset 651.00 ns/op 676.00 ns/op 0.96
mainnet_e217614 - capella processRandaoMixesReset 934.00 ns/op 1.0460 us/op 0.89
mainnet_e217614 - capella processHistoricalRootsUpdate 130.00 ns/op 138.00 ns/op 0.94
mainnet_e217614 - capella processParticipationFlagUpdates 431.00 ns/op 446.00 ns/op 0.97
mainnet_e217614 - capella afterProcessEpoch 106.84 ms/op 109.75 ms/op 0.97
phase0 processEpoch - mainnet_e58758 211.68 ms/op 241.13 ms/op 0.88
mainnet_e58758 - phase0 beforeProcessEpoch 48.998 ms/op 50.836 ms/op 0.96
mainnet_e58758 - phase0 processJustificationAndFinalization 4.9990 us/op 5.0000 us/op 1.00
mainnet_e58758 - phase0 processRewardsAndPenalties 15.624 ms/op 17.308 ms/op 0.90
mainnet_e58758 - phase0 processRegistryUpdates 2.1720 us/op 2.2580 us/op 0.96
mainnet_e58758 - phase0 processSlashings 136.00 ns/op 134.00 ns/op 1.01
mainnet_e58758 - phase0 processEth1DataReset 135.00 ns/op 135.00 ns/op 1.00
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 777.86 us/op 798.28 us/op 0.97
mainnet_e58758 - phase0 processSlashingsReset 845.00 ns/op 834.00 ns/op 1.01
mainnet_e58758 - phase0 processRandaoMixesReset 977.00 ns/op 988.00 ns/op 0.99
mainnet_e58758 - phase0 processHistoricalRootsUpdate 134.00 ns/op 135.00 ns/op 0.99
mainnet_e58758 - phase0 processParticipationRecordUpdates 935.00 ns/op 992.00 ns/op 0.94
mainnet_e58758 - phase0 afterProcessEpoch 32.498 ms/op 32.591 ms/op 1.00
phase0 processEffectiveBalanceUpdates - 250000 normalcase 949.56 us/op 964.74 us/op 0.98
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.5436 ms/op 1.6450 ms/op 0.94
gloas processInactivityUpdates - 250000 inactivity leak all eligible missed target 11.383 ms/op 9.5745 ms/op 1.19
phase0 processRegistryUpdates - 250000 normalcase 2.3620 us/op 2.3060 us/op 1.02
phase0 processRegistryUpdates - 250000 badcase_full_deposits 135.12 us/op 141.83 us/op 0.95
phase0 processRegistryUpdates - 250000 worstcase 0.5 59.112 ms/op 68.126 ms/op 0.87
altair processRewardsAndPenalties - 250000 normalcase 14.220 ms/op 14.260 ms/op 1.00
altair processRewardsAndPenalties - 250000 worstcase 13.859 ms/op 14.300 ms/op 0.97
phase0 getAttestationDeltas - 250000 normalcase 5.4788 ms/op 5.4369 ms/op 1.01
phase0 getAttestationDeltas - 250000 worstcase 5.5303 ms/op 5.4696 ms/op 1.01
phase0 processSlashings - 250000 worstcase 58.065 us/op 58.648 us/op 0.99
altair processSyncCommitteeUpdates - 250000 9.6806 ms/op 9.6618 ms/op 1.00
BeaconState.hashTreeRoot - No change 168.00 ns/op 175.00 ns/op 0.96
BeaconState.hashTreeRoot - 1 full validator 80.577 us/op 80.566 us/op 1.00
BeaconState.hashTreeRoot - 32 full validator 916.03 us/op 1.0454 ms/op 0.88
BeaconState.hashTreeRoot - 512 full validator 8.2946 ms/op 6.9341 ms/op 1.20
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 105.19 us/op 103.82 us/op 1.01
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.4415 ms/op 1.5660 ms/op 0.92
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 18.422 ms/op 19.913 ms/op 0.93
BeaconState.hashTreeRoot - 1 balances 79.948 us/op 76.610 us/op 1.04
BeaconState.hashTreeRoot - 32 balances 772.98 us/op 592.21 us/op 1.31
BeaconState.hashTreeRoot - 512 balances 6.3411 ms/op 5.5944 ms/op 1.13
BeaconState.hashTreeRoot - 250000 balances 111.47 ms/op 161.47 ms/op 0.69
aggregationBits - 2048 els - zipIndexesInBitList 19.297 us/op 18.605 us/op 1.04
regular array get 100000 times 22.279 us/op 22.241 us/op 1.00
wrappedArray get 100000 times 22.464 us/op 22.164 us/op 1.01
arrayWithProxy get 100000 times 10.032 ms/op 14.627 ms/op 0.69
ssz.Root.equals 21.054 ns/op 20.299 ns/op 1.04
byteArrayEquals 20.833 ns/op 20.068 ns/op 1.04
Buffer.compare 8.5330 ns/op 8.2880 ns/op 1.03
processSlot - 1 slots 10.358 us/op 9.1000 us/op 1.14
processSlot - 32 slots 2.2460 ms/op 2.5527 ms/op 0.88
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 4.5194 ms/op 2.4182 ms/op 1.87
getCommitteeAssignments - req 1 vs - 250000 vc 1.6169 ms/op 1.6606 ms/op 0.97
getCommitteeAssignments - req 100 vs - 250000 vc 3.3410 ms/op 3.3587 ms/op 0.99
getCommitteeAssignments - req 1000 vs - 250000 vc 3.5727 ms/op 3.6262 ms/op 0.99
findModifiedValidators - 10000 modified validators 811.19 ms/op 829.21 ms/op 0.98
findModifiedValidators - 1000 modified validators 547.30 ms/op 471.50 ms/op 1.16
findModifiedValidators - 100 modified validators 409.59 ms/op 314.38 ms/op 1.30
findModifiedValidators - 10 modified validators 242.32 ms/op 268.80 ms/op 0.90
findModifiedValidators - 1 modified validators 155.32 ms/op 180.95 ms/op 0.86
findModifiedValidators - no difference 208.01 ms/op 198.63 ms/op 1.05
migrate state 1500000 validators, 3400 modified, 2000 new 3.0226 s/op 3.5776 s/op 0.84
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.3500 ns/op 3.3700 ns/op 0.99
state getBlockRootAtSlot - 250000 vs - 7PWei 350.67 ns/op 501.43 ns/op 0.70
computeProposerIndex 100000 validators 1.3525 ms/op 1.3323 ms/op 1.02
getNextSyncCommitteeIndices 1000 validators 2.8197 ms/op 2.8318 ms/op 1.00
getNextSyncCommitteeIndices 10000 validators 25.975 ms/op 25.543 ms/op 1.02
getNextSyncCommitteeIndices 100000 validators 87.766 ms/op 86.435 ms/op 1.02
computeProposers - vc 250000 579.83 us/op 558.41 us/op 1.04
computeEpochShuffling - vc 250000 37.534 ms/op 37.223 ms/op 1.01
getNextSyncCommittee - vc 250000 9.3231 ms/op 9.4053 ms/op 0.99
nodejs block root to RootHex using toHex 92.379 ns/op 103.15 ns/op 0.90
nodejs block root to RootHex using toRootHex 60.288 ns/op 64.802 ns/op 0.93
nodejs fromHex(blob) 921.34 us/op 979.30 us/op 0.94
nodejs fromHexInto(blob) 607.10 us/op 655.20 us/op 0.93
nodejs block root to RootHex using the deprecated toHexString 599.03 ns/op 642.78 ns/op 0.93
nodejs byteArrayEquals 32 bytes (block root) 25.207 ns/op 25.372 ns/op 0.99
nodejs byteArrayEquals 48 bytes (pubkey) 36.658 ns/op 36.759 ns/op 1.00
nodejs byteArrayEquals 96 bytes (signature) 34.574 ns/op 40.247 ns/op 0.86
nodejs byteArrayEquals 1024 bytes 39.466 ns/op 44.211 ns/op 0.89
nodejs byteArrayEquals 131072 bytes (blob) 1.7073 us/op 1.7393 us/op 0.98
browser block root to RootHex using toHex 140.12 ns/op 145.88 ns/op 0.96
browser block root to RootHex using toRootHex 126.08 ns/op 130.08 ns/op 0.97
browser fromHex(blob) 1.9860 ms/op 1.8346 ms/op 1.08
browser fromHexInto(blob) 609.12 us/op 661.51 us/op 0.92
browser block root to RootHex using the deprecated toHexString 386.09 ns/op 418.89 ns/op 0.92
browser byteArrayEquals 32 bytes (block root) 26.582 ns/op 27.550 ns/op 0.96
browser byteArrayEquals 48 bytes (pubkey) 37.658 ns/op 38.746 ns/op 0.97
browser byteArrayEquals 96 bytes (signature) 70.646 ns/op 72.377 ns/op 0.98
browser byteArrayEquals 1024 bytes 708.97 ns/op 739.24 ns/op 0.96
browser byteArrayEquals 131072 bytes (blob) 95.596 us/op 93.038 us/op 1.03

by benchmarkbot/action

This branch has not been deployed

No deployments
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.

1 participant