Skip to content

fix: verify the proposer signature before retaining unknown parent gossip blocks - #10087

Draft
nflaig wants to merge 5 commits into
unstablefrom
nflaig/gossip-block-signature-before-parent
Draft

nflaig wants to merge 5 commits into
unstablefrom
nflaig/gossip-block-signature-before-parent

Conversation

@nflaig

@nflaig nflaig commented Sep 14, 2026 •

Copy link
Copy Markdown
Member

Gossip block validation checks the proposer signature only after the parent is known, and the handler caches the block and hands it to unknown parent sync on PARENT_BLOCK_UNKNOWN. A peer without any validator key can therefore make the node decode, hash, cache and sync-fetch arbitrary current-slot blocks with an unknown parent, at up to 10 MiB per message and with no penalty since the result is an IGNORE. This is the precondition behind ethereum-bounty/lodestar#22 and ethereum-bounty/lodestar#23.

  • verify the proposer index against the pubkey registry and the proposer signature before the parent lookup, verifyBlockProposerSignature works without a state and the signing root reuses the cached block root, so this reorders existing work rather than adding any
  • count a retained unknown parent block as its proposer's proposal for the slot, a second block from the same proposer is a REPEAT_PROPOSAL with the equivocation recorded instead of another retained block, and a repeat proposal whose parent is unknown is not imported and is pruned from the caches
  • the sending peer gets the Fatal penalty the gossip validator applies to PROPOSAL_SIGNATURE_INVALID since feat: penalize peers for forwarding REJECTED gossip messages #10059, an honest peer never forwards such a block, so a spamming peer is banned on the first one

A peer with no validator key now gets every block rejected and nothing retained. A peer with validator keys retains at most one block per key per slot and hands us slashable evidence with the second. The decode and hash cost of a message before it is rejected is unchanged and is the subject of a follow-up that bounds in-flight block gossip work per peer.

Builds on #10083.

…ssip blocks

A block with an unknown parent is decoded, hashed, cached and handed to
unknown parent sync before its proposer signature is checked, so a peer
without a validator key can make the node retain arbitrary blocks. Move
the registry and signature checks ahead of the parent lookup, count a
retained unknown parent block as the proposer's proposal for the slot so
a second one is an equivocation instead of another retained block, and
report peers that send blocks with an invalid signature.

if (e.type.code === BlockErrorCode.PROPOSAL_SIGNATURE_INVALID) {
// An honest peer never forwards a block with an invalid proposer signature
core.reportPeer(peerIdStr, PeerAction.LowToleranceError, "InvalidBlockSignature");

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.

this could probably use PeerAction.Fatal?


if (e.type.code === BlockErrorCode.PROPOSAL_SIGNATURE_INVALID) {
// An honest peer never forwards a block with an invalid proposer signature
core.reportPeer(peerIdStr, PeerAction.LowToleranceError, "InvalidBlockSignature");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

should this be fatal?

@twoeths twoeths left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

need to coordinate with #10059 where we centralize all penalized logics per code/topic

Base automatically changed from nflaig/prune-unimported-repeat-proposals to unstable September 17, 2026 01:41
…ck-signature-before-parent

# Conflicts:
#	packages/beacon-node/src/network/processor/gossipHandlers.ts
#	packages/beacon-node/test/unit/network/processor/gossipHandlers.test.ts
Since #10059 the validator wrapper reports the peer for every REJECT by
topic and code, Fatal for an invalid proposer signature on beacon_block, so
the handler-level LowToleranceError report was a second, weaker penalty for
the same rejection.
@github-actions

Copy link
Copy Markdown
Contributor

Performance Report

🚀🚀 Significant benchmark improvement detected

Benchmark suite Current: 69e5ae6 Previous: ceea36c Ratio
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 826.12 us/op 2.6592 ms/op 0.31
Full benchmark results
Benchmark suite Current: 69e5ae6 Previous: ceea36c Ratio
getPubkeys - native cache - req 1000 vs - 250000 vc 367.58 us/op 384.93 us/op 0.95
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 30.287 us/op 30.733 us/op 0.99
BLS verify - blst 707.32 us/op 722.29 us/op 0.98
BLS verifyMultipleSignatures 3 - blst 1.0499 ms/op 1.0608 ms/op 0.99
BLS verifyMultipleSignatures 8 - blst 1.7528 ms/op 1.7580 ms/op 1.00
BLS verifyMultipleSignatures 32 - blst 5.6015 ms/op 5.4841 ms/op 1.02
BLS verifyMultipleSignatures 64 - blst 10.462 ms/op 10.439 ms/op 1.00
BLS verifyMultipleSignatures 128 - blst 20.001 ms/op 20.061 ms/op 1.00
BLS deserializing 10000 signatures 478.62 ms/op 470.02 ms/op 1.02
BLS deserializing 100000 signatures 4.8115 s/op 4.7334 s/op 1.02
BLS verifyMultipleSignatures - same message - 3 - blst 750.07 us/op 748.21 us/op 1.00
BLS verifyMultipleSignatures - same message - 8 - blst 840.67 us/op 834.39 us/op 1.01
BLS verifyMultipleSignatures - same message - 32 - blst 1.2769 ms/op 1.2681 ms/op 1.01
BLS verifyMultipleSignatures - same message - 64 - blst 1.8726 ms/op 1.8465 ms/op 1.01
BLS verifyMultipleSignatures - same message - 128 - blst 3.0516 ms/op 3.0004 ms/op 1.02
BLS aggregatePubkeys 32 - blst 13.929 us/op 13.845 us/op 1.01
BLS aggregatePubkeys 128 - blst 50.514 us/op 49.559 us/op 1.02
getSlashingsAndExits - default max 45.375 us/op 33.247 us/op 1.36
getSlashingsAndExits - 2k 374.66 us/op 330.86 us/op 1.13
proposeBlockBody type=full, size=empty 670.90 us/op 592.90 us/op 1.13
isKnown best case - 1 super set check 120.00 ns/op 139.00 ns/op 0.86
isKnown normal case - 2 super set checks 117.00 ns/op 140.00 ns/op 0.84
isKnown worse case - 16 super set checks 117.00 ns/op 136.00 ns/op 0.86
validate api signedAggregateAndProof - struct 1.1817 ms/op 1.1656 ms/op 1.01
validate gossip signedAggregateAndProof - struct 1.1813 ms/op 1.1662 ms/op 1.01
batch validate gossip attestation - vc 640000 - chunk 32 101.53 us/op 97.413 us/op 1.04
batch validate gossip attestation - vc 640000 - chunk 64 89.996 us/op 81.705 us/op 1.10
batch validate gossip attestation - vc 640000 - chunk 128 77.860 us/op 73.816 us/op 1.05
batch validate gossip attestation - vc 640000 - chunk 256 77.555 us/op 73.320 us/op 1.06
bytes32 toHexString 224.00 ns/op 220.00 ns/op 1.02
bytes32 Buffer.toString(hex) 126.00 ns/op 123.00 ns/op 1.02
bytes32 Buffer.toString(hex) from Uint8Array 195.00 ns/op 189.00 ns/op 1.03
bytes32 Buffer.toString(hex) + 0x 122.00 ns/op 118.00 ns/op 1.03
Return object 10000 times 0.19310 ns/op 0.18700 ns/op 1.03
Throw Error 10000 times 2.8232 us/op 2.7099 us/op 1.04
toHex 70.999 ns/op 67.615 ns/op 1.05
Buffer.from 64.429 ns/op 61.838 ns/op 1.04
shared Buffer 42.944 ns/op 41.255 ns/op 1.04
fastMsgIdFn sha256 / 200 bytes 1.1520 us/op 1.1690 us/op 0.99
fastMsgIdFn h32 xxhash / 200 bytes 113.00 ns/op 104.00 ns/op 1.09
fastMsgIdFn h64 xxhash / 200 bytes 162.00 ns/op 147.00 ns/op 1.10
fastMsgIdFn sha256 / 1000 bytes 3.6660 us/op 3.6750 us/op 1.00
fastMsgIdFn h32 xxhash / 1000 bytes 175.00 ns/op 172.00 ns/op 1.02
fastMsgIdFn h64 xxhash / 1000 bytes 192.00 ns/op 175.00 ns/op 1.10
fastMsgIdFn sha256 / 10000 bytes 32.479 us/op 32.174 us/op 1.01
fastMsgIdFn h32 xxhash / 10000 bytes 911.00 ns/op 881.00 ns/op 1.03
fastMsgIdFn h64 xxhash / 10000 bytes 570.00 ns/op 549.00 ns/op 1.04
send data - 1000 256B messages 4.1737 ms/op 3.9716 ms/op 1.05
send data - 1000 512B messages 5.2045 ms/op 5.0039 ms/op 1.04
send data - 1000 1024B messages 5.8669 ms/op 5.5059 ms/op 1.07
send data - 1000 1200B messages 6.0274 ms/op 5.5692 ms/op 1.08
send data - 1000 2048B messages 14.053 ms/op 8.4022 ms/op 1.67
send data - 1000 4096B messages 39.082 ms/op 40.463 ms/op 0.97
send data - 1000 16384B messages 292.91 ms/op 215.90 ms/op 1.36
send data - 1000 65536B messages 1.3140 s/op 1.3278 s/op 0.99
enrSubnets - fastDeserialize 64 bits 655.00 ns/op 660.00 ns/op 0.99
enrSubnets - ssz BitVector 64 bits 214.00 ns/op 218.00 ns/op 0.98
enrSubnets - fastDeserialize 4 bits 65.000 ns/op 65.000 ns/op 1.00
enrSubnets - ssz BitVector 4 bits 215.00 ns/op 215.00 ns/op 1.00
prioritizePeers score -10:0 att 32-0.1 sync 2-0 170.39 us/op 168.07 us/op 1.01
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 193.30 us/op 184.86 us/op 1.05
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 272.24 us/op 270.07 us/op 1.01
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 489.85 us/op 469.92 us/op 1.04
prioritizePeers score 0:0 att 64-1 sync 4-1 569.25 us/op 549.71 us/op 1.04
archive index / 1 slot / archive root index lookup 38.968 us/op 43.611 us/op 0.89
archive index / 1 slot / archive block lookup, decode and hash 2.3207 ms/op 2.2680 ms/op 1.02
archive index / 1 slots / 1 columns / legacy 48.582 us/op 40.433 us/op 1.20
archive index / 1 slots / 1 columns / flat files 264.01 us/op 288.39 us/op 0.92
archive index / 1 slots / 8 columns / legacy 92.276 us/op 92.982 us/op 0.99
archive index / 1 slots / 8 columns / flat files 347.72 us/op 349.14 us/op 1.00
archive index / 1 slots / 128 columns / legacy 10.918 ms/op 6.8653 ms/op 1.59
archive index / 1 slots / 128 columns / flat files 3.9638 ms/op 5.4563 ms/op 0.73
archive index / 8 slots / 1 columns / legacy 232.93 us/op 120.37 us/op 1.94
archive index / 8 slots / 1 columns / flat files 2.1185 ms/op 2.0792 ms/op 1.02
archive index / 8 slots / 8 columns / legacy 1.5275 ms/op 6.2597 ms/op 0.24
archive index / 8 slots / 8 columns / flat files 4.1373 ms/op 3.1660 ms/op 1.31
archive index / 8 slots / 128 columns / legacy 78.671 ms/op 79.296 ms/op 0.99
archive index / 8 slots / 128 columns / flat files 164.44 ms/op 130.44 ms/op 1.26
head state / 1 slot / archive root index lookup 37.750 us/op 42.162 us/op 0.90
head state / 1 slot / archive block lookup, decode and hash 2.3855 ms/op 2.2383 ms/op 1.07
head state / 1 slots / 1 columns / legacy 35.693 us/op 45.607 us/op 0.78
head state / 1 slots / 1 columns / flat files 218.25 us/op 239.08 us/op 0.91
head state / 1 slots / 8 columns / legacy 103.17 us/op 94.337 us/op 1.09
head state / 1 slots / 8 columns / flat files 427.47 us/op 454.93 us/op 0.94
head state / 1 slots / 128 columns / legacy 9.4314 ms/op 7.4404 ms/op 1.27
head state / 1 slots / 128 columns / flat files 5.4753 ms/op 5.8421 ms/op 0.94
head state / 8 slots / 1 columns / legacy 159.78 us/op 284.14 us/op 0.56
head state / 8 slots / 1 columns / flat files 1.6821 ms/op 1.8448 ms/op 0.91
head state / 8 slots / 8 columns / legacy 1.1241 ms/op 757.96 us/op 1.48
head state / 8 slots / 8 columns / flat files 3.4724 ms/op 3.1506 ms/op 1.10
head state / 8 slots / 128 columns / legacy 91.041 ms/op 85.594 ms/op 1.06
head state / 8 slots / 128 columns / flat files 109.93 ms/op 232.21 ms/op 0.47
array of 16000 items push then shift 774.18 ns/op 770.97 ns/op 1.00
LinkedList of 16000 items push then shift 5.2350 ns/op 4.8330 ns/op 1.08
array of 16000 items push then pop 54.440 ns/op 49.746 ns/op 1.09
LinkedList of 16000 items push then pop 4.7940 ns/op 4.3710 ns/op 1.10
array of 24000 items push then shift 1.1744 us/op 1.1309 us/op 1.04
LinkedList of 24000 items push then shift 5.4080 ns/op 4.7130 ns/op 1.15
array of 24000 items push then pop 72.357 ns/op 67.388 ns/op 1.07
LinkedList of 24000 items push then pop 4.8470 ns/op 4.4980 ns/op 1.08
intersect bitArray bitLen 8 2.5860 ns/op 2.4640 ns/op 1.05
intersect array and set length 8 22.052 ns/op 21.740 ns/op 1.01
intersect bitArray bitLen 128 16.402 ns/op 16.624 ns/op 0.99
intersect array and set length 128 374.75 ns/op 372.58 ns/op 1.01
bitArray.getTrueBitIndexes() bitLen 128 809.00 ns/op 822.00 ns/op 0.98
bitArray.getTrueBitIndexes() bitLen 248 1.4430 us/op 1.4870 us/op 0.97
bitArray.getTrueBitIndexes() bitLen 512 3.1530 us/op 3.1920 us/op 0.99
Full columns - reconstruct all 6 blobs 240.82 us/op 128.06 us/op 1.88
Full columns - reconstruct half of the blobs out of 6 97.813 us/op 57.742 us/op 1.69
Full columns - reconstruct single blob out of 6 27.359 us/op 27.153 us/op 1.01
Half columns - reconstruct all 6 blobs 293.35 ms/op 289.36 ms/op 1.01
Half columns - reconstruct half of the blobs out of 6 146.93 ms/op 145.62 ms/op 1.01
Half columns - reconstruct single blob out of 6 52.255 ms/op 51.756 ms/op 1.01
Set add up to 64 items then delete first 1.2777 us/op 1.2886 us/op 0.99
OrderedSet add up to 64 items then delete first 1.9118 us/op 1.9182 us/op 1.00
Set add up to 64 items then delete last 1.5455 us/op 1.5708 us/op 0.98
OrderedSet add up to 64 items then delete last 2.5721 us/op 2.5536 us/op 1.01
Set add up to 64 items then delete middle 1.5730 us/op 1.5756 us/op 1.00
OrderedSet add up to 64 items then delete middle 3.2276 us/op 3.2399 us/op 1.00
Set add up to 128 items then delete first 3.5173 us/op 3.4548 us/op 1.02
OrderedSet add up to 128 items then delete first 5.2499 us/op 5.1380 us/op 1.02
Set add up to 128 items then delete last 3.6353 us/op 3.4605 us/op 1.05
OrderedSet add up to 128 items then delete last 5.1738 us/op 5.0542 us/op 1.02
Set add up to 128 items then delete middle 3.6443 us/op 3.6209 us/op 1.01
OrderedSet add up to 128 items then delete middle 9.0539 us/op 9.0903 us/op 1.00
Set add up to 256 items then delete first 7.6253 us/op 7.0842 us/op 1.08
OrderedSet add up to 256 items then delete first 10.872 us/op 10.522 us/op 1.03
Set add up to 256 items then delete last 6.8527 us/op 7.0216 us/op 0.98
OrderedSet add up to 256 items then delete last 10.863 us/op 10.338 us/op 1.05
Set add up to 256 items then delete middle 7.2368 us/op 7.3802 us/op 0.98
OrderedSet add up to 256 items then delete middle 28.268 us/op 27.897 us/op 1.01
runFastConfirmationRules vc:100000 bc:96 eq:0 3.5270 ms/op 3.5642 ms/op 0.99
runFastConfirmationRules vc:600000 bc:96 eq:0 27.487 ms/op 26.740 ms/op 1.03
runFastConfirmationRules vc:1000000 bc:96 eq:0 43.929 ms/op 43.380 ms/op 1.01
runFastConfirmationRules vc:600000 bc:320 eq:0 26.821 ms/op 26.206 ms/op 1.02
runFastConfirmationRules vc:100000 bc:96 eq:1000 1.0158 s/op 1.0281 s/op 0.99
pass gossip attestations to forkchoice per slot 1.9784 ms/op 2.0135 ms/op 0.98
forkChoice updateHead vc 100000 bc 64 eq 0 307.43 us/op 312.45 us/op 0.98
forkChoice updateHead vc 600000 bc 64 eq 0 1.8582 ms/op 1.8700 ms/op 0.99
forkChoice updateHead vc 1000000 bc 64 eq 0 3.0624 ms/op 3.0854 ms/op 0.99
forkChoice updateHead vc 600000 bc 320 eq 0 1.8427 ms/op 1.8659 ms/op 0.99
forkChoice updateHead vc 600000 bc 1200 eq 0 1.8904 ms/op 1.8916 ms/op 1.00
forkChoice updateHead vc 600000 bc 7200 eq 0 2.4357 ms/op 2.2847 ms/op 1.07
forkChoice updateHead vc 600000 bc 64 eq 1000 1.8524 ms/op 1.9000 ms/op 0.97
forkChoice updateHead vc 600000 bc 64 eq 10000 1.9173 ms/op 1.9285 ms/op 0.99
forkChoice updateHead vc 600000 bc 64 eq 300000 5.0853 ms/op 5.0466 ms/op 1.01
forkChoice updateHead vc 600000 bc 64 eq 0 gloas boosted 1.8573 ms/op 1.8896 ms/op 0.98
computeDeltas 1400000 validators 0% inactive 8.5149 ms/op 8.6088 ms/op 0.99
computeDeltas 1400000 validators 10% inactive 8.0955 ms/op 8.2051 ms/op 0.99
computeDeltas 1400000 validators 20% inactive 7.6320 ms/op 7.8097 ms/op 0.98
computeDeltas 1400000 validators 50% inactive 6.3112 ms/op 6.5638 ms/op 0.96
computeDeltas 2100000 validators 0% inactive 12.823 ms/op 12.930 ms/op 0.99
computeDeltas 2100000 validators 10% inactive 10.505 ms/op 10.621 ms/op 0.99
computeDeltas 2100000 validators 20% inactive 9.8662 ms/op 10.011 ms/op 0.99
computeDeltas 2100000 validators 50% inactive 8.0568 ms/op 8.1938 ms/op 0.98
altair processAttestation - 250000 vs - 7PWei normalcase 2.2382 ms/op 2.2433 ms/op 1.00
altair processAttestation - 250000 vs - 7PWei worstcase 3.1300 ms/op 3.4731 ms/op 0.90
altair processAttestation - setStatus - 1/6 committees join 87.474 us/op 86.673 us/op 1.01
altair processAttestation - setStatus - 1/3 committees join 173.82 us/op 169.31 us/op 1.03
altair processAttestation - setStatus - 1/2 committees join 238.91 us/op 240.19 us/op 0.99
altair processAttestation - setStatus - 2/3 committees join 312.92 us/op 317.49 us/op 0.99
altair processAttestation - setStatus - 4/5 committees join 433.75 us/op 430.16 us/op 1.01
altair processAttestation - setStatus - 100% committees join 504.10 us/op 528.31 us/op 0.95
altair processBlock - 250000 vs - 7PWei normalcase 4.8281 ms/op 4.6885 ms/op 1.03
altair processBlock - 250000 vs - 7PWei normalcase hashState 25.162 ms/op 23.747 ms/op 1.06
altair processBlock - 250000 vs - 7PWei worstcase 21.797 ms/op 20.735 ms/op 1.05
altair processBlock - 250000 vs - 7PWei worstcase hashState 57.902 ms/op 54.106 ms/op 1.07
phase0 processBlock - 250000 vs - 7PWei normalcase 1.2174 ms/op 1.2231 ms/op 1.00
phase0 processBlock - 250000 vs - 7PWei worstcase 16.962 ms/op 16.343 ms/op 1.04
altair processEth1Data - 250000 vs - 7PWei normalcase 218.06 us/op 222.93 us/op 0.98
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 5.6560 us/op 5.6080 us/op 1.01
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 19.783 us/op 20.995 us/op 0.94
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 8.2440 us/op 8.4720 us/op 0.97
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 6.4500 us/op 6.6330 us/op 0.97
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 80.111 us/op 81.222 us/op 0.99
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.0812 ms/op 1.0611 ms/op 1.02
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.3852 ms/op 1.4108 ms/op 0.98
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.4660 ms/op 1.4321 ms/op 1.02
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 2.9836 ms/op 2.6773 ms/op 1.11
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.6584 ms/op 1.6230 ms/op 1.02
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.3080 ms/op 2.8899 ms/op 1.14
Tree 40 250000 create 264.19 ms/op 260.20 ms/op 1.02
Tree 40 250000 get(125000) 69.871 ns/op 68.369 ns/op 1.02
Tree 40 250000 set(125000) 753.77 ns/op 760.17 ns/op 0.99
Tree 40 250000 toArray() 15.401 ms/op 18.188 ms/op 0.85
Tree 40 250000 iterate all - toArray() + loop 15.695 ms/op 19.861 ms/op 0.79
Tree 40 250000 iterate all - get(i) 33.503 ms/op 33.018 ms/op 1.01
Array 250000 create 1.4295 ms/op 1.3830 ms/op 1.03
Array 250000 clone - spread 351.96 us/op 355.17 us/op 0.99
Array 250000 get(125000) 0.26300 ns/op 0.25000 ns/op 1.05
Array 250000 set(125000) 0.26200 ns/op 0.25300 ns/op 1.04
Array 250000 iterate all - loop 46.126 us/op 46.113 us/op 1.00
phase0 afterProcessEpoch - 250000 vs - 7PWei 38.747 ms/op 64.762 ms/op 0.60
Array.fill - length 1000000 2.2669 ms/op 2.6776 ms/op 0.85
Array push - length 1000000 7.4706 ms/op 9.6389 ms/op 0.78
Array.get 0.19272 ns/op 0.19118 ns/op 1.01
Uint8Array.get 0.20095 ns/op 0.20459 ns/op 0.98
phase0 beforeProcessEpoch - 250000 vs - 7PWei 15.875 ms/op 18.721 ms/op 0.85
altair processEpoch - mainnet_e81889 236.50 ms/op 290.62 ms/op 0.81
mainnet_e81889 - altair beforeProcessEpoch 15.244 ms/op 14.220 ms/op 1.07
mainnet_e81889 - altair processJustificationAndFinalization 4.5270 us/op 5.6860 us/op 0.80
mainnet_e81889 - altair processInactivityUpdates 3.5361 ms/op 2.5962 ms/op 1.36
mainnet_e81889 - altair processRewardsAndPenalties 14.944 ms/op 14.527 ms/op 1.03
mainnet_e81889 - altair processRegistryUpdates 423.00 ns/op 432.00 ns/op 0.98
mainnet_e81889 - altair processSlashings 105.00 ns/op 112.00 ns/op 0.94
mainnet_e81889 - altair processEth1DataReset 102.00 ns/op 110.00 ns/op 0.93
mainnet_e81889 - altair processEffectiveBalanceUpdates 837.88 us/op 1.4862 ms/op 0.56
mainnet_e81889 - altair processSlashingsReset 552.00 ns/op 575.00 ns/op 0.96
mainnet_e81889 - altair processRandaoMixesReset 902.00 ns/op 978.00 ns/op 0.92
mainnet_e81889 - altair processHistoricalRootsUpdate 105.00 ns/op 110.00 ns/op 0.95
mainnet_e81889 - altair processParticipationFlagUpdates 342.00 ns/op 336.00 ns/op 1.02
mainnet_e81889 - altair processSyncCommitteeUpdates 82.000 ns/op 90.000 ns/op 0.91
mainnet_e81889 - altair afterProcessEpoch 41.640 ms/op 40.734 ms/op 1.02
capella processEpoch - mainnet_e217614 686.99 ms/op 814.99 ms/op 0.84
mainnet_e217614 - capella beforeProcessEpoch 55.754 ms/op 64.943 ms/op 0.86
mainnet_e217614 - capella processJustificationAndFinalization 4.2010 us/op 4.5610 us/op 0.92
mainnet_e217614 - capella processInactivityUpdates 12.522 ms/op 10.497 ms/op 1.19
mainnet_e217614 - capella processRewardsAndPenalties 75.096 ms/op 78.807 ms/op 0.95
mainnet_e217614 - capella processRegistryUpdates 3.4080 us/op 3.3810 us/op 1.01
mainnet_e217614 - capella processSlashings 105.00 ns/op 110.00 ns/op 0.95
mainnet_e217614 - capella processEth1DataReset 102.00 ns/op 105.00 ns/op 0.97
mainnet_e217614 - capella processEffectiveBalanceUpdates 8.7666 ms/op 9.9521 ms/op 0.88
mainnet_e217614 - capella processSlashingsReset 534.00 ns/op 547.00 ns/op 0.98
mainnet_e217614 - capella processRandaoMixesReset 755.00 ns/op 880.00 ns/op 0.86
mainnet_e217614 - capella processHistoricalRootsUpdate 106.00 ns/op 110.00 ns/op 0.96
mainnet_e217614 - capella processParticipationFlagUpdates 346.00 ns/op 338.00 ns/op 1.02
mainnet_e217614 - capella afterProcessEpoch 105.83 ms/op 109.43 ms/op 0.97
phase0 processEpoch - mainnet_e58758 217.42 ms/op 290.94 ms/op 0.75
mainnet_e58758 - phase0 beforeProcessEpoch 48.498 ms/op 56.406 ms/op 0.86
mainnet_e58758 - phase0 processJustificationAndFinalization 4.3910 us/op 5.6110 us/op 0.78
mainnet_e58758 - phase0 processRewardsAndPenalties 12.714 ms/op 13.561 ms/op 0.94
mainnet_e58758 - phase0 processRegistryUpdates 1.6790 us/op 1.7660 us/op 0.95
mainnet_e58758 - phase0 processSlashings 103.00 ns/op 110.00 ns/op 0.94
mainnet_e58758 - phase0 processEth1DataReset 102.00 ns/op 173.00 ns/op 0.59
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 553.16 us/op 580.52 us/op 0.95
mainnet_e58758 - phase0 processSlashingsReset 621.00 ns/op 641.00 ns/op 0.97
mainnet_e58758 - phase0 processRandaoMixesReset 775.00 ns/op 954.00 ns/op 0.81
mainnet_e58758 - phase0 processHistoricalRootsUpdate 103.00 ns/op 110.00 ns/op 0.94
mainnet_e58758 - phase0 processParticipationRecordUpdates 871.00 ns/op 928.00 ns/op 0.94
mainnet_e58758 - phase0 afterProcessEpoch 35.085 ms/op 33.624 ms/op 1.04
phase0 processEffectiveBalanceUpdates - 250000 normalcase 668.19 us/op 689.78 us/op 0.97
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 826.12 us/op 2.6592 ms/op 0.31
gloas processInactivityUpdates - 250000 inactivity leak all eligible missed target 8.8394 ms/op 9.5410 ms/op 0.93
phase0 processRegistryUpdates - 250000 normalcase 6.2490 us/op 6.2330 us/op 1.00
phase0 processRegistryUpdates - 250000 badcase_full_deposits 114.49 us/op 113.71 us/op 1.01
phase0 processRegistryUpdates - 250000 worstcase 0.5 50.787 ms/op 54.919 ms/op 0.92
altair processRewardsAndPenalties - 250000 normalcase 11.974 ms/op 12.197 ms/op 0.98
altair processRewardsAndPenalties - 250000 worstcase 11.605 ms/op 11.658 ms/op 1.00
phase0 getAttestationDeltas - 250000 normalcase 3.8058 ms/op 3.8467 ms/op 0.99
phase0 getAttestationDeltas - 250000 worstcase 3.7711 ms/op 3.9020 ms/op 0.97
phase0 processSlashings - 250000 worstcase 43.766 us/op 45.557 us/op 0.96
altair processSyncCommitteeUpdates - 250000 8.1089 ms/op 7.8886 ms/op 1.03
BeaconState.hashTreeRoot - No change 146.00 ns/op 132.00 ns/op 1.11
BeaconState.hashTreeRoot - 1 full validator 79.988 us/op 88.823 us/op 0.90
BeaconState.hashTreeRoot - 32 full validator 853.43 us/op 1.3459 ms/op 0.63
BeaconState.hashTreeRoot - 512 full validator 8.3497 ms/op 11.046 ms/op 0.76
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 101.43 us/op 119.53 us/op 0.85
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.3255 ms/op 1.6158 ms/op 0.82
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 19.687 ms/op 18.677 ms/op 1.05
BeaconState.hashTreeRoot - 1 balances 76.127 us/op 81.946 us/op 0.93
BeaconState.hashTreeRoot - 32 balances 667.50 us/op 853.86 us/op 0.78
BeaconState.hashTreeRoot - 512 balances 5.9069 ms/op 5.9673 ms/op 0.99
BeaconState.hashTreeRoot - 250000 balances 122.09 ms/op 167.85 ms/op 0.73
aggregationBits - 2048 els - zipIndexesInBitList 14.814 us/op 14.622 us/op 1.01
regular array get 100000 times 18.691 us/op 18.901 us/op 0.99
wrappedArray get 100000 times 18.867 us/op 18.666 us/op 1.01
arrayWithProxy get 100000 times 7.2701 ms/op 7.2938 ms/op 1.00
ssz.Root.equals 14.889 ns/op 14.952 ns/op 1.00
byteArrayEquals 14.554 ns/op 14.628 ns/op 0.99
Buffer.compare 6.1940 ns/op 6.3340 ns/op 0.98
processSlot - 1 slots 10.099 us/op 9.2240 us/op 1.09
processSlot - 32 slots 2.0414 ms/op 2.2552 ms/op 0.91
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 3.8979 ms/op 4.1134 ms/op 0.95
getCommitteeAssignments - req 1 vs - 250000 vc 1.4270 ms/op 1.4823 ms/op 0.96
getCommitteeAssignments - req 100 vs - 250000 vc 3.2692 ms/op 3.4734 ms/op 0.94
getCommitteeAssignments - req 1000 vs - 250000 vc 3.4620 ms/op 3.6854 ms/op 0.94
findModifiedValidators - 10000 modified validators 592.86 ms/op 556.79 ms/op 1.06
findModifiedValidators - 1000 modified validators 401.43 ms/op 584.50 ms/op 0.69
findModifiedValidators - 100 modified validators 248.04 ms/op 257.58 ms/op 0.96
findModifiedValidators - 10 modified validators 209.06 ms/op 196.36 ms/op 1.06
findModifiedValidators - 1 modified validators 156.10 ms/op 168.32 ms/op 0.93
findModifiedValidators - no difference 167.05 ms/op 142.62 ms/op 1.17
migrate state 1500000 validators, 3400 modified, 2000 new 2.5646 s/op 3.1331 s/op 0.82
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 2.4300 ns/op 2.6000 ns/op 0.93
state getBlockRootAtSlot - 250000 vs - 7PWei 382.69 ns/op 405.62 ns/op 0.94
computeProposerIndex 100000 validators 1.1760 ms/op 1.1615 ms/op 1.01
getNextSyncCommitteeIndices 1000 validators 2.2647 ms/op 2.3299 ms/op 0.97
getNextSyncCommitteeIndices 10000 validators 20.076 ms/op 20.701 ms/op 0.97
getNextSyncCommitteeIndices 100000 validators 67.599 ms/op 69.554 ms/op 0.97
computeProposers - vc 250000 468.54 us/op 498.46 us/op 0.94
computeEpochShuffling - vc 250000 37.952 ms/op 39.872 ms/op 0.95
getNextSyncCommittee - vc 250000 7.1898 ms/op 7.1696 ms/op 1.00
nodejs block root to RootHex using toHex 68.973 ns/op 69.535 ns/op 0.99
nodejs block root to RootHex using toRootHex 44.738 ns/op 44.393 ns/op 1.01
nodejs fromHex(blob) 692.88 us/op 797.06 us/op 0.87
nodejs fromHexInto(blob) 444.71 us/op 452.65 us/op 0.98
nodejs block root to RootHex using the deprecated toHexString 538.64 ns/op 566.63 ns/op 0.95
nodejs byteArrayEquals 32 bytes (block root) 17.119 ns/op 17.730 ns/op 0.97
nodejs byteArrayEquals 48 bytes (pubkey) 24.494 ns/op 25.209 ns/op 0.97
nodejs byteArrayEquals 96 bytes (signature) 25.797 ns/op 26.480 ns/op 0.97
nodejs byteArrayEquals 1024 bytes 30.564 ns/op 31.246 ns/op 0.98
nodejs byteArrayEquals 131072 bytes (blob) 1.0502 us/op 1.0071 us/op 1.04
browser block root to RootHex using toHex 104.17 ns/op 107.71 ns/op 0.97
browser block root to RootHex using toRootHex 98.053 ns/op 103.25 ns/op 0.95
browser fromHex(blob) 1.2521 ms/op 1.3840 ms/op 0.90
browser fromHexInto(blob) 437.04 us/op 467.45 us/op 0.93
browser block root to RootHex using the deprecated toHexString 536.57 ns/op 563.65 ns/op 0.95
browser byteArrayEquals 32 bytes (block root) 17.844 ns/op 18.624 ns/op 0.96
browser byteArrayEquals 48 bytes (pubkey) 25.309 ns/op 26.411 ns/op 0.96
browser byteArrayEquals 96 bytes (signature) 47.490 ns/op 49.357 ns/op 0.96
browser byteArrayEquals 1024 bytes 491.05 ns/op 512.29 ns/op 0.96
browser byteArrayEquals 131072 bytes (blob) 61.392 us/op 64.805 us/op 0.95

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.

3 participants