Skip to content

Conversation

@philknows
Copy link
Member

Motivation

As per release.md, we must re-merge stable back into unstable

@philknows philknows requested a review from a team as a code owner December 15, 2025 15:32
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @philknows, 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 performs a routine merge of the v1.38.0 stable release back into the unstable branch. This ensures that the unstable development branch is synchronized with the latest stable release, incorporating all changes and version updates from the recently released stable version.

Highlights

  • Version Bump: The project's global version and all internal @lodestar/* package versions have been updated from 1.37.0 to 1.38.0 across the monorepo.
  • Dependency Update: The @chainsafe/snappy-wasm dependency has been explicitly added to the packages/beacon-node's production dependencies, moving it from devDependencies.
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 is a routine merge of the v1.38.0 stable release back into the unstable branch. The changes consist of version bumps from 1.37.0 to 1.38.0 in lerna.json and all relevant package.json files, including updating internal @lodestar dependencies. A minor change in packages/beacon-node/package.json also correctly re-sorts a dependency. The changes are consistent with the PR's goal and appear correct. I have no further comments.

@philknows philknows enabled auto-merge December 15, 2025 15:34
@github-actions
Copy link
Contributor

Performance Report

🚀🚀 Significant benchmark improvement detected

Benchmark suite Current: 6849544 Previous: 889b1c4 Ratio
400 bytes - compress - snappy-wasm 1.1087 us/op 24.188 us/op 0.05
Full benchmark results
Benchmark suite Current: 6849544 Previous: 889b1c4 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.1624 ms/op 1.2113 ms/op 0.96
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 38.168 us/op 38.493 us/op 0.99
BLS verify - blst 796.26 us/op 810.54 us/op 0.98
BLS verifyMultipleSignatures 3 - blst 1.2347 ms/op 1.2535 ms/op 0.99
BLS verifyMultipleSignatures 8 - blst 1.7023 ms/op 1.9674 ms/op 0.87
BLS verifyMultipleSignatures 32 - blst 5.0096 ms/op 5.5529 ms/op 0.90
BLS verifyMultipleSignatures 64 - blst 9.4103 ms/op 10.539 ms/op 0.89
BLS verifyMultipleSignatures 128 - blst 18.147 ms/op 17.301 ms/op 1.05
BLS deserializing 10000 signatures 707.50 ms/op 694.08 ms/op 1.02
BLS deserializing 100000 signatures 7.1279 s/op 6.9413 s/op 1.03
BLS verifyMultipleSignatures - same message - 3 - blst 1.0101 ms/op 977.56 us/op 1.03
BLS verifyMultipleSignatures - same message - 8 - blst 1.0993 ms/op 1.0298 ms/op 1.07
BLS verifyMultipleSignatures - same message - 32 - blst 1.7557 ms/op 1.8808 ms/op 0.93
BLS verifyMultipleSignatures - same message - 64 - blst 2.6499 ms/op 2.6363 ms/op 1.01
BLS verifyMultipleSignatures - same message - 128 - blst 4.6999 ms/op 4.4089 ms/op 1.07
BLS aggregatePubkeys 32 - blst 20.301 us/op 19.558 us/op 1.04
BLS aggregatePubkeys 128 - blst 74.780 us/op 70.270 us/op 1.06
notSeenSlots=1 numMissedVotes=1 numBadVotes=10 46.032 ms/op 43.050 ms/op 1.07
notSeenSlots=1 numMissedVotes=0 numBadVotes=4 45.051 ms/op 41.010 ms/op 1.10
notSeenSlots=2 numMissedVotes=1 numBadVotes=10 36.332 ms/op 33.785 ms/op 1.08
getSlashingsAndExits - default max 83.456 us/op 73.811 us/op 1.13
getSlashingsAndExits - 2k 345.36 us/op 299.56 us/op 1.15
isKnown best case - 1 super set check 214.00 ns/op 193.00 ns/op 1.11
isKnown normal case - 2 super set checks 209.00 ns/op 190.00 ns/op 1.10
isKnown worse case - 16 super set checks 206.00 ns/op 192.00 ns/op 1.07
InMemoryCheckpointStateCache - add get delete 2.4520 us/op 3.4400 us/op 0.71
validate api signedAggregateAndProof - struct 1.6568 ms/op 1.5490 ms/op 1.07
validate gossip signedAggregateAndProof - struct 1.5372 ms/op 2.5798 ms/op 0.60
batch validate gossip attestation - vc 640000 - chunk 32 128.41 us/op 115.60 us/op 1.11
batch validate gossip attestation - vc 640000 - chunk 64 113.09 us/op 103.05 us/op 1.10
batch validate gossip attestation - vc 640000 - chunk 128 106.37 us/op 94.012 us/op 1.13
batch validate gossip attestation - vc 640000 - chunk 256 101.51 us/op 91.151 us/op 1.11
pickEth1Vote - no votes 1.0155 ms/op 913.10 us/op 1.11
pickEth1Vote - max votes 8.5012 ms/op 5.7235 ms/op 1.49
pickEth1Vote - Eth1Data hashTreeRoot value x2048 14.673 ms/op 11.412 ms/op 1.29
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 21.969 ms/op 16.280 ms/op 1.35
pickEth1Vote - Eth1Data fastSerialize value x2048 406.97 us/op 365.21 us/op 1.11
pickEth1Vote - Eth1Data fastSerialize tree x2048 4.5953 ms/op 3.0715 ms/op 1.50
bytes32 toHexString 376.00 ns/op 352.00 ns/op 1.07
bytes32 Buffer.toString(hex) 240.00 ns/op 247.00 ns/op 0.97
bytes32 Buffer.toString(hex) from Uint8Array 323.00 ns/op 310.00 ns/op 1.04
bytes32 Buffer.toString(hex) + 0x 242.00 ns/op 236.00 ns/op 1.03
Object access 1 prop 0.11800 ns/op 0.11400 ns/op 1.04
Map access 1 prop 0.11800 ns/op 0.14800 ns/op 0.80
Object get x1000 5.8150 ns/op 5.2420 ns/op 1.11
Map get x1000 0.39700 ns/op 0.43100 ns/op 0.92
Object set x1000 32.470 ns/op 27.995 ns/op 1.16
Map set x1000 22.891 ns/op 19.403 ns/op 1.18
Return object 10000 times 0.24580 ns/op 0.22090 ns/op 1.11
Throw Error 10000 times 4.6071 us/op 3.9456 us/op 1.17
toHex 158.41 ns/op 131.05 ns/op 1.21
Buffer.from 137.45 ns/op 118.33 ns/op 1.16
shared Buffer 81.971 ns/op 78.265 ns/op 1.05
fastMsgIdFn sha256 / 200 bytes 2.4680 us/op 1.8110 us/op 1.36
fastMsgIdFn h32 xxhash / 200 bytes 194.00 ns/op 257.00 ns/op 0.75
fastMsgIdFn h64 xxhash / 200 bytes 286.00 ns/op 263.00 ns/op 1.09
fastMsgIdFn sha256 / 1000 bytes 6.5500 us/op 5.7710 us/op 1.13
fastMsgIdFn h32 xxhash / 1000 bytes 298.00 ns/op 348.00 ns/op 0.86
fastMsgIdFn h64 xxhash / 1000 bytes 332.00 ns/op 314.00 ns/op 1.06
fastMsgIdFn sha256 / 10000 bytes 56.054 us/op 51.544 us/op 1.09
fastMsgIdFn h32 xxhash / 10000 bytes 1.4890 us/op 1.7990 us/op 0.83
fastMsgIdFn h64 xxhash / 10000 bytes 1.0100 us/op 926.00 ns/op 1.09
100 bytes - compress - snappyjs 1.4616 us/op 1.5403 us/op 0.95
100 bytes - compress - snappy 1.3246 us/op 1.1606 us/op 1.14
100 bytes - compress - snappy-wasm 725.89 ns/op 1.0104 us/op 0.72
100 bytes - compress - snappy-wasm - prealloc 1.2066 us/op 1.3685 us/op 0.88
200 bytes - compress - snappyjs 1.8630 us/op 1.5051 us/op 1.24
200 bytes - compress - snappy 1.4477 us/op 1.2955 us/op 1.12
200 bytes - compress - snappy-wasm 747.94 ns/op 898.18 ns/op 0.83
200 bytes - compress - snappy-wasm - prealloc 1.9925 us/op 1.7694 us/op 1.13
300 bytes - compress - snappyjs 2.5956 us/op 1.8354 us/op 1.41
300 bytes - compress - snappy 2.6925 us/op 1.2984 us/op 2.07
300 bytes - compress - snappy-wasm 975.07 ns/op 851.05 ns/op 1.15
300 bytes - compress - snappy-wasm - prealloc 1.9305 us/op 1.6760 us/op 1.15
400 bytes - compress - snappyjs 2.3005 us/op 2.5640 us/op 0.90
400 bytes - compress - snappy 1.7989 us/op 1.2941 us/op 1.39
400 bytes - compress - snappy-wasm 1.1087 us/op 24.188 us/op 0.05
400 bytes - compress - snappy-wasm - prealloc 1.8438 us/op 1.2947 us/op 1.42
500 bytes - compress - snappyjs 3.2681 us/op 2.3276 us/op 1.40
500 bytes - compress - snappy 1.7489 us/op 1.5217 us/op 1.15
500 bytes - compress - snappy-wasm 1.7398 us/op 973.18 ns/op 1.79
500 bytes - compress - snappy-wasm - prealloc 1.4309 us/op 1.7898 us/op 0.80
1000 bytes - compress - snappyjs 5.3586 us/op 5.1802 us/op 1.03
1000 bytes - compress - snappy 1.9917 us/op 1.8245 us/op 1.09
1000 bytes - compress - snappy-wasm 2.1916 us/op 1.6723 us/op 1.31
1000 bytes - compress - snappy-wasm - prealloc 2.3251 us/op 2.2778 us/op 1.02
10000 bytes - compress - snappyjs 35.703 us/op 24.146 us/op 1.48
10000 bytes - compress - snappy 29.601 us/op 27.683 us/op 1.07
10000 bytes - compress - snappy-wasm 21.061 us/op 19.210 us/op 1.10
10000 bytes - compress - snappy-wasm - prealloc 34.997 us/op 19.512 us/op 1.79
100 bytes - uncompress - snappyjs 784.87 ns/op 654.35 ns/op 1.20
100 bytes - uncompress - snappy 1.2895 us/op 1.2783 us/op 1.01
100 bytes - uncompress - snappy-wasm 869.55 ns/op 696.10 ns/op 1.25
100 bytes - uncompress - snappy-wasm - prealloc 1.1828 us/op 1.0894 us/op 1.09
200 bytes - uncompress - snappyjs 1.4593 us/op 1.2646 us/op 1.15
200 bytes - uncompress - snappy 1.5321 us/op 1.1430 us/op 1.34
200 bytes - uncompress - snappy-wasm 1.6334 us/op 980.31 ns/op 1.67
200 bytes - uncompress - snappy-wasm - prealloc 1.0800 us/op 1.4748 us/op 0.73
300 bytes - uncompress - snappyjs 1.9504 us/op 1.0447 us/op 1.87
300 bytes - uncompress - snappy 1.9911 us/op 1.7303 us/op 1.15
300 bytes - uncompress - snappy-wasm 1.3706 us/op 1.0660 us/op 1.29
300 bytes - uncompress - snappy-wasm - prealloc 1.7765 us/op 1.2018 us/op 1.48
400 bytes - uncompress - snappyjs 2.8584 us/op 1.7011 us/op 1.68
400 bytes - uncompress - snappy 3.2261 us/op 1.6962 us/op 1.90
400 bytes - uncompress - snappy-wasm 1.0626 us/op 768.77 ns/op 1.38
400 bytes - uncompress - snappy-wasm - prealloc 1.4920 us/op 1.6215 us/op 0.92
500 bytes - uncompress - snappyjs 2.6661 us/op 2.5476 us/op 1.05
500 bytes - uncompress - snappy 1.7060 us/op 1.4614 us/op 1.17
500 bytes - uncompress - snappy-wasm 1.1457 us/op 1.0101 us/op 1.13
500 bytes - uncompress - snappy-wasm - prealloc 1.4866 us/op 1.0997 us/op 1.35
1000 bytes - uncompress - snappyjs 2.3430 us/op 2.1596 us/op 1.08
1000 bytes - uncompress - snappy 2.1563 us/op 1.4576 us/op 1.48
1000 bytes - uncompress - snappy-wasm 1.3236 us/op 1.3315 us/op 0.99
1000 bytes - uncompress - snappy-wasm - prealloc 1.4475 us/op 1.6697 us/op 0.87
10000 bytes - uncompress - snappyjs 22.916 us/op 21.057 us/op 1.09
10000 bytes - uncompress - snappy 36.059 us/op 31.059 us/op 1.16
10000 bytes - uncompress - snappy-wasm 28.686 us/op 14.552 us/op 1.97
10000 bytes - uncompress - snappy-wasm - prealloc 18.683 us/op 15.935 us/op 1.17
send data - 1000 256B messages 15.010 ms/op 13.553 ms/op 1.11
send data - 1000 512B messages 22.614 ms/op 18.049 ms/op 1.25
send data - 1000 1024B messages 25.542 ms/op 25.387 ms/op 1.01
send data - 1000 1200B messages 30.600 ms/op 28.338 ms/op 1.08
send data - 1000 2048B messages 35.610 ms/op 28.590 ms/op 1.25
send data - 1000 4096B messages 35.108 ms/op 57.603 ms/op 0.61
send data - 1000 16384B messages 102.87 ms/op 110.32 ms/op 0.93
send data - 1000 65536B messages 322.63 ms/op 288.14 ms/op 1.12
enrSubnets - fastDeserialize 64 bits 972.00 ns/op 866.00 ns/op 1.12
enrSubnets - ssz BitVector 64 bits 357.00 ns/op 327.00 ns/op 1.09
enrSubnets - fastDeserialize 4 bits 139.00 ns/op 179.00 ns/op 0.78
enrSubnets - ssz BitVector 4 bits 360.00 ns/op 514.00 ns/op 0.70
prioritizePeers score -10:0 att 32-0.1 sync 2-0 251.62 us/op 324.36 us/op 0.78
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 285.55 us/op 334.22 us/op 0.85
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 421.33 us/op 495.03 us/op 0.85
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 842.42 us/op 707.81 us/op 1.19
prioritizePeers score 0:0 att 64-1 sync 4-1 940.36 us/op 849.75 us/op 1.11
array of 16000 items push then shift 1.7591 us/op 1.5522 us/op 1.13
LinkedList of 16000 items push then shift 8.8280 ns/op 7.1200 ns/op 1.24
array of 16000 items push then pop 94.317 ns/op 73.390 ns/op 1.29
LinkedList of 16000 items push then pop 9.4410 ns/op 6.9610 ns/op 1.36
array of 24000 items push then shift 2.8223 us/op 2.3171 us/op 1.22
LinkedList of 24000 items push then shift 8.8370 ns/op 7.2440 ns/op 1.22
array of 24000 items push then pop 130.10 ns/op 101.58 ns/op 1.28
LinkedList of 24000 items push then pop 10.403 ns/op 7.0010 ns/op 1.49
intersect bitArray bitLen 8 6.4800 ns/op 5.5600 ns/op 1.17
intersect array and set length 8 49.698 ns/op 32.394 ns/op 1.53
intersect bitArray bitLen 128 32.348 ns/op 27.843 ns/op 1.16
intersect array and set length 128 623.05 ns/op 534.11 ns/op 1.17
bitArray.getTrueBitIndexes() bitLen 128 1.1510 us/op 1.0280 us/op 1.12
bitArray.getTrueBitIndexes() bitLen 248 1.9850 us/op 1.7960 us/op 1.11
bitArray.getTrueBitIndexes() bitLen 512 4.2540 us/op 3.6890 us/op 1.15
Full columns - reconstruct all 6 blobs 326.95 us/op 273.95 us/op 1.19
Full columns - reconstruct half of the blobs out of 6 138.29 us/op 118.86 us/op 1.16
Full columns - reconstruct single blob out of 6 36.182 us/op 31.578 us/op 1.15
Half columns - reconstruct all 6 blobs 286.63 ms/op 258.43 ms/op 1.11
Half columns - reconstruct half of the blobs out of 6 145.02 ms/op 129.98 ms/op 1.12
Half columns - reconstruct single blob out of 6 55.728 ms/op 47.665 ms/op 1.17
Full columns - reconstruct all 10 blobs 423.84 us/op 494.22 us/op 0.86
Full columns - reconstruct half of the blobs out of 10 175.85 us/op 156.05 us/op 1.13
Full columns - reconstruct single blob out of 10 53.324 us/op 30.642 us/op 1.74
Half columns - reconstruct all 10 blobs 486.98 ms/op 429.79 ms/op 1.13
Half columns - reconstruct half of the blobs out of 10 250.34 ms/op 219.38 ms/op 1.14
Half columns - reconstruct single blob out of 10 54.857 ms/op 48.514 ms/op 1.13
Full columns - reconstruct all 20 blobs 944.85 us/op 1.1628 ms/op 0.81
Full columns - reconstruct half of the blobs out of 20 494.21 us/op 365.65 us/op 1.35
Full columns - reconstruct single blob out of 20 37.161 us/op 31.028 us/op 1.20
Half columns - reconstruct all 20 blobs 961.17 ms/op 872.89 ms/op 1.10
Half columns - reconstruct half of the blobs out of 20 469.48 ms/op 440.84 ms/op 1.06
Half columns - reconstruct single blob out of 20 53.057 ms/op 48.971 ms/op 1.08
Set add up to 64 items then delete first 2.7839 us/op 2.0527 us/op 1.36
OrderedSet add up to 64 items then delete first 3.9071 us/op 3.0435 us/op 1.28
Set add up to 64 items then delete last 2.9241 us/op 2.2959 us/op 1.27
OrderedSet add up to 64 items then delete last 4.1386 us/op 3.2818 us/op 1.26
Set add up to 64 items then delete middle 2.8845 us/op 2.3293 us/op 1.24
OrderedSet add up to 64 items then delete middle 5.8621 us/op 4.8796 us/op 1.20
Set add up to 128 items then delete first 6.0111 us/op 4.7524 us/op 1.26
OrderedSet add up to 128 items then delete first 8.9207 us/op 7.1354 us/op 1.25
Set add up to 128 items then delete last 5.8667 us/op 4.6090 us/op 1.27
OrderedSet add up to 128 items then delete last 8.0995 us/op 6.7019 us/op 1.21
Set add up to 128 items then delete middle 5.6006 us/op 4.5740 us/op 1.22
OrderedSet add up to 128 items then delete middle 14.821 us/op 13.022 us/op 1.14
Set add up to 256 items then delete first 12.741 us/op 10.078 us/op 1.26
OrderedSet add up to 256 items then delete first 18.521 us/op 15.194 us/op 1.22
Set add up to 256 items then delete last 12.645 us/op 9.5386 us/op 1.33
OrderedSet add up to 256 items then delete last 17.704 us/op 13.582 us/op 1.30
Set add up to 256 items then delete middle 11.881 us/op 9.1898 us/op 1.29
OrderedSet add up to 256 items then delete middle 47.629 us/op 40.303 us/op 1.18
pass gossip attestations to forkchoice per slot 2.7177 ms/op 2.4140 ms/op 1.13
forkChoice updateHead vc 100000 bc 64 eq 0 513.01 us/op 477.02 us/op 1.08
forkChoice updateHead vc 600000 bc 64 eq 0 3.2047 ms/op 2.8397 ms/op 1.13
forkChoice updateHead vc 1000000 bc 64 eq 0 5.3420 ms/op 4.7327 ms/op 1.13
forkChoice updateHead vc 600000 bc 320 eq 0 3.3088 ms/op 2.8492 ms/op 1.16
forkChoice updateHead vc 600000 bc 1200 eq 0 3.3040 ms/op 2.8905 ms/op 1.14
forkChoice updateHead vc 600000 bc 7200 eq 0 3.7336 ms/op 3.1498 ms/op 1.19
forkChoice updateHead vc 600000 bc 64 eq 1000 3.7159 ms/op 3.2622 ms/op 1.14
forkChoice updateHead vc 600000 bc 64 eq 10000 3.8946 ms/op 3.3787 ms/op 1.15
forkChoice updateHead vc 600000 bc 64 eq 300000 9.8630 ms/op 8.8655 ms/op 1.11
computeDeltas 1400000 validators 0% inactive 15.911 ms/op 14.085 ms/op 1.13
computeDeltas 1400000 validators 10% inactive 14.736 ms/op 13.192 ms/op 1.12
computeDeltas 1400000 validators 20% inactive 14.716 ms/op 12.307 ms/op 1.20
computeDeltas 1400000 validators 50% inactive 10.850 ms/op 9.6720 ms/op 1.12
computeDeltas 2100000 validators 0% inactive 23.825 ms/op 21.163 ms/op 1.13
computeDeltas 2100000 validators 10% inactive 22.329 ms/op 19.812 ms/op 1.13
computeDeltas 2100000 validators 20% inactive 19.659 ms/op 18.547 ms/op 1.06
computeDeltas 2100000 validators 50% inactive 15.552 ms/op 14.678 ms/op 1.06
altair processAttestation - 250000 vs - 7PWei normalcase 2.1352 ms/op 1.9161 ms/op 1.11
altair processAttestation - 250000 vs - 7PWei worstcase 3.2521 ms/op 2.8118 ms/op 1.16
altair processAttestation - setStatus - 1/6 committees join 129.19 us/op 113.97 us/op 1.13
altair processAttestation - setStatus - 1/3 committees join 247.12 us/op 228.03 us/op 1.08
altair processAttestation - setStatus - 1/2 committees join 348.10 us/op 327.16 us/op 1.06
altair processAttestation - setStatus - 2/3 committees join 441.18 us/op 422.94 us/op 1.04
altair processAttestation - setStatus - 4/5 committees join 604.81 us/op 579.59 us/op 1.04
altair processAttestation - setStatus - 100% committees join 709.37 us/op 688.71 us/op 1.03
altair processBlock - 250000 vs - 7PWei normalcase 3.9403 ms/op 3.5552 ms/op 1.11
altair processBlock - 250000 vs - 7PWei normalcase hashState 16.339 ms/op 17.088 ms/op 0.96
altair processBlock - 250000 vs - 7PWei worstcase 23.834 ms/op 28.720 ms/op 0.83
altair processBlock - 250000 vs - 7PWei worstcase hashState 55.065 ms/op 59.613 ms/op 0.92
phase0 processBlock - 250000 vs - 7PWei normalcase 1.4556 ms/op 1.4611 ms/op 1.00
phase0 processBlock - 250000 vs - 7PWei worstcase 19.396 ms/op 20.279 ms/op 0.96
altair processEth1Data - 250000 vs - 7PWei normalcase 369.38 us/op 337.49 us/op 1.09
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 8.7700 us/op 11.091 us/op 0.79
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 44.410 us/op 57.467 us/op 0.77
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 11.632 us/op 9.9570 us/op 1.17
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 7.0170 us/op 6.4230 us/op 1.09
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 168.51 us/op 245.67 us/op 0.69
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 1.9315 ms/op 1.9339 ms/op 1.00
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 2.4416 ms/op 2.2870 ms/op 1.07
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 2.4443 ms/op 2.2698 ms/op 1.08
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 4.9278 ms/op 4.4492 ms/op 1.11
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.4766 ms/op 2.9269 ms/op 0.85
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.9308 ms/op 4.6871 ms/op 1.05
Tree 40 250000 create 375.23 ms/op 367.70 ms/op 1.02
Tree 40 250000 get(125000) 125.87 ns/op 123.63 ns/op 1.02
Tree 40 250000 set(125000) 1.2590 us/op 1.2240 us/op 1.03
Tree 40 250000 toArray() 14.829 ms/op 17.626 ms/op 0.84
Tree 40 250000 iterate all - toArray() + loop 14.131 ms/op 14.463 ms/op 0.98
Tree 40 250000 iterate all - get(i) 42.900 ms/op 45.400 ms/op 0.94
Array 250000 create 2.5705 ms/op 2.5975 ms/op 0.99
Array 250000 clone - spread 832.22 us/op 849.61 us/op 0.98
Array 250000 get(125000) 0.35700 ns/op 0.35400 ns/op 1.01
Array 250000 set(125000) 0.36100 ns/op 0.35600 ns/op 1.01
Array 250000 iterate all - loop 62.380 us/op 62.037 us/op 1.01
phase0 afterProcessEpoch - 250000 vs - 7PWei 42.229 ms/op 42.143 ms/op 1.00
Array.fill - length 1000000 2.9523 ms/op 3.0160 ms/op 0.98
Array push - length 1000000 10.333 ms/op 11.391 ms/op 0.91
Array.get 0.22340 ns/op 0.22359 ns/op 1.00
Uint8Array.get 0.22531 ns/op 0.22727 ns/op 0.99
phase0 beforeProcessEpoch - 250000 vs - 7PWei 16.963 ms/op 14.177 ms/op 1.20
altair processEpoch - mainnet_e81889 222.59 ms/op 283.91 ms/op 0.78
mainnet_e81889 - altair beforeProcessEpoch 16.974 ms/op 16.750 ms/op 1.01
mainnet_e81889 - altair processJustificationAndFinalization 5.7300 us/op 5.2150 us/op 1.10
mainnet_e81889 - altair processInactivityUpdates 3.9006 ms/op 3.8943 ms/op 1.00
mainnet_e81889 - altair processRewardsAndPenalties 18.283 ms/op 18.681 ms/op 0.98
mainnet_e81889 - altair processRegistryUpdates 632.00 ns/op 753.00 ns/op 0.84
mainnet_e81889 - altair processSlashings 167.00 ns/op 192.00 ns/op 0.87
mainnet_e81889 - altair processEth1DataReset 167.00 ns/op 191.00 ns/op 0.87
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.4659 ms/op 2.0390 ms/op 0.72
mainnet_e81889 - altair processSlashingsReset 821.00 ns/op 816.00 ns/op 1.01
mainnet_e81889 - altair processRandaoMixesReset 1.0720 us/op 1.2430 us/op 0.86
mainnet_e81889 - altair processHistoricalRootsUpdate 167.00 ns/op 164.00 ns/op 1.02
mainnet_e81889 - altair processParticipationFlagUpdates 508.00 ns/op 520.00 ns/op 0.98
mainnet_e81889 - altair processSyncCommitteeUpdates 134.00 ns/op 141.00 ns/op 0.95
mainnet_e81889 - altair afterProcessEpoch 44.946 ms/op 44.424 ms/op 1.01
capella processEpoch - mainnet_e217614 771.67 ms/op 821.23 ms/op 0.94
mainnet_e217614 - capella beforeProcessEpoch 60.486 ms/op 61.326 ms/op 0.99
mainnet_e217614 - capella processJustificationAndFinalization 5.7440 us/op 5.5520 us/op 1.03
mainnet_e217614 - capella processInactivityUpdates 12.219 ms/op 17.928 ms/op 0.68
mainnet_e217614 - capella processRewardsAndPenalties 94.504 ms/op 100.55 ms/op 0.94
mainnet_e217614 - capella processRegistryUpdates 6.2500 us/op 6.5340 us/op 0.96
mainnet_e217614 - capella processSlashings 162.00 ns/op 184.00 ns/op 0.88
mainnet_e217614 - capella processEth1DataReset 165.00 ns/op 181.00 ns/op 0.91
mainnet_e217614 - capella processEffectiveBalanceUpdates 12.481 ms/op 15.555 ms/op 0.80
mainnet_e217614 - capella processSlashingsReset 797.00 ns/op 950.00 ns/op 0.84
mainnet_e217614 - capella processRandaoMixesReset 1.1000 us/op 1.2130 us/op 0.91
mainnet_e217614 - capella processHistoricalRootsUpdate 164.00 ns/op 203.00 ns/op 0.81
mainnet_e217614 - capella processParticipationFlagUpdates 497.00 ns/op 564.00 ns/op 0.88
mainnet_e217614 - capella afterProcessEpoch 114.72 ms/op 117.01 ms/op 0.98
phase0 processEpoch - mainnet_e58758 230.54 ms/op 271.83 ms/op 0.85
mainnet_e58758 - phase0 beforeProcessEpoch 46.081 ms/op 63.380 ms/op 0.73
mainnet_e58758 - phase0 processJustificationAndFinalization 5.2870 us/op 6.6280 us/op 0.80
mainnet_e58758 - phase0 processRewardsAndPenalties 16.499 ms/op 19.508 ms/op 0.85
mainnet_e58758 - phase0 processRegistryUpdates 3.0480 us/op 3.1220 us/op 0.98
mainnet_e58758 - phase0 processSlashings 166.00 ns/op 165.00 ns/op 1.01
mainnet_e58758 - phase0 processEth1DataReset 164.00 ns/op 177.00 ns/op 0.93
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.1358 ms/op 1.2209 ms/op 0.93
mainnet_e58758 - phase0 processSlashingsReset 913.00 ns/op 887.00 ns/op 1.03
mainnet_e58758 - phase0 processRandaoMixesReset 1.1210 us/op 1.2980 us/op 0.86
mainnet_e58758 - phase0 processHistoricalRootsUpdate 172.00 ns/op 202.00 ns/op 0.85
mainnet_e58758 - phase0 processParticipationRecordUpdates 831.00 ns/op 935.00 ns/op 0.89
mainnet_e58758 - phase0 afterProcessEpoch 35.144 ms/op 36.314 ms/op 0.97
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.2794 ms/op 1.7314 ms/op 0.74
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 2.1071 ms/op 2.2104 ms/op 0.95
altair processInactivityUpdates - 250000 normalcase 12.630 ms/op 14.478 ms/op 0.87
altair processInactivityUpdates - 250000 worstcase 12.918 ms/op 13.511 ms/op 0.96
phase0 processRegistryUpdates - 250000 normalcase 4.9440 us/op 4.9620 us/op 1.00
phase0 processRegistryUpdates - 250000 badcase_full_deposits 243.96 us/op 346.47 us/op 0.70
phase0 processRegistryUpdates - 250000 worstcase 0.5 76.750 ms/op 74.902 ms/op 1.02
altair processRewardsAndPenalties - 250000 normalcase 15.470 ms/op 21.690 ms/op 0.71
altair processRewardsAndPenalties - 250000 worstcase 15.431 ms/op 16.224 ms/op 0.95
phase0 getAttestationDeltas - 250000 normalcase 6.8370 ms/op 6.9361 ms/op 0.99
phase0 getAttestationDeltas - 250000 worstcase 6.7260 ms/op 5.9520 ms/op 1.13
phase0 processSlashings - 250000 worstcase 91.336 us/op 162.28 us/op 0.56
altair processSyncCommitteeUpdates - 250000 10.955 ms/op 11.454 ms/op 0.96
BeaconState.hashTreeRoot - No change 196.00 ns/op 201.00 ns/op 0.98
BeaconState.hashTreeRoot - 1 full validator 82.145 us/op 92.211 us/op 0.89
BeaconState.hashTreeRoot - 32 full validator 1.1069 ms/op 1.0881 ms/op 1.02
BeaconState.hashTreeRoot - 512 full validator 7.4062 ms/op 8.4672 ms/op 0.87
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 123.42 us/op 111.26 us/op 1.11
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.5097 ms/op 1.4203 ms/op 1.06
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 17.978 ms/op 18.600 ms/op 0.97
BeaconState.hashTreeRoot - 1 balances 67.568 us/op 80.347 us/op 0.84
BeaconState.hashTreeRoot - 32 balances 767.78 us/op 980.58 us/op 0.78
BeaconState.hashTreeRoot - 512 balances 5.6492 ms/op 6.7312 ms/op 0.84
BeaconState.hashTreeRoot - 250000 balances 142.57 ms/op 176.90 ms/op 0.81
aggregationBits - 2048 els - zipIndexesInBitList 21.249 us/op 20.519 us/op 1.04
regular array get 100000 times 24.690 us/op 24.146 us/op 1.02
wrappedArray get 100000 times 24.649 us/op 24.013 us/op 1.03
arrayWithProxy get 100000 times 13.915 ms/op 13.547 ms/op 1.03
ssz.Root.equals 23.878 ns/op 23.673 ns/op 1.01
byteArrayEquals 23.184 ns/op 23.138 ns/op 1.00
Buffer.compare 10.006 ns/op 10.039 ns/op 1.00
processSlot - 1 slots 11.329 us/op 12.513 us/op 0.91
processSlot - 32 slots 2.2217 ms/op 2.2790 ms/op 0.97
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 3.8518 ms/op 5.2424 ms/op 0.73
getCommitteeAssignments - req 1 vs - 250000 vc 1.9042 ms/op 1.8893 ms/op 1.01
getCommitteeAssignments - req 100 vs - 250000 vc 3.7649 ms/op 3.7173 ms/op 1.01
getCommitteeAssignments - req 1000 vs - 250000 vc 4.0259 ms/op 3.9754 ms/op 1.01
findModifiedValidators - 10000 modified validators 501.38 ms/op 614.92 ms/op 0.82
findModifiedValidators - 1000 modified validators 348.90 ms/op 379.37 ms/op 0.92
findModifiedValidators - 100 modified validators 287.46 ms/op 250.03 ms/op 1.15
findModifiedValidators - 10 modified validators 205.18 ms/op 193.28 ms/op 1.06
findModifiedValidators - 1 modified validators 176.30 ms/op 163.35 ms/op 1.08
findModifiedValidators - no difference 167.52 ms/op 149.10 ms/op 1.12
migrate state 1500000 validators, 3400 modified, 2000 new 1.0996 s/op 1.0966 s/op 1.00
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.2300 ns/op 4.2300 ns/op 1.00
state getBlockRootAtSlot - 250000 vs - 7PWei 839.77 ns/op 565.20 ns/op 1.49
computeProposerIndex 100000 validators 1.5669 ms/op 1.5583 ms/op 1.01
getNextSyncCommitteeIndices 1000 validators 120.01 ms/op 121.06 ms/op 0.99
getNextSyncCommitteeIndices 10000 validators 119.49 ms/op 120.99 ms/op 0.99
getNextSyncCommitteeIndices 100000 validators 119.59 ms/op 119.63 ms/op 1.00
computeProposers - vc 250000 670.86 us/op 689.00 us/op 0.97
computeEpochShuffling - vc 250000 41.710 ms/op 42.764 ms/op 0.98
getNextSyncCommittee - vc 250000 10.585 ms/op 10.889 ms/op 0.97
nodejs block root to RootHex using toHex 157.44 ns/op 149.76 ns/op 1.05
nodejs block root to RootHex using toRootHex 88.707 ns/op 84.968 ns/op 1.04
nodejs fromHex(blob) 241.10 us/op 351.60 us/op 0.69
nodejs fromHexInto(blob) 694.17 us/op 722.93 us/op 0.96
nodejs block root to RootHex using the deprecated toHexString 551.74 ns/op 566.47 ns/op 0.97
browser block root to RootHex using toHex 298.87 ns/op 304.33 ns/op 0.98
browser block root to RootHex using toRootHex 152.69 ns/op 154.95 ns/op 0.99
browser fromHex(blob) 1.1362 ms/op 927.02 us/op 1.23
browser fromHexInto(blob) 745.19 us/op 702.36 us/op 1.06
browser block root to RootHex using the deprecated toHexString 404.04 ns/op 378.73 ns/op 1.07

by benchmarkbot/action

@philknows philknows merged commit 3bf4734 into unstable Dec 15, 2025
42 of 46 checks passed
@codecov
Copy link

codecov bot commented Dec 15, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 52.04%. Comparing base (eaf5bc9) to head (dbd9478).
⚠️ Report is 26 commits behind head on unstable.

Additional details and impacted files
@@             Coverage Diff              @@
##           unstable    #8694      +/-   ##
============================================
+ Coverage     52.01%   52.04%   +0.03%     
============================================
  Files           848      848              
  Lines         65844    65734     -110     
  Branches       4811     4807       -4     
============================================
- Hits          34251    34214      -37     
+ Misses        31524    31451      -73     
  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.

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.

3 participants