Skip to content

Conversation

@wemeetagain
Copy link
Member

Motivation

  • prep for block input refactor

Description

  • pull fulu types out of peerDAS branch

@wemeetagain wemeetagain requested a review from a team as a code owner April 30, 2025 19:30
@codecov
Copy link

codecov bot commented Apr 30, 2025

Codecov Report

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

Project coverage is 56.08%. Comparing base (30d888c) to head (ece7403).
Report is 6 commits behind head on unstable.

Additional details and impacted files
@@             Coverage Diff              @@
##           unstable    #7774      +/-   ##
============================================
+ Coverage     56.05%   56.08%   +0.03%     
============================================
  Files           837      823      -14     
  Lines         57906    57961      +55     
  Branches       4450     4452       +2     
============================================
+ Hits          32459    32508      +49     
- Misses        25379    25385       +6     
  Partials         68       68              
🚀 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.

@github-actions
Copy link
Contributor

github-actions bot commented Apr 30, 2025

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 41368ff Previous: ca57e6c Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 911.38 us/op 957.60 us/op 0.95
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 33.278 us/op 34.938 us/op 0.95
BLS verify - blst 811.14 us/op 850.17 us/op 0.95
BLS verifyMultipleSignatures 3 - blst 1.1682 ms/op 1.5984 ms/op 0.73
BLS verifyMultipleSignatures 8 - blst 1.6314 ms/op 2.5081 ms/op 0.65
BLS verifyMultipleSignatures 32 - blst 4.8463 ms/op 6.9537 ms/op 0.70
BLS verifyMultipleSignatures 64 - blst 8.9798 ms/op 10.522 ms/op 0.85
BLS verifyMultipleSignatures 128 - blst 17.025 ms/op 17.223 ms/op 0.99
BLS deserializing 10000 signatures 672.63 ms/op 683.55 ms/op 0.98
BLS deserializing 100000 signatures 6.7305 s/op 6.8778 s/op 0.98
BLS verifyMultipleSignatures - same message - 3 - blst 892.80 us/op 1.6790 ms/op 0.53
BLS verifyMultipleSignatures - same message - 8 - blst 1.0052 ms/op 1.7259 ms/op 0.58
BLS verifyMultipleSignatures - same message - 32 - blst 1.6807 ms/op 1.9584 ms/op 0.86
BLS verifyMultipleSignatures - same message - 64 - blst 2.5475 ms/op 2.8474 ms/op 0.89
BLS verifyMultipleSignatures - same message - 128 - blst 4.2997 ms/op 4.4394 ms/op 0.97
BLS aggregatePubkeys 32 - blst 19.751 us/op 19.520 us/op 1.01
BLS aggregatePubkeys 128 - blst 71.260 us/op 69.848 us/op 1.02
notSeenSlots=1 numMissedVotes=1 numBadVotes=10 46.270 ms/op 55.323 ms/op 0.84
notSeenSlots=1 numMissedVotes=0 numBadVotes=4 42.950 ms/op 55.737 ms/op 0.77
notSeenSlots=2 numMissedVotes=1 numBadVotes=10 34.246 ms/op 45.949 ms/op 0.75
getSlashingsAndExits - default max 71.151 us/op 72.211 us/op 0.99
getSlashingsAndExits - 2k 267.09 us/op 320.55 us/op 0.83
proposeBlockBody type=full, size=empty 5.3849 ms/op 5.3855 ms/op 1.00
isKnown best case - 1 super set check 204.00 ns/op 205.00 ns/op 1.00
isKnown normal case - 2 super set checks 202.00 ns/op 203.00 ns/op 1.00
isKnown worse case - 16 super set checks 202.00 ns/op 203.00 ns/op 1.00
InMemoryCheckpointStateCache - add get delete 2.3230 us/op 2.4410 us/op 0.95
validate api signedAggregateAndProof - struct 1.3441 ms/op 2.5809 ms/op 0.52
validate gossip signedAggregateAndProof - struct 1.3294 ms/op 2.5863 ms/op 0.51
batch validate gossip attestation - vc 640000 - chunk 32 112.22 us/op 118.73 us/op 0.95
batch validate gossip attestation - vc 640000 - chunk 64 99.035 us/op 101.45 us/op 0.98
batch validate gossip attestation - vc 640000 - chunk 128 91.802 us/op 94.455 us/op 0.97
batch validate gossip attestation - vc 640000 - chunk 256 94.211 us/op 96.384 us/op 0.98
pickEth1Vote - no votes 981.87 us/op 966.51 us/op 1.02
pickEth1Vote - max votes 5.4800 ms/op 5.5489 ms/op 0.99
pickEth1Vote - Eth1Data hashTreeRoot value x2048 11.484 ms/op 10.651 ms/op 1.08
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 15.278 ms/op 22.962 ms/op 0.67
pickEth1Vote - Eth1Data fastSerialize value x2048 480.76 us/op 466.19 us/op 1.03
pickEth1Vote - Eth1Data fastSerialize tree x2048 4.2663 ms/op 2.5490 ms/op 1.67
bytes32 toHexString 367.00 ns/op 372.00 ns/op 0.99
bytes32 Buffer.toString(hex) 246.00 ns/op 339.00 ns/op 0.73
bytes32 Buffer.toString(hex) from Uint8Array 345.00 ns/op 349.00 ns/op 0.99
bytes32 Buffer.toString(hex) + 0x 247.00 ns/op 257.00 ns/op 0.96
Object access 1 prop 0.12000 ns/op 0.12300 ns/op 0.98
Map access 1 prop 0.12700 ns/op 0.12800 ns/op 0.99
Object get x1000 5.6570 ns/op 5.8860 ns/op 0.96
Map get x1000 6.2200 ns/op 6.3650 ns/op 0.98
Object set x1000 27.939 ns/op 28.246 ns/op 0.99
Map set x1000 19.305 ns/op 19.338 ns/op 1.00
Return object 10000 times 0.28530 ns/op 0.28590 ns/op 1.00
Throw Error 10000 times 4.1908 us/op 4.2205 us/op 0.99
toHex 138.36 ns/op 144.59 ns/op 0.96
Buffer.from 123.72 ns/op 128.59 ns/op 0.96
shared Buffer 86.993 ns/op 86.735 ns/op 1.00
fastMsgIdFn sha256 / 200 bytes 2.1900 us/op 2.8010 us/op 0.78
fastMsgIdFn h32 xxhash / 200 bytes 222.00 ns/op 210.00 ns/op 1.06
fastMsgIdFn h64 xxhash / 200 bytes 268.00 ns/op 266.00 ns/op 1.01
fastMsgIdFn sha256 / 1000 bytes 6.9520 us/op 7.2530 us/op 0.96
fastMsgIdFn h32 xxhash / 1000 bytes 340.00 ns/op 337.00 ns/op 1.01
fastMsgIdFn h64 xxhash / 1000 bytes 343.00 ns/op 438.00 ns/op 0.78
fastMsgIdFn sha256 / 10000 bytes 63.039 us/op 65.225 us/op 0.97
fastMsgIdFn h32 xxhash / 10000 bytes 1.7420 us/op 2.2650 us/op 0.77
fastMsgIdFn h64 xxhash / 10000 bytes 1.1630 us/op 1.2410 us/op 0.94
send data - 1000 256B messages 10.843 ms/op 11.447 ms/op 0.95
send data - 1000 512B messages 15.226 ms/op 16.772 ms/op 0.91
send data - 1000 1024B messages 24.027 ms/op 26.433 ms/op 0.91
send data - 1000 1200B messages 21.013 ms/op 19.546 ms/op 1.08
send data - 1000 2048B messages 21.958 ms/op 21.498 ms/op 1.02
send data - 1000 4096B messages 24.887 ms/op 26.511 ms/op 0.94
send data - 1000 16384B messages 69.012 ms/op 85.332 ms/op 0.81
send data - 1000 65536B messages 210.06 ms/op 211.18 ms/op 0.99
enrSubnets - fastDeserialize 64 bits 883.00 ns/op 874.00 ns/op 1.01
enrSubnets - ssz BitVector 64 bits 331.00 ns/op 312.00 ns/op 1.06
enrSubnets - fastDeserialize 4 bits 140.00 ns/op 135.00 ns/op 1.04
enrSubnets - ssz BitVector 4 bits 334.00 ns/op 330.00 ns/op 1.01
prioritizePeers score -10:0 att 32-0.1 sync 2-0 113.14 us/op 118.44 us/op 0.96
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 134.74 us/op 137.86 us/op 0.98
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 191.57 us/op 197.89 us/op 0.97
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 360.41 us/op 371.83 us/op 0.97
prioritizePeers score 0:0 att 64-1 sync 4-1 437.12 us/op 451.09 us/op 0.97
array of 16000 items push then shift 1.5601 us/op 1.6062 us/op 0.97
LinkedList of 16000 items push then shift 6.7240 ns/op 6.8450 ns/op 0.98
array of 16000 items push then pop 70.916 ns/op 74.456 ns/op 0.95
LinkedList of 16000 items push then pop 6.6610 ns/op 6.7880 ns/op 0.98
array of 24000 items push then shift 2.3003 us/op 2.3495 us/op 0.98
LinkedList of 24000 items push then shift 6.5600 ns/op 6.8390 ns/op 0.96
array of 24000 items push then pop 94.767 ns/op 100.10 ns/op 0.95
LinkedList of 24000 items push then pop 6.5110 ns/op 6.7850 ns/op 0.96
intersect bitArray bitLen 8 6.0420 ns/op 6.3350 ns/op 0.95
intersect array and set length 8 35.915 ns/op 37.817 ns/op 0.95
intersect bitArray bitLen 128 28.175 ns/op 29.680 ns/op 0.95
intersect array and set length 128 593.83 ns/op 621.28 ns/op 0.96
bitArray.getTrueBitIndexes() bitLen 128 969.00 ns/op 1.0040 us/op 0.97
bitArray.getTrueBitIndexes() bitLen 248 1.6790 us/op 1.7680 us/op 0.95
bitArray.getTrueBitIndexes() bitLen 512 3.4140 us/op 3.6210 us/op 0.94
Buffer.concat 32 items 605.00 ns/op 761.00 ns/op 0.80
Uint8Array.set 32 items 910.00 ns/op 976.00 ns/op 0.93
Buffer.copy 2.0190 us/op 2.1430 us/op 0.94
Uint8Array.set - with subarray 1.5240 us/op 1.6960 us/op 0.90
Uint8Array.set - without subarray 932.00 ns/op 1.0940 us/op 0.85
getUint32 - dataview 203.00 ns/op 196.00 ns/op 1.04
getUint32 - manual 130.00 ns/op 125.00 ns/op 1.04
Set add up to 64 items then delete first 2.0783 us/op 2.1252 us/op 0.98
OrderedSet add up to 64 items then delete first 3.1056 us/op 3.1925 us/op 0.97
Set add up to 64 items then delete last 2.2658 us/op 2.3061 us/op 0.98
OrderedSet add up to 64 items then delete last 3.4887 us/op 3.5123 us/op 0.99
Set add up to 64 items then delete middle 2.4095 us/op 2.3085 us/op 1.04
OrderedSet add up to 64 items then delete middle 4.9062 us/op 5.0969 us/op 0.96
Set add up to 128 items then delete first 4.7499 us/op 4.9858 us/op 0.95
OrderedSet add up to 128 items then delete first 7.4804 us/op 7.7041 us/op 0.97
Set add up to 128 items then delete last 4.6142 us/op 4.7883 us/op 0.96
OrderedSet add up to 128 items then delete last 6.9271 us/op 7.4297 us/op 0.93
Set add up to 128 items then delete middle 4.6243 us/op 4.7604 us/op 0.97
OrderedSet add up to 128 items then delete middle 12.993 us/op 13.618 us/op 0.95
Set add up to 256 items then delete first 9.7227 us/op 10.369 us/op 0.94
OrderedSet add up to 256 items then delete first 15.121 us/op 15.667 us/op 0.97
Set add up to 256 items then delete last 9.2215 us/op 9.5716 us/op 0.96
OrderedSet add up to 256 items then delete last 13.875 us/op 14.199 us/op 0.98
Set add up to 256 items then delete middle 9.1454 us/op 9.5400 us/op 0.96
OrderedSet add up to 256 items then delete middle 39.143 us/op 40.683 us/op 0.96
transfer serialized Status (84 B) 2.2110 us/op 2.3030 us/op 0.96
copy serialized Status (84 B) 1.1570 us/op 1.1700 us/op 0.99
transfer serialized SignedVoluntaryExit (112 B) 2.2630 us/op 2.3330 us/op 0.97
copy serialized SignedVoluntaryExit (112 B) 1.1960 us/op 1.2000 us/op 1.00
transfer serialized ProposerSlashing (416 B) 2.3320 us/op 2.3840 us/op 0.98
copy serialized ProposerSlashing (416 B) 2.0420 us/op 1.3750 us/op 1.49
transfer serialized Attestation (485 B) 3.3100 us/op 2.3290 us/op 1.42
copy serialized Attestation (485 B) 1.6340 us/op 1.2240 us/op 1.33
transfer serialized AttesterSlashing (33232 B) 2.6300 us/op 2.5090 us/op 1.05
copy serialized AttesterSlashing (33232 B) 3.5200 us/op 3.4620 us/op 1.02
transfer serialized Small SignedBeaconBlock (128000 B) 3.1180 us/op 3.2320 us/op 0.96
copy serialized Small SignedBeaconBlock (128000 B) 11.675 us/op 9.2080 us/op 1.27
transfer serialized Avg SignedBeaconBlock (200000 B) 3.3270 us/op 3.8330 us/op 0.87
copy serialized Avg SignedBeaconBlock (200000 B) 13.251 us/op 13.303 us/op 1.00
transfer serialized BlobsSidecar (524380 B) 3.2460 us/op 3.7470 us/op 0.87
copy serialized BlobsSidecar (524380 B) 67.113 us/op 59.176 us/op 1.13
transfer serialized Big SignedBeaconBlock (1000000 B) 3.4640 us/op 3.8210 us/op 0.91
copy serialized Big SignedBeaconBlock (1000000 B) 108.33 us/op 109.48 us/op 0.99
pass gossip attestations to forkchoice per slot 2.6780 ms/op 2.7269 ms/op 0.98
forkChoice updateHead vc 100000 bc 64 eq 0 442.57 us/op 502.57 us/op 0.88
forkChoice updateHead vc 600000 bc 64 eq 0 2.7186 ms/op 3.0194 ms/op 0.90
forkChoice updateHead vc 1000000 bc 64 eq 0 4.6759 ms/op 4.8560 ms/op 0.96
forkChoice updateHead vc 600000 bc 320 eq 0 2.6844 ms/op 2.8132 ms/op 0.95
forkChoice updateHead vc 600000 bc 1200 eq 0 2.6989 ms/op 2.8479 ms/op 0.95
forkChoice updateHead vc 600000 bc 7200 eq 0 3.0281 ms/op 3.1646 ms/op 0.96
forkChoice updateHead vc 600000 bc 64 eq 1000 10.209 ms/op 10.421 ms/op 0.98
forkChoice updateHead vc 600000 bc 64 eq 10000 10.038 ms/op 10.211 ms/op 0.98
forkChoice updateHead vc 600000 bc 64 eq 300000 13.554 ms/op 13.051 ms/op 1.04
computeDeltas 500000 validators 300 proto nodes 3.9216 ms/op 3.8041 ms/op 1.03
computeDeltas 500000 validators 1200 proto nodes 3.9348 ms/op 3.8280 ms/op 1.03
computeDeltas 500000 validators 7200 proto nodes 3.9643 ms/op 3.8111 ms/op 1.04
computeDeltas 750000 validators 300 proto nodes 5.8331 ms/op 5.7348 ms/op 1.02
computeDeltas 750000 validators 1200 proto nodes 5.8089 ms/op 5.7732 ms/op 1.01
computeDeltas 750000 validators 7200 proto nodes 5.7263 ms/op 5.7203 ms/op 1.00
computeDeltas 1400000 validators 300 proto nodes 10.640 ms/op 10.829 ms/op 0.98
computeDeltas 1400000 validators 1200 proto nodes 10.761 ms/op 10.779 ms/op 1.00
computeDeltas 1400000 validators 7200 proto nodes 10.613 ms/op 10.812 ms/op 0.98
computeDeltas 2100000 validators 300 proto nodes 16.037 ms/op 16.319 ms/op 0.98
computeDeltas 2100000 validators 1200 proto nodes 16.169 ms/op 16.238 ms/op 1.00
computeDeltas 2100000 validators 7200 proto nodes 16.281 ms/op 16.683 ms/op 0.98
altair processAttestation - 250000 vs - 7PWei normalcase 1.9373 ms/op 1.9949 ms/op 0.97
altair processAttestation - 250000 vs - 7PWei worstcase 2.9109 ms/op 2.9048 ms/op 1.00
altair processAttestation - setStatus - 1/6 committees join 130.19 us/op 120.03 us/op 1.08
altair processAttestation - setStatus - 1/3 committees join 252.73 us/op 231.09 us/op 1.09
altair processAttestation - setStatus - 1/2 committees join 355.05 us/op 323.60 us/op 1.10
altair processAttestation - setStatus - 2/3 committees join 443.86 us/op 415.14 us/op 1.07
altair processAttestation - setStatus - 4/5 committees join 611.97 us/op 575.26 us/op 1.06
altair processAttestation - setStatus - 100% committees join 703.69 us/op 695.58 us/op 1.01
altair processBlock - 250000 vs - 7PWei normalcase 4.1194 ms/op 7.9061 ms/op 0.52
altair processBlock - 250000 vs - 7PWei normalcase hashState 29.421 ms/op 39.298 ms/op 0.75
altair processBlock - 250000 vs - 7PWei worstcase 33.426 ms/op 42.954 ms/op 0.78
altair processBlock - 250000 vs - 7PWei worstcase hashState 76.349 ms/op 103.93 ms/op 0.73
phase0 processBlock - 250000 vs - 7PWei normalcase 1.6286 ms/op 2.4564 ms/op 0.66
phase0 processBlock - 250000 vs - 7PWei worstcase 20.346 ms/op 33.035 ms/op 0.62
altair processEth1Data - 250000 vs - 7PWei normalcase 319.91 us/op 382.53 us/op 0.84
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 5.5440 us/op 9.3950 us/op 0.59
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 35.695 us/op 57.681 us/op 0.62
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 9.9900 us/op 10.374 us/op 0.96
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 6.1120 us/op 10.049 us/op 0.61
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 137.95 us/op 257.61 us/op 0.54
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 1.8938 ms/op 1.8927 ms/op 1.00
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 2.3634 ms/op 2.4233 ms/op 0.98
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 2.3818 ms/op 2.3907 ms/op 1.00
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 4.4408 ms/op 4.4265 ms/op 1.00
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.4767 ms/op 2.4361 ms/op 1.02
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.5240 ms/op 4.5960 ms/op 0.98
Tree 40 250000 create 428.18 ms/op 417.63 ms/op 1.03
Tree 40 250000 get(125000) 138.75 ns/op 139.75 ns/op 0.99
Tree 40 250000 set(125000) 1.4800 us/op 1.4695 us/op 1.01
Tree 40 250000 toArray() 15.412 ms/op 14.990 ms/op 1.03
Tree 40 250000 iterate all - toArray() + loop 14.938 ms/op 14.704 ms/op 1.02
Tree 40 250000 iterate all - get(i) 49.028 ms/op 49.435 ms/op 0.99
Array 250000 create 2.3429 ms/op 2.3991 ms/op 0.98
Array 250000 clone - spread 786.17 us/op 812.20 us/op 0.97
Array 250000 get(125000) 0.40500 ns/op 0.39800 ns/op 1.02
Array 250000 set(125000) 0.42500 ns/op 0.42300 ns/op 1.00
Array 250000 iterate all - loop 79.880 us/op 80.344 us/op 0.99
phase0 afterProcessEpoch - 250000 vs - 7PWei 41.045 ms/op 42.126 ms/op 0.97
Array.fill - length 1000000 3.6696 ms/op 3.5409 ms/op 1.04
Array push - length 1000000 12.049 ms/op 12.891 ms/op 0.93
Array.get 0.26416 ns/op 0.27179 ns/op 0.97
Uint8Array.get 0.42690 ns/op 0.43702 ns/op 0.98
phase0 beforeProcessEpoch - 250000 vs - 7PWei 14.953 ms/op 15.456 ms/op 0.97
altair processEpoch - mainnet_e81889 279.76 ms/op 312.77 ms/op 0.89
mainnet_e81889 - altair beforeProcessEpoch 17.827 ms/op 18.706 ms/op 0.95
mainnet_e81889 - altair processJustificationAndFinalization 5.2170 us/op 5.6030 us/op 0.93
mainnet_e81889 - altair processInactivityUpdates 4.0977 ms/op 4.1227 ms/op 0.99
mainnet_e81889 - altair processRewardsAndPenalties 39.577 ms/op 50.993 ms/op 0.78
mainnet_e81889 - altair processRegistryUpdates 708.00 ns/op 703.00 ns/op 1.01
mainnet_e81889 - altair processSlashings 182.00 ns/op 179.00 ns/op 1.02
mainnet_e81889 - altair processEth1DataReset 175.00 ns/op 178.00 ns/op 0.98
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.2312 ms/op 1.2750 ms/op 0.97
mainnet_e81889 - altair processSlashingsReset 869.00 ns/op 1.2100 us/op 0.72
mainnet_e81889 - altair processRandaoMixesReset 1.1090 us/op 1.2400 us/op 0.89
mainnet_e81889 - altair processHistoricalRootsUpdate 176.00 ns/op 185.00 ns/op 0.95
mainnet_e81889 - altair processParticipationFlagUpdates 518.00 ns/op 514.00 ns/op 1.01
mainnet_e81889 - altair processSyncCommitteeUpdates 141.00 ns/op 141.00 ns/op 1.00
mainnet_e81889 - altair afterProcessEpoch 43.618 ms/op 44.140 ms/op 0.99
capella processEpoch - mainnet_e217614 890.46 ms/op 1.0229 s/op 0.87
mainnet_e217614 - capella beforeProcessEpoch 61.257 ms/op 60.319 ms/op 1.02
mainnet_e217614 - capella processJustificationAndFinalization 5.2500 us/op 5.1820 us/op 1.01
mainnet_e217614 - capella processInactivityUpdates 13.684 ms/op 14.446 ms/op 0.95
mainnet_e217614 - capella processRewardsAndPenalties 170.30 ms/op 214.78 ms/op 0.79
mainnet_e217614 - capella processRegistryUpdates 6.3140 us/op 7.9790 us/op 0.79
mainnet_e217614 - capella processSlashings 181.00 ns/op 187.00 ns/op 0.97
mainnet_e217614 - capella processEth1DataReset 179.00 ns/op 177.00 ns/op 1.01
mainnet_e217614 - capella processEffectiveBalanceUpdates 4.1591 ms/op 10.192 ms/op 0.41
mainnet_e217614 - capella processSlashingsReset 867.00 ns/op 1.2230 us/op 0.71
mainnet_e217614 - capella processRandaoMixesReset 1.1370 us/op 1.6410 us/op 0.69
mainnet_e217614 - capella processHistoricalRootsUpdate 182.00 ns/op 182.00 ns/op 1.00
mainnet_e217614 - capella processParticipationFlagUpdates 517.00 ns/op 524.00 ns/op 0.99
mainnet_e217614 - capella afterProcessEpoch 113.24 ms/op 117.89 ms/op 0.96
phase0 processEpoch - mainnet_e58758 278.50 ms/op 328.64 ms/op 0.85
mainnet_e58758 - phase0 beforeProcessEpoch 71.382 ms/op 77.871 ms/op 0.92
mainnet_e58758 - phase0 processJustificationAndFinalization 5.4780 us/op 10.113 us/op 0.54
mainnet_e58758 - phase0 processRewardsAndPenalties 33.642 ms/op 46.502 ms/op 0.72
mainnet_e58758 - phase0 processRegistryUpdates 3.0650 us/op 4.1870 us/op 0.73
mainnet_e58758 - phase0 processSlashings 176.00 ns/op 185.00 ns/op 0.95
mainnet_e58758 - phase0 processEth1DataReset 175.00 ns/op 194.00 ns/op 0.90
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.1398 ms/op 1.1637 ms/op 0.98
mainnet_e58758 - phase0 processSlashingsReset 919.00 ns/op 893.00 ns/op 1.03
mainnet_e58758 - phase0 processRandaoMixesReset 1.1480 us/op 1.2470 us/op 0.92
mainnet_e58758 - phase0 processHistoricalRootsUpdate 177.00 ns/op 178.00 ns/op 0.99
mainnet_e58758 - phase0 processParticipationRecordUpdates 865.00 ns/op 917.00 ns/op 0.94
mainnet_e58758 - phase0 afterProcessEpoch 34.872 ms/op 35.895 ms/op 0.97
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.3006 ms/op 1.8532 ms/op 0.70
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.9914 ms/op 1.9289 ms/op 1.03
altair processInactivityUpdates - 250000 normalcase 16.082 ms/op 21.088 ms/op 0.76
altair processInactivityUpdates - 250000 worstcase 16.797 ms/op 20.966 ms/op 0.80
phase0 processRegistryUpdates - 250000 normalcase 6.6620 us/op 10.814 us/op 0.62
phase0 processRegistryUpdates - 250000 badcase_full_deposits 237.08 us/op 437.80 us/op 0.54
phase0 processRegistryUpdates - 250000 worstcase 0.5 99.951 ms/op 130.79 ms/op 0.76
altair processRewardsAndPenalties - 250000 normalcase 26.692 ms/op 34.526 ms/op 0.77
altair processRewardsAndPenalties - 250000 worstcase 27.662 ms/op 42.249 ms/op 0.65
phase0 getAttestationDeltas - 250000 normalcase 6.6008 ms/op 18.309 ms/op 0.36
phase0 getAttestationDeltas - 250000 worstcase 6.4038 ms/op 5.9283 ms/op 1.08
phase0 processSlashings - 250000 worstcase 76.572 us/op 125.15 us/op 0.61
altair processSyncCommitteeUpdates - 250000 10.533 ms/op 10.969 ms/op 0.96
BeaconState.hashTreeRoot - No change 210.00 ns/op 237.00 ns/op 0.89
BeaconState.hashTreeRoot - 1 full validator 83.199 us/op 91.433 us/op 0.91
BeaconState.hashTreeRoot - 32 full validator 1.1396 ms/op 1.5053 ms/op 0.76
BeaconState.hashTreeRoot - 512 full validator 10.860 ms/op 13.563 ms/op 0.80
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 103.02 us/op 108.23 us/op 0.95
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.4203 ms/op 1.4532 ms/op 0.98
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 20.502 ms/op 23.378 ms/op 0.88
BeaconState.hashTreeRoot - 1 balances 74.846 us/op 86.149 us/op 0.87
BeaconState.hashTreeRoot - 32 balances 828.22 us/op 807.40 us/op 1.03
BeaconState.hashTreeRoot - 512 balances 7.8382 ms/op 9.1232 ms/op 0.86
BeaconState.hashTreeRoot - 250000 balances 179.73 ms/op 192.60 ms/op 0.93
aggregationBits - 2048 els - zipIndexesInBitList 21.538 us/op 21.124 us/op 1.02
byteArrayEquals 32 53.388 ns/op 53.280 ns/op 1.00
Buffer.compare 32 17.131 ns/op 17.149 ns/op 1.00
byteArrayEquals 1024 1.5836 us/op 1.5796 us/op 1.00
Buffer.compare 1024 25.289 ns/op 24.660 ns/op 1.03
byteArrayEquals 16384 25.042 us/op 25.133 us/op 1.00
Buffer.compare 16384 184.51 ns/op 178.53 ns/op 1.03
byteArrayEquals 123687377 190.61 ms/op 189.66 ms/op 1.00
Buffer.compare 123687377 16.050 ms/op 6.1134 ms/op 2.63
byteArrayEquals 32 - diff last byte 62.594 ns/op 52.374 ns/op 1.20
Buffer.compare 32 - diff last byte 32.921 ns/op 17.190 ns/op 1.92
byteArrayEquals 1024 - diff last byte 1.7851 us/op 1.5794 us/op 1.13
Buffer.compare 1024 - diff last byte 45.024 ns/op 26.024 ns/op 1.73
byteArrayEquals 16384 - diff last byte 30.064 us/op 25.167 us/op 1.19
Buffer.compare 16384 - diff last byte 333.93 ns/op 185.03 ns/op 1.80
byteArrayEquals 123687377 - diff last byte 213.72 ms/op 190.91 ms/op 1.12
Buffer.compare 123687377 - diff last byte 7.7064 ms/op 6.1214 ms/op 1.26
byteArrayEquals 32 - random bytes 5.2270 ns/op 5.1680 ns/op 1.01
Buffer.compare 32 - random bytes 17.653 ns/op 17.905 ns/op 0.99
byteArrayEquals 1024 - random bytes 5.2370 ns/op 5.2090 ns/op 1.01
Buffer.compare 1024 - random bytes 19.245 ns/op 17.903 ns/op 1.07
byteArrayEquals 16384 - random bytes 5.2180 ns/op 5.1680 ns/op 1.01
Buffer.compare 16384 - random bytes 17.425 ns/op 17.864 ns/op 0.98
byteArrayEquals 123687377 - random bytes 6.5700 ns/op 7.5400 ns/op 0.87
Buffer.compare 123687377 - random bytes 18.520 ns/op 19.210 ns/op 0.96
regular array get 100000 times 33.323 us/op 39.990 us/op 0.83
wrappedArray get 100000 times 42.088 us/op 40.753 us/op 1.03
arrayWithProxy get 100000 times 12.231 ms/op 12.560 ms/op 0.97
ssz.Root.equals 47.437 ns/op 46.187 ns/op 1.03
byteArrayEquals 46.450 ns/op 45.302 ns/op 1.03
Buffer.compare 10.698 ns/op 15.047 ns/op 0.71
processSlot - 1 slots 10.589 us/op 10.473 us/op 1.01
processSlot - 32 slots 2.3144 ms/op 3.5962 ms/op 0.64
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 2.9915 ms/op 2.8999 ms/op 1.03
getCommitteeAssignments - req 1 vs - 250000 vc 2.0791 ms/op 2.1559 ms/op 0.96
getCommitteeAssignments - req 100 vs - 250000 vc 3.9867 ms/op 4.1469 ms/op 0.96
getCommitteeAssignments - req 1000 vs - 250000 vc 4.1895 ms/op 4.4120 ms/op 0.95
findModifiedValidators - 10000 modified validators 747.46 ms/op 744.16 ms/op 1.00
findModifiedValidators - 1000 modified validators 689.47 ms/op 677.21 ms/op 1.02
findModifiedValidators - 100 modified validators 241.99 ms/op 257.73 ms/op 0.94
findModifiedValidators - 10 modified validators 139.03 ms/op 155.53 ms/op 0.89
findModifiedValidators - 1 modified validators 199.59 ms/op 181.36 ms/op 1.10
findModifiedValidators - no difference 151.10 ms/op 202.61 ms/op 0.75
compare ViewDUs 6.0941 s/op 6.2740 s/op 0.97
compare each validator Uint8Array 1.4898 s/op 1.9883 s/op 0.75
compare ViewDU to Uint8Array 1.1095 s/op 1.0634 s/op 1.04
migrate state 1000000 validators, 24 modified, 0 new 874.44 ms/op 921.66 ms/op 0.95
migrate state 1000000 validators, 1700 modified, 1000 new 1.1252 s/op 1.2356 s/op 0.91
migrate state 1000000 validators, 3400 modified, 2000 new 1.3207 s/op 1.4325 s/op 0.92
migrate state 1500000 validators, 24 modified, 0 new 822.28 ms/op 967.03 ms/op 0.85
migrate state 1500000 validators, 1700 modified, 1000 new 1.0481 s/op 1.2331 s/op 0.85
migrate state 1500000 validators, 3400 modified, 2000 new 1.1411 s/op 1.3729 s/op 0.83
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.2500 ns/op 5.6200 ns/op 0.76
state getBlockRootAtSlot - 250000 vs - 7PWei 500.47 ns/op 467.51 ns/op 1.07
naive computeProposerIndex 100000 validators 47.289 ms/op 49.017 ms/op 0.96
computeProposerIndex 100000 validators 1.4473 ms/op 1.4976 ms/op 0.97
naiveGetNextSyncCommitteeIndices 1000 validators 7.1120 s/op 7.9672 s/op 0.89
getNextSyncCommitteeIndices 1000 validators 106.88 ms/op 111.24 ms/op 0.96
naiveGetNextSyncCommitteeIndices 10000 validators 7.5960 s/op 8.2775 s/op 0.92
getNextSyncCommitteeIndices 10000 validators 106.90 ms/op 110.41 ms/op 0.97
naiveGetNextSyncCommitteeIndices 100000 validators 7.1344 s/op 8.3349 s/op 0.86
getNextSyncCommitteeIndices 100000 validators 108.91 ms/op 114.78 ms/op 0.95
naive computeShuffledIndex 100000 validators 23.701 s/op 26.577 s/op 0.89
cached computeShuffledIndex 100000 validators 538.55 ms/op 558.45 ms/op 0.96
naive computeShuffledIndex 2000000 validators 471.30 s/op 515.05 s/op 0.92
cached computeShuffledIndex 2000000 validators 31.499 s/op 29.029 s/op 1.09
computeProposers - vc 250000 584.07 us/op 634.94 us/op 0.92
computeEpochShuffling - vc 250000 42.760 ms/op 42.147 ms/op 1.01
getNextSyncCommittee - vc 250000 10.266 ms/op 10.644 ms/op 0.96
computeSigningRoot for AttestationData 23.016 us/op 20.664 us/op 1.11
hash AttestationData serialized data then Buffer.toString(base64) 1.6007 us/op 1.6181 us/op 0.99
toHexString serialized data 1.1668 us/op 1.1516 us/op 1.01
Buffer.toString(base64) 154.30 ns/op 160.51 ns/op 0.96
nodejs block root to RootHex using toHex 142.61 ns/op 149.13 ns/op 0.96
nodejs block root to RootHex using toRootHex 92.938 ns/op 95.895 ns/op 0.97
browser block root to RootHex using the deprecated toHexString 211.39 ns/op 213.79 ns/op 0.99
browser block root to RootHex using toHex 170.65 ns/op 172.68 ns/op 0.99
browser block root to RootHex using toRootHex 158.17 ns/op 163.66 ns/op 0.97

by benchmarkbot/action

[ForkName.fulu]: {...phase0Ssz, ...altairSsz, ...bellatrixSsz, ...capellaSsz, ...denebSsz, ...electraSsz, ...fuluSsz},
};

// Export these types to ensure that each fork is a superset of the previous one (with overridden types obviously)
Copy link
Member

Choose a reason for hiding this comment

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

👍

Copy link
Member

Choose a reason for hiding this comment

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

🚀

Copy link
Member

@matthewkeil matthewkeil left a comment

Choose a reason for hiding this comment

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

A couple small nits but otherwise LGTM!!

[ForkName.fulu]: {...phase0Ssz, ...altairSsz, ...bellatrixSsz, ...capellaSsz, ...denebSsz, ...electraSsz, ...fuluSsz},
};

// Export these types to ensure that each fork is a superset of the previous one (with overridden types obviously)
Copy link
Member

Choose a reason for hiding this comment

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

🚀

Co-authored-by: Nico Flaig <[email protected]>
Co-authored-by: Matthew Keil <[email protected]>
Copy link
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

Comment on lines 113 to 120
export type ForkPreBlobs = ForkPreDeneb;
export type ForkPostBlobs = ForkPostFulu;
export type ForkBlobs = ForkName.deneb | ForkName.electra;
export const forkBlobs = [ForkName.deneb, ForkName.electra];
export function isForkBlobs(fork: ForkName): fork is ForkBlobs {
return fork === ForkName.deneb || fork === ForkName.electra;
}

Copy link
Member

Choose a reason for hiding this comment

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

This is something I feel very strongly about. They should be added back

Copy link
Member

@nflaig nflaig May 2, 2025

Choose a reason for hiding this comment

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

if you can properly articulate why this is needed I am fine with it but so far the arguments weren't even technically correct, especially adding those in this PR doesn't make any sense + they are technically also a breaking change, we had isForkBlobs already for 2 years, now we are rebranding it to something else

blobs vs. columns makes sense if you only look at sync + gossip but it doesn't if you look more holistically at the system as a whole, the EL still uses blobs, we even have an api that returns blobs, engine api returns blobs etc. etc. so claiming we remove blobs in Fulu also is not correct

the main argument was that we have to use 1 more function call

isForkPostDeneb && isForkPreFulu which stinks

why is this such a big deal? this is very explicit, or could even do fork >= ForkSeq.deneb && fork < ForkSeq.fulu maybe even better

when I first looked at the PR I didn't even get what isForkBlobs and was confused why we added it here, then I saw it just covered deneb and electra

there just so much wrong with this, I guess we have a stalemate here 😁

Copy link
Member

@matthewkeil matthewkeil left a comment

Choose a reason for hiding this comment

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

LGTM!! Can add back forkBlobs if we find it important later

@matthewkeil matthewkeil merged commit 986551d into unstable May 4, 2025
20 checks passed
@matthewkeil matthewkeil deleted the cayman/fulu-types branch May 4, 2025 16:56
wemeetagain added a commit that referenced this pull request May 12, 2025
**Motivation**

- continuation of #7734 and #7745
- dependent on #7774 

**Description**

- Add new `BlockInput` classes to eventually replace our block input
functions
- These classes track data availability per block root, with preDA,
blobs, and columns DA implemented

---------

Co-authored-by: matthewkeil <[email protected]>
@wemeetagain
Copy link
Member Author

🎉 This PR is included in v1.30.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.

4 participants