Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add blacklisted block check #7498

Open
wants to merge 6 commits into
base: unstable
Choose a base branch
from

Conversation

matthewkeil
Copy link
Member

Motivation

Try to save Holesky. Blacklist ancestor of invalid chain and add blacklist BlockError that can be expanded to a feature flag in the future (or API call to add to the errors array)

@matthewkeil matthewkeil requested a review from a team as a code owner February 25, 2025 17:11
Copy link

codecov bot commented Feb 25, 2025

Codecov Report

Attention: Patch coverage is 52.38095% with 10 lines in your changes missing coverage. Please review.

Project coverage is 50.44%. Comparing base (2fc5490) to head (f538a83).

Additional details and impacted files
@@            Coverage Diff            @@
##           unstable    #7498   +/-   ##
=========================================
  Coverage     50.44%   50.44%           
=========================================
  Files           603      603           
  Lines         40686    40707   +21     
  Branches       2229     2229           
=========================================
+ Hits          20523    20534   +11     
- Misses        20123    20133   +10     
  Partials         40       40           

**Motivation**

- Black list the whole chain leading to black listed blocks

**Description**

- Init chain's black listed blocks from chain options
- Populate it if a block's parent root is black listed. Gradually the
whole chain will be black listed

---------

Co-authored-by: Tuyen Nguyen <[email protected]>
Co-authored-by: matthewkeil <[email protected]>
Copy link
Contributor

⚠️ Performance Alert ⚠️

Possible performance regression was detected for some benchmarks.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold.

Benchmark suite Current: d0686a9 Previous: 2fc5490 Ratio
toHexString serialized data 5.5096 us/op 1.4467 us/op 3.81
Full benchmark results
Benchmark suite Current: d0686a9 Previous: 2fc5490 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 987.51 us/op 1.0222 ms/op 0.97
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 37.314 us/op 38.220 us/op 0.98
BLS verify - blst 974.58 us/op 886.20 us/op 1.10
BLS verifyMultipleSignatures 3 - blst 1.3016 ms/op 1.2953 ms/op 1.00
BLS verifyMultipleSignatures 8 - blst 2.0359 ms/op 1.6817 ms/op 1.21
BLS verifyMultipleSignatures 32 - blst 5.9417 ms/op 5.0142 ms/op 1.18
BLS verifyMultipleSignatures 64 - blst 11.321 ms/op 9.2365 ms/op 1.23
BLS verifyMultipleSignatures 128 - blst 18.044 ms/op 18.105 ms/op 1.00
BLS deserializing 10000 signatures 716.70 ms/op 722.95 ms/op 0.99
BLS deserializing 100000 signatures 7.0640 s/op 7.8132 s/op 0.90
BLS verifyMultipleSignatures - same message - 3 - blst 922.40 us/op 1.1060 ms/op 0.83
BLS verifyMultipleSignatures - same message - 8 - blst 1.1487 ms/op 1.1801 ms/op 0.97
BLS verifyMultipleSignatures - same message - 32 - blst 1.7496 ms/op 2.1581 ms/op 0.81
BLS verifyMultipleSignatures - same message - 64 - blst 2.6971 ms/op 3.2399 ms/op 0.83
BLS verifyMultipleSignatures - same message - 128 - blst 5.1209 ms/op 4.8117 ms/op 1.06
BLS aggregatePubkeys 32 - blst 20.098 us/op 21.255 us/op 0.95
BLS aggregatePubkeys 128 - blst 71.861 us/op 78.811 us/op 0.91
notSeenSlots=1 numMissedVotes=1 numBadVotes=10 60.941 ms/op 59.888 ms/op 1.02
notSeenSlots=1 numMissedVotes=0 numBadVotes=4 52.371 ms/op 58.695 ms/op 0.89
notSeenSlots=2 numMissedVotes=1 numBadVotes=10 37.869 ms/op 44.920 ms/op 0.84
getSlashingsAndExits - default max 75.495 us/op 82.756 us/op 0.91
getSlashingsAndExits - 2k 324.12 us/op 383.06 us/op 0.85
proposeBlockBody type=full, size=empty 4.6686 ms/op 6.7438 ms/op 0.69
isKnown best case - 1 super set check 193.00 ns/op 232.00 ns/op 0.83
isKnown normal case - 2 super set checks 190.00 ns/op 224.00 ns/op 0.85
isKnown worse case - 16 super set checks 190.00 ns/op 227.00 ns/op 0.84
InMemoryCheckpointStateCache - add get delete 2.3820 us/op 3.6930 us/op 0.65
validate api signedAggregateAndProof - struct 2.5951 ms/op 1.8539 ms/op 1.40
validate gossip signedAggregateAndProof - struct 2.4403 ms/op 1.8103 ms/op 1.35
batch validate gossip attestation - vc 640000 - chunk 32 124.45 us/op 151.59 us/op 0.82
batch validate gossip attestation - vc 640000 - chunk 64 102.46 us/op 138.67 us/op 0.74
batch validate gossip attestation - vc 640000 - chunk 128 94.585 us/op 130.22 us/op 0.73
batch validate gossip attestation - vc 640000 - chunk 256 99.487 us/op 123.82 us/op 0.80
pickEth1Vote - no votes 955.28 us/op 1.0494 ms/op 0.91
pickEth1Vote - max votes 7.7614 ms/op 7.8914 ms/op 0.98
pickEth1Vote - Eth1Data hashTreeRoot value x2048 15.699 ms/op 15.162 ms/op 1.04
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 21.866 ms/op 19.400 ms/op 1.13
pickEth1Vote - Eth1Data fastSerialize value x2048 426.14 us/op 621.96 us/op 0.69
pickEth1Vote - Eth1Data fastSerialize tree x2048 4.2838 ms/op 2.3805 ms/op 1.80
bytes32 toHexString 351.00 ns/op 412.00 ns/op 0.85
bytes32 Buffer.toString(hex) 224.00 ns/op 245.00 ns/op 0.91
bytes32 Buffer.toString(hex) from Uint8Array 314.00 ns/op 357.00 ns/op 0.88
bytes32 Buffer.toString(hex) + 0x 227.00 ns/op 256.00 ns/op 0.89
Object access 1 prop 0.11500 ns/op 0.14200 ns/op 0.81
Map access 1 prop 0.12000 ns/op 0.17200 ns/op 0.70
Object get x1000 5.6830 ns/op 8.1640 ns/op 0.70
Map get x1000 6.1920 ns/op 9.4480 ns/op 0.66
Object set x1000 27.878 ns/op 40.578 ns/op 0.69
Map set x1000 18.881 ns/op 26.047 ns/op 0.72
Return object 10000 times 0.28190 ns/op 0.38140 ns/op 0.74
Throw Error 10000 times 4.2286 us/op 5.0167 us/op 0.84
toHex 134.62 ns/op 158.92 ns/op 0.85
Buffer.from 117.58 ns/op 142.33 ns/op 0.83
shared Buffer 82.777 ns/op 99.326 ns/op 0.83
fastMsgIdFn sha256 / 200 bytes 2.1400 us/op 3.0350 us/op 0.71
fastMsgIdFn h32 xxhash / 200 bytes 197.00 ns/op 290.00 ns/op 0.68
fastMsgIdFn h64 xxhash / 200 bytes 261.00 ns/op 361.00 ns/op 0.72
fastMsgIdFn sha256 / 1000 bytes 7.1180 us/op 10.540 us/op 0.68
fastMsgIdFn h32 xxhash / 1000 bytes 325.00 ns/op 456.00 ns/op 0.71
fastMsgIdFn h64 xxhash / 1000 bytes 334.00 ns/op 371.00 ns/op 0.90
fastMsgIdFn sha256 / 10000 bytes 64.172 us/op 72.212 us/op 0.89
fastMsgIdFn h32 xxhash / 10000 bytes 1.7980 us/op 1.9850 us/op 0.91
fastMsgIdFn h64 xxhash / 10000 bytes 1.2040 us/op 1.3350 us/op 0.90
send data - 1000 256B messages 12.250 ms/op 17.226 ms/op 0.71
send data - 1000 512B messages 16.131 ms/op 24.279 ms/op 0.66
send data - 1000 1024B messages 24.099 ms/op 28.977 ms/op 0.83
send data - 1000 1200B messages 21.152 ms/op 26.963 ms/op 0.78
send data - 1000 2048B messages 26.822 ms/op 32.373 ms/op 0.83
send data - 1000 4096B messages 25.288 ms/op 34.968 ms/op 0.72
send data - 1000 16384B messages 63.211 ms/op 82.824 ms/op 0.76
send data - 1000 65536B messages 209.57 ms/op 269.81 ms/op 0.78
enrSubnets - fastDeserialize 64 bits 860.00 ns/op 1.1240 us/op 0.77
enrSubnets - ssz BitVector 64 bits 318.00 ns/op 458.00 ns/op 0.69
enrSubnets - fastDeserialize 4 bits 126.00 ns/op 141.00 ns/op 0.89
enrSubnets - ssz BitVector 4 bits 322.00 ns/op 355.00 ns/op 0.91
prioritizePeers score -10:0 att 32-0.1 sync 2-0 115.53 us/op 183.25 us/op 0.63
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 134.88 us/op 158.98 us/op 0.85
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 198.20 us/op 232.53 us/op 0.85
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 374.61 us/op 546.31 us/op 0.69
prioritizePeers score 0:0 att 64-1 sync 4-1 444.53 us/op 640.35 us/op 0.69
array of 16000 items push then shift 1.5852 us/op 2.1318 us/op 0.74
LinkedList of 16000 items push then shift 6.7720 ns/op 8.8440 ns/op 0.77
array of 16000 items push then pop 73.017 ns/op 94.031 ns/op 0.78
LinkedList of 16000 items push then pop 6.7880 ns/op 10.069 ns/op 0.67
array of 24000 items push then shift 2.3270 us/op 2.6883 us/op 0.87
LinkedList of 24000 items push then shift 6.8910 ns/op 9.5450 ns/op 0.72
array of 24000 items push then pop 98.128 ns/op 118.85 ns/op 0.83
LinkedList of 24000 items push then pop 6.7350 ns/op 7.5280 ns/op 0.89
intersect bitArray bitLen 8 6.2590 ns/op 8.5560 ns/op 0.73
intersect array and set length 8 37.186 ns/op 44.605 ns/op 0.83
intersect bitArray bitLen 128 29.243 ns/op 34.947 ns/op 0.84
intersect array and set length 128 611.15 ns/op 860.99 ns/op 0.71
bitArray.getTrueBitIndexes() bitLen 128 984.00 ns/op 1.3770 us/op 0.71
bitArray.getTrueBitIndexes() bitLen 248 1.7340 us/op 2.0400 us/op 0.85
bitArray.getTrueBitIndexes() bitLen 512 3.6270 us/op 4.1280 us/op 0.88
Buffer.concat 32 items 591.00 ns/op 1.0200 us/op 0.58
Uint8Array.set 32 items 1.6340 us/op 2.2380 us/op 0.73
Buffer.copy 2.6710 us/op 2.5530 us/op 1.05
Uint8Array.set - with subarray 2.2280 us/op 3.1200 us/op 0.71
Uint8Array.set - without subarray 1.6790 us/op 2.0430 us/op 0.82
getUint32 - dataview 194.00 ns/op 206.00 ns/op 0.94
getUint32 - manual 123.00 ns/op 127.00 ns/op 0.97
Set add up to 64 items then delete first 2.0945 us/op 3.4572 us/op 0.61
OrderedSet add up to 64 items then delete first 3.1334 us/op 5.2650 us/op 0.60
Set add up to 64 items then delete last 2.4092 us/op 3.9355 us/op 0.61
OrderedSet add up to 64 items then delete last 3.4846 us/op 5.6381 us/op 0.62
Set add up to 64 items then delete middle 2.2648 us/op 2.6024 us/op 0.87
OrderedSet add up to 64 items then delete middle 5.0014 us/op 6.3230 us/op 0.79
Set add up to 128 items then delete first 4.8893 us/op 6.7040 us/op 0.73
OrderedSet add up to 128 items then delete first 7.6200 us/op 10.746 us/op 0.71
Set add up to 128 items then delete last 4.8358 us/op 5.9907 us/op 0.81
OrderedSet add up to 128 items then delete last 7.0742 us/op 9.1465 us/op 0.77
Set add up to 128 items then delete middle 4.6996 us/op 5.6136 us/op 0.84
OrderedSet add up to 128 items then delete middle 13.201 us/op 15.546 us/op 0.85
Set add up to 256 items then delete first 9.8399 us/op 12.222 us/op 0.81
OrderedSet add up to 256 items then delete first 15.675 us/op 19.153 us/op 0.82
Set add up to 256 items then delete last 9.2960 us/op 14.794 us/op 0.63
OrderedSet add up to 256 items then delete last 14.047 us/op 25.481 us/op 0.55
Set add up to 256 items then delete middle 9.3045 us/op 13.484 us/op 0.69
OrderedSet add up to 256 items then delete middle 40.036 us/op 53.002 us/op 0.76
transfer serialized Status (84 B) 2.1470 us/op 3.8960 us/op 0.55
copy serialized Status (84 B) 1.2300 us/op 2.0500 us/op 0.60
transfer serialized SignedVoluntaryExit (112 B) 2.2710 us/op 3.4070 us/op 0.67
copy serialized SignedVoluntaryExit (112 B) 1.2120 us/op 1.7530 us/op 0.69
transfer serialized ProposerSlashing (416 B) 3.1910 us/op 3.9530 us/op 0.81
copy serialized ProposerSlashing (416 B) 2.2350 us/op 2.4860 us/op 0.90
transfer serialized Attestation (485 B) 2.4510 us/op 3.4470 us/op 0.71
copy serialized Attestation (485 B) 2.3970 us/op 2.3020 us/op 1.04
transfer serialized AttesterSlashing (33232 B) 2.8630 us/op 3.8000 us/op 0.75
copy serialized AttesterSlashing (33232 B) 4.1380 us/op 5.9890 us/op 0.69
transfer serialized Small SignedBeaconBlock (128000 B) 3.1900 us/op 4.0930 us/op 0.78
copy serialized Small SignedBeaconBlock (128000 B) 9.1700 us/op 17.709 us/op 0.52
transfer serialized Avg SignedBeaconBlock (200000 B) 3.5800 us/op 4.7620 us/op 0.75
copy serialized Avg SignedBeaconBlock (200000 B) 14.508 us/op 22.508 us/op 0.64
transfer serialized BlobsSidecar (524380 B) 3.8710 us/op 5.6060 us/op 0.69
copy serialized BlobsSidecar (524380 B) 64.378 us/op 193.39 us/op 0.33
transfer serialized Big SignedBeaconBlock (1000000 B) 4.1340 us/op 6.3750 us/op 0.65
copy serialized Big SignedBeaconBlock (1000000 B) 115.56 us/op 122.63 us/op 0.94
pass gossip attestations to forkchoice per slot 2.6919 ms/op 3.4647 ms/op 0.78
forkChoice updateHead vc 100000 bc 64 eq 0 449.17 us/op 555.31 us/op 0.81
forkChoice updateHead vc 600000 bc 64 eq 0 2.7769 ms/op 3.1656 ms/op 0.88
forkChoice updateHead vc 1000000 bc 64 eq 0 4.7181 ms/op 5.8249 ms/op 0.81
forkChoice updateHead vc 600000 bc 320 eq 0 2.7961 ms/op 3.3800 ms/op 0.83
forkChoice updateHead vc 600000 bc 1200 eq 0 2.8036 ms/op 3.5219 ms/op 0.80
forkChoice updateHead vc 600000 bc 7200 eq 0 2.9453 ms/op 4.0035 ms/op 0.74
forkChoice updateHead vc 600000 bc 64 eq 1000 9.9885 ms/op 13.527 ms/op 0.74
forkChoice updateHead vc 600000 bc 64 eq 10000 9.8968 ms/op 11.838 ms/op 0.84
forkChoice updateHead vc 600000 bc 64 eq 300000 12.867 ms/op 23.447 ms/op 0.55
computeDeltas 500000 validators 300 proto nodes 3.7979 ms/op 4.9501 ms/op 0.77
computeDeltas 500000 validators 1200 proto nodes 3.9572 ms/op 5.3129 ms/op 0.74
computeDeltas 500000 validators 7200 proto nodes 3.9732 ms/op 4.3808 ms/op 0.91
computeDeltas 750000 validators 300 proto nodes 5.7985 ms/op 6.2350 ms/op 0.93
computeDeltas 750000 validators 1200 proto nodes 5.7794 ms/op 8.8494 ms/op 0.65
computeDeltas 750000 validators 7200 proto nodes 5.7515 ms/op 8.6839 ms/op 0.66
computeDeltas 1400000 validators 300 proto nodes 10.664 ms/op 16.159 ms/op 0.66
computeDeltas 1400000 validators 1200 proto nodes 10.685 ms/op 16.597 ms/op 0.64
computeDeltas 1400000 validators 7200 proto nodes 10.811 ms/op 17.624 ms/op 0.61
computeDeltas 2100000 validators 300 proto nodes 16.239 ms/op 24.686 ms/op 0.66
computeDeltas 2100000 validators 1200 proto nodes 16.905 ms/op 23.886 ms/op 0.71
computeDeltas 2100000 validators 7200 proto nodes 16.989 ms/op 19.966 ms/op 0.85
altair processAttestation - 250000 vs - 7PWei normalcase 2.1919 ms/op 2.9222 ms/op 0.75
altair processAttestation - 250000 vs - 7PWei worstcase 3.7024 ms/op 3.4480 ms/op 1.07
altair processAttestation - setStatus - 1/6 committees join 124.18 us/op 140.37 us/op 0.88
altair processAttestation - setStatus - 1/3 committees join 261.59 us/op 275.69 us/op 0.95
altair processAttestation - setStatus - 1/2 committees join 349.29 us/op 363.77 us/op 0.96
altair processAttestation - setStatus - 2/3 committees join 434.65 us/op 458.94 us/op 0.95
altair processAttestation - setStatus - 4/5 committees join 644.31 us/op 650.84 us/op 0.99
altair processAttestation - setStatus - 100% committees join 768.42 us/op 736.39 us/op 1.04
altair processBlock - 250000 vs - 7PWei normalcase 5.4370 ms/op 4.6751 ms/op 1.16
altair processBlock - 250000 vs - 7PWei normalcase hashState 39.632 ms/op 34.169 ms/op 1.16
altair processBlock - 250000 vs - 7PWei worstcase 47.730 ms/op 40.275 ms/op 1.19
altair processBlock - 250000 vs - 7PWei worstcase hashState 103.96 ms/op 84.982 ms/op 1.22
phase0 processBlock - 250000 vs - 7PWei normalcase 1.7981 ms/op 1.6459 ms/op 1.09
phase0 processBlock - 250000 vs - 7PWei worstcase 27.641 ms/op 25.823 ms/op 1.07
altair processEth1Data - 250000 vs - 7PWei normalcase 364.32 us/op 364.09 us/op 1.00
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 7.1710 us/op 10.312 us/op 0.70
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 37.583 us/op 48.302 us/op 0.78
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 11.616 us/op 14.343 us/op 0.81
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 5.4700 us/op 8.9900 us/op 0.61
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 166.57 us/op 241.30 us/op 0.69
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 1.3575 ms/op 1.2199 ms/op 1.11
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.8379 ms/op 2.2086 ms/op 0.83
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.5200 ms/op 1.7010 ms/op 0.89
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.4956 ms/op 5.7364 ms/op 0.61
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.5750 ms/op 1.9984 ms/op 0.79
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.5679 ms/op 5.3562 ms/op 0.67
Tree 40 250000 create 434.50 ms/op 722.81 ms/op 0.60
Tree 40 250000 get(125000) 149.93 ns/op 171.40 ns/op 0.87
Tree 40 250000 set(125000) 1.5399 us/op 2.6165 us/op 0.59
Tree 40 250000 toArray() 16.890 ms/op 22.588 ms/op 0.75
Tree 40 250000 iterate all - toArray() + loop 16.483 ms/op 23.212 ms/op 0.71
Tree 40 250000 iterate all - get(i) 59.855 ms/op 67.563 ms/op 0.89
Array 250000 create 2.4295 ms/op 3.8017 ms/op 0.64
Array 250000 clone - spread 810.77 us/op 1.8231 ms/op 0.44
Array 250000 get(125000) 0.41800 ns/op 0.47000 ns/op 0.89
Array 250000 set(125000) 0.44900 ns/op 0.49200 ns/op 0.91
Array 250000 iterate all - loop 110.91 us/op 123.07 us/op 0.90
phase0 afterProcessEpoch - 250000 vs - 7PWei 49.834 ms/op 57.473 ms/op 0.87
Array.fill - length 1000000 6.2538 ms/op 5.5272 ms/op 1.13
Array push - length 1000000 13.718 ms/op 17.082 ms/op 0.80
Array.get 0.28535 ns/op 0.31555 ns/op 0.90
Uint8Array.get 0.46508 ns/op 0.49027 ns/op 0.95
phase0 beforeProcessEpoch - 250000 vs - 7PWei 17.897 ms/op 21.337 ms/op 0.84
altair processEpoch - mainnet_e81889 319.45 ms/op 344.93 ms/op 0.93
mainnet_e81889 - altair beforeProcessEpoch 20.309 ms/op 23.278 ms/op 0.87
mainnet_e81889 - altair processJustificationAndFinalization 6.5110 us/op 7.2700 us/op 0.90
mainnet_e81889 - altair processInactivityUpdates 4.2198 ms/op 5.6517 ms/op 0.75
mainnet_e81889 - altair processRewardsAndPenalties 55.776 ms/op 48.354 ms/op 1.15
mainnet_e81889 - altair processRegistryUpdates 740.00 ns/op 902.00 ns/op 0.82
mainnet_e81889 - altair processSlashings 201.00 ns/op 196.00 ns/op 1.03
mainnet_e81889 - altair processEth1DataReset 172.00 ns/op 268.00 ns/op 0.64
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.2773 ms/op 1.3983 ms/op 0.91
mainnet_e81889 - altair processSlashingsReset 885.00 ns/op 940.00 ns/op 0.94
mainnet_e81889 - altair processRandaoMixesReset 1.1660 us/op 1.4930 us/op 0.78
mainnet_e81889 - altair processHistoricalRootsUpdate 194.00 ns/op 239.00 ns/op 0.81
mainnet_e81889 - altair processParticipationFlagUpdates 558.00 ns/op 784.00 ns/op 0.71
mainnet_e81889 - altair processSyncCommitteeUpdates 142.00 ns/op 151.00 ns/op 0.94
mainnet_e81889 - altair afterProcessEpoch 54.094 ms/op 58.564 ms/op 0.92
capella processEpoch - mainnet_e217614 1.2547 s/op 1.1685 s/op 1.07
mainnet_e217614 - capella beforeProcessEpoch 110.14 ms/op 77.559 ms/op 1.42
mainnet_e217614 - capella processJustificationAndFinalization 8.2010 us/op 6.2190 us/op 1.32
mainnet_e217614 - capella processInactivityUpdates 23.127 ms/op 22.180 ms/op 1.04
mainnet_e217614 - capella processRewardsAndPenalties 229.89 ms/op 203.41 ms/op 1.13
mainnet_e217614 - capella processRegistryUpdates 7.2910 us/op 9.7060 us/op 0.75
mainnet_e217614 - capella processSlashings 205.00 ns/op 250.00 ns/op 0.82
mainnet_e217614 - capella processEth1DataReset 197.00 ns/op 261.00 ns/op 0.75
mainnet_e217614 - capella processEffectiveBalanceUpdates 16.013 ms/op 15.022 ms/op 1.07
mainnet_e217614 - capella processSlashingsReset 932.00 ns/op 1.1550 us/op 0.81
mainnet_e217614 - capella processRandaoMixesReset 1.2760 us/op 1.6870 us/op 0.76
mainnet_e217614 - capella processHistoricalRootsUpdate 202.00 ns/op 275.00 ns/op 0.73
mainnet_e217614 - capella processParticipationFlagUpdates 819.00 ns/op 726.00 ns/op 1.13
mainnet_e217614 - capella afterProcessEpoch 134.01 ms/op 138.71 ms/op 0.97
phase0 processEpoch - mainnet_e58758 426.15 ms/op 379.85 ms/op 1.12
mainnet_e58758 - phase0 beforeProcessEpoch 118.05 ms/op 89.881 ms/op 1.31
mainnet_e58758 - phase0 processJustificationAndFinalization 6.2080 us/op 9.3890 us/op 0.66
mainnet_e58758 - phase0 processRewardsAndPenalties 44.671 ms/op 40.356 ms/op 1.11
mainnet_e58758 - phase0 processRegistryUpdates 4.0980 us/op 4.8330 us/op 0.85
mainnet_e58758 - phase0 processSlashings 239.00 ns/op 283.00 ns/op 0.84
mainnet_e58758 - phase0 processEth1DataReset 185.00 ns/op 281.00 ns/op 0.66
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.1270 ms/op 1.3123 ms/op 0.86
mainnet_e58758 - phase0 processSlashingsReset 1.1600 us/op 1.0340 us/op 1.12
mainnet_e58758 - phase0 processRandaoMixesReset 1.6120 us/op 1.7590 us/op 0.92
mainnet_e58758 - phase0 processHistoricalRootsUpdate 246.00 ns/op 191.00 ns/op 1.29
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.0120 us/op 1.2230 us/op 0.83
mainnet_e58758 - phase0 afterProcessEpoch 45.032 ms/op 54.109 ms/op 0.83
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.4094 ms/op 1.7289 ms/op 0.82
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 6.5758 ms/op 3.9733 ms/op 1.66
altair processInactivityUpdates - 250000 normalcase 21.647 ms/op 25.511 ms/op 0.85
altair processInactivityUpdates - 250000 worstcase 23.609 ms/op 23.440 ms/op 1.01
phase0 processRegistryUpdates - 250000 normalcase 8.9310 us/op 14.462 us/op 0.62
phase0 processRegistryUpdates - 250000 badcase_full_deposits 337.34 us/op 478.32 us/op 0.71
phase0 processRegistryUpdates - 250000 worstcase 0.5 127.74 ms/op 143.82 ms/op 0.89
altair processRewardsAndPenalties - 250000 normalcase 51.684 ms/op 55.769 ms/op 0.93
altair processRewardsAndPenalties - 250000 worstcase 36.445 ms/op 44.317 ms/op 0.82
phase0 getAttestationDeltas - 250000 normalcase 10.373 ms/op 10.267 ms/op 1.01
phase0 getAttestationDeltas - 250000 worstcase 6.3674 ms/op 9.8902 ms/op 0.64
phase0 processSlashings - 250000 worstcase 128.34 us/op 141.71 us/op 0.91
altair processSyncCommitteeUpdates - 250000 134.77 ms/op 159.16 ms/op 0.85
BeaconState.hashTreeRoot - No change 235.00 ns/op 245.00 ns/op 0.96
BeaconState.hashTreeRoot - 1 full validator 113.21 us/op 105.86 us/op 1.07
BeaconState.hashTreeRoot - 32 full validator 1.0780 ms/op 1.5245 ms/op 0.71
BeaconState.hashTreeRoot - 512 full validator 12.726 ms/op 15.930 ms/op 0.80
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 117.85 us/op 171.04 us/op 0.69
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.9604 ms/op 2.3721 ms/op 0.83
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 31.226 ms/op 30.642 ms/op 1.02
BeaconState.hashTreeRoot - 1 balances 91.471 us/op 86.577 us/op 1.06
BeaconState.hashTreeRoot - 32 balances 1.0846 ms/op 1.0032 ms/op 1.08
BeaconState.hashTreeRoot - 512 balances 8.6173 ms/op 9.6218 ms/op 0.90
BeaconState.hashTreeRoot - 250000 balances 169.29 ms/op 232.13 ms/op 0.73
aggregationBits - 2048 els - zipIndexesInBitList 23.003 us/op 45.575 us/op 0.50
byteArrayEquals 32 55.916 ns/op 66.355 ns/op 0.84
Buffer.compare 32 17.903 ns/op 20.791 ns/op 0.86
byteArrayEquals 1024 1.6713 us/op 1.8892 us/op 0.88
Buffer.compare 1024 25.946 ns/op 28.994 ns/op 0.89
byteArrayEquals 16384 26.604 us/op 32.120 us/op 0.83
Buffer.compare 16384 218.86 ns/op 227.75 ns/op 0.96
byteArrayEquals 123687377 194.96 ms/op 284.19 ms/op 0.69
Buffer.compare 123687377 6.7519 ms/op 10.672 ms/op 0.63
byteArrayEquals 32 - diff last byte 52.299 ns/op 87.119 ns/op 0.60
Buffer.compare 32 - diff last byte 17.153 ns/op 28.545 ns/op 0.60
byteArrayEquals 1024 - diff last byte 1.5804 us/op 2.7033 us/op 0.58
Buffer.compare 1024 - diff last byte 25.452 ns/op 40.384 ns/op 0.63
byteArrayEquals 16384 - diff last byte 25.521 us/op 35.438 us/op 0.72
Buffer.compare 16384 - diff last byte 188.30 ns/op 288.11 ns/op 0.65
byteArrayEquals 123687377 - diff last byte 195.87 ms/op 252.34 ms/op 0.78
Buffer.compare 123687377 - diff last byte 8.0353 ms/op 11.524 ms/op 0.70
byteArrayEquals 32 - random bytes 5.4540 ns/op 6.9740 ns/op 0.78
Buffer.compare 32 - random bytes 18.196 ns/op 20.531 ns/op 0.89
byteArrayEquals 1024 - random bytes 5.3620 ns/op 5.7930 ns/op 0.93
Buffer.compare 1024 - random bytes 18.172 ns/op 30.149 ns/op 0.60
byteArrayEquals 16384 - random bytes 5.3050 ns/op 7.0940 ns/op 0.75
Buffer.compare 16384 - random bytes 17.887 ns/op 20.934 ns/op 0.85
byteArrayEquals 123687377 - random bytes 6.5700 ns/op 10.010 ns/op 0.66
Buffer.compare 123687377 - random bytes 19.150 ns/op 29.210 ns/op 0.66
regular array get 100000 times 45.879 us/op 51.516 us/op 0.89
wrappedArray get 100000 times 34.030 us/op 66.993 us/op 0.51
arrayWithProxy get 100000 times 15.664 ms/op 15.471 ms/op 1.01
ssz.Root.equals 47.821 ns/op 52.286 ns/op 0.91
byteArrayEquals 46.826 ns/op 52.115 ns/op 0.90
Buffer.compare 10.554 ns/op 13.320 ns/op 0.79
processSlot - 1 slots 10.589 us/op 13.142 us/op 0.81
processSlot - 32 slots 2.3423 ms/op 3.4149 ms/op 0.69
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 56.810 ms/op 66.374 ms/op 0.86
getCommitteeAssignments - req 1 vs - 250000 vc 2.2071 ms/op 2.2912 ms/op 0.96
getCommitteeAssignments - req 100 vs - 250000 vc 4.3020 ms/op 4.3690 ms/op 0.98
getCommitteeAssignments - req 1000 vs - 250000 vc 4.5670 ms/op 4.6587 ms/op 0.98
findModifiedValidators - 10000 modified validators 794.14 ms/op 863.37 ms/op 0.92
findModifiedValidators - 1000 modified validators 723.89 ms/op 813.24 ms/op 0.89
findModifiedValidators - 100 modified validators 280.03 ms/op 294.65 ms/op 0.95
findModifiedValidators - 10 modified validators 188.34 ms/op 193.30 ms/op 0.97
findModifiedValidators - 1 modified validators 169.33 ms/op 263.79 ms/op 0.64
findModifiedValidators - no difference 177.48 ms/op 417.97 ms/op 0.42
compare ViewDUs 6.5371 s/op 9.0880 s/op 0.72
compare each validator Uint8Array 1.6995 s/op 1.8032 s/op 0.94
compare ViewDU to Uint8Array 1.2420 s/op 1.8490 s/op 0.67
migrate state 1000000 validators, 24 modified, 0 new 984.10 ms/op 1.0514 s/op 0.94
migrate state 1000000 validators, 1700 modified, 1000 new 1.3389 s/op 1.4445 s/op 0.93
migrate state 1000000 validators, 3400 modified, 2000 new 1.7234 s/op 1.7738 s/op 0.97
migrate state 1500000 validators, 24 modified, 0 new 1.0311 s/op 1.1704 s/op 0.88
migrate state 1500000 validators, 1700 modified, 1000 new 1.2334 s/op 1.4520 s/op 0.85
migrate state 1500000 validators, 3400 modified, 2000 new 1.3970 s/op 1.5951 s/op 0.88
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.2300 ns/op 6.8200 ns/op 0.62
state getBlockRootAtSlot - 250000 vs - 7PWei 950.57 ns/op 696.05 ns/op 1.37
naive computeProposerIndex 100000 validators 52.075 ms/op 77.993 ms/op 0.67
computeProposerIndex 100000 validators 9.1487 ms/op 12.525 ms/op 0.73
naiveGetNextSyncCommitteeIndices 1000 validators 8.0825 s/op 10.792 s/op 0.75
getNextSyncCommitteeIndices 1000 validators 247.50 ms/op 479.98 ms/op 0.52
naiveGetNextSyncCommitteeIndices 10000 validators 7.0231 s/op 9.9659 s/op 0.70
getNextSyncCommitteeIndices 10000 validators 242.91 ms/op 360.64 ms/op 0.67
naiveGetNextSyncCommitteeIndices 100000 validators 7.5078 s/op 11.431 s/op 0.66
getNextSyncCommitteeIndices 100000 validators 307.96 ms/op 538.26 ms/op 0.57
naive computeShuffledIndex 100000 validators 22.832 s/op 39.646 s/op 0.58
cached computeShuffledIndex 100000 validators 545.45 ms/op 748.55 ms/op 0.73
naive computeShuffledIndex 2000000 validators 644.19 s/op 651.19 s/op 0.99
cached computeShuffledIndex 2000000 validators 83.231 s/op 52.901 s/op 1.57
computeProposers - vc 250000 27.618 ms/op 11.630 ms/op 2.37
computeEpochShuffling - vc 250000 52.950 ms/op 47.821 ms/op 1.11
getNextSyncCommittee - vc 250000 332.18 ms/op 207.47 ms/op 1.60
computeSigningRoot for AttestationData 55.781 us/op 28.776 us/op 1.94
hash AttestationData serialized data then Buffer.toString(base64) 1.7908 us/op 1.7517 us/op 1.02
toHexString serialized data 5.5096 us/op 1.4467 us/op 3.81
Buffer.toString(base64) 205.24 ns/op 177.46 ns/op 1.16
nodejs block root to RootHex using toHex 149.55 ns/op 158.47 ns/op 0.94
nodejs block root to RootHex using toRootHex 127.64 ns/op 97.773 ns/op 1.31
browser block root to RootHex using the deprecated toHexString 267.64 ns/op 244.15 ns/op 1.10
browser block root to RootHex using toHex 210.93 ns/op 189.40 ns/op 1.11
browser block root to RootHex using toRootHex 193.11 ns/op 176.90 ns/op 1.09

by benchmarkbot/action

Copy link
Contributor

@ensi321 ensi321 left a comment

Choose a reason for hiding this comment

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

Is this intended to be merged into unstable or is it only to showcase this feature in holesky-rescue?

If former, I don't really think we should pass the blacklisted blocks from cli arguments but probably read it from a file since it can get lengthy.

There is also an argument brought up by lighthouse guys here about this flag can potentially be abused to censor blocks, so we need to take this into account when making design decisions eg. make it harder to use, limit number of blacklisted blocks, restrict the this feature on mainnet etc.

@nflaig
Copy link
Member

nflaig commented Feb 27, 2025

flag can potentially be abused to censor blocks

I don't see how that is possible, the node needs to be restarted to black list a block but at this point the block should already have enough votes to be considered part of the canonical chain and the node that blacklists it would just follow a separate (minority) chain. I can't really think of a scenario here, but maybe I am missing something obvious

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.

5 participants