这是indexloc提供的服务,不要输入任何密码
Skip to content

Conversation

@nflaig
Copy link
Member

@nflaig nflaig commented Oct 30, 2025

@nflaig nflaig requested a review from a team as a code owner October 30, 2025 21:00
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @nflaig, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces critical updates to the mainnet configuration by precisely scheduling the Fulu fork and defining specific parameters for future blob processing. These changes are foundational for the planned evolution of the network, ensuring the timely activation of protocol upgrades and optimizing data handling capabilities for enhanced scalability.

Highlights

  • Fulu Fork Scheduling: The FULU_FORK_EPOCH has been updated from Infinity to 411392, effectively scheduling the Fulu fork for December 3, 2025.
  • Blob Processing Optimizations (BPOs) Scheduling: The BLOB_SCHEDULE now includes two new entries, setting MAX_BLOBS_PER_BLOCK to 15 at epoch 412672 (December 9, 2025) and to 21 at epoch 419072 (January 7, 2026).
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request schedules the Fulu fork and introduces a schedule for increasing the maximum blobs per block on mainnet, aligning with the linked consensus-specs proposal. The changes look good, but I found a minor inconsistency in a comment, which I've detailed below.

@github-actions
Copy link
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 1d22d26 Previous: aec301c Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 997.53 us/op 945.09 us/op 1.06
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 40.047 us/op 36.794 us/op 1.09
BLS verify - blst 877.53 us/op 874.71 us/op 1.00
BLS verifyMultipleSignatures 3 - blst 1.2717 ms/op 1.2557 ms/op 1.01
BLS verifyMultipleSignatures 8 - blst 2.1044 ms/op 1.8583 ms/op 1.13
BLS verifyMultipleSignatures 32 - blst 5.8852 ms/op 5.0273 ms/op 1.17
BLS verifyMultipleSignatures 64 - blst 11.511 ms/op 9.6514 ms/op 1.19
BLS verifyMultipleSignatures 128 - blst 19.871 ms/op 18.939 ms/op 1.05
BLS deserializing 10000 signatures 708.59 ms/op 724.21 ms/op 0.98
BLS deserializing 100000 signatures 6.9922 s/op 7.1376 s/op 0.98
BLS verifyMultipleSignatures - same message - 3 - blst 951.75 us/op 1.0656 ms/op 0.89
BLS verifyMultipleSignatures - same message - 8 - blst 1.1022 ms/op 1.1407 ms/op 0.97
BLS verifyMultipleSignatures - same message - 32 - blst 1.8826 ms/op 1.8310 ms/op 1.03
BLS verifyMultipleSignatures - same message - 64 - blst 2.8449 ms/op 2.7443 ms/op 1.04
BLS verifyMultipleSignatures - same message - 128 - blst 4.3973 ms/op 4.5817 ms/op 0.96
BLS aggregatePubkeys 32 - blst 19.801 us/op 20.188 us/op 0.98
BLS aggregatePubkeys 128 - blst 70.427 us/op 73.285 us/op 0.96
notSeenSlots=1 numMissedVotes=1 numBadVotes=10 54.190 ms/op 57.436 ms/op 0.94
notSeenSlots=1 numMissedVotes=0 numBadVotes=4 54.520 ms/op 52.629 ms/op 1.04
notSeenSlots=2 numMissedVotes=1 numBadVotes=10 40.915 ms/op 38.229 ms/op 1.07
getSlashingsAndExits - default max 75.786 us/op 87.576 us/op 0.87
getSlashingsAndExits - 2k 347.70 us/op 407.44 us/op 0.85
isKnown best case - 1 super set check 213.00 ns/op 212.00 ns/op 1.00
isKnown normal case - 2 super set checks 212.00 ns/op 207.00 ns/op 1.02
isKnown worse case - 16 super set checks 212.00 ns/op 208.00 ns/op 1.02
InMemoryCheckpointStateCache - add get delete 3.0970 us/op 2.4270 us/op 1.28
validate api signedAggregateAndProof - struct 1.6137 ms/op 1.5270 ms/op 1.06
validate gossip signedAggregateAndProof - struct 2.6088 ms/op 1.4592 ms/op 1.79
batch validate gossip attestation - vc 640000 - chunk 32 116.52 us/op 119.79 us/op 0.97
batch validate gossip attestation - vc 640000 - chunk 64 99.939 us/op 106.76 us/op 0.94
batch validate gossip attestation - vc 640000 - chunk 128 92.085 us/op 98.948 us/op 0.93
batch validate gossip attestation - vc 640000 - chunk 256 94.117 us/op 104.97 us/op 0.90
pickEth1Vote - no votes 926.71 us/op 999.96 us/op 0.93
pickEth1Vote - max votes 5.8685 ms/op 7.0357 ms/op 0.83
pickEth1Vote - Eth1Data hashTreeRoot value x2048 10.469 ms/op 12.636 ms/op 0.83
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 16.707 ms/op 19.039 ms/op 0.88
pickEth1Vote - Eth1Data fastSerialize value x2048 419.49 us/op 432.41 us/op 0.97
pickEth1Vote - Eth1Data fastSerialize tree x2048 4.5544 ms/op 2.1480 ms/op 2.12
bytes32 toHexString 359.00 ns/op 356.00 ns/op 1.01
bytes32 Buffer.toString(hex) 237.00 ns/op 245.00 ns/op 0.97
bytes32 Buffer.toString(hex) from Uint8Array 446.00 ns/op 334.00 ns/op 1.34
bytes32 Buffer.toString(hex) + 0x 242.00 ns/op 247.00 ns/op 0.98
Object access 1 prop 0.11300 ns/op 0.11900 ns/op 0.95
Map access 1 prop 0.12000 ns/op 0.12000 ns/op 1.00
Object get x1000 5.8090 ns/op 5.9880 ns/op 0.97
Map get x1000 6.0830 ns/op 6.6690 ns/op 0.91
Object set x1000 27.401 ns/op 38.829 ns/op 0.71
Map set x1000 18.720 ns/op 22.412 ns/op 0.84
Return object 10000 times 0.28200 ns/op 0.29550 ns/op 0.95
Throw Error 10000 times 4.0807 us/op 4.6606 us/op 0.88
toHex 145.22 ns/op 145.86 ns/op 1.00
Buffer.from 133.45 ns/op 127.51 ns/op 1.05
shared Buffer 78.998 ns/op 86.262 ns/op 0.92
fastMsgIdFn sha256 / 200 bytes 2.1370 us/op 2.2620 us/op 0.94
fastMsgIdFn h32 xxhash / 200 bytes 193.00 ns/op 210.00 ns/op 0.92
fastMsgIdFn h64 xxhash / 200 bytes 254.00 ns/op 267.00 ns/op 0.95
fastMsgIdFn sha256 / 1000 bytes 7.1440 us/op 7.4270 us/op 0.96
fastMsgIdFn h32 xxhash / 1000 bytes 313.00 ns/op 344.00 ns/op 0.91
fastMsgIdFn h64 xxhash / 1000 bytes 307.00 ns/op 346.00 ns/op 0.89
fastMsgIdFn sha256 / 10000 bytes 60.536 us/op 67.467 us/op 0.90
fastMsgIdFn h32 xxhash / 10000 bytes 1.7150 us/op 1.8920 us/op 0.91
fastMsgIdFn h64 xxhash / 10000 bytes 1.1360 us/op 1.2540 us/op 0.91
100 bytes - compress - snappyjs 1.5312 us/op 1.4578 us/op 1.05
100 bytes - compress - snappy 1.0166 us/op 1.2363 us/op 0.82
100 bytes - compress - #snappy 1.9052 us/op 1.1692 us/op 1.63
200 bytes - compress - snappyjs 1.6978 us/op 1.7932 us/op 0.95
200 bytes - compress - snappy 1.0987 us/op 1.2141 us/op 0.90
200 bytes - compress - #snappy 1.8909 us/op 1.9895 us/op 0.95
300 bytes - compress - snappyjs 2.4757 us/op 2.3676 us/op 1.05
300 bytes - compress - snappy 1.1841 us/op 1.2479 us/op 0.95
300 bytes - compress - #snappy 2.2266 us/op 2.3496 us/op 0.95
400 bytes - compress - snappyjs 2.3653 us/op 2.6485 us/op 0.89
400 bytes - compress - snappy 1.1698 us/op 1.3460 us/op 0.87
400 bytes - compress - #snappy 2.8891 us/op 2.6260 us/op 1.10
500 bytes - compress - snappyjs 2.8361 us/op 3.1272 us/op 0.91
500 bytes - compress - snappy 1.3727 us/op 1.3973 us/op 0.98
500 bytes - compress - #snappy 2.6758 us/op 2.8007 us/op 0.96
1000 bytes - compress - snappyjs 5.0852 us/op 4.6181 us/op 1.10
1000 bytes - compress - snappy 1.7638 us/op 1.9021 us/op 0.93
1000 bytes - compress - #snappy 4.8165 us/op 4.4931 us/op 1.07
10000 bytes - compress - snappyjs 28.764 us/op 32.561 us/op 0.88
10000 bytes - compress - snappy 29.113 us/op 35.207 us/op 0.83
10000 bytes - compress - #snappy 28.976 us/op 31.671 us/op 0.91
100 bytes - uncompress - snappyjs 742.61 ns/op 1.0324 us/op 0.72
100 bytes - uncompress - snappy 983.62 ns/op 1.1525 us/op 0.85
100 bytes - uncompress - #snappy 748.40 ns/op 739.95 ns/op 1.01
200 bytes - uncompress - snappyjs 1.8352 us/op 1.8645 us/op 0.98
200 bytes - uncompress - snappy 1.0063 us/op 1.4786 us/op 0.68
200 bytes - uncompress - #snappy 1.2962 us/op 1.1794 us/op 1.10
300 bytes - uncompress - snappyjs 1.6082 us/op 2.2653 us/op 0.71
300 bytes - uncompress - snappy 1.0757 us/op 1.3618 us/op 0.79
300 bytes - uncompress - #snappy 1.4069 us/op 1.1133 us/op 1.26
400 bytes - uncompress - snappyjs 1.7939 us/op 1.4656 us/op 1.22
400 bytes - uncompress - snappy 1.0710 us/op 1.5066 us/op 0.71
400 bytes - uncompress - #snappy 1.5267 us/op 1.4117 us/op 1.08
500 bytes - uncompress - snappyjs 1.6682 us/op 1.5856 us/op 1.05
500 bytes - uncompress - snappy 1.1261 us/op 1.3532 us/op 0.83
500 bytes - uncompress - #snappy 1.6133 us/op 1.8276 us/op 0.88
1000 bytes - uncompress - snappyjs 2.5425 us/op 2.5011 us/op 1.02
1000 bytes - uncompress - snappy 1.4242 us/op 1.9483 us/op 0.73
1000 bytes - uncompress - #snappy 2.0794 us/op 2.3628 us/op 0.88
10000 bytes - uncompress - snappyjs 13.570 us/op 17.157 us/op 0.79
10000 bytes - uncompress - snappy 29.017 us/op 31.026 us/op 0.94
10000 bytes - uncompress - #snappy 13.765 us/op 15.655 us/op 0.88
send data - 1000 256B messages 15.414 ms/op 19.972 ms/op 0.77
send data - 1000 512B messages 18.529 ms/op 21.401 ms/op 0.87
send data - 1000 1024B messages 26.033 ms/op 30.001 ms/op 0.87
send data - 1000 1200B messages 24.916 ms/op 27.585 ms/op 0.90
send data - 1000 2048B messages 25.921 ms/op 32.481 ms/op 0.80
send data - 1000 4096B messages 30.124 ms/op 32.034 ms/op 0.94
send data - 1000 16384B messages 44.740 ms/op 59.528 ms/op 0.75
send data - 1000 65536B messages 114.67 ms/op 134.49 ms/op 0.85
enrSubnets - fastDeserialize 64 bits 912.00 ns/op 931.00 ns/op 0.98
enrSubnets - ssz BitVector 64 bits 342.00 ns/op 360.00 ns/op 0.95
enrSubnets - fastDeserialize 4 bits 143.00 ns/op 135.00 ns/op 1.06
enrSubnets - ssz BitVector 4 bits 346.00 ns/op 343.00 ns/op 1.01
prioritizePeers score -10:0 att 32-0.1 sync 2-0 234.27 us/op 252.33 us/op 0.93
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 251.91 us/op 292.41 us/op 0.86
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 370.34 us/op 393.45 us/op 0.94
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 689.38 us/op 763.92 us/op 0.90
prioritizePeers score 0:0 att 64-1 sync 4-1 1.0479 ms/op 905.05 us/op 1.16
array of 16000 items push then shift 1.5855 us/op 1.6459 us/op 0.96
LinkedList of 16000 items push then shift 7.1150 ns/op 10.900 ns/op 0.65
array of 16000 items push then pop 74.127 ns/op 89.550 ns/op 0.83
LinkedList of 16000 items push then pop 7.1200 ns/op 8.4690 ns/op 0.84
array of 24000 items push then shift 2.3716 us/op 2.4799 us/op 0.96
LinkedList of 24000 items push then shift 7.1920 ns/op 9.8570 ns/op 0.73
array of 24000 items push then pop 99.650 ns/op 119.34 ns/op 0.84
LinkedList of 24000 items push then pop 7.0800 ns/op 7.4840 ns/op 0.95
intersect bitArray bitLen 8 6.4290 ns/op 6.6150 ns/op 0.97
intersect array and set length 8 38.472 ns/op 39.313 ns/op 0.98
intersect bitArray bitLen 128 29.813 ns/op 30.331 ns/op 0.98
intersect array and set length 128 620.73 ns/op 666.10 ns/op 0.93
bitArray.getTrueBitIndexes() bitLen 128 1000.0 ns/op 1.1000 us/op 0.91
bitArray.getTrueBitIndexes() bitLen 248 1.7370 us/op 2.1240 us/op 0.82
bitArray.getTrueBitIndexes() bitLen 512 3.5460 us/op 3.9110 us/op 0.91
Full columns - reconstruct all 6 blobs 66.598 us/op 87.757 us/op 0.76
Full columns - reconstruct half of the blobs out of 6 35.671 us/op 50.793 us/op 0.70
Full columns - reconstruct single blob out of 6 16.987 us/op 23.285 us/op 0.73
Half columns - reconstruct all 6 blobs 265.74 ms/op 294.26 ms/op 0.90
Half columns - reconstruct half of the blobs out of 6 133.57 ms/op 145.12 ms/op 0.92
Half columns - reconstruct single blob out of 6 48.072 ms/op 56.691 ms/op 0.85
Full columns - reconstruct all 10 blobs 115.73 us/op 147.27 us/op 0.79
Full columns - reconstruct half of the blobs out of 10 53.835 us/op 74.039 us/op 0.73
Full columns - reconstruct single blob out of 10 17.156 us/op 20.864 us/op 0.82
Half columns - reconstruct all 10 blobs 430.97 ms/op 483.25 ms/op 0.89
Half columns - reconstruct half of the blobs out of 10 220.48 ms/op 245.10 ms/op 0.90
Half columns - reconstruct single blob out of 10 48.104 ms/op 52.233 ms/op 0.92
Full columns - reconstruct all 20 blobs 199.33 us/op 281.61 us/op 0.71
Full columns - reconstruct half of the blobs out of 20 102.30 us/op 162.87 us/op 0.63
Full columns - reconstruct single blob out of 20 17.611 us/op 21.489 us/op 0.82
Half columns - reconstruct all 20 blobs 859.65 ms/op 942.30 ms/op 0.91
Half columns - reconstruct half of the blobs out of 20 436.56 ms/op 491.94 ms/op 0.89
Half columns - reconstruct single blob out of 20 48.589 ms/op 53.772 ms/op 0.90
Buffer.concat 32 items 641.00 ns/op 664.00 ns/op 0.97
Uint8Array.set 32 items 1.6340 us/op 1.3840 us/op 1.18
Buffer.copy 3.0890 us/op 2.2520 us/op 1.37
Uint8Array.set - with subarray 1.6280 us/op 1.8000 us/op 0.90
Uint8Array.set - without subarray 1.2170 us/op 1.4150 us/op 0.86
getUint32 - dataview 200.00 ns/op 224.00 ns/op 0.89
getUint32 - manual 125.00 ns/op 136.00 ns/op 0.92
Set add up to 64 items then delete first 2.1704 us/op 2.9027 us/op 0.75
OrderedSet add up to 64 items then delete first 3.2752 us/op 4.6946 us/op 0.70
Set add up to 64 items then delete last 2.2961 us/op 3.3974 us/op 0.68
OrderedSet add up to 64 items then delete last 3.8576 us/op 6.1993 us/op 0.62
Set add up to 64 items then delete middle 2.4901 us/op 3.3800 us/op 0.74
OrderedSet add up to 64 items then delete middle 5.3233 us/op 7.3473 us/op 0.72
Set add up to 128 items then delete first 4.9794 us/op 6.8519 us/op 0.73
OrderedSet add up to 128 items then delete first 7.4832 us/op 11.104 us/op 0.67
Set add up to 128 items then delete last 5.1135 us/op 6.8166 us/op 0.75
OrderedSet add up to 128 items then delete last 7.6820 us/op 10.693 us/op 0.72
Set add up to 128 items then delete middle 4.9509 us/op 6.7263 us/op 0.74
OrderedSet add up to 128 items then delete middle 13.997 us/op 16.956 us/op 0.83
Set add up to 256 items then delete first 9.5743 us/op 14.084 us/op 0.68
OrderedSet add up to 256 items then delete first 14.515 us/op 21.621 us/op 0.67
Set add up to 256 items then delete last 9.4455 us/op 13.390 us/op 0.71
OrderedSet add up to 256 items then delete last 15.012 us/op 21.169 us/op 0.71
Set add up to 256 items then delete middle 9.4335 us/op 13.239 us/op 0.71
OrderedSet add up to 256 items then delete middle 41.205 us/op 49.003 us/op 0.84
transfer serialized Status (84 B) 2.2320 us/op 2.4890 us/op 0.90
copy serialized Status (84 B) 1.2230 us/op 1.2650 us/op 0.97
transfer serialized SignedVoluntaryExit (112 B) 2.2290 us/op 2.5310 us/op 0.88
copy serialized SignedVoluntaryExit (112 B) 1.2580 us/op 1.3410 us/op 0.94
transfer serialized ProposerSlashing (416 B) 2.3160 us/op 2.7050 us/op 0.86
copy serialized ProposerSlashing (416 B) 1.3960 us/op 1.9440 us/op 0.72
transfer serialized Attestation (485 B) 2.3230 us/op 3.5230 us/op 0.66
copy serialized Attestation (485 B) 1.4500 us/op 1.6350 us/op 0.89
transfer serialized AttesterSlashing (33232 B) 2.4990 us/op 3.7530 us/op 0.67
copy serialized AttesterSlashing (33232 B) 4.2430 us/op 5.9190 us/op 0.72
transfer serialized Small SignedBeaconBlock (128000 B) 2.9870 us/op 4.2920 us/op 0.70
copy serialized Small SignedBeaconBlock (128000 B) 14.731 us/op 19.746 us/op 0.75
transfer serialized Avg SignedBeaconBlock (200000 B) 6.0160 us/op 8.4470 us/op 0.71
copy serialized Avg SignedBeaconBlock (200000 B) 60.383 us/op 28.001 us/op 2.16
transfer serialized BlobsSidecar (524380 B) 3.3910 us/op 5.0320 us/op 0.67
copy serialized BlobsSidecar (524380 B) 59.163 us/op 132.14 us/op 0.45
transfer serialized Big SignedBeaconBlock (1000000 B) 3.4960 us/op 5.4900 us/op 0.64
copy serialized Big SignedBeaconBlock (1000000 B) 297.73 us/op 162.75 us/op 1.83
pass gossip attestations to forkchoice per slot 2.6628 ms/op 3.0004 ms/op 0.89
forkChoice updateHead vc 100000 bc 64 eq 0 468.46 us/op 503.24 us/op 0.93
forkChoice updateHead vc 600000 bc 64 eq 0 2.7982 ms/op 3.0537 ms/op 0.92
forkChoice updateHead vc 1000000 bc 64 eq 0 4.6762 ms/op 4.9609 ms/op 0.94
forkChoice updateHead vc 600000 bc 320 eq 0 2.7969 ms/op 3.0551 ms/op 0.92
forkChoice updateHead vc 600000 bc 1200 eq 0 2.7511 ms/op 3.0600 ms/op 0.90
forkChoice updateHead vc 600000 bc 7200 eq 0 2.9924 ms/op 3.9952 ms/op 0.75
forkChoice updateHead vc 600000 bc 64 eq 1000 2.7175 ms/op 3.0839 ms/op 0.88
forkChoice updateHead vc 600000 bc 64 eq 10000 2.8384 ms/op 3.2180 ms/op 0.88
forkChoice updateHead vc 600000 bc 64 eq 300000 8.9018 ms/op 11.200 ms/op 0.79
computeDeltas 1400000 validators 0% inactive 13.022 ms/op 14.698 ms/op 0.89
computeDeltas 1400000 validators 10% inactive 12.075 ms/op 13.980 ms/op 0.86
computeDeltas 1400000 validators 20% inactive 11.292 ms/op 12.461 ms/op 0.91
computeDeltas 1400000 validators 50% inactive 8.7519 ms/op 9.3648 ms/op 0.93
computeDeltas 2100000 validators 0% inactive 20.796 ms/op 22.717 ms/op 0.92
computeDeltas 2100000 validators 10% inactive 19.392 ms/op 23.738 ms/op 0.82
computeDeltas 2100000 validators 20% inactive 17.273 ms/op 21.248 ms/op 0.81
computeDeltas 2100000 validators 50% inactive 13.187 ms/op 14.455 ms/op 0.91
altair processAttestation - 250000 vs - 7PWei normalcase 2.0483 ms/op 4.7077 ms/op 0.44
altair processAttestation - 250000 vs - 7PWei worstcase 3.0251 ms/op 5.8578 ms/op 0.52
altair processAttestation - setStatus - 1/6 committees join 127.30 us/op 175.41 us/op 0.73
altair processAttestation - setStatus - 1/3 committees join 247.89 us/op 289.04 us/op 0.86
altair processAttestation - setStatus - 1/2 committees join 340.55 us/op 395.58 us/op 0.86
altair processAttestation - setStatus - 2/3 committees join 453.62 us/op 499.54 us/op 0.91
altair processAttestation - setStatus - 4/5 committees join 613.48 us/op 771.06 us/op 0.80
altair processAttestation - setStatus - 100% committees join 713.70 us/op 806.58 us/op 0.88
altair processBlock - 250000 vs - 7PWei normalcase 5.0053 ms/op 6.6820 ms/op 0.75
altair processBlock - 250000 vs - 7PWei normalcase hashState 36.722 ms/op 35.796 ms/op 1.03
altair processBlock - 250000 vs - 7PWei worstcase 38.294 ms/op 42.125 ms/op 0.91
altair processBlock - 250000 vs - 7PWei worstcase hashState 86.124 ms/op 97.062 ms/op 0.89
phase0 processBlock - 250000 vs - 7PWei normalcase 2.1847 ms/op 2.5827 ms/op 0.85
phase0 processBlock - 250000 vs - 7PWei worstcase 24.510 ms/op 28.671 ms/op 0.85
altair processEth1Data - 250000 vs - 7PWei normalcase 346.00 us/op 385.76 us/op 0.90
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 7.3210 us/op 11.950 us/op 0.61
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 57.576 us/op 65.177 us/op 0.88
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 14.218 us/op 12.479 us/op 1.14
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 8.3130 us/op 9.3820 us/op 0.89
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 214.04 us/op 195.52 us/op 1.09
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 1.9261 ms/op 1.9926 ms/op 0.97
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 2.4820 ms/op 2.9434 ms/op 0.84
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 2.4574 ms/op 2.5383 ms/op 0.97
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 5.1818 ms/op 5.3871 ms/op 0.96
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.4520 ms/op 2.7704 ms/op 0.89
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.9367 ms/op 5.9660 ms/op 0.83
Tree 40 250000 create 427.16 ms/op 593.52 ms/op 0.72
Tree 40 250000 get(125000) 146.37 ns/op 147.86 ns/op 0.99
Tree 40 250000 set(125000) 1.5365 us/op 2.1629 us/op 0.71
Tree 40 250000 toArray() 18.376 ms/op 23.021 ms/op 0.80
Tree 40 250000 iterate all - toArray() + loop 18.952 ms/op 27.974 ms/op 0.68
Tree 40 250000 iterate all - get(i) 52.456 ms/op 64.529 ms/op 0.81
Array 250000 create 3.2060 ms/op 5.6530 ms/op 0.57
Array 250000 clone - spread 822.81 us/op 1.9207 ms/op 0.43
Array 250000 get(125000) 0.41100 ns/op 0.42800 ns/op 0.96
Array 250000 set(125000) 0.43600 ns/op 0.45200 ns/op 0.96
Array 250000 iterate all - loop 100.64 us/op 115.25 us/op 0.87
phase0 afterProcessEpoch - 250000 vs - 7PWei 42.099 ms/op 43.427 ms/op 0.97
Array.fill - length 1000000 3.9255 ms/op 4.4975 ms/op 0.87
Array push - length 1000000 15.756 ms/op 19.799 ms/op 0.80
Array.get 0.28548 ns/op 0.30242 ns/op 0.94
Uint8Array.get 0.44327 ns/op 0.46754 ns/op 0.95
phase0 beforeProcessEpoch - 250000 vs - 7PWei 19.076 ms/op 21.807 ms/op 0.87
altair processEpoch - mainnet_e81889 294.90 ms/op 413.32 ms/op 0.71
mainnet_e81889 - altair beforeProcessEpoch 16.842 ms/op 22.896 ms/op 0.74
mainnet_e81889 - altair processJustificationAndFinalization 5.9930 us/op 8.6200 us/op 0.70
mainnet_e81889 - altair processInactivityUpdates 4.7182 ms/op 6.0781 ms/op 0.78
mainnet_e81889 - altair processRewardsAndPenalties 46.190 ms/op 51.413 ms/op 0.90
mainnet_e81889 - altair processRegistryUpdates 714.00 ns/op 753.00 ns/op 0.95
mainnet_e81889 - altair processSlashings 183.00 ns/op 227.00 ns/op 0.81
mainnet_e81889 - altair processEth1DataReset 172.00 ns/op 194.00 ns/op 0.89
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.2093 ms/op 1.3149 ms/op 0.92
mainnet_e81889 - altair processSlashingsReset 1.0380 us/op 1.3430 us/op 0.77
mainnet_e81889 - altair processRandaoMixesReset 1.3560 us/op 2.1150 us/op 0.64
mainnet_e81889 - altair processHistoricalRootsUpdate 181.00 ns/op 285.00 ns/op 0.64
mainnet_e81889 - altair processParticipationFlagUpdates 508.00 ns/op 791.00 ns/op 0.64
mainnet_e81889 - altair processSyncCommitteeUpdates 140.00 ns/op 194.00 ns/op 0.72
mainnet_e81889 - altair afterProcessEpoch 43.997 ms/op 50.193 ms/op 0.88
capella processEpoch - mainnet_e217614 914.41 ms/op 1.2459 s/op 0.73
mainnet_e217614 - capella beforeProcessEpoch 64.760 ms/op 74.237 ms/op 0.87
mainnet_e217614 - capella processJustificationAndFinalization 5.3880 us/op 6.1020 us/op 0.88
mainnet_e217614 - capella processInactivityUpdates 15.085 ms/op 16.905 ms/op 0.89
mainnet_e217614 - capella processRewardsAndPenalties 191.01 ms/op 197.20 ms/op 0.97
mainnet_e217614 - capella processRegistryUpdates 6.3310 us/op 6.8840 us/op 0.92
mainnet_e217614 - capella processSlashings 180.00 ns/op 194.00 ns/op 0.93
mainnet_e217614 - capella processEth1DataReset 228.00 ns/op 190.00 ns/op 1.20
mainnet_e217614 - capella processEffectiveBalanceUpdates 4.2346 ms/op 4.5293 ms/op 0.93
mainnet_e217614 - capella processSlashingsReset 1.2040 us/op 946.00 ns/op 1.27
mainnet_e217614 - capella processRandaoMixesReset 1.3580 us/op 1.2460 us/op 1.09
mainnet_e217614 - capella processHistoricalRootsUpdate 182.00 ns/op 191.00 ns/op 0.95
mainnet_e217614 - capella processParticipationFlagUpdates 571.00 ns/op 572.00 ns/op 1.00
mainnet_e217614 - capella afterProcessEpoch 117.25 ms/op 122.59 ms/op 0.96
phase0 processEpoch - mainnet_e58758 333.41 ms/op 350.05 ms/op 0.95
mainnet_e58758 - phase0 beforeProcessEpoch 72.621 ms/op 97.024 ms/op 0.75
mainnet_e58758 - phase0 processJustificationAndFinalization 6.0240 us/op 6.1540 us/op 0.98
mainnet_e58758 - phase0 processRewardsAndPenalties 42.425 ms/op 46.786 ms/op 0.91
mainnet_e58758 - phase0 processRegistryUpdates 4.6550 us/op 3.3070 us/op 1.41
mainnet_e58758 - phase0 processSlashings 226.00 ns/op 195.00 ns/op 1.16
mainnet_e58758 - phase0 processEth1DataReset 175.00 ns/op 194.00 ns/op 0.90
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.1509 ms/op 2.0290 ms/op 0.57
mainnet_e58758 - phase0 processSlashingsReset 915.00 ns/op 1.1630 us/op 0.79
mainnet_e58758 - phase0 processRandaoMixesReset 1.2390 us/op 1.5710 us/op 0.79
mainnet_e58758 - phase0 processHistoricalRootsUpdate 181.00 ns/op 296.00 ns/op 0.61
mainnet_e58758 - phase0 processParticipationRecordUpdates 879.00 ns/op 1.0570 us/op 0.83
mainnet_e58758 - phase0 afterProcessEpoch 36.474 ms/op 37.817 ms/op 0.96
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.7337 ms/op 1.4369 ms/op 1.21
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 2.6805 ms/op 2.1064 ms/op 1.27
altair processInactivityUpdates - 250000 normalcase 25.654 ms/op 21.917 ms/op 1.17
altair processInactivityUpdates - 250000 worstcase 22.604 ms/op 20.712 ms/op 1.09
phase0 processRegistryUpdates - 250000 normalcase 10.426 us/op 10.216 us/op 1.02
phase0 processRegistryUpdates - 250000 badcase_full_deposits 421.53 us/op 312.56 us/op 1.35
phase0 processRegistryUpdates - 250000 worstcase 0.5 115.56 ms/op 131.62 ms/op 0.88
altair processRewardsAndPenalties - 250000 normalcase 37.474 ms/op 29.483 ms/op 1.27
altair processRewardsAndPenalties - 250000 worstcase 30.960 ms/op 29.073 ms/op 1.06
phase0 getAttestationDeltas - 250000 normalcase 5.9319 ms/op 9.2341 ms/op 0.64
phase0 getAttestationDeltas - 250000 worstcase 6.9123 ms/op 20.533 ms/op 0.34
phase0 processSlashings - 250000 worstcase 125.17 us/op 113.13 us/op 1.11
altair processSyncCommitteeUpdates - 250000 10.743 ms/op 15.151 ms/op 0.71
BeaconState.hashTreeRoot - No change 257.00 ns/op 263.00 ns/op 0.98
BeaconState.hashTreeRoot - 1 full validator 86.043 us/op 99.041 us/op 0.87
BeaconState.hashTreeRoot - 32 full validator 1.0241 ms/op 1.3266 ms/op 0.77
BeaconState.hashTreeRoot - 512 full validator 12.147 ms/op 16.212 ms/op 0.75
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 130.61 us/op 160.41 us/op 0.81
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 2.2018 ms/op 2.2329 ms/op 0.99
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 23.562 ms/op 35.413 ms/op 0.67
BeaconState.hashTreeRoot - 1 balances 88.830 us/op 89.207 us/op 1.00
BeaconState.hashTreeRoot - 32 balances 831.18 us/op 1.0907 ms/op 0.76
BeaconState.hashTreeRoot - 512 balances 7.2942 ms/op 9.9781 ms/op 0.73
BeaconState.hashTreeRoot - 250000 balances 182.25 ms/op 204.57 ms/op 0.89
aggregationBits - 2048 els - zipIndexesInBitList 21.274 us/op 39.785 us/op 0.53
byteArrayEquals 32 53.821 ns/op 54.663 ns/op 0.98
Buffer.compare 32 17.133 ns/op 17.692 ns/op 0.97
byteArrayEquals 1024 1.5958 us/op 1.6311 us/op 0.98
Buffer.compare 1024 25.075 ns/op 28.051 ns/op 0.89
byteArrayEquals 16384 25.401 us/op 25.441 us/op 1.00
Buffer.compare 16384 198.87 ns/op 195.34 ns/op 1.02
byteArrayEquals 123687377 193.32 ms/op 199.72 ms/op 0.97
Buffer.compare 123687377 6.6717 ms/op 10.949 ms/op 0.61
byteArrayEquals 32 - diff last byte 52.013 ns/op 55.359 ns/op 0.94
Buffer.compare 32 - diff last byte 17.088 ns/op 19.654 ns/op 0.87
byteArrayEquals 1024 - diff last byte 1.5831 us/op 1.6766 us/op 0.94
Buffer.compare 1024 - diff last byte 25.762 ns/op 29.598 ns/op 0.87
byteArrayEquals 16384 - diff last byte 25.331 us/op 26.636 us/op 0.95
Buffer.compare 16384 - diff last byte 186.13 ns/op 209.05 ns/op 0.89
byteArrayEquals 123687377 - diff last byte 195.68 ms/op 202.33 ms/op 0.97
Buffer.compare 123687377 - diff last byte 7.9655 ms/op 7.7360 ms/op 1.03
byteArrayEquals 32 - random bytes 5.2390 ns/op 5.2580 ns/op 1.00
Buffer.compare 32 - random bytes 19.335 ns/op 17.475 ns/op 1.11
byteArrayEquals 1024 - random bytes 5.2550 ns/op 5.2560 ns/op 1.00
Buffer.compare 1024 - random bytes 17.746 ns/op 17.585 ns/op 1.01
byteArrayEquals 16384 - random bytes 5.2070 ns/op 5.3130 ns/op 0.98
Buffer.compare 16384 - random bytes 17.609 ns/op 17.604 ns/op 1.00
byteArrayEquals 123687377 - random bytes 6.9000 ns/op 6.6500 ns/op 1.04
Buffer.compare 123687377 - random bytes 19.020 ns/op 18.850 ns/op 1.01
regular array get 100000 times 41.530 us/op 34.281 us/op 1.21
wrappedArray get 100000 times 44.312 us/op 34.078 us/op 1.30
arrayWithProxy get 100000 times 13.073 ms/op 20.754 ms/op 0.63
ssz.Root.equals 47.500 ns/op 47.540 ns/op 1.00
byteArrayEquals 47.263 ns/op 46.078 ns/op 1.03
Buffer.compare 10.747 ns/op 10.588 ns/op 1.02
processSlot - 1 slots 10.693 us/op 10.376 us/op 1.03
processSlot - 32 slots 2.3668 ms/op 2.4485 ms/op 0.97
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 3.2038 ms/op 3.6002 ms/op 0.89
getCommitteeAssignments - req 1 vs - 250000 vc 2.2410 ms/op 2.2874 ms/op 0.98
getCommitteeAssignments - req 100 vs - 250000 vc 4.2586 ms/op 4.3083 ms/op 0.99
getCommitteeAssignments - req 1000 vs - 250000 vc 4.5870 ms/op 4.5968 ms/op 1.00
findModifiedValidators - 10000 modified validators 782.71 ms/op 783.77 ms/op 1.00
findModifiedValidators - 1000 modified validators 743.60 ms/op 730.49 ms/op 1.02
findModifiedValidators - 100 modified validators 268.57 ms/op 297.09 ms/op 0.90
findModifiedValidators - 10 modified validators 146.02 ms/op 167.08 ms/op 0.87
findModifiedValidators - 1 modified validators 261.52 ms/op 278.26 ms/op 0.94
findModifiedValidators - no difference 279.19 ms/op 196.16 ms/op 1.42
compare ViewDUs 6.6081 s/op 8.0918 s/op 0.82
compare each validator Uint8Array 1.2130 s/op 1.8922 s/op 0.64
compare ViewDU to Uint8Array 1.0693 s/op 1.6007 s/op 0.67
migrate state 1000000 validators, 24 modified, 0 new 925.35 ms/op 920.71 ms/op 1.01
migrate state 1000000 validators, 1700 modified, 1000 new 1.6934 s/op 1.3262 s/op 1.28
migrate state 1000000 validators, 3400 modified, 2000 new 1.9721 s/op 1.4475 s/op 1.36
migrate state 1500000 validators, 24 modified, 0 new 1.3318 s/op 987.15 ms/op 1.35
migrate state 1500000 validators, 1700 modified, 1000 new 1.4010 s/op 1.3708 s/op 1.02
migrate state 1500000 validators, 3400 modified, 2000 new 1.3509 s/op 1.4585 s/op 0.93
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.7200 ns/op 4.1800 ns/op 1.13
state getBlockRootAtSlot - 250000 vs - 7PWei 644.13 ns/op 627.93 ns/op 1.03
naive computeProposerIndex 100000 validators 55.683 ms/op 63.882 ms/op 0.87
computeProposerIndex 100000 validators 1.5839 ms/op 1.7890 ms/op 0.89
naiveGetNextSyncCommitteeIndices 1000 validators 8.2809 s/op 11.473 s/op 0.72
getNextSyncCommitteeIndices 1000 validators 133.75 ms/op 224.47 ms/op 0.60
naiveGetNextSyncCommitteeIndices 10000 validators 9.1282 s/op 10.158 s/op 0.90
getNextSyncCommitteeIndices 10000 validators 128.30 ms/op 137.41 ms/op 0.93
naiveGetNextSyncCommitteeIndices 100000 validators 7.2307 s/op 9.3586 s/op 0.77
getNextSyncCommitteeIndices 100000 validators 119.82 ms/op 133.52 ms/op 0.90
naive computeShuffledIndex 100000 validators 21.844 s/op 30.650 s/op 0.71
cached computeShuffledIndex 100000 validators 573.68 ms/op 644.56 ms/op 0.89
naive computeShuffledIndex 2000000 validators 487.33 s/op 527.98 s/op 0.92
cached computeShuffledIndex 2000000 validators 30.838 s/op 43.838 s/op 0.70
computeProposers - vc 250000 619.14 us/op 701.59 us/op 0.88
computeEpochShuffling - vc 250000 41.193 ms/op 45.392 ms/op 0.91
getNextSyncCommittee - vc 250000 10.456 ms/op 11.084 ms/op 0.94
computeSigningRoot for AttestationData 21.966 us/op 25.829 us/op 0.85
hash AttestationData serialized data then Buffer.toString(base64) 1.5720 us/op 1.7969 us/op 0.87
toHexString serialized data 1.1161 us/op 1.5975 us/op 0.70
Buffer.toString(base64) 160.44 ns/op 176.50 ns/op 0.91
nodejs block root to RootHex using toHex 142.86 ns/op 152.90 ns/op 0.93
nodejs block root to RootHex using toRootHex 85.670 ns/op 92.189 ns/op 0.93
nodejs fromHex(blob) 99.989 us/op 121.14 us/op 0.83
nodejs fromHexInto(blob) 811.66 us/op 868.47 us/op 0.93
nodejs block root to RootHex using the deprecated toHexString 207.73 ns/op 220.34 ns/op 0.94
browser block root to RootHex using toHex 172.39 ns/op 182.21 ns/op 0.95
browser block root to RootHex using toRootHex 163.59 ns/op 183.59 ns/op 0.89
browser fromHex(blob) 772.87 us/op 864.83 us/op 0.89
browser fromHexInto(blob) 809.38 us/op 889.30 us/op 0.91
browser block root to RootHex using the deprecated toHexString 755.00 ns/op 988.79 ns/op 0.76

by benchmarkbot/action

@codecov
Copy link

codecov bot commented Oct 30, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 51.92%. Comparing base (aec301c) to head (753dfe2).
⚠️ Report is 1 commits behind head on unstable.

Additional details and impacted files
@@             Coverage Diff              @@
##           unstable    #8590      +/-   ##
============================================
+ Coverage     51.91%   51.92%   +0.01%     
============================================
  Files           848      848              
  Lines         65797    65806       +9     
  Branches       4797     4800       +3     
============================================
+ Hits          34156    34171      +15     
+ Misses        31572    31566       -6     
  Partials         69       69              
🚀 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.

@ensi321 ensi321 merged commit d4044b6 into unstable Oct 30, 2025
18 of 20 checks passed
@ensi321 ensi321 deleted the nflaig/mainnet branch October 30, 2025 23:41
@wemeetagain
Copy link
Member

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