Skip to content

Conversation

nflaig
Copy link
Member

@nflaig nflaig commented Sep 18, 2025

No description provided.

Copy link

codecov bot commented Sep 18, 2025

Codecov Report

❌ Patch coverage is 2.85714% with 34 lines in your changes missing coverage. Please review.
✅ Project coverage is 52.24%. Comparing base (83964b4) to head (c16d7c5).

Additional details and impacted files
@@             Coverage Diff              @@
##           unstable    #8426      +/-   ##
============================================
- Coverage     52.26%   52.24%   -0.03%     
============================================
  Files           853      853              
  Lines         64784    64810      +26     
  Branches       4766     4770       +4     
============================================
  Hits          33858    33858              
- Misses        30856    30882      +26     
  Partials         70       70              
🚀 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.

Copy link
Contributor

github-actions bot commented Sep 18, 2025

Performance Report

🚀🚀 Significant benchmark improvement detected

Benchmark suite Current: 8cbab32 Previous: 83964b4 Ratio
arrayWithProxy get 100000 times 12.030 ms/op 68.986 ms/op 0.17
computeSigningRoot for AttestationData 19.493 us/op 63.588 us/op 0.31
toHexString serialized data 1.1528 us/op 3.8830 us/op 0.30
Full benchmark results
Benchmark suite Current: 8cbab32 Previous: 83964b4 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 929.22 us/op 989.55 us/op 0.94
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 34.981 us/op 36.007 us/op 0.97
BLS verify - blst 817.79 us/op 846.77 us/op 0.97
BLS verifyMultipleSignatures 3 - blst 1.1585 ms/op 1.2452 ms/op 0.93
BLS verifyMultipleSignatures 8 - blst 1.6087 ms/op 1.6449 ms/op 0.98
BLS verifyMultipleSignatures 32 - blst 4.8011 ms/op 4.8813 ms/op 0.98
BLS verifyMultipleSignatures 64 - blst 8.8387 ms/op 9.0108 ms/op 0.98
BLS verifyMultipleSignatures 128 - blst 17.020 ms/op 17.211 ms/op 0.99
BLS deserializing 10000 signatures 671.11 ms/op 697.89 ms/op 0.96
BLS deserializing 100000 signatures 6.8455 s/op 6.9579 s/op 0.98
BLS verifyMultipleSignatures - same message - 3 - blst 965.98 us/op 893.46 us/op 1.08
BLS verifyMultipleSignatures - same message - 8 - blst 1.1194 ms/op 1.0894 ms/op 1.03
BLS verifyMultipleSignatures - same message - 32 - blst 1.7508 ms/op 1.7967 ms/op 0.97
BLS verifyMultipleSignatures - same message - 64 - blst 2.6616 ms/op 2.6321 ms/op 1.01
BLS verifyMultipleSignatures - same message - 128 - blst 4.5507 ms/op 4.3721 ms/op 1.04
BLS aggregatePubkeys 32 - blst 19.511 us/op 22.049 us/op 0.88
BLS aggregatePubkeys 128 - blst 69.025 us/op 70.244 us/op 0.98
notSeenSlots=1 numMissedVotes=1 numBadVotes=10 51.774 ms/op 45.005 ms/op 1.15
notSeenSlots=1 numMissedVotes=0 numBadVotes=4 44.072 ms/op 49.159 ms/op 0.90
notSeenSlots=2 numMissedVotes=1 numBadVotes=10 36.941 ms/op 36.335 ms/op 1.02
getSlashingsAndExits - default max 71.891 us/op 72.282 us/op 0.99
getSlashingsAndExits - 2k 291.60 us/op 296.57 us/op 0.98
isKnown best case - 1 super set check 210.00 ns/op 203.00 ns/op 1.03
isKnown normal case - 2 super set checks 206.00 ns/op 202.00 ns/op 1.02
isKnown worse case - 16 super set checks 205.00 ns/op 202.00 ns/op 1.01
InMemoryCheckpointStateCache - add get delete 2.4370 us/op 2.2820 us/op 1.07
validate api signedAggregateAndProof - struct 1.4565 ms/op 1.3935 ms/op 1.05
validate gossip signedAggregateAndProof - struct 1.3881 ms/op 1.3991 ms/op 0.99
batch validate gossip attestation - vc 640000 - chunk 32 115.84 us/op 115.30 us/op 1.00
batch validate gossip attestation - vc 640000 - chunk 64 107.55 us/op 101.73 us/op 1.06
batch validate gossip attestation - vc 640000 - chunk 128 98.237 us/op 95.786 us/op 1.03
batch validate gossip attestation - vc 640000 - chunk 256 109.25 us/op 101.04 us/op 1.08
pickEth1Vote - no votes 1.0149 ms/op 994.30 us/op 1.02
pickEth1Vote - max votes 7.4946 ms/op 5.7877 ms/op 1.29
pickEth1Vote - Eth1Data hashTreeRoot value x2048 13.166 ms/op 12.272 ms/op 1.07
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 18.840 ms/op 15.987 ms/op 1.18
pickEth1Vote - Eth1Data fastSerialize value x2048 423.50 us/op 484.04 us/op 0.87
pickEth1Vote - Eth1Data fastSerialize tree x2048 2.6525 ms/op 3.1637 ms/op 0.84
bytes32 toHexString 381.00 ns/op 380.00 ns/op 1.00
bytes32 Buffer.toString(hex) 248.00 ns/op 256.00 ns/op 0.97
bytes32 Buffer.toString(hex) from Uint8Array 336.00 ns/op 332.00 ns/op 1.01
bytes32 Buffer.toString(hex) + 0x 257.00 ns/op 249.00 ns/op 1.03
Object access 1 prop 0.12700 ns/op 0.12000 ns/op 1.06
Map access 1 prop 0.13100 ns/op 0.12600 ns/op 1.04
Object get x1000 6.1970 ns/op 6.3740 ns/op 0.97
Map get x1000 6.6110 ns/op 6.9020 ns/op 0.96
Object set x1000 33.060 ns/op 31.547 ns/op 1.05
Map set x1000 22.000 ns/op 22.224 ns/op 0.99
Return object 10000 times 0.29750 ns/op 0.29950 ns/op 0.99
Throw Error 10000 times 4.8059 us/op 4.5110 us/op 1.07
toHex 129.40 ns/op 137.62 ns/op 0.94
Buffer.from 119.60 ns/op 125.29 ns/op 0.95
shared Buffer 81.961 ns/op 86.196 ns/op 0.95
fastMsgIdFn sha256 / 200 bytes 2.2500 us/op 2.2010 us/op 1.02
fastMsgIdFn h32 xxhash / 200 bytes 213.00 ns/op 211.00 ns/op 1.01
fastMsgIdFn h64 xxhash / 200 bytes 268.00 ns/op 264.00 ns/op 1.02
fastMsgIdFn sha256 / 1000 bytes 7.3950 us/op 7.2690 us/op 1.02
fastMsgIdFn h32 xxhash / 1000 bytes 348.00 ns/op 335.00 ns/op 1.04
fastMsgIdFn h64 xxhash / 1000 bytes 349.00 ns/op 338.00 ns/op 1.03
fastMsgIdFn sha256 / 10000 bytes 68.854 us/op 67.129 us/op 1.03
fastMsgIdFn h32 xxhash / 10000 bytes 1.8530 us/op 1.8480 us/op 1.00
fastMsgIdFn h64 xxhash / 10000 bytes 1.2440 us/op 1.2220 us/op 1.02
send data - 1000 256B messages 18.496 ms/op 17.934 ms/op 1.03
send data - 1000 512B messages 22.840 ms/op 23.788 ms/op 0.96
send data - 1000 1024B messages 31.208 ms/op 30.551 ms/op 1.02
send data - 1000 1200B messages 27.225 ms/op 25.062 ms/op 1.09
send data - 1000 2048B messages 27.701 ms/op 25.514 ms/op 1.09
send data - 1000 4096B messages 28.996 ms/op 32.500 ms/op 0.89
send data - 1000 16384B messages 49.657 ms/op 46.893 ms/op 1.06
send data - 1000 65536B messages 134.13 ms/op 126.88 ms/op 1.06
enrSubnets - fastDeserialize 64 bits 956.00 ns/op 903.00 ns/op 1.06
enrSubnets - ssz BitVector 64 bits 329.00 ns/op 324.00 ns/op 1.02
enrSubnets - fastDeserialize 4 bits 135.00 ns/op 132.00 ns/op 1.02
enrSubnets - ssz BitVector 4 bits 331.00 ns/op 322.00 ns/op 1.03
prioritizePeers score -10:0 att 32-0.1 sync 2-0 237.05 us/op 252.36 us/op 0.94
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 266.19 us/op 270.22 us/op 0.99
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 380.80 us/op 408.29 us/op 0.93
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 722.56 us/op 720.97 us/op 1.00
prioritizePeers score 0:0 att 64-1 sync 4-1 901.79 us/op 868.40 us/op 1.04
array of 16000 items push then shift 1.6433 us/op 1.6300 us/op 1.01
LinkedList of 16000 items push then shift 8.6130 ns/op 8.4730 ns/op 1.02
array of 16000 items push then pop 80.697 ns/op 81.387 ns/op 0.99
LinkedList of 16000 items push then pop 7.6830 ns/op 8.5800 ns/op 0.90
array of 24000 items push then shift 2.4255 us/op 2.4763 us/op 0.98
LinkedList of 24000 items push then shift 8.1270 ns/op 8.5720 ns/op 0.95
array of 24000 items push then pop 114.50 ns/op 116.24 ns/op 0.99
LinkedList of 24000 items push then pop 8.6070 ns/op 7.7390 ns/op 1.11
intersect bitArray bitLen 8 6.6870 ns/op 6.4270 ns/op 1.04
intersect array and set length 8 51.330 ns/op 38.016 ns/op 1.35
intersect bitArray bitLen 128 31.594 ns/op 30.040 ns/op 1.05
intersect array and set length 128 664.98 ns/op 1.1739 us/op 0.57
bitArray.getTrueBitIndexes() bitLen 128 1.0760 us/op 1.0600 us/op 1.02
bitArray.getTrueBitIndexes() bitLen 248 1.9300 us/op 1.8020 us/op 1.07
bitArray.getTrueBitIndexes() bitLen 512 4.0160 us/op 3.7900 us/op 1.06
Buffer.concat 32 items 635.00 ns/op 653.00 ns/op 0.97
Uint8Array.set 32 items 1.5630 us/op 969.00 ns/op 1.61
Buffer.copy 2.9690 us/op 2.1240 us/op 1.40
Uint8Array.set - with subarray 2.5630 us/op 1.6030 us/op 1.60
Uint8Array.set - without subarray 1.0570 us/op 889.00 ns/op 1.19
getUint32 - dataview 201.00 ns/op 193.00 ns/op 1.04
getUint32 - manual 122.00 ns/op 123.00 ns/op 0.99
Set add up to 64 items then delete first 2.2444 us/op 2.8163 us/op 0.80
OrderedSet add up to 64 items then delete first 4.0864 us/op 5.2765 us/op 0.77
Set add up to 64 items then delete last 3.1793 us/op 3.5831 us/op 0.89
OrderedSet add up to 64 items then delete last 5.0236 us/op 6.3640 us/op 0.79
Set add up to 64 items then delete middle 4.0899 us/op 3.7498 us/op 1.09
OrderedSet add up to 64 items then delete middle 7.4483 us/op 7.5741 us/op 0.98
Set add up to 128 items then delete first 8.2046 us/op 7.3120 us/op 1.12
OrderedSet add up to 128 items then delete first 11.211 us/op 12.086 us/op 0.93
Set add up to 128 items then delete last 7.0973 us/op 8.2885 us/op 0.86
OrderedSet add up to 128 items then delete last 12.915 us/op 10.668 us/op 1.21
Set add up to 128 items then delete middle 7.4593 us/op 6.8992 us/op 1.08
OrderedSet add up to 128 items then delete middle 18.278 us/op 19.191 us/op 0.95
Set add up to 256 items then delete first 13.768 us/op 15.598 us/op 0.88
OrderedSet add up to 256 items then delete first 20.983 us/op 23.010 us/op 0.91
Set add up to 256 items then delete last 12.962 us/op 14.711 us/op 0.88
OrderedSet add up to 256 items then delete last 22.870 us/op 23.231 us/op 0.98
Set add up to 256 items then delete middle 12.861 us/op 14.353 us/op 0.90
OrderedSet add up to 256 items then delete middle 49.880 us/op 51.940 us/op 0.96
transfer serialized Status (84 B) 2.3150 us/op 2.2100 us/op 1.05
copy serialized Status (84 B) 1.1700 us/op 1.1120 us/op 1.05
transfer serialized SignedVoluntaryExit (112 B) 2.3020 us/op 2.2620 us/op 1.02
copy serialized SignedVoluntaryExit (112 B) 1.2320 us/op 1.1380 us/op 1.08
transfer serialized ProposerSlashing (416 B) 2.6190 us/op 2.2490 us/op 1.16
copy serialized ProposerSlashing (416 B) 1.6960 us/op 1.1980 us/op 1.42
transfer serialized Attestation (485 B) 2.6190 us/op 2.2500 us/op 1.16
copy serialized Attestation (485 B) 1.5940 us/op 1.2040 us/op 1.32
transfer serialized AttesterSlashing (33232 B) 3.0440 us/op 3.3300 us/op 0.91
copy serialized AttesterSlashing (33232 B) 5.0870 us/op 12.353 us/op 0.41
transfer serialized Small SignedBeaconBlock (128000 B) 4.0080 us/op 4.2430 us/op 0.94
copy serialized Small SignedBeaconBlock (128000 B) 14.945 us/op 14.967 us/op 1.00
transfer serialized Avg SignedBeaconBlock (200000 B) 4.3310 us/op 4.1870 us/op 1.03
copy serialized Avg SignedBeaconBlock (200000 B) 21.909 us/op 18.474 us/op 1.19
transfer serialized BlobsSidecar (524380 B) 4.5800 us/op 4.1610 us/op 1.10
copy serialized BlobsSidecar (524380 B) 78.028 us/op 119.43 us/op 0.65
transfer serialized Big SignedBeaconBlock (1000000 B) 4.6390 us/op 4.3630 us/op 1.06
copy serialized Big SignedBeaconBlock (1000000 B) 351.00 us/op 126.83 us/op 2.77
pass gossip attestations to forkchoice per slot 3.0237 ms/op 2.9735 ms/op 1.02
forkChoice updateHead vc 100000 bc 64 eq 0 468.74 us/op 455.54 us/op 1.03
forkChoice updateHead vc 600000 bc 64 eq 0 3.7429 ms/op 3.0100 ms/op 1.24
forkChoice updateHead vc 1000000 bc 64 eq 0 5.5902 ms/op 5.2752 ms/op 1.06
forkChoice updateHead vc 600000 bc 320 eq 0 3.4602 ms/op 3.4792 ms/op 0.99
forkChoice updateHead vc 600000 bc 1200 eq 0 3.4161 ms/op 3.0032 ms/op 1.14
forkChoice updateHead vc 600000 bc 7200 eq 0 3.7024 ms/op 3.7864 ms/op 0.98
forkChoice updateHead vc 600000 bc 64 eq 1000 11.019 ms/op 10.698 ms/op 1.03
forkChoice updateHead vc 600000 bc 64 eq 10000 10.929 ms/op 10.596 ms/op 1.03
forkChoice updateHead vc 600000 bc 64 eq 300000 17.717 ms/op 14.317 ms/op 1.24
computeDeltas 500000 validators 300 proto nodes 4.1522 ms/op 4.1293 ms/op 1.01
computeDeltas 500000 validators 1200 proto nodes 4.0598 ms/op 4.1324 ms/op 0.98
computeDeltas 500000 validators 7200 proto nodes 4.0065 ms/op 4.0822 ms/op 0.98
computeDeltas 750000 validators 300 proto nodes 5.8304 ms/op 5.7629 ms/op 1.01
computeDeltas 750000 validators 1200 proto nodes 5.8632 ms/op 5.8019 ms/op 1.01
computeDeltas 750000 validators 7200 proto nodes 5.9511 ms/op 5.8525 ms/op 1.02
computeDeltas 1400000 validators 300 proto nodes 11.162 ms/op 10.957 ms/op 1.02
computeDeltas 1400000 validators 1200 proto nodes 11.374 ms/op 10.898 ms/op 1.04
computeDeltas 1400000 validators 7200 proto nodes 11.485 ms/op 11.307 ms/op 1.02
computeDeltas 2100000 validators 300 proto nodes 17.673 ms/op 17.214 ms/op 1.03
computeDeltas 2100000 validators 1200 proto nodes 16.715 ms/op 16.808 ms/op 0.99
computeDeltas 2100000 validators 7200 proto nodes 16.608 ms/op 17.091 ms/op 0.97
altair processAttestation - 250000 vs - 7PWei normalcase 2.1610 ms/op 2.6985 ms/op 0.80
altair processAttestation - 250000 vs - 7PWei worstcase 2.8675 ms/op 3.4977 ms/op 0.82
altair processAttestation - setStatus - 1/6 committees join 122.34 us/op 137.06 us/op 0.89
altair processAttestation - setStatus - 1/3 committees join 233.82 us/op 265.17 us/op 0.88
altair processAttestation - setStatus - 1/2 committees join 328.89 us/op 359.41 us/op 0.92
altair processAttestation - setStatus - 2/3 committees join 419.00 us/op 458.48 us/op 0.91
altair processAttestation - setStatus - 4/5 committees join 597.38 us/op 639.72 us/op 0.93
altair processAttestation - setStatus - 100% committees join 705.84 us/op 742.74 us/op 0.95
altair processBlock - 250000 vs - 7PWei normalcase 4.2714 ms/op 4.8847 ms/op 0.87
altair processBlock - 250000 vs - 7PWei normalcase hashState 31.805 ms/op 31.201 ms/op 1.02
altair processBlock - 250000 vs - 7PWei worstcase 33.298 ms/op 38.166 ms/op 0.87
altair processBlock - 250000 vs - 7PWei worstcase hashState 68.157 ms/op 78.735 ms/op 0.87
phase0 processBlock - 250000 vs - 7PWei normalcase 1.5625 ms/op 1.6708 ms/op 0.94
phase0 processBlock - 250000 vs - 7PWei worstcase 18.709 ms/op 23.461 ms/op 0.80
altair processEth1Data - 250000 vs - 7PWei normalcase 333.13 us/op 361.96 us/op 0.92
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 5.6640 us/op 6.7770 us/op 0.84
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 34.080 us/op 48.067 us/op 0.71
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 10.070 us/op 17.832 us/op 0.56
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 6.3260 us/op 8.2630 us/op 0.77
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 136.12 us/op 179.41 us/op 0.76
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 1.7485 ms/op 1.9157 ms/op 0.91
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 2.2492 ms/op 2.4983 ms/op 0.90
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 2.2849 ms/op 2.4822 ms/op 0.92
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 4.4173 ms/op 5.2541 ms/op 0.84
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.4155 ms/op 2.6386 ms/op 0.92
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.5922 ms/op 4.8517 ms/op 0.95
Tree 40 250000 create 394.71 ms/op 571.83 ms/op 0.69
Tree 40 250000 get(125000) 150.59 ns/op 142.98 ns/op 1.05
Tree 40 250000 set(125000) 1.3739 us/op 2.1992 us/op 0.62
Tree 40 250000 toArray() 15.093 ms/op 21.589 ms/op 0.70
Tree 40 250000 iterate all - toArray() + loop 15.073 ms/op 21.554 ms/op 0.70
Tree 40 250000 iterate all - get(i) 48.927 ms/op 59.252 ms/op 0.83
Array 250000 create 2.7928 ms/op 3.0788 ms/op 0.91
Array 250000 clone - spread 791.45 us/op 837.70 us/op 0.94
Array 250000 get(125000) 0.40600 ns/op 0.40300 ns/op 1.01
Array 250000 set(125000) 0.42900 ns/op 0.42800 ns/op 1.00
Array 250000 iterate all - loop 82.061 us/op 83.415 us/op 0.98
phase0 afterProcessEpoch - 250000 vs - 7PWei 41.003 ms/op 42.919 ms/op 0.96
Array.fill - length 1000000 3.4588 ms/op 4.6885 ms/op 0.74
Array push - length 1000000 12.272 ms/op 17.064 ms/op 0.72
Array.get 0.27040 ns/op 0.27815 ns/op 0.97
Uint8Array.get 0.43331 ns/op 0.44922 ns/op 0.96
phase0 beforeProcessEpoch - 250000 vs - 7PWei 15.951 ms/op 18.030 ms/op 0.88
altair processEpoch - mainnet_e81889 270.85 ms/op 268.95 ms/op 1.01
mainnet_e81889 - altair beforeProcessEpoch 17.794 ms/op 18.159 ms/op 0.98
mainnet_e81889 - altair processJustificationAndFinalization 5.1820 us/op 5.2900 us/op 0.98
mainnet_e81889 - altair processInactivityUpdates 4.2641 ms/op 4.6206 ms/op 0.92
mainnet_e81889 - altair processRewardsAndPenalties 38.958 ms/op 37.431 ms/op 1.04
mainnet_e81889 - altair processRegistryUpdates 692.00 ns/op 716.00 ns/op 0.97
mainnet_e81889 - altair processSlashings 182.00 ns/op 185.00 ns/op 0.98
mainnet_e81889 - altair processEth1DataReset 173.00 ns/op 174.00 ns/op 0.99
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.1982 ms/op 1.2091 ms/op 0.99
mainnet_e81889 - altair processSlashingsReset 884.00 ns/op 870.00 ns/op 1.02
mainnet_e81889 - altair processRandaoMixesReset 1.1700 us/op 1.1110 us/op 1.05
mainnet_e81889 - altair processHistoricalRootsUpdate 177.00 ns/op 176.00 ns/op 1.01
mainnet_e81889 - altair processParticipationFlagUpdates 518.00 ns/op 524.00 ns/op 0.99
mainnet_e81889 - altair processSyncCommitteeUpdates 141.00 ns/op 139.00 ns/op 1.01
mainnet_e81889 - altair afterProcessEpoch 44.518 ms/op 44.884 ms/op 0.99
capella processEpoch - mainnet_e217614 979.14 ms/op 1.0317 s/op 0.95
mainnet_e217614 - capella beforeProcessEpoch 65.467 ms/op 60.910 ms/op 1.07
mainnet_e217614 - capella processJustificationAndFinalization 5.6710 us/op 5.1450 us/op 1.10
mainnet_e217614 - capella processInactivityUpdates 15.195 ms/op 14.278 ms/op 1.06
mainnet_e217614 - capella processRewardsAndPenalties 199.88 ms/op 187.98 ms/op 1.06
mainnet_e217614 - capella processRegistryUpdates 6.6900 us/op 6.4200 us/op 1.04
mainnet_e217614 - capella processSlashings 177.00 ns/op 172.00 ns/op 1.03
mainnet_e217614 - capella processEth1DataReset 176.00 ns/op 173.00 ns/op 1.02
mainnet_e217614 - capella processEffectiveBalanceUpdates 13.769 ms/op 12.720 ms/op 1.08
mainnet_e217614 - capella processSlashingsReset 879.00 ns/op 874.00 ns/op 1.01
mainnet_e217614 - capella processRandaoMixesReset 1.1850 us/op 1.1200 us/op 1.06
mainnet_e217614 - capella processHistoricalRootsUpdate 177.00 ns/op 174.00 ns/op 1.02
mainnet_e217614 - capella processParticipationFlagUpdates 527.00 ns/op 509.00 ns/op 1.04
mainnet_e217614 - capella afterProcessEpoch 117.25 ms/op 115.52 ms/op 1.02
phase0 processEpoch - mainnet_e58758 285.71 ms/op 270.76 ms/op 1.06
mainnet_e58758 - phase0 beforeProcessEpoch 77.125 ms/op 75.173 ms/op 1.03
mainnet_e58758 - phase0 processJustificationAndFinalization 5.6960 us/op 5.2790 us/op 1.08
mainnet_e58758 - phase0 processRewardsAndPenalties 37.012 ms/op 36.103 ms/op 1.03
mainnet_e58758 - phase0 processRegistryUpdates 3.2360 us/op 3.1170 us/op 1.04
mainnet_e58758 - phase0 processSlashings 179.00 ns/op 173.00 ns/op 1.03
mainnet_e58758 - phase0 processEth1DataReset 172.00 ns/op 171.00 ns/op 1.01
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.3263 ms/op 1.7007 ms/op 0.78
mainnet_e58758 - phase0 processSlashingsReset 973.00 ns/op 981.00 ns/op 0.99
mainnet_e58758 - phase0 processRandaoMixesReset 1.1350 us/op 1.1380 us/op 1.00
mainnet_e58758 - phase0 processHistoricalRootsUpdate 175.00 ns/op 175.00 ns/op 1.00
mainnet_e58758 - phase0 processParticipationRecordUpdates 920.00 ns/op 877.00 ns/op 1.05
mainnet_e58758 - phase0 afterProcessEpoch 36.360 ms/op 35.962 ms/op 1.01
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.3781 ms/op 1.3175 ms/op 1.05
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 2.0726 ms/op 2.9754 ms/op 0.70
altair processInactivityUpdates - 250000 normalcase 17.846 ms/op 18.037 ms/op 0.99
altair processInactivityUpdates - 250000 worstcase 17.198 ms/op 17.740 ms/op 0.97
phase0 processRegistryUpdates - 250000 normalcase 6.7300 us/op 6.9870 us/op 0.96
phase0 processRegistryUpdates - 250000 badcase_full_deposits 248.43 us/op 280.87 us/op 0.88
phase0 processRegistryUpdates - 250000 worstcase 0.5 100.28 ms/op 120.50 ms/op 0.83
altair processRewardsAndPenalties - 250000 normalcase 25.748 ms/op 26.204 ms/op 0.98
altair processRewardsAndPenalties - 250000 worstcase 27.173 ms/op 25.916 ms/op 1.05
phase0 getAttestationDeltas - 250000 normalcase 5.9618 ms/op 7.9979 ms/op 0.75
phase0 getAttestationDeltas - 250000 worstcase 6.0190 ms/op 6.7800 ms/op 0.89
phase0 processSlashings - 250000 worstcase 102.80 us/op 98.063 us/op 1.05
altair processSyncCommitteeUpdates - 250000 10.966 ms/op 11.244 ms/op 0.98
BeaconState.hashTreeRoot - No change 216.00 ns/op 282.00 ns/op 0.77
BeaconState.hashTreeRoot - 1 full validator 91.251 us/op 75.488 us/op 1.21
BeaconState.hashTreeRoot - 32 full validator 916.02 us/op 1.0341 ms/op 0.89
BeaconState.hashTreeRoot - 512 full validator 11.768 ms/op 13.956 ms/op 0.84
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 109.47 us/op 104.92 us/op 1.04
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.4881 ms/op 1.3219 ms/op 1.13
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 25.724 ms/op 19.875 ms/op 1.29
BeaconState.hashTreeRoot - 1 balances 81.949 us/op 70.876 us/op 1.16
BeaconState.hashTreeRoot - 32 balances 946.17 us/op 777.93 us/op 1.22
BeaconState.hashTreeRoot - 512 balances 8.4540 ms/op 8.0798 ms/op 1.05
BeaconState.hashTreeRoot - 250000 balances 191.43 ms/op 157.70 ms/op 1.21
aggregationBits - 2048 els - zipIndexesInBitList 24.371 us/op 21.857 us/op 1.12
byteArrayEquals 32 53.887 ns/op 53.971 ns/op 1.00
Buffer.compare 32 17.418 ns/op 17.087 ns/op 1.02
byteArrayEquals 1024 1.6378 us/op 1.5944 us/op 1.03
Buffer.compare 1024 25.668 ns/op 28.816 ns/op 0.89
byteArrayEquals 16384 25.988 us/op 26.760 us/op 0.97
Buffer.compare 16384 188.53 ns/op 191.18 ns/op 0.99
byteArrayEquals 123687377 192.36 ms/op 193.17 ms/op 1.00
Buffer.compare 123687377 7.3934 ms/op 10.042 ms/op 0.74
byteArrayEquals 32 - diff last byte 53.904 ns/op 52.580 ns/op 1.03
Buffer.compare 32 - diff last byte 17.575 ns/op 17.049 ns/op 1.03
byteArrayEquals 1024 - diff last byte 1.6162 us/op 1.5942 us/op 1.01
Buffer.compare 1024 - diff last byte 25.266 ns/op 29.649 ns/op 0.85
byteArrayEquals 16384 - diff last byte 25.741 us/op 25.401 us/op 1.01
Buffer.compare 16384 - diff last byte 187.85 ns/op 191.21 ns/op 0.98
byteArrayEquals 123687377 - diff last byte 189.97 ms/op 201.57 ms/op 0.94
Buffer.compare 123687377 - diff last byte 7.1366 ms/op 14.198 ms/op 0.50
byteArrayEquals 32 - random bytes 5.1810 ns/op 5.6230 ns/op 0.92
Buffer.compare 32 - random bytes 17.468 ns/op 22.838 ns/op 0.76
byteArrayEquals 1024 - random bytes 5.1990 ns/op 6.1860 ns/op 0.84
Buffer.compare 1024 - random bytes 17.541 ns/op 18.671 ns/op 0.94
byteArrayEquals 16384 - random bytes 5.2440 ns/op 5.4360 ns/op 0.96
Buffer.compare 16384 - random bytes 17.721 ns/op 18.926 ns/op 0.94
byteArrayEquals 123687377 - random bytes 6.3300 ns/op 9.0000 ns/op 0.70
Buffer.compare 123687377 - random bytes 18.090 ns/op 19.960 ns/op 0.91
regular array get 100000 times 40.644 us/op 44.518 us/op 0.91
wrappedArray get 100000 times 32.323 us/op 35.107 us/op 0.92
arrayWithProxy get 100000 times 12.030 ms/op 68.986 ms/op 0.17
ssz.Root.equals 45.754 ns/op 48.082 ns/op 0.95
byteArrayEquals 44.922 ns/op 49.157 ns/op 0.91
Buffer.compare 10.226 ns/op 11.300 ns/op 0.90
processSlot - 1 slots 9.9850 us/op 11.986 us/op 0.83
processSlot - 32 slots 2.3927 ms/op 2.7498 ms/op 0.87
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 2.8878 ms/op 4.2257 ms/op 0.68
getCommitteeAssignments - req 1 vs - 250000 vc 2.1278 ms/op 2.2657 ms/op 0.94
getCommitteeAssignments - req 100 vs - 250000 vc 4.1339 ms/op 4.3689 ms/op 0.95
getCommitteeAssignments - req 1000 vs - 250000 vc 4.3978 ms/op 4.6409 ms/op 0.95
findModifiedValidators - 10000 modified validators 720.49 ms/op 949.61 ms/op 0.76
findModifiedValidators - 1000 modified validators 719.77 ms/op 847.81 ms/op 0.85
findModifiedValidators - 100 modified validators 181.77 ms/op 296.22 ms/op 0.61
findModifiedValidators - 10 modified validators 177.62 ms/op 239.01 ms/op 0.74
findModifiedValidators - 1 modified validators 147.85 ms/op 184.69 ms/op 0.80
findModifiedValidators - no difference 140.48 ms/op 191.26 ms/op 0.73
compare ViewDUs 5.9263 s/op 7.9310 s/op 0.75
compare each validator Uint8Array 1.7686 s/op 1.4652 s/op 1.21
compare ViewDU to Uint8Array 1.0267 s/op 1.0872 s/op 0.94
migrate state 1000000 validators, 24 modified, 0 new 847.20 ms/op 783.84 ms/op 1.08
migrate state 1000000 validators, 1700 modified, 1000 new 1.1054 s/op 1.1369 s/op 0.97
migrate state 1000000 validators, 3400 modified, 2000 new 1.2595 s/op 1.2118 s/op 1.04
migrate state 1500000 validators, 24 modified, 0 new 782.30 ms/op 744.08 ms/op 1.05
migrate state 1500000 validators, 1700 modified, 1000 new 1.1032 s/op 1.0613 s/op 1.04
migrate state 1500000 validators, 3400 modified, 2000 new 1.2280 s/op 1.2630 s/op 0.97
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.3000 ns/op 4.2100 ns/op 1.02
state getBlockRootAtSlot - 250000 vs - 7PWei 645.52 ns/op 379.80 ns/op 1.70
naive computeProposerIndex 100000 validators 53.162 ms/op 51.800 ms/op 1.03
computeProposerIndex 100000 validators 1.4956 ms/op 1.4802 ms/op 1.01
naiveGetNextSyncCommitteeIndices 1000 validators 8.4187 s/op 7.2569 s/op 1.16
getNextSyncCommitteeIndices 1000 validators 124.59 ms/op 108.76 ms/op 1.15
naiveGetNextSyncCommitteeIndices 10000 validators 8.3554 s/op 7.5690 s/op 1.10
getNextSyncCommitteeIndices 10000 validators 124.71 ms/op 115.02 ms/op 1.08
naiveGetNextSyncCommitteeIndices 100000 validators 8.2903 s/op 7.4104 s/op 1.12
getNextSyncCommitteeIndices 100000 validators 118.32 ms/op 110.85 ms/op 1.07
naive computeShuffledIndex 100000 validators 24.710 s/op 23.514 s/op 1.05
cached computeShuffledIndex 100000 validators 557.08 ms/op 543.29 ms/op 1.03
naive computeShuffledIndex 2000000 validators 489.74 s/op 621.65 s/op 0.79
cached computeShuffledIndex 2000000 validators 34.168 s/op 77.248 s/op 0.44
computeProposers - vc 250000 620.30 us/op 664.36 us/op 0.93
computeEpochShuffling - vc 250000 40.949 ms/op 45.051 ms/op 0.91
getNextSyncCommittee - vc 250000 10.743 ms/op 12.751 ms/op 0.84
computeSigningRoot for AttestationData 19.493 us/op 63.588 us/op 0.31
hash AttestationData serialized data then Buffer.toString(base64) 1.5749 us/op 2.0197 us/op 0.78
toHexString serialized data 1.1528 us/op 3.8830 us/op 0.30
Buffer.toString(base64) 146.90 ns/op 192.57 ns/op 0.76
nodejs block root to RootHex using toHex 133.21 ns/op 159.26 ns/op 0.84
nodejs block root to RootHex using toRootHex 85.692 ns/op 108.99 ns/op 0.79
nodejs fromhex(blob) 113.33 ms/op 140.42 ms/op 0.81
nodejs fromHexInto(blob) 93.068 ms/op 106.83 ms/op 0.87
browser block root to RootHex using the deprecated toHexString 207.51 ns/op 253.19 ns/op 0.82
browser block root to RootHex using toHex 169.19 ns/op 284.23 ns/op 0.60
browser block root to RootHex using toRootHex 161.76 ns/op 209.31 ns/op 0.77
browser fromHexInto(blob) 803.89 us/op 1.1079 ms/op 0.73
browser fromHex(blob) 778.52 ms/op 1.0696 s/op 0.73

by benchmarkbot/action

@ensi321 ensi321 marked this pull request as ready for review September 19, 2025 02:57
@ensi321 ensi321 requested a review from a team as a code owner September 19, 2025 02:57
@nflaig nflaig added the status-do-not-merge Merging this issue will break the build. Do not merge! label Sep 19, 2025
@ensi321 ensi321 marked this pull request as draft September 19, 2025 05:24
nflaig and others added 6 commits September 19, 2025 17:05
#8444)

`Date.now()` returns current unit timestamp in milliseconds but we want
seconds here, ie. need to divide by 1000.
**Motivation**

- we see different slots for the same root in `BlockInputSync` logs,
this causes confusion
- this was added last week in #8416

**Description**

- the [root, slot] is not trusted in network processor because messages
could be originated from an out-of-sync node
- we actually don't need the slot in BlockInputSync, it's just a nice to
have but caused confusion. So I reverted that part: do not emit slot to
`BlockInputSync` from network processor
- log the full root hex

Closes #8465

---------

Co-authored-by: Tuyen Nguyen <[email protected]>
**Motivation**

- when investigating #8457 I found that we did not set `hashAllColumn()`
correctly at the 1st time

**Description**

- correct `hasAllData` when creating IBlockInput from column
- nice to have: in `verifyBlocksDataAvailability`, only wait for all
data if not has all data. This is to make it consistent to
`writeBlockInputToDb()` where the error did not happen, see
#8457 (comment)

Co-authored-by: Tuyen Nguyen <[email protected]>
**Motivation**

- when we remove an eagerly persisted block input, it's very normal that
we did not have any columns persisted
- but right now it threw this error as shown in #8457

```
Sep-23 19:16:55.002[chain]            �[33mwarn�[39m: Error pruning eagerly imported block inputs, DB may grow in size if this error happens frequently slot=30 - Invalid dataColumnSidecars=0 for custody expected custodyColumnsLen=128
Error: Invalid dataColumnSidecars=0 for custody expected custodyColumnsLen=128
```

**Description**

- do not throw error in this case

part of #8457

Co-authored-by: Tuyen Nguyen <[email protected]>
**Motivation**

Since #7927 we started to use
parent slot (the slot of parent block) to get sync aggregate for block
but this can cause `BLOCK_ERROR_INVALID_SIGNATURE` during fork
transition as might include sync aggregates into our block that are
older than block slot - 1 which is used to compute domain during
signature verification.


https://github.com/ChainSafe/lodestar/blob/8961b06c11ac67baab79fe774e0a3d1bfb217ea1/packages/state-transition/src/block/processSyncCommittee.ts#L81

This means we will reject our own block due to invalid signature if
there are missed slots during the epoch transition.


> we currently hard code parent slot as producedSlot - 1 which is
incorrect in reorg scenario

This was the motivation from the previous change but this doesn't seem
right, sync committee messages are produced at latest 4 seconds into the
slot so if we re-org the block due to it being weak/late then sync
committee votes will also be for parent block root of that block and not
the block itself.

So irrespective of block being reorged or not we should always include
sync committee messages from previous slot.

**Description**

Use previous slot to get sync aggregate for block to avoid
`BLOCK_ERROR_INVALID_SIGNATURE` in case there are missed slots.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status-do-not-merge Merging this issue will break the build. Do not merge!

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants