Skip to content

feat: add blacklisted block check#7498

Merged
wemeetagain merged 8 commits intounstablefrom
mkeil/holesky-rescue
Mar 13, 2025
Merged

feat: add blacklisted block check#7498
wemeetagain merged 8 commits intounstablefrom
mkeil/holesky-rescue

Conversation

@matthewkeil
Copy link
Copy Markdown
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
@codecov
Copy link
Copy Markdown

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.15%. Comparing base (d60218e) to head (5267663).
Report is 12 commits behind head on unstable.

Additional details and impacted files
@@             Coverage Diff              @@
##           unstable    #7498      +/-   ##
============================================
+ Coverage     50.14%   50.15%   +0.01%     
============================================
  Files           603      603              
  Lines         40454    40475      +21     
  Branches       2226     2229       +3     
============================================
+ Hits          20285    20302      +17     
- Misses        20129    20133       +4     
  Partials         40       40              
🚀 New features to boost your workflow:
  • Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Comment thread packages/cli/src/options/beaconNodeOptions/chain.ts Outdated
**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 <twoeths@users.noreply.github.com>
Co-authored-by: matthewkeil <me@matthewkeil.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 26, 2025

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 1883df7 Previous: d60218e Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 753.98 us/op 1.2127 ms/op 0.62
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 30.668 us/op 43.825 us/op 0.70
BLS verify - blst 863.60 us/op 1.0255 ms/op 0.84
BLS verifyMultipleSignatures 3 - blst 1.3016 ms/op 1.5817 ms/op 0.82
BLS verifyMultipleSignatures 8 - blst 2.1233 ms/op 2.1987 ms/op 0.97
BLS verifyMultipleSignatures 32 - blst 4.5285 ms/op 5.7233 ms/op 0.79
BLS verifyMultipleSignatures 64 - blst 8.4820 ms/op 10.464 ms/op 0.81
BLS verifyMultipleSignatures 128 - blst 16.021 ms/op 20.107 ms/op 0.80
BLS deserializing 10000 signatures 641.26 ms/op 831.44 ms/op 0.77
BLS deserializing 100000 signatures 6.3192 s/op 7.5621 s/op 0.84
BLS verifyMultipleSignatures - same message - 3 - blst 931.79 us/op 944.01 us/op 0.99
BLS verifyMultipleSignatures - same message - 8 - blst 1.1178 ms/op 1.0647 ms/op 1.05
BLS verifyMultipleSignatures - same message - 32 - blst 1.6898 ms/op 1.7382 ms/op 0.97
BLS verifyMultipleSignatures - same message - 64 - blst 2.5176 ms/op 2.6958 ms/op 0.93
BLS verifyMultipleSignatures - same message - 128 - blst 4.1815 ms/op 4.6047 ms/op 0.91
BLS aggregatePubkeys 32 - blst 17.870 us/op 21.840 us/op 0.82
BLS aggregatePubkeys 128 - blst 63.307 us/op 75.165 us/op 0.84
notSeenSlots=1 numMissedVotes=1 numBadVotes=10 58.238 ms/op 51.931 ms/op 1.12
notSeenSlots=1 numMissedVotes=0 numBadVotes=4 51.224 ms/op 52.027 ms/op 0.98
notSeenSlots=2 numMissedVotes=1 numBadVotes=10 35.977 ms/op 35.270 ms/op 1.02
getSlashingsAndExits - default max 56.152 us/op 83.115 us/op 0.68
getSlashingsAndExits - 2k 319.77 us/op 338.42 us/op 0.94
proposeBlockBody type=full, size=empty 4.1121 ms/op 5.2135 ms/op 0.79
isKnown best case - 1 super set check 395.00 ns/op 204.00 ns/op 1.94
isKnown normal case - 2 super set checks 391.00 ns/op 195.00 ns/op 2.01
isKnown worse case - 16 super set checks 392.00 ns/op 195.00 ns/op 2.01
InMemoryCheckpointStateCache - add get delete 2.4750 us/op 2.4130 us/op 1.03
validate api signedAggregateAndProof - struct 1.4932 ms/op 1.3793 ms/op 1.08
validate gossip signedAggregateAndProof - struct 1.4920 ms/op 1.3644 ms/op 1.09
batch validate gossip attestation - vc 640000 - chunk 32 116.48 us/op 119.39 us/op 0.98
batch validate gossip attestation - vc 640000 - chunk 64 98.275 us/op 105.86 us/op 0.93
batch validate gossip attestation - vc 640000 - chunk 128 90.450 us/op 107.80 us/op 0.84
batch validate gossip attestation - vc 640000 - chunk 256 92.555 us/op 109.24 us/op 0.85
pickEth1Vote - no votes 785.39 us/op 1.0250 ms/op 0.77
pickEth1Vote - max votes 4.3832 ms/op 6.1799 ms/op 0.71
pickEth1Vote - Eth1Data hashTreeRoot value x2048 9.9767 ms/op 19.800 ms/op 0.50
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 13.199 ms/op 18.619 ms/op 0.71
pickEth1Vote - Eth1Data fastSerialize value x2048 343.90 us/op 449.67 us/op 0.76
pickEth1Vote - Eth1Data fastSerialize tree x2048 2.5002 ms/op 2.6660 ms/op 0.94
bytes32 toHexString 516.00 ns/op 367.00 ns/op 1.41
bytes32 Buffer.toString(hex) 416.00 ns/op 246.00 ns/op 1.69
bytes32 Buffer.toString(hex) from Uint8Array 501.00 ns/op 330.00 ns/op 1.52
bytes32 Buffer.toString(hex) + 0x 415.00 ns/op 250.00 ns/op 1.66
Object access 1 prop 0.30500 ns/op 0.12300 ns/op 2.48
Map access 1 prop 0.30600 ns/op 0.12200 ns/op 2.51
Object get x1000 4.9270 ns/op 5.8640 ns/op 0.84
Map get x1000 5.4400 ns/op 6.2470 ns/op 0.87
Object set x1000 20.698 ns/op 27.348 ns/op 0.76
Map set x1000 17.082 ns/op 18.741 ns/op 0.91
Return object 10000 times 0.28580 ns/op 0.28360 ns/op 1.01
Throw Error 10000 times 3.6183 us/op 4.9554 us/op 0.73
toHex 100.66 ns/op 135.13 ns/op 0.74
Buffer.from 93.925 ns/op 124.84 ns/op 0.75
shared Buffer 64.493 ns/op 80.366 ns/op 0.80
fastMsgIdFn sha256 / 200 bytes 1.9710 us/op 2.1620 us/op 0.91
fastMsgIdFn h32 xxhash / 200 bytes 377.00 ns/op 209.00 ns/op 1.80
fastMsgIdFn h64 xxhash / 200 bytes 533.00 ns/op 273.00 ns/op 1.95
fastMsgIdFn sha256 / 1000 bytes 5.7500 us/op 7.3350 us/op 0.78
fastMsgIdFn h32 xxhash / 1000 bytes 515.00 ns/op 327.00 ns/op 1.57
fastMsgIdFn h64 xxhash / 1000 bytes 506.00 ns/op 347.00 ns/op 1.46
fastMsgIdFn sha256 / 10000 bytes 46.687 us/op 67.340 us/op 0.69
fastMsgIdFn h32 xxhash / 10000 bytes 1.8270 us/op 1.8290 us/op 1.00
fastMsgIdFn h64 xxhash / 10000 bytes 1.2830 us/op 1.2110 us/op 1.06
send data - 1000 256B messages 12.176 ms/op 11.968 ms/op 1.02
send data - 1000 512B messages 14.074 ms/op 20.895 ms/op 0.67
send data - 1000 1024B messages 25.161 ms/op 24.970 ms/op 1.01
send data - 1000 1200B messages 17.996 ms/op 25.161 ms/op 0.72
send data - 1000 2048B messages 19.747 ms/op 27.035 ms/op 0.73
send data - 1000 4096B messages 22.688 ms/op 30.294 ms/op 0.75
send data - 1000 16384B messages 61.115 ms/op 73.264 ms/op 0.83
send data - 1000 65536B messages 268.42 ms/op 244.73 ms/op 1.10
enrSubnets - fastDeserialize 64 bits 980.00 ns/op 951.00 ns/op 1.03
enrSubnets - ssz BitVector 64 bits 506.00 ns/op 340.00 ns/op 1.49
enrSubnets - fastDeserialize 4 bits 333.00 ns/op 132.00 ns/op 2.52
enrSubnets - ssz BitVector 4 bits 525.00 ns/op 343.00 ns/op 1.53
prioritizePeers score -10:0 att 32-0.1 sync 2-0 101.62 us/op 129.38 us/op 0.79
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 162.10 us/op 154.39 us/op 1.05
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 183.69 us/op 219.55 us/op 0.84
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 324.23 us/op 394.43 us/op 0.82
prioritizePeers score 0:0 att 64-1 sync 4-1 403.80 us/op 500.95 us/op 0.81
array of 16000 items push then shift 1.2204 us/op 1.7112 us/op 0.71
LinkedList of 16000 items push then shift 7.3500 ns/op 8.0100 ns/op 0.92
array of 16000 items push then pop 68.330 ns/op 80.878 ns/op 0.84
LinkedList of 16000 items push then pop 6.3410 ns/op 7.3530 ns/op 0.86
array of 24000 items push then shift 1.9165 us/op 2.5319 us/op 0.76
LinkedList of 24000 items push then shift 6.7700 ns/op 7.2290 ns/op 0.94
array of 24000 items push then pop 93.980 ns/op 105.51 ns/op 0.89
LinkedList of 24000 items push then pop 6.0230 ns/op 7.2290 ns/op 0.83
intersect bitArray bitLen 8 5.1470 ns/op 6.5010 ns/op 0.79
intersect array and set length 8 31.152 ns/op 38.556 ns/op 0.81
intersect bitArray bitLen 128 25.829 ns/op 30.382 ns/op 0.85
intersect array and set length 128 528.70 ns/op 635.45 ns/op 0.83
bitArray.getTrueBitIndexes() bitLen 128 1.2140 us/op 1.0620 us/op 1.14
bitArray.getTrueBitIndexes() bitLen 248 1.9440 us/op 1.8780 us/op 1.04
bitArray.getTrueBitIndexes() bitLen 512 3.6730 us/op 3.8070 us/op 0.96
Buffer.concat 32 items 934.00 ns/op 625.00 ns/op 1.49
Uint8Array.set 32 items 1.2860 us/op 1.0530 us/op 1.22
Buffer.copy 2.1810 us/op 2.1910 us/op 1.00
Uint8Array.set - with subarray 1.8440 us/op 2.8690 us/op 0.64
Uint8Array.set - without subarray 1.2360 us/op 1.9010 us/op 0.65
getUint32 - dataview 391.00 ns/op 198.00 ns/op 1.97
getUint32 - manual 308.00 ns/op 120.00 ns/op 2.57
Set add up to 64 items then delete first 1.6055 us/op 2.2710 us/op 0.71
OrderedSet add up to 64 items then delete first 2.7951 us/op 3.4932 us/op 0.80
Set add up to 64 items then delete last 1.8432 us/op 2.6171 us/op 0.70
OrderedSet add up to 64 items then delete last 3.1133 us/op 3.6478 us/op 0.85
Set add up to 64 items then delete middle 2.0546 us/op 2.3923 us/op 0.86
OrderedSet add up to 64 items then delete middle 5.1030 us/op 5.2936 us/op 0.96
Set add up to 128 items then delete first 4.5796 us/op 5.1866 us/op 0.88
OrderedSet add up to 128 items then delete first 6.8307 us/op 8.1366 us/op 0.84
Set add up to 128 items then delete last 3.9422 us/op 5.2571 us/op 0.75
OrderedSet add up to 128 items then delete last 6.0789 us/op 7.6214 us/op 0.80
Set add up to 128 items then delete middle 3.8601 us/op 5.0747 us/op 0.76
OrderedSet add up to 128 items then delete middle 11.565 us/op 14.404 us/op 0.80
Set add up to 256 items then delete first 7.8133 us/op 11.512 us/op 0.68
OrderedSet add up to 256 items then delete first 12.467 us/op 18.026 us/op 0.69
Set add up to 256 items then delete last 7.6415 us/op 11.961 us/op 0.64
OrderedSet add up to 256 items then delete last 11.843 us/op 18.208 us/op 0.65
Set add up to 256 items then delete middle 7.6668 us/op 10.358 us/op 0.74
OrderedSet add up to 256 items then delete middle 35.046 us/op 41.508 us/op 0.84
transfer serialized Status (84 B) 2.6670 us/op 2.1920 us/op 1.22
copy serialized Status (84 B) 1.4640 us/op 1.1580 us/op 1.26
transfer serialized SignedVoluntaryExit (112 B) 3.0290 us/op 2.2210 us/op 1.36
copy serialized SignedVoluntaryExit (112 B) 1.9030 us/op 1.1690 us/op 1.63
transfer serialized ProposerSlashing (416 B) 2.8030 us/op 2.2400 us/op 1.25
copy serialized ProposerSlashing (416 B) 2.2680 us/op 1.2570 us/op 1.80
transfer serialized Attestation (485 B) 3.5520 us/op 2.2390 us/op 1.59
copy serialized Attestation (485 B) 2.5780 us/op 1.2970 us/op 1.99
transfer serialized AttesterSlashing (33232 B) 3.2020 us/op 2.6410 us/op 1.21
copy serialized AttesterSlashing (33232 B) 3.8710 us/op 4.0380 us/op 0.96
transfer serialized Small SignedBeaconBlock (128000 B) 3.3280 us/op 3.1580 us/op 1.05
copy serialized Small SignedBeaconBlock (128000 B) 7.7570 us/op 9.7550 us/op 0.80
transfer serialized Avg SignedBeaconBlock (200000 B) 3.2400 us/op 3.8320 us/op 0.85
copy serialized Avg SignedBeaconBlock (200000 B) 9.4800 us/op 15.748 us/op 0.60
transfer serialized BlobsSidecar (524380 B) 4.0160 us/op 4.5290 us/op 0.89
copy serialized BlobsSidecar (524380 B) 65.210 us/op 63.967 us/op 1.02
transfer serialized Big SignedBeaconBlock (1000000 B) 4.6460 us/op 4.4250 us/op 1.05
copy serialized Big SignedBeaconBlock (1000000 B) 119.47 us/op 245.36 us/op 0.49
pass gossip attestations to forkchoice per slot 2.5257 ms/op 2.7769 ms/op 0.91
forkChoice updateHead vc 100000 bc 64 eq 0 356.03 us/op 472.64 us/op 0.75
forkChoice updateHead vc 600000 bc 64 eq 0 2.6415 ms/op 2.8803 ms/op 0.92
forkChoice updateHead vc 1000000 bc 64 eq 0 4.4406 ms/op 4.9662 ms/op 0.89
forkChoice updateHead vc 600000 bc 320 eq 0 2.4847 ms/op 2.9377 ms/op 0.85
forkChoice updateHead vc 600000 bc 1200 eq 0 2.3288 ms/op 2.9971 ms/op 0.78
forkChoice updateHead vc 600000 bc 7200 eq 0 2.5339 ms/op 3.3168 ms/op 0.76
forkChoice updateHead vc 600000 bc 64 eq 1000 9.8754 ms/op 10.885 ms/op 0.91
forkChoice updateHead vc 600000 bc 64 eq 10000 9.5824 ms/op 10.940 ms/op 0.88
forkChoice updateHead vc 600000 bc 64 eq 300000 12.384 ms/op 14.984 ms/op 0.83
computeDeltas 500000 validators 300 proto nodes 3.3356 ms/op 4.0379 ms/op 0.83
computeDeltas 500000 validators 1200 proto nodes 3.5036 ms/op 4.0236 ms/op 0.87
computeDeltas 500000 validators 7200 proto nodes 3.1446 ms/op 4.0326 ms/op 0.78
computeDeltas 750000 validators 300 proto nodes 4.6784 ms/op 6.0494 ms/op 0.77
computeDeltas 750000 validators 1200 proto nodes 4.6820 ms/op 6.1874 ms/op 0.76
computeDeltas 750000 validators 7200 proto nodes 4.5549 ms/op 7.0469 ms/op 0.65
computeDeltas 1400000 validators 300 proto nodes 8.5791 ms/op 14.079 ms/op 0.61
computeDeltas 1400000 validators 1200 proto nodes 8.7032 ms/op 14.008 ms/op 0.62
computeDeltas 1400000 validators 7200 proto nodes 8.6623 ms/op 12.325 ms/op 0.70
computeDeltas 2100000 validators 300 proto nodes 13.100 ms/op 16.806 ms/op 0.78
computeDeltas 2100000 validators 1200 proto nodes 12.954 ms/op 20.096 ms/op 0.64
computeDeltas 2100000 validators 7200 proto nodes 13.217 ms/op 17.842 ms/op 0.74
altair processAttestation - 250000 vs - 7PWei normalcase 1.8905 ms/op 2.1407 ms/op 0.88
altair processAttestation - 250000 vs - 7PWei worstcase 2.6559 ms/op 3.3765 ms/op 0.79
altair processAttestation - setStatus - 1/6 committees join 104.49 us/op 136.64 us/op 0.76
altair processAttestation - setStatus - 1/3 committees join 192.55 us/op 257.94 us/op 0.75
altair processAttestation - setStatus - 1/2 committees join 262.89 us/op 371.58 us/op 0.71
altair processAttestation - setStatus - 2/3 committees join 352.67 us/op 450.64 us/op 0.78
altair processAttestation - setStatus - 4/5 committees join 512.55 us/op 687.15 us/op 0.75
altair processAttestation - setStatus - 100% committees join 570.24 us/op 807.17 us/op 0.71
altair processBlock - 250000 vs - 7PWei normalcase 4.2503 ms/op 5.5016 ms/op 0.77
altair processBlock - 250000 vs - 7PWei normalcase hashState 33.439 ms/op 40.170 ms/op 0.83
altair processBlock - 250000 vs - 7PWei worstcase 33.986 ms/op 45.087 ms/op 0.75
altair processBlock - 250000 vs - 7PWei worstcase hashState 72.072 ms/op 108.08 ms/op 0.67
phase0 processBlock - 250000 vs - 7PWei normalcase 1.2487 ms/op 1.9747 ms/op 0.63
phase0 processBlock - 250000 vs - 7PWei worstcase 20.712 ms/op 26.033 ms/op 0.80
altair processEth1Data - 250000 vs - 7PWei normalcase 277.59 us/op 382.60 us/op 0.73
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 4.6210 us/op 6.8750 us/op 0.67
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 27.778 us/op 34.173 us/op 0.81
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 6.7490 us/op 10.412 us/op 0.65
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 2.8780 us/op 6.6370 us/op 0.43
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 113.08 us/op 139.42 us/op 0.81
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 704.63 us/op 1.2045 ms/op 0.58
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.0446 ms/op 1.6200 ms/op 0.64
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 976.20 us/op 1.5886 ms/op 0.61
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 2.8239 ms/op 3.9169 ms/op 0.72
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.0467 ms/op 1.6609 ms/op 0.63
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 2.7489 ms/op 4.3487 ms/op 0.63
Tree 40 250000 create 354.96 ms/op 716.72 ms/op 0.50
Tree 40 250000 get(125000) 114.35 ns/op 161.55 ns/op 0.71
Tree 40 250000 set(125000) 1.1682 us/op 2.0703 us/op 0.56
Tree 40 250000 toArray() 12.623 ms/op 22.169 ms/op 0.57
Tree 40 250000 iterate all - toArray() + loop 12.623 ms/op 26.649 ms/op 0.47
Tree 40 250000 iterate all - get(i) 41.710 ms/op 68.791 ms/op 0.61
Array 250000 create 2.3633 ms/op 2.8252 ms/op 0.84
Array 250000 clone - spread 624.22 us/op 1.5252 ms/op 0.41
Array 250000 get(125000) 0.55300 ns/op 0.44700 ns/op 1.24
Array 250000 set(125000) 0.55900 ns/op 0.47900 ns/op 1.17
Array 250000 iterate all - loop 72.221 us/op 122.73 us/op 0.59
phase0 afterProcessEpoch - 250000 vs - 7PWei 39.029 ms/op 55.947 ms/op 0.70
Array.fill - length 1000000 2.3713 ms/op 4.3666 ms/op 0.54
Array push - length 1000000 9.5646 ms/op 18.222 ms/op 0.52
Array.get 0.24190 ns/op 0.30359 ns/op 0.80
Uint8Array.get 0.32144 ns/op 0.51961 ns/op 0.62
phase0 beforeProcessEpoch - 250000 vs - 7PWei 16.211 ms/op 31.042 ms/op 0.52
altair processEpoch - mainnet_e81889 270.67 ms/op 333.11 ms/op 0.81
mainnet_e81889 - altair beforeProcessEpoch 15.587 ms/op 24.708 ms/op 0.63
mainnet_e81889 - altair processJustificationAndFinalization 5.3100 us/op 8.4110 us/op 0.63
mainnet_e81889 - altair processInactivityUpdates 3.1638 ms/op 8.7842 ms/op 0.36
mainnet_e81889 - altair processRewardsAndPenalties 53.493 ms/op 46.816 ms/op 1.14
mainnet_e81889 - altair processRegistryUpdates 833.00 ns/op 805.00 ns/op 1.03
mainnet_e81889 - altair processSlashings 390.00 ns/op 208.00 ns/op 1.88
mainnet_e81889 - altair processEth1DataReset 386.00 ns/op 194.00 ns/op 1.99
mainnet_e81889 - altair processEffectiveBalanceUpdates 923.68 us/op 1.5627 ms/op 0.59
mainnet_e81889 - altair processSlashingsReset 1.0710 us/op 1.3110 us/op 0.82
mainnet_e81889 - altair processRandaoMixesReset 1.2040 us/op 1.5350 us/op 0.78
mainnet_e81889 - altair processHistoricalRootsUpdate 395.00 ns/op 197.00 ns/op 2.01
mainnet_e81889 - altair processParticipationFlagUpdates 687.00 ns/op 613.00 ns/op 1.12
mainnet_e81889 - altair processSyncCommitteeUpdates 368.00 ns/op 155.00 ns/op 2.37
mainnet_e81889 - altair afterProcessEpoch 39.995 ms/op 59.224 ms/op 0.68
capella processEpoch - mainnet_e217614 899.67 ms/op 967.41 ms/op 0.93
mainnet_e217614 - capella beforeProcessEpoch 56.625 ms/op 73.958 ms/op 0.77
mainnet_e217614 - capella processJustificationAndFinalization 4.6370 us/op 5.6890 us/op 0.82
mainnet_e217614 - capella processInactivityUpdates 10.830 ms/op 17.388 ms/op 0.62
mainnet_e217614 - capella processRewardsAndPenalties 202.11 ms/op 189.17 ms/op 1.07
mainnet_e217614 - capella processRegistryUpdates 6.8150 us/op 6.8250 us/op 1.00
mainnet_e217614 - capella processSlashings 389.00 ns/op 179.00 ns/op 2.17
mainnet_e217614 - capella processEth1DataReset 410.00 ns/op 175.00 ns/op 2.34
mainnet_e217614 - capella processEffectiveBalanceUpdates 4.0343 ms/op 14.071 ms/op 0.29
mainnet_e217614 - capella processSlashingsReset 1.2310 us/op 884.00 ns/op 1.39
mainnet_e217614 - capella processRandaoMixesReset 1.6380 us/op 1.1590 us/op 1.41
mainnet_e217614 - capella processHistoricalRootsUpdate 388.00 ns/op 179.00 ns/op 2.17
mainnet_e217614 - capella processParticipationFlagUpdates 695.00 ns/op 540.00 ns/op 1.29
mainnet_e217614 - capella afterProcessEpoch 103.84 ms/op 138.33 ms/op 0.75
phase0 processEpoch - mainnet_e58758 299.24 ms/op 436.59 ms/op 0.69
mainnet_e58758 - phase0 beforeProcessEpoch 67.029 ms/op 120.33 ms/op 0.56
mainnet_e58758 - phase0 processJustificationAndFinalization 4.7880 us/op 6.7380 us/op 0.71
mainnet_e58758 - phase0 processRewardsAndPenalties 39.918 ms/op 43.118 ms/op 0.93
mainnet_e58758 - phase0 processRegistryUpdates 2.7040 us/op 5.2160 us/op 0.52
mainnet_e58758 - phase0 processSlashings 401.00 ns/op 243.00 ns/op 1.65
mainnet_e58758 - phase0 processEth1DataReset 391.00 ns/op 189.00 ns/op 2.07
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 758.13 us/op 1.1058 ms/op 0.69
mainnet_e58758 - phase0 processSlashingsReset 1.1260 us/op 1.1980 us/op 0.94
mainnet_e58758 - phase0 processRandaoMixesReset 1.2930 us/op 1.7280 us/op 0.75
mainnet_e58758 - phase0 processHistoricalRootsUpdate 425.00 ns/op 192.00 ns/op 2.21
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.2110 us/op 1.0210 us/op 1.19
mainnet_e58758 - phase0 afterProcessEpoch 34.664 ms/op 44.489 ms/op 0.78
phase0 processEffectiveBalanceUpdates - 250000 normalcase 993.44 us/op 1.3982 ms/op 0.71
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.2129 ms/op 1.9690 ms/op 0.62
altair processInactivityUpdates - 250000 normalcase 16.800 ms/op 18.280 ms/op 0.92
altair processInactivityUpdates - 250000 worstcase 18.644 ms/op 19.854 ms/op 0.94
phase0 processRegistryUpdates - 250000 normalcase 2.5900 us/op 5.5600 us/op 0.47
phase0 processRegistryUpdates - 250000 badcase_full_deposits 280.10 us/op 265.09 us/op 1.06
phase0 processRegistryUpdates - 250000 worstcase 0.5 96.676 ms/op 109.37 ms/op 0.88
altair processRewardsAndPenalties - 250000 normalcase 37.803 ms/op 40.480 ms/op 0.93
altair processRewardsAndPenalties - 250000 worstcase 36.801 ms/op 29.377 ms/op 1.25
phase0 getAttestationDeltas - 250000 normalcase 4.6028 ms/op 7.9058 ms/op 0.58
phase0 getAttestationDeltas - 250000 worstcase 5.3786 ms/op 13.437 ms/op 0.40
phase0 processSlashings - 250000 worstcase 87.091 us/op 88.492 us/op 0.98
altair processSyncCommitteeUpdates - 250000 94.550 ms/op 119.47 ms/op 0.79
BeaconState.hashTreeRoot - No change 440.00 ns/op 220.00 ns/op 2.00
BeaconState.hashTreeRoot - 1 full validator 67.543 us/op 79.148 us/op 0.85
BeaconState.hashTreeRoot - 32 full validator 656.52 us/op 790.76 us/op 0.83
BeaconState.hashTreeRoot - 512 full validator 9.7437 ms/op 9.0584 ms/op 1.08
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 91.260 us/op 92.807 us/op 0.98
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.0743 ms/op 1.5508 ms/op 0.69
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 14.781 ms/op 19.927 ms/op 0.74
BeaconState.hashTreeRoot - 1 balances 60.012 us/op 76.346 us/op 0.79
BeaconState.hashTreeRoot - 32 balances 806.75 us/op 682.76 us/op 1.18
BeaconState.hashTreeRoot - 512 balances 5.6340 ms/op 7.5840 ms/op 0.74
BeaconState.hashTreeRoot - 250000 balances 178.40 ms/op 146.56 ms/op 1.22
aggregationBits - 2048 els - zipIndexesInBitList 17.928 us/op 22.973 us/op 0.78
byteArrayEquals 32 45.508 ns/op 57.439 ns/op 0.79
Buffer.compare 32 15.606 ns/op 19.132 ns/op 0.82
byteArrayEquals 1024 1.2853 us/op 1.7017 us/op 0.76
Buffer.compare 1024 23.516 ns/op 28.678 ns/op 0.82
byteArrayEquals 16384 20.496 us/op 27.043 us/op 0.76
Buffer.compare 16384 202.13 ns/op 214.18 ns/op 0.94
byteArrayEquals 123687377 153.47 ms/op 198.51 ms/op 0.77
Buffer.compare 123687377 5.8263 ms/op 6.9537 ms/op 0.84
byteArrayEquals 32 - diff last byte 48.568 ns/op 55.274 ns/op 0.88
Buffer.compare 32 - diff last byte 16.130 ns/op 17.534 ns/op 0.92
byteArrayEquals 1024 - diff last byte 1.2862 us/op 1.5890 us/op 0.81
Buffer.compare 1024 - diff last byte 23.134 ns/op 25.920 ns/op 0.89
byteArrayEquals 16384 - diff last byte 20.642 us/op 26.234 us/op 0.79
Buffer.compare 16384 - diff last byte 191.09 ns/op 211.43 ns/op 0.90
byteArrayEquals 123687377 - diff last byte 149.77 ms/op 204.45 ms/op 0.73
Buffer.compare 123687377 - diff last byte 4.1520 ms/op 7.8507 ms/op 0.53
byteArrayEquals 32 - random bytes 4.9490 ns/op 5.4290 ns/op 0.91
Buffer.compare 32 - random bytes 16.145 ns/op 18.595 ns/op 0.87
byteArrayEquals 1024 - random bytes 4.9130 ns/op 5.3920 ns/op 0.91
Buffer.compare 1024 - random bytes 16.247 ns/op 18.833 ns/op 0.86
byteArrayEquals 16384 - random bytes 4.9190 ns/op 5.5100 ns/op 0.89
Buffer.compare 16384 - random bytes 16.340 ns/op 18.746 ns/op 0.87
byteArrayEquals 123687377 - random bytes 7.8300 ns/op 8.1300 ns/op 0.96
Buffer.compare 123687377 - random bytes 19.110 ns/op 19.070 ns/op 1.00
regular array get 100000 times 30.894 us/op 34.496 us/op 0.90
wrappedArray get 100000 times 30.820 us/op 34.341 us/op 0.90
arrayWithProxy get 100000 times 10.034 ms/op 14.886 ms/op 0.67
ssz.Root.equals 43.893 ns/op 49.461 ns/op 0.89
byteArrayEquals 41.782 ns/op 48.562 ns/op 0.86
Buffer.compare 9.3510 ns/op 11.347 ns/op 0.82
processSlot - 1 slots 8.8200 us/op 10.618 us/op 0.83
processSlot - 32 slots 2.2281 ms/op 2.1083 ms/op 1.06
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 55.460 ms/op 56.181 ms/op 0.99
getCommitteeAssignments - req 1 vs - 250000 vc 1.8310 ms/op 2.2586 ms/op 0.81
getCommitteeAssignments - req 100 vs - 250000 vc 3.5959 ms/op 4.5254 ms/op 0.79
getCommitteeAssignments - req 1000 vs - 250000 vc 3.7732 ms/op 4.8567 ms/op 0.78
findModifiedValidators - 10000 modified validators 799.64 ms/op 830.14 ms/op 0.96
findModifiedValidators - 1000 modified validators 689.32 ms/op 831.69 ms/op 0.83
findModifiedValidators - 100 modified validators 165.91 ms/op 289.68 ms/op 0.57
findModifiedValidators - 10 modified validators 143.46 ms/op 184.55 ms/op 0.78
findModifiedValidators - 1 modified validators 157.88 ms/op 293.87 ms/op 0.54
findModifiedValidators - no difference 142.01 ms/op 176.80 ms/op 0.80
compare ViewDUs 6.7598 s/op 7.5312 s/op 0.90
compare each validator Uint8Array 1.0057 s/op 1.9129 s/op 0.53
compare ViewDU to Uint8Array 974.39 ms/op 1.5658 s/op 0.62
migrate state 1000000 validators, 24 modified, 0 new 873.41 ms/op 950.70 ms/op 0.92
migrate state 1000000 validators, 1700 modified, 1000 new 1.1405 s/op 1.2061 s/op 0.95
migrate state 1000000 validators, 3400 modified, 2000 new 1.2946 s/op 1.5815 s/op 0.82
migrate state 1500000 validators, 24 modified, 0 new 872.05 ms/op 1.1940 s/op 0.73
migrate state 1500000 validators, 1700 modified, 1000 new 1.0929 s/op 1.4832 s/op 0.74
migrate state 1500000 validators, 3400 modified, 2000 new 1.2166 s/op 1.6042 s/op 0.76
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 5.8500 ns/op 4.9300 ns/op 1.19
state getBlockRootAtSlot - 250000 vs - 7PWei 488.90 ns/op 590.92 ns/op 0.83
naive computeProposerIndex 100000 validators 44.977 ms/op 60.222 ms/op 0.75
computeProposerIndex 100000 validators 6.4575 ms/op 10.516 ms/op 0.61
naiveGetNextSyncCommitteeIndices 1000 validators 6.2424 s/op 8.3008 s/op 0.75
getNextSyncCommitteeIndices 1000 validators 206.89 ms/op 335.60 ms/op 0.62
naiveGetNextSyncCommitteeIndices 10000 validators 6.3041 s/op 9.1576 s/op 0.69
getNextSyncCommitteeIndices 10000 validators 200.26 ms/op 292.91 ms/op 0.68
naiveGetNextSyncCommitteeIndices 100000 validators 5.7790 s/op 8.2386 s/op 0.70
getNextSyncCommitteeIndices 100000 validators 202.28 ms/op 255.72 ms/op 0.79
naive computeShuffledIndex 100000 validators 20.298 s/op 26.054 s/op 0.78
cached computeShuffledIndex 100000 validators 466.31 ms/op 578.25 ms/op 0.81
naive computeShuffledIndex 2000000 validators 392.69 s/op 549.02 s/op 0.72
cached computeShuffledIndex 2000000 validators 33.224 s/op 37.775 s/op 0.88
computeProposers - vc 250000 8.1824 ms/op 10.473 ms/op 0.78
computeEpochShuffling - vc 250000 35.760 ms/op 43.911 ms/op 0.81
getNextSyncCommittee - vc 250000 121.53 ms/op 232.97 ms/op 0.52
computeSigningRoot for AttestationData 22.542 us/op 31.384 us/op 0.72
hash AttestationData serialized data then Buffer.toString(base64) 1.3301 us/op 1.7253 us/op 0.77
toHexString serialized data 917.79 ns/op 1.4976 us/op 0.61
Buffer.toString(base64) 111.84 ns/op 180.37 ns/op 0.62
nodejs block root to RootHex using toHex 100.50 ns/op 162.66 ns/op 0.62
nodejs block root to RootHex using toRootHex 65.525 ns/op 92.073 ns/op 0.71
browser block root to RootHex using the deprecated toHexString 179.65 ns/op 251.98 ns/op 0.71
browser block root to RootHex using toHex 148.59 ns/op 185.59 ns/op 0.80
browser block root to RootHex using toRootHex 142.29 ns/op 175.05 ns/op 0.81

by benchmarkbot/action

Copy link
Copy Markdown
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
Copy Markdown
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

@philknows
Copy link
Copy Markdown
Member

As discussed on standup #7524 , if this feature is going ahead, it should be merged to unstable before Friday deadline for v1.28-rc.0

@philknows philknows added this to the v1.28.0 milestone Mar 6, 2025
nflaig
nflaig previously approved these changes Mar 6, 2025
Copy link
Copy Markdown
Member

@nflaig nflaig left a comment

Choose a reason for hiding this comment

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

LGTM

@nflaig nflaig requested a review from wemeetagain March 12, 2025 07:08
@nflaig
Copy link
Copy Markdown
Member

nflaig commented Mar 12, 2025

we can also add an api returning slot/root hexes of black listed blocks

@twoeths this is a comment from you on discord, do you feel like we still want this? seems simple to implement but I don't feel strongly about adding this

although on second thought it might be helpful to see all black listed parent blocks

@twoeths
Copy link
Copy Markdown
Contributor

twoeths commented Mar 13, 2025

we can also add an api returning slot/root hexes of black listed blocks

@twoeths this is a comment from you on discord, do you feel like we still want this? seems simple to implement but I don't feel strongly about adding this

although on second thought it might be helpful to see all black listed parent blocks

I think we should add it considering how easy it is to implement
during devnets (hopefully not mainnet), if issues happen we can easily debug, that would be a critical input for the devnet to investigate. For example from black listed blocks we can trace which clients sent us that...

@wemeetagain wemeetagain merged commit bddb386 into unstable Mar 13, 2025
19 checks passed
@wemeetagain wemeetagain deleted the mkeil/holesky-rescue branch March 13, 2025 19:53
nflaig added a commit that referenced this pull request Mar 14, 2025
Follow up on #7498 to improve
the blacklisted blocks feature
- adds new endpoint `/eth/v1/lodestar/blacklisted_blocks` to return
root/slot of blacklisted blocks
- updates blacklisted blocks store on chain to use `Map` to also keep
track of slot
- proper parsing of root hex values passed through CLI flag to make sure
those are handled as `string` and not `number`
- add unit test to sanity check implementation + various type issue
fixed not caught due to previous tsconfig issue
@wemeetagain
Copy link
Copy Markdown
Member

🎉 This PR is included in v1.28.0 🎉

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.

6 participants