Skip to content

chore: proposer lookahead follow-up changes#7948

Merged
nflaig merged 2 commits into
unstablefrom
nflaig/proposer-lookahead-unstable
Jun 12, 2025
Merged

chore: proposer lookahead follow-up changes#7948
nflaig merged 2 commits into
unstablefrom
nflaig/proposer-lookahead-unstable

Conversation

@nflaig

@nflaig nflaig commented Jun 11, 2025

Copy link
Copy Markdown
Member

Motivation

Bring proposer lookahead fixes to unstable branch, does not include shuffling calculation changes from #7945 yet.

Description

  • only use proposer lookahead from state if epoch is post fulu
  • track epoch transition step time for proposer lookahead

Related #7902

@nflaig nflaig requested a review from a team as a code owner June 11, 2025 07:43
@nflaig nflaig changed the title Nflaig/proposer lookahead unstable chore: proposer lookahead follow-up changes Jun 11, 2025
@codecov

codecov Bot commented Jun 11, 2025

Copy link
Copy Markdown

Codecov Report

Attention: Patch coverage is 0% with 5 lines in your changes missing coverage. Please review.

Project coverage is 55.74%. Comparing base (6fa9960) to head (04fb4dc).
Report is 2 commits behind head on unstable.

Additional details and impacted files
@@             Coverage Diff              @@
##           unstable    #7948      +/-   ##
============================================
- Coverage     55.75%   55.74%   -0.01%     
============================================
  Files           833      833              
  Lines         59356    59360       +4     
  Branches       4581     4581              
============================================
- Hits          33095    33092       -3     
- Misses        26194    26201       +7     
  Partials         67       67              
🚀 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
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 1ad2841 Previous: b2b1a6d Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 962.37 us/op 1.1413 ms/op 0.84
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 35.185 us/op 41.109 us/op 0.86
BLS verify - blst 1.0243 ms/op 887.48 us/op 1.15
BLS verifyMultipleSignatures 3 - blst 1.2564 ms/op 1.3319 ms/op 0.94
BLS verifyMultipleSignatures 8 - blst 1.8958 ms/op 1.7830 ms/op 1.06
BLS verifyMultipleSignatures 32 - blst 5.7717 ms/op 5.2600 ms/op 1.10
BLS verifyMultipleSignatures 64 - blst 11.017 ms/op 9.6292 ms/op 1.14
BLS verifyMultipleSignatures 128 - blst 17.660 ms/op 17.987 ms/op 0.98
BLS deserializing 10000 signatures 707.34 ms/op 715.97 ms/op 0.99
BLS deserializing 100000 signatures 6.9946 s/op 7.0539 s/op 0.99
BLS verifyMultipleSignatures - same message - 3 - blst 858.88 us/op 887.80 us/op 0.97
BLS verifyMultipleSignatures - same message - 8 - blst 1.4468 ms/op 1.0486 ms/op 1.38
BLS verifyMultipleSignatures - same message - 32 - blst 1.6712 ms/op 1.7307 ms/op 0.97
BLS verifyMultipleSignatures - same message - 64 - blst 2.5668 ms/op 2.6600 ms/op 0.96
BLS verifyMultipleSignatures - same message - 128 - blst 4.3705 ms/op 4.5467 ms/op 0.96
BLS aggregatePubkeys 32 - blst 19.699 us/op 19.778 us/op 1.00
BLS aggregatePubkeys 128 - blst 70.684 us/op 71.440 us/op 0.99
notSeenSlots=1 numMissedVotes=1 numBadVotes=10 57.172 ms/op 48.070 ms/op 1.19
notSeenSlots=1 numMissedVotes=0 numBadVotes=4 58.540 ms/op 48.056 ms/op 1.22
notSeenSlots=2 numMissedVotes=1 numBadVotes=10 47.421 ms/op 35.900 ms/op 1.32
getSlashingsAndExits - default max 80.376 us/op 78.799 us/op 1.02
getSlashingsAndExits - 2k 342.53 us/op 293.25 us/op 1.17
proposeBlockBody type=full, size=empty 6.9226 ms/op 6.3638 ms/op 1.09
isKnown best case - 1 super set check 217.00 ns/op 221.00 ns/op 0.98
isKnown normal case - 2 super set checks 212.00 ns/op 222.00 ns/op 0.95
isKnown worse case - 16 super set checks 211.00 ns/op 224.00 ns/op 0.94
InMemoryCheckpointStateCache - add get delete 2.6220 us/op 2.4120 us/op 1.09
validate api signedAggregateAndProof - struct 3.4942 ms/op 1.3924 ms/op 2.51
validate gossip signedAggregateAndProof - struct 2.1287 ms/op 1.4055 ms/op 1.51
batch validate gossip attestation - vc 640000 - chunk 32 115.77 us/op 116.27 us/op 1.00
batch validate gossip attestation - vc 640000 - chunk 64 102.39 us/op 102.50 us/op 1.00
batch validate gossip attestation - vc 640000 - chunk 128 95.849 us/op 95.530 us/op 1.00
batch validate gossip attestation - vc 640000 - chunk 256 96.934 us/op 95.459 us/op 1.02
pickEth1Vote - no votes 989.04 us/op 975.51 us/op 1.01
pickEth1Vote - max votes 7.1071 ms/op 7.4104 ms/op 0.96
pickEth1Vote - Eth1Data hashTreeRoot value x2048 12.088 ms/op 10.797 ms/op 1.12
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 18.665 ms/op 14.665 ms/op 1.27
pickEth1Vote - Eth1Data fastSerialize value x2048 434.84 us/op 461.75 us/op 0.94
pickEth1Vote - Eth1Data fastSerialize tree x2048 3.0543 ms/op 2.0903 ms/op 1.46
bytes32 toHexString 358.00 ns/op 367.00 ns/op 0.98
bytes32 Buffer.toString(hex) 257.00 ns/op 235.00 ns/op 1.09
bytes32 Buffer.toString(hex) from Uint8Array 334.00 ns/op 322.00 ns/op 1.04
bytes32 Buffer.toString(hex) + 0x 235.00 ns/op 238.00 ns/op 0.99
Object access 1 prop 0.12000 ns/op 0.12400 ns/op 0.97
Map access 1 prop 0.12400 ns/op 0.12800 ns/op 0.97
Object get x1000 5.8900 ns/op 6.0210 ns/op 0.98
Map get x1000 6.0690 ns/op 6.5930 ns/op 0.92
Object set x1000 27.527 ns/op 28.326 ns/op 0.97
Map set x1000 19.176 ns/op 19.632 ns/op 0.98
Return object 10000 times 0.29000 ns/op 0.28800 ns/op 1.01
Throw Error 10000 times 4.2165 us/op 4.3302 us/op 0.97
toHex 126.02 ns/op 132.45 ns/op 0.95
Buffer.from 132.69 ns/op 129.50 ns/op 1.02
shared Buffer 76.152 ns/op 79.293 ns/op 0.96
fastMsgIdFn sha256 / 200 bytes 2.1660 us/op 2.1820 us/op 0.99
fastMsgIdFn h32 xxhash / 200 bytes 209.00 ns/op 206.00 ns/op 1.01
fastMsgIdFn h64 xxhash / 200 bytes 264.00 ns/op 270.00 ns/op 0.98
fastMsgIdFn sha256 / 1000 bytes 7.1630 us/op 7.3560 us/op 0.97
fastMsgIdFn h32 xxhash / 1000 bytes 335.00 ns/op 346.00 ns/op 0.97
fastMsgIdFn h64 xxhash / 1000 bytes 337.00 ns/op 344.00 ns/op 0.98
fastMsgIdFn sha256 / 10000 bytes 65.937 us/op 65.993 us/op 1.00
fastMsgIdFn h32 xxhash / 10000 bytes 1.8180 us/op 1.8340 us/op 0.99
fastMsgIdFn h64 xxhash / 10000 bytes 1.2250 us/op 1.2290 us/op 1.00
send data - 1000 256B messages 11.147 ms/op 11.171 ms/op 1.00
send data - 1000 512B messages 16.056 ms/op 16.135 ms/op 1.00
send data - 1000 1024B messages 24.630 ms/op 25.434 ms/op 0.97
send data - 1000 1200B messages 20.636 ms/op 19.266 ms/op 1.07
send data - 1000 2048B messages 22.470 ms/op 21.685 ms/op 1.04
send data - 1000 4096B messages 25.218 ms/op 24.742 ms/op 1.02
send data - 1000 16384B messages 68.281 ms/op 66.590 ms/op 1.03
send data - 1000 65536B messages 208.44 ms/op 189.73 ms/op 1.10
enrSubnets - fastDeserialize 64 bits 896.00 ns/op 890.00 ns/op 1.01
enrSubnets - ssz BitVector 64 bits 332.00 ns/op 327.00 ns/op 1.02
enrSubnets - fastDeserialize 4 bits 125.00 ns/op 136.00 ns/op 0.92
enrSubnets - ssz BitVector 4 bits 333.00 ns/op 325.00 ns/op 1.02
prioritizePeers score -10:0 att 32-0.1 sync 2-0 116.14 us/op 118.01 us/op 0.98
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 139.99 us/op 139.00 us/op 1.01
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 202.20 us/op 198.78 us/op 1.02
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 376.31 us/op 375.46 us/op 1.00
prioritizePeers score 0:0 att 64-1 sync 4-1 454.74 us/op 454.74 us/op 1.00
array of 16000 items push then shift 1.5838 us/op 1.6088 us/op 0.98
LinkedList of 16000 items push then shift 6.9370 ns/op 6.9880 ns/op 0.99
array of 16000 items push then pop 74.840 ns/op 74.797 ns/op 1.00
LinkedList of 16000 items push then pop 6.9390 ns/op 6.8900 ns/op 1.01
array of 24000 items push then shift 2.3787 us/op 2.4480 us/op 0.97
LinkedList of 24000 items push then shift 7.1160 ns/op 7.1030 ns/op 1.00
array of 24000 items push then pop 100.09 ns/op 104.00 ns/op 0.96
LinkedList of 24000 items push then pop 6.9210 ns/op 6.8300 ns/op 1.01
intersect bitArray bitLen 8 6.3720 ns/op 6.2860 ns/op 1.01
intersect array and set length 8 38.506 ns/op 40.213 ns/op 0.96
intersect bitArray bitLen 128 30.352 ns/op 30.697 ns/op 0.99
intersect array and set length 128 630.76 ns/op 648.23 ns/op 0.97
bitArray.getTrueBitIndexes() bitLen 128 1.0660 us/op 1.0360 us/op 1.03
bitArray.getTrueBitIndexes() bitLen 248 1.8170 us/op 1.8160 us/op 1.00
bitArray.getTrueBitIndexes() bitLen 512 3.7220 us/op 3.6890 us/op 1.01
Buffer.concat 32 items 722.00 ns/op 619.00 ns/op 1.17
Uint8Array.set 32 items 1.2050 us/op 950.00 ns/op 1.27
Buffer.copy 2.0390 us/op 2.6080 us/op 0.78
Uint8Array.set - with subarray 1.5630 us/op 1.7390 us/op 0.90
Uint8Array.set - without subarray 921.00 ns/op 887.00 ns/op 1.04
getUint32 - dataview 201.00 ns/op 213.00 ns/op 0.94
getUint32 - manual 131.00 ns/op 133.00 ns/op 0.98
Set add up to 64 items then delete first 2.1632 us/op 2.1914 us/op 0.99
OrderedSet add up to 64 items then delete first 3.1850 us/op 3.2290 us/op 0.99
Set add up to 64 items then delete last 2.4856 us/op 2.4693 us/op 1.01
OrderedSet add up to 64 items then delete last 3.5193 us/op 3.5734 us/op 0.98
Set add up to 64 items then delete middle 2.2959 us/op 2.5079 us/op 0.92
OrderedSet add up to 64 items then delete middle 5.0739 us/op 5.1898 us/op 0.98
Set add up to 128 items then delete first 5.0573 us/op 5.0340 us/op 1.00
OrderedSet add up to 128 items then delete first 7.6526 us/op 7.8998 us/op 0.97
Set add up to 128 items then delete last 4.8078 us/op 4.9747 us/op 0.97
OrderedSet add up to 128 items then delete last 7.2391 us/op 7.3635 us/op 0.98
Set add up to 128 items then delete middle 4.7398 us/op 6.0597 us/op 0.78
OrderedSet add up to 128 items then delete middle 13.418 us/op 13.790 us/op 0.97
Set add up to 256 items then delete first 10.346 us/op 10.316 us/op 1.00
OrderedSet add up to 256 items then delete first 15.899 us/op 16.050 us/op 0.99
Set add up to 256 items then delete last 9.9831 us/op 9.9493 us/op 1.00
OrderedSet add up to 256 items then delete last 14.294 us/op 14.629 us/op 0.98
Set add up to 256 items then delete middle 9.6767 us/op 9.6809 us/op 1.00
OrderedSet add up to 256 items then delete middle 40.801 us/op 41.386 us/op 0.99
transfer serialized Status (84 B) 2.2100 us/op 2.2420 us/op 0.99
copy serialized Status (84 B) 1.1720 us/op 1.1910 us/op 0.98
transfer serialized SignedVoluntaryExit (112 B) 2.2750 us/op 2.2480 us/op 1.01
copy serialized SignedVoluntaryExit (112 B) 1.2290 us/op 1.2210 us/op 1.01
transfer serialized ProposerSlashing (416 B) 3.2720 us/op 2.3090 us/op 1.42
copy serialized ProposerSlashing (416 B) 1.8070 us/op 1.2760 us/op 1.42
transfer serialized Attestation (485 B) 2.3240 us/op 2.3440 us/op 0.99
copy serialized Attestation (485 B) 1.3320 us/op 1.2690 us/op 1.05
transfer serialized AttesterSlashing (33232 B) 2.7250 us/op 2.4020 us/op 1.13
copy serialized AttesterSlashing (33232 B) 3.6610 us/op 3.4600 us/op 1.06
transfer serialized Small SignedBeaconBlock (128000 B) 3.1220 us/op 3.0010 us/op 1.04
copy serialized Small SignedBeaconBlock (128000 B) 8.6060 us/op 9.0630 us/op 0.95
transfer serialized Avg SignedBeaconBlock (200000 B) 3.7150 us/op 3.6070 us/op 1.03
copy serialized Avg SignedBeaconBlock (200000 B) 12.817 us/op 16.390 us/op 0.78
transfer serialized BlobsSidecar (524380 B) 3.7220 us/op 3.6240 us/op 1.03
copy serialized BlobsSidecar (524380 B) 62.221 us/op 59.979 us/op 1.04
transfer serialized Big SignedBeaconBlock (1000000 B) 3.8470 us/op 3.5820 us/op 1.07
copy serialized Big SignedBeaconBlock (1000000 B) 138.09 us/op 117.80 us/op 1.17
pass gossip attestations to forkchoice per slot 2.7674 ms/op 2.9375 ms/op 0.94
forkChoice updateHead vc 100000 bc 64 eq 0 453.80 us/op 475.73 us/op 0.95
forkChoice updateHead vc 600000 bc 64 eq 0 2.8010 ms/op 3.0554 ms/op 0.92
forkChoice updateHead vc 1000000 bc 64 eq 0 4.7471 ms/op 4.8271 ms/op 0.98
forkChoice updateHead vc 600000 bc 320 eq 0 2.8390 ms/op 2.9622 ms/op 0.96
forkChoice updateHead vc 600000 bc 1200 eq 0 2.8866 ms/op 3.7308 ms/op 0.77
forkChoice updateHead vc 600000 bc 7200 eq 0 3.5418 ms/op 3.4530 ms/op 1.03
forkChoice updateHead vc 600000 bc 64 eq 1000 10.502 ms/op 10.633 ms/op 0.99
forkChoice updateHead vc 600000 bc 64 eq 10000 10.667 ms/op 10.584 ms/op 1.01
forkChoice updateHead vc 600000 bc 64 eq 300000 14.164 ms/op 13.873 ms/op 1.02
computeDeltas 500000 validators 300 proto nodes 3.9109 ms/op 4.0012 ms/op 0.98
computeDeltas 500000 validators 1200 proto nodes 3.9524 ms/op 3.9799 ms/op 0.99
computeDeltas 500000 validators 7200 proto nodes 3.9661 ms/op 3.9983 ms/op 0.99
computeDeltas 750000 validators 300 proto nodes 5.7616 ms/op 5.8407 ms/op 0.99
computeDeltas 750000 validators 1200 proto nodes 5.8147 ms/op 5.9881 ms/op 0.97
computeDeltas 750000 validators 7200 proto nodes 5.8361 ms/op 5.8400 ms/op 1.00
computeDeltas 1400000 validators 300 proto nodes 10.979 ms/op 11.057 ms/op 0.99
computeDeltas 1400000 validators 1200 proto nodes 11.009 ms/op 11.091 ms/op 0.99
computeDeltas 1400000 validators 7200 proto nodes 11.131 ms/op 11.294 ms/op 0.99
computeDeltas 2100000 validators 300 proto nodes 16.794 ms/op 16.757 ms/op 1.00
computeDeltas 2100000 validators 1200 proto nodes 16.823 ms/op 16.901 ms/op 1.00
computeDeltas 2100000 validators 7200 proto nodes 16.924 ms/op 17.343 ms/op 0.98
altair processAttestation - 250000 vs - 7PWei normalcase 2.2272 ms/op 2.0773 ms/op 1.07
altair processAttestation - 250000 vs - 7PWei worstcase 3.2602 ms/op 3.1168 ms/op 1.05
altair processAttestation - setStatus - 1/6 committees join 133.10 us/op 137.54 us/op 0.97
altair processAttestation - setStatus - 1/3 committees join 249.97 us/op 248.88 us/op 1.00
altair processAttestation - setStatus - 1/2 committees join 359.60 us/op 345.60 us/op 1.04
altair processAttestation - setStatus - 2/3 committees join 449.51 us/op 452.27 us/op 0.99
altair processAttestation - setStatus - 4/5 committees join 621.47 us/op 603.93 us/op 1.03
altair processAttestation - setStatus - 100% committees join 741.24 us/op 741.84 us/op 1.00
altair processBlock - 250000 vs - 7PWei normalcase 5.1177 ms/op 4.7924 ms/op 1.07
altair processBlock - 250000 vs - 7PWei normalcase hashState 33.990 ms/op 29.107 ms/op 1.17
altair processBlock - 250000 vs - 7PWei worstcase 40.260 ms/op 36.422 ms/op 1.11
altair processBlock - 250000 vs - 7PWei worstcase hashState 82.859 ms/op 80.084 ms/op 1.03
phase0 processBlock - 250000 vs - 7PWei normalcase 1.9347 ms/op 1.6615 ms/op 1.16
phase0 processBlock - 250000 vs - 7PWei worstcase 26.894 ms/op 23.327 ms/op 1.15
altair processEth1Data - 250000 vs - 7PWei normalcase 336.80 us/op 350.11 us/op 0.96
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 5.8940 us/op 6.0790 us/op 0.97
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 43.922 us/op 42.167 us/op 1.04
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 11.689 us/op 12.535 us/op 0.93
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 7.1290 us/op 7.2980 us/op 0.98
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 163.85 us/op 219.49 us/op 0.75
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 2.2877 ms/op 1.9371 ms/op 1.18
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 2.5130 ms/op 2.4274 ms/op 1.04
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 2.4752 ms/op 2.4323 ms/op 1.02
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 4.8969 ms/op 4.8925 ms/op 1.00
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.5397 ms/op 2.5104 ms/op 1.01
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.9985 ms/op 5.0029 ms/op 1.00
Tree 40 250000 create 461.38 ms/op 479.67 ms/op 0.96
Tree 40 250000 get(125000) 147.26 ns/op 147.31 ns/op 1.00
Tree 40 250000 set(125000) 1.5818 us/op 1.6296 us/op 0.97
Tree 40 250000 toArray() 20.272 ms/op 20.906 ms/op 0.97
Tree 40 250000 iterate all - toArray() + loop 20.358 ms/op 19.715 ms/op 1.03
Tree 40 250000 iterate all - get(i) 56.379 ms/op 62.964 ms/op 0.90
Array 250000 create 2.5545 ms/op 2.6799 ms/op 0.95
Array 250000 clone - spread 838.63 us/op 853.47 us/op 0.98
Array 250000 get(125000) 0.42400 ns/op 0.41400 ns/op 1.02
Array 250000 set(125000) 0.44500 ns/op 0.43600 ns/op 1.02
Array 250000 iterate all - loop 110.46 us/op 112.04 us/op 0.99
phase0 afterProcessEpoch - 250000 vs - 7PWei 43.733 ms/op 43.980 ms/op 0.99
Array.fill - length 1000000 3.4951 ms/op 4.5031 ms/op 0.78
Array push - length 1000000 14.655 ms/op 17.366 ms/op 0.84
Array.get 0.27743 ns/op 0.28987 ns/op 0.96
Uint8Array.get 0.44675 ns/op 0.47821 ns/op 0.93
phase0 beforeProcessEpoch - 250000 vs - 7PWei 16.777 ms/op 20.110 ms/op 0.83
altair processEpoch - mainnet_e81889 262.54 ms/op 279.71 ms/op 0.94
mainnet_e81889 - altair beforeProcessEpoch 18.533 ms/op 20.906 ms/op 0.89
mainnet_e81889 - altair processJustificationAndFinalization 5.8210 us/op 5.7750 us/op 1.01
mainnet_e81889 - altair processInactivityUpdates 4.3711 ms/op 5.1075 ms/op 0.86
mainnet_e81889 - altair processRewardsAndPenalties 38.896 ms/op 39.911 ms/op 0.97
mainnet_e81889 - altair processRegistryUpdates 736.00 ns/op 751.00 ns/op 0.98
mainnet_e81889 - altair processSlashings 194.00 ns/op 194.00 ns/op 1.00
mainnet_e81889 - altair processEth1DataReset 193.00 ns/op 184.00 ns/op 1.05
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.2774 ms/op 1.2630 ms/op 1.01
mainnet_e81889 - altair processSlashingsReset 1.1060 us/op 920.00 ns/op 1.20
mainnet_e81889 - altair processRandaoMixesReset 1.3300 us/op 1.2190 us/op 1.09
mainnet_e81889 - altair processHistoricalRootsUpdate 198.00 ns/op 190.00 ns/op 1.04
mainnet_e81889 - altair processParticipationFlagUpdates 523.00 ns/op 552.00 ns/op 0.95
mainnet_e81889 - altair processSyncCommitteeUpdates 141.00 ns/op 163.00 ns/op 0.87
mainnet_e81889 - altair afterProcessEpoch 45.462 ms/op 46.832 ms/op 0.97
capella processEpoch - mainnet_e217614 866.55 ms/op 874.37 ms/op 0.99
mainnet_e217614 - capella beforeProcessEpoch 62.393 ms/op 62.584 ms/op 1.00
mainnet_e217614 - capella processJustificationAndFinalization 7.0400 us/op 5.4570 us/op 1.29
mainnet_e217614 - capella processInactivityUpdates 15.068 ms/op 15.354 ms/op 0.98
mainnet_e217614 - capella processRewardsAndPenalties 196.20 ms/op 182.47 ms/op 1.08
mainnet_e217614 - capella processRegistryUpdates 6.7420 us/op 6.6830 us/op 1.01
mainnet_e217614 - capella processSlashings 195.00 ns/op 185.00 ns/op 1.05
mainnet_e217614 - capella processEth1DataReset 198.00 ns/op 189.00 ns/op 1.05
mainnet_e217614 - capella processEffectiveBalanceUpdates 4.2984 ms/op 11.918 ms/op 0.36
mainnet_e217614 - capella processSlashingsReset 1.1080 us/op 903.00 ns/op 1.23
mainnet_e217614 - capella processRandaoMixesReset 1.2910 us/op 1.2340 us/op 1.05
mainnet_e217614 - capella processHistoricalRootsUpdate 199.00 ns/op 192.00 ns/op 1.04
mainnet_e217614 - capella processParticipationFlagUpdates 537.00 ns/op 547.00 ns/op 0.98
mainnet_e217614 - capella afterProcessEpoch 118.13 ms/op 118.00 ms/op 1.00
phase0 processEpoch - mainnet_e58758 289.26 ms/op 293.13 ms/op 0.99
mainnet_e58758 - phase0 beforeProcessEpoch 75.488 ms/op 75.649 ms/op 1.00
mainnet_e58758 - phase0 processJustificationAndFinalization 6.8940 us/op 5.7820 us/op 1.19
mainnet_e58758 - phase0 processRewardsAndPenalties 37.886 ms/op 37.219 ms/op 1.02
mainnet_e58758 - phase0 processRegistryUpdates 3.4180 us/op 3.2400 us/op 1.05
mainnet_e58758 - phase0 processSlashings 207.00 ns/op 186.00 ns/op 1.11
mainnet_e58758 - phase0 processEth1DataReset 194.00 ns/op 184.00 ns/op 1.05
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.1967 ms/op 1.2805 ms/op 0.93
mainnet_e58758 - phase0 processSlashingsReset 1.0340 us/op 978.00 ns/op 1.06
mainnet_e58758 - phase0 processRandaoMixesReset 1.3310 us/op 1.2270 us/op 1.08
mainnet_e58758 - phase0 processHistoricalRootsUpdate 212.00 ns/op 192.00 ns/op 1.10
mainnet_e58758 - phase0 processParticipationRecordUpdates 965.00 ns/op 917.00 ns/op 1.05
mainnet_e58758 - phase0 afterProcessEpoch 36.799 ms/op 36.612 ms/op 1.01
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.5929 ms/op 1.3937 ms/op 1.14
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 2.4912 ms/op 2.2169 ms/op 1.12
altair processInactivityUpdates - 250000 normalcase 18.984 ms/op 18.003 ms/op 1.05
altair processInactivityUpdates - 250000 worstcase 21.216 ms/op 17.611 ms/op 1.20
phase0 processRegistryUpdates - 250000 normalcase 6.8670 us/op 7.8370 us/op 0.88
phase0 processRegistryUpdates - 250000 badcase_full_deposits 314.06 us/op 281.31 us/op 1.12
phase0 processRegistryUpdates - 250000 worstcase 0.5 110.09 ms/op 101.80 ms/op 1.08
altair processRewardsAndPenalties - 250000 normalcase 27.587 ms/op 25.894 ms/op 1.07
altair processRewardsAndPenalties - 250000 worstcase 29.456 ms/op 27.477 ms/op 1.07
phase0 getAttestationDeltas - 250000 normalcase 6.1515 ms/op 9.2617 ms/op 0.66
phase0 getAttestationDeltas - 250000 worstcase 7.6370 ms/op 6.3366 ms/op 1.21
phase0 processSlashings - 250000 worstcase 98.919 us/op 107.83 us/op 0.92
altair processSyncCommitteeUpdates - 250000 11.282 ms/op 10.980 ms/op 1.03
BeaconState.hashTreeRoot - No change 240.00 ns/op 231.00 ns/op 1.04
BeaconState.hashTreeRoot - 1 full validator 87.120 us/op 79.713 us/op 1.09
BeaconState.hashTreeRoot - 32 full validator 1.4555 ms/op 838.00 us/op 1.74
BeaconState.hashTreeRoot - 512 full validator 13.340 ms/op 10.735 ms/op 1.24
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 95.996 us/op 97.844 us/op 0.98
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 2.0484 ms/op 2.0977 ms/op 0.98
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 26.255 ms/op 28.499 ms/op 0.92
BeaconState.hashTreeRoot - 1 balances 89.049 us/op 73.483 us/op 1.21
BeaconState.hashTreeRoot - 32 balances 867.84 us/op 713.69 us/op 1.22
BeaconState.hashTreeRoot - 512 balances 8.7467 ms/op 8.5501 ms/op 1.02
BeaconState.hashTreeRoot - 250000 balances 214.86 ms/op 167.34 ms/op 1.28
aggregationBits - 2048 els - zipIndexesInBitList 24.304 us/op 21.988 us/op 1.11
byteArrayEquals 32 54.154 ns/op 54.669 ns/op 0.99
Buffer.compare 32 17.519 ns/op 17.550 ns/op 1.00
byteArrayEquals 1024 1.6003 us/op 1.6362 us/op 0.98
Buffer.compare 1024 25.899 ns/op 27.271 ns/op 0.95
byteArrayEquals 16384 25.539 us/op 25.730 us/op 0.99
Buffer.compare 16384 207.70 ns/op 182.98 ns/op 1.14
byteArrayEquals 123687377 197.48 ms/op 196.59 ms/op 1.00
Buffer.compare 123687377 8.8145 ms/op 8.9596 ms/op 0.98
byteArrayEquals 32 - diff last byte 54.475 ns/op 54.082 ns/op 1.01
Buffer.compare 32 - diff last byte 17.917 ns/op 17.577 ns/op 1.02
byteArrayEquals 1024 - diff last byte 1.6479 us/op 1.6956 us/op 0.97
Buffer.compare 1024 - diff last byte 26.648 ns/op 26.321 ns/op 1.01
byteArrayEquals 16384 - diff last byte 25.994 us/op 26.367 us/op 0.99
Buffer.compare 16384 - diff last byte 197.38 ns/op 193.13 ns/op 1.02
byteArrayEquals 123687377 - diff last byte 197.45 ms/op 201.50 ms/op 0.98
Buffer.compare 123687377 - diff last byte 7.8427 ms/op 9.5561 ms/op 0.82
byteArrayEquals 32 - random bytes 5.2080 ns/op 5.2340 ns/op 1.00
Buffer.compare 32 - random bytes 17.456 ns/op 17.659 ns/op 0.99
byteArrayEquals 1024 - random bytes 5.2720 ns/op 5.2770 ns/op 1.00
Buffer.compare 1024 - random bytes 17.644 ns/op 17.635 ns/op 1.00
byteArrayEquals 16384 - random bytes 5.2520 ns/op 5.2900 ns/op 0.99
Buffer.compare 16384 - random bytes 17.725 ns/op 17.968 ns/op 0.99
byteArrayEquals 123687377 - random bytes 7.0700 ns/op 6.7600 ns/op 1.05
Buffer.compare 123687377 - random bytes 19.010 ns/op 19.410 ns/op 0.98
regular array get 100000 times 41.725 us/op 35.290 us/op 1.18
wrappedArray get 100000 times 33.699 us/op 34.979 us/op 0.96
arrayWithProxy get 100000 times 13.609 ms/op 14.167 ms/op 0.96
ssz.Root.equals 47.928 ns/op 49.405 ns/op 0.97
byteArrayEquals 46.965 ns/op 47.880 ns/op 0.98
Buffer.compare 10.756 ns/op 10.974 ns/op 0.98
processSlot - 1 slots 10.465 us/op 12.315 us/op 0.85
processSlot - 32 slots 2.1243 ms/op 2.1696 ms/op 0.98
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 3.2084 ms/op 3.6214 ms/op 0.89
getCommitteeAssignments - req 1 vs - 250000 vc 2.2172 ms/op 2.7136 ms/op 0.82
getCommitteeAssignments - req 100 vs - 250000 vc 4.5734 ms/op 4.2916 ms/op 1.07
getCommitteeAssignments - req 1000 vs - 250000 vc 4.5301 ms/op 4.6190 ms/op 0.98
findModifiedValidators - 10000 modified validators 763.57 ms/op 824.44 ms/op 0.93
findModifiedValidators - 1000 modified validators 701.81 ms/op 794.27 ms/op 0.88
findModifiedValidators - 100 modified validators 178.92 ms/op 233.63 ms/op 0.77
findModifiedValidators - 10 modified validators 145.97 ms/op 220.77 ms/op 0.66
findModifiedValidators - 1 modified validators 184.14 ms/op 276.93 ms/op 0.66
findModifiedValidators - no difference 181.18 ms/op 183.11 ms/op 0.99
compare ViewDUs 6.4936 s/op 7.2018 s/op 0.90
compare each validator Uint8Array 1.1274 s/op 1.6189 s/op 0.70
compare ViewDU to Uint8Array 1.2416 s/op 1.0637 s/op 1.17
migrate state 1000000 validators, 24 modified, 0 new 778.68 ms/op 846.79 ms/op 0.92
migrate state 1000000 validators, 1700 modified, 1000 new 1.2020 s/op 1.0751 s/op 1.12
migrate state 1000000 validators, 3400 modified, 2000 new 1.3286 s/op 1.6644 s/op 0.80
migrate state 1500000 validators, 24 modified, 0 new 958.72 ms/op 846.88 ms/op 1.13
migrate state 1500000 validators, 1700 modified, 1000 new 1.1833 s/op 1.0511 s/op 1.13
migrate state 1500000 validators, 3400 modified, 2000 new 1.4241 s/op 1.4206 s/op 1.00
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 5.0900 ns/op 4.9900 ns/op 1.02
state getBlockRootAtSlot - 250000 vs - 7PWei 541.14 ns/op 639.51 ns/op 0.85
naive computeProposerIndex 100000 validators 53.910 ms/op 56.982 ms/op 0.95
computeProposerIndex 100000 validators 1.5555 ms/op 1.6585 ms/op 0.94
naiveGetNextSyncCommitteeIndices 1000 validators 7.7914 s/op 7.9219 s/op 0.98
getNextSyncCommitteeIndices 1000 validators 111.48 ms/op 118.65 ms/op 0.94
naiveGetNextSyncCommitteeIndices 10000 validators 7.8746 s/op 7.8954 s/op 1.00
getNextSyncCommitteeIndices 10000 validators 120.19 ms/op 130.01 ms/op 0.92
naiveGetNextSyncCommitteeIndices 100000 validators 7.8862 s/op 9.0227 s/op 0.87
getNextSyncCommitteeIndices 100000 validators 113.32 ms/op 122.34 ms/op 0.93
naive computeShuffledIndex 100000 validators 23.556 s/op 25.490 s/op 0.92
cached computeShuffledIndex 100000 validators 553.41 ms/op 600.19 ms/op 0.92
naive computeShuffledIndex 2000000 validators 504.57 s/op 513.94 s/op 0.98
cached computeShuffledIndex 2000000 validators 45.162 s/op 41.629 s/op 1.08
computeProposers - vc 250000 638.51 us/op 699.85 us/op 0.91
computeEpochShuffling - vc 250000 44.507 ms/op 45.901 ms/op 0.97
getNextSyncCommittee - vc 250000 10.869 ms/op 11.222 ms/op 0.97
computeSigningRoot for AttestationData 23.374 us/op 20.849 us/op 1.12
hash AttestationData serialized data then Buffer.toString(base64) 1.6577 us/op 1.6813 us/op 0.99
toHexString serialized data 1.3914 us/op 1.3009 us/op 1.07
Buffer.toString(base64) 165.85 ns/op 167.36 ns/op 0.99
nodejs block root to RootHex using toHex 150.93 ns/op 167.47 ns/op 0.90
nodejs block root to RootHex using toRootHex 102.35 ns/op 95.066 ns/op 1.08
browser block root to RootHex using the deprecated toHexString 217.52 ns/op 402.42 ns/op 0.54
browser block root to RootHex using toHex 177.20 ns/op 296.05 ns/op 0.60
browser block root to RootHex using toRootHex 167.56 ns/op 172.31 ns/op 0.97

by benchmarkbot/action

@nflaig nflaig merged commit d01ed15 into unstable Jun 12, 2025
31 of 34 checks passed
@nflaig nflaig deleted the nflaig/proposer-lookahead-unstable branch June 12, 2025 09:45
KatyaRyazantseva pushed a commit to KatyaRyazantseva/lodestar that referenced this pull request Jun 19, 2025
**Motivation**

Bring proposer lookahead fixes to unstable branch, does not include
shuffling calculation changes from
ChainSafe#7945 yet.

**Description**

- only use proposer lookahead from state if epoch is post fulu
- track epoch transition step time for proposer lookahead


Related ChainSafe#7902
@wemeetagain

Copy link
Copy Markdown
Member

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