Skip to content

Conversation

@wemeetagain
Copy link
Member

Motivation

Description

@wemeetagain wemeetagain requested a review from a team as a code owner November 22, 2025 18:27
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @wemeetagain, 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 a performance optimization by upgrading the @chainsafe/ssz library and enabling a new reuseBytes option for deserializing gossip messages. This change is intended to reduce memory overhead and improve efficiency during network communication by allowing the deserializer to work with existing memory buffers.

Highlights

  • SSZ Library Update: The @chainsafe/ssz dependency has been updated across multiple packages from version 1.2.2 to 1.3.0.
  • Gossip Deserialization Optimization: The sszDeserialize function in packages/beacon-node/src/network/gossip/topic.ts now utilizes the new reuseBytes: true option during deserialization of gossip messages.
  • Performance Improvement: This change aims to improve performance by allowing the SSZ deserializer to reuse existing byte arrays, reducing memory allocations.
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 aims to improve performance by reusing bytes during the deserialization of gossip messages. This is achieved by updating the @chainsafe/ssz dependency to version 1.3.0 across all relevant packages and enabling the reuseBytes: true option in the deserialization logic. The changes are generally correct and align with the stated goal. However, I've identified a few places where the new reuseBytes option could also be applied for consistency and to fully realize the performance benefits across all gossip deserialization paths. My review includes a specific comment with suggestions for these improvements.

@philknows philknows added this to the v1.37.0 milestone Nov 24, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Nov 25, 2025

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 9213aa8 Previous: 868300d Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.3233 ms/op 974.07 us/op 1.36
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 36.652 us/op 40.804 us/op 0.90
BLS verify - blst 840.46 us/op 896.79 us/op 0.94
BLS verifyMultipleSignatures 3 - blst 1.1990 ms/op 1.2306 ms/op 0.97
BLS verifyMultipleSignatures 8 - blst 1.6718 ms/op 2.0514 ms/op 0.81
BLS verifyMultipleSignatures 32 - blst 4.9312 ms/op 4.9825 ms/op 0.99
BLS verifyMultipleSignatures 64 - blst 9.0473 ms/op 10.410 ms/op 0.87
BLS verifyMultipleSignatures 128 - blst 17.644 ms/op 18.627 ms/op 0.95
BLS deserializing 10000 signatures 685.29 ms/op 719.78 ms/op 0.95
BLS deserializing 100000 signatures 6.8458 s/op 7.5437 s/op 0.91
BLS verifyMultipleSignatures - same message - 3 - blst 839.16 us/op 990.26 us/op 0.85
BLS verifyMultipleSignatures - same message - 8 - blst 1.0231 ms/op 1.1810 ms/op 0.87
BLS verifyMultipleSignatures - same message - 32 - blst 1.6989 ms/op 1.9749 ms/op 0.86
BLS verifyMultipleSignatures - same message - 64 - blst 2.5900 ms/op 3.1756 ms/op 0.82
BLS verifyMultipleSignatures - same message - 128 - blst 4.3876 ms/op 4.8839 ms/op 0.90
BLS aggregatePubkeys 32 - blst 19.284 us/op 20.832 us/op 0.93
BLS aggregatePubkeys 128 - blst 68.767 us/op 75.934 us/op 0.91
notSeenSlots=1 numMissedVotes=1 numBadVotes=10 42.014 ms/op 52.024 ms/op 0.81
notSeenSlots=1 numMissedVotes=0 numBadVotes=4 38.026 ms/op 41.879 ms/op 0.91
notSeenSlots=2 numMissedVotes=1 numBadVotes=10 33.155 ms/op 33.907 ms/op 0.98
getSlashingsAndExits - default max 71.232 us/op 73.744 us/op 0.97
getSlashingsAndExits - 2k 319.09 us/op 387.32 us/op 0.82
isKnown best case - 1 super set check 206.00 ns/op 208.00 ns/op 0.99
isKnown normal case - 2 super set checks 204.00 ns/op 199.00 ns/op 1.03
isKnown worse case - 16 super set checks 203.00 ns/op 205.00 ns/op 0.99
InMemoryCheckpointStateCache - add get delete 2.3600 us/op 2.5290 us/op 0.93
validate api signedAggregateAndProof - struct 1.3774 ms/op 1.8961 ms/op 0.73
validate gossip signedAggregateAndProof - struct 1.3734 ms/op 1.8538 ms/op 0.74
batch validate gossip attestation - vc 640000 - chunk 32 115.61 us/op 176.84 us/op 0.65
batch validate gossip attestation - vc 640000 - chunk 64 101.77 us/op 141.96 us/op 0.72
batch validate gossip attestation - vc 640000 - chunk 128 94.194 us/op 114.10 us/op 0.83
batch validate gossip attestation - vc 640000 - chunk 256 90.377 us/op 112.19 us/op 0.81
pickEth1Vote - no votes 955.78 us/op 1.0903 ms/op 0.88
pickEth1Vote - max votes 4.9500 ms/op 7.5165 ms/op 0.66
pickEth1Vote - Eth1Data hashTreeRoot value x2048 10.867 ms/op 14.901 ms/op 0.73
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 16.345 ms/op 20.856 ms/op 0.78
pickEth1Vote - Eth1Data fastSerialize value x2048 414.23 us/op 443.40 us/op 0.93
pickEth1Vote - Eth1Data fastSerialize tree x2048 2.8669 ms/op 4.1569 ms/op 0.69
bytes32 toHexString 347.00 ns/op 392.00 ns/op 0.89
bytes32 Buffer.toString(hex) 228.00 ns/op 301.00 ns/op 0.76
bytes32 Buffer.toString(hex) from Uint8Array 309.00 ns/op 423.00 ns/op 0.73
bytes32 Buffer.toString(hex) + 0x 236.00 ns/op 245.00 ns/op 0.96
Object access 1 prop 0.11200 ns/op 0.12400 ns/op 0.90
Map access 1 prop 0.11200 ns/op 0.12600 ns/op 0.89
Object get x1000 5.2740 ns/op 5.7450 ns/op 0.92
Map get x1000 0.36800 ns/op 0.38200 ns/op 0.96
Object set x1000 28.492 ns/op 31.164 ns/op 0.91
Map set x1000 19.853 ns/op 23.029 ns/op 0.86
Return object 10000 times 0.22750 ns/op 0.30380 ns/op 0.75
Throw Error 10000 times 3.9015 us/op 4.3522 us/op 0.90
toHex 138.09 ns/op 151.54 ns/op 0.91
Buffer.from 130.13 ns/op 134.67 ns/op 0.97
shared Buffer 93.614 ns/op 83.862 ns/op 1.12
fastMsgIdFn sha256 / 200 bytes 1.8060 us/op 2.0230 us/op 0.89
fastMsgIdFn h32 xxhash / 200 bytes 189.00 ns/op 199.00 ns/op 0.95
fastMsgIdFn h64 xxhash / 200 bytes 247.00 ns/op 268.00 ns/op 0.92
fastMsgIdFn sha256 / 1000 bytes 5.9710 us/op 6.4370 us/op 0.93
fastMsgIdFn h32 xxhash / 1000 bytes 283.00 ns/op 302.00 ns/op 0.94
fastMsgIdFn h64 xxhash / 1000 bytes 295.00 ns/op 328.00 ns/op 0.90
fastMsgIdFn sha256 / 10000 bytes 52.176 us/op 59.614 us/op 0.88
fastMsgIdFn h32 xxhash / 10000 bytes 1.4030 us/op 1.5070 us/op 0.93
fastMsgIdFn h64 xxhash / 10000 bytes 915.00 ns/op 982.00 ns/op 0.93
100 bytes - compress - snappyjs 1.5592 us/op 1.5222 us/op 1.02
100 bytes - compress - snappy 1.1416 us/op 1.3071 us/op 0.87
100 bytes - compress - snappy-wasm 674.72 ns/op
100 bytes - compress - snappy-wasm - prealloc 1.0796 us/op
200 bytes - compress - snappyjs 1.8302 us/op 1.6695 us/op 1.10
200 bytes - compress - snappy 2.2955 us/op 1.6909 us/op 1.36
200 bytes - compress - snappy-wasm 1.3874 us/op
200 bytes - compress - snappy-wasm - prealloc 1.7895 us/op
300 bytes - compress - snappyjs 1.9259 us/op 2.9379 us/op 0.66
300 bytes - compress - snappy 1.3362 us/op 1.9799 us/op 0.67
300 bytes - compress - snappy-wasm 960.42 ns/op
300 bytes - compress - snappy-wasm - prealloc 1.4746 us/op
400 bytes - compress - snappyjs 2.3753 us/op 2.3396 us/op 1.02
400 bytes - compress - snappy 1.4975 us/op 2.1813 us/op 0.69
400 bytes - compress - snappy-wasm 923.22 ns/op
400 bytes - compress - snappy-wasm - prealloc 1.3302 us/op
500 bytes - compress - snappyjs 2.6137 us/op 3.0889 us/op 0.85
500 bytes - compress - snappy 1.5062 us/op 2.3588 us/op 0.64
500 bytes - compress - snappy-wasm 981.32 ns/op
500 bytes - compress - snappy-wasm - prealloc 1.3485 us/op
1000 bytes - compress - snappyjs 5.2714 us/op 4.5526 us/op 1.16
1000 bytes - compress - snappy 1.7648 us/op 3.0277 us/op 0.58
1000 bytes - compress - snappy-wasm 1.5848 us/op
1000 bytes - compress - snappy-wasm - prealloc 1.8396 us/op
10000 bytes - compress - snappyjs 25.002 us/op 29.231 us/op 0.86
10000 bytes - compress - snappy 24.986 us/op 16.910 us/op 1.48
10000 bytes - compress - snappy-wasm 16.305 us/op
10000 bytes - compress - snappy-wasm - prealloc 19.292 us/op
100 bytes - uncompress - snappyjs 702.25 ns/op 801.89 ns/op 0.88
100 bytes - uncompress - snappy 1.1313 us/op 1.5166 us/op 0.75
100 bytes - uncompress - snappy-wasm 913.08 ns/op
100 bytes - uncompress - snappy-wasm - prealloc 874.14 ns/op
200 bytes - uncompress - snappyjs 956.93 ns/op 1.3935 us/op 0.69
200 bytes - uncompress - snappy 1.7094 us/op 1.8058 us/op 0.95
200 bytes - uncompress - snappy-wasm 1.5411 us/op
200 bytes - uncompress - snappy-wasm - prealloc 1.0963 us/op
300 bytes - uncompress - snappyjs 1.0832 us/op 1.2181 us/op 0.89
300 bytes - uncompress - snappy 1.9881 us/op 1.5073 us/op 1.32
300 bytes - uncompress - snappy-wasm 905.25 ns/op
300 bytes - uncompress - snappy-wasm - prealloc 1.3465 us/op
400 bytes - uncompress - snappyjs 1.7349 us/op 1.6135 us/op 1.08
400 bytes - uncompress - snappy 1.2353 us/op 1.5895 us/op 0.78
400 bytes - uncompress - snappy-wasm 853.16 ns/op
400 bytes - uncompress - snappy-wasm - prealloc 1.5283 us/op
500 bytes - uncompress - snappyjs 1.5630 us/op 1.8898 us/op 0.83
500 bytes - uncompress - snappy 1.4822 us/op 2.1996 us/op 0.67
500 bytes - uncompress - snappy-wasm 1.0043 us/op
500 bytes - uncompress - snappy-wasm - prealloc 1.3986 us/op
1000 bytes - uncompress - snappyjs 2.4981 us/op 2.4049 us/op 1.04
1000 bytes - uncompress - snappy 1.6205 us/op 1.8319 us/op 0.88
1000 bytes - uncompress - snappy-wasm 1.5104 us/op
1000 bytes - uncompress - snappy-wasm - prealloc 1.4366 us/op
10000 bytes - uncompress - snappyjs 21.193 us/op 24.660 us/op 0.86
10000 bytes - uncompress - snappy 25.895 us/op 24.359 us/op 1.06
10000 bytes - uncompress - snappy-wasm 24.993 us/op
10000 bytes - uncompress - snappy-wasm - prealloc 14.884 us/op
send data - 1000 256B messages 14.612 ms/op 23.406 ms/op 0.62
send data - 1000 512B messages 17.737 ms/op 24.129 ms/op 0.74
send data - 1000 1024B messages 24.400 ms/op 29.586 ms/op 0.82
send data - 1000 1200B messages 27.487 ms/op 36.139 ms/op 0.76
send data - 1000 2048B messages 30.846 ms/op 33.882 ms/op 0.91
send data - 1000 4096B messages 56.573 ms/op 41.431 ms/op 1.37
send data - 1000 16384B messages 104.10 ms/op 161.10 ms/op 0.65
send data - 1000 65536B messages 326.14 ms/op 663.87 ms/op 0.49
enrSubnets - fastDeserialize 64 bits 842.00 ns/op 960.00 ns/op 0.88
enrSubnets - ssz BitVector 64 bits 323.00 ns/op 364.00 ns/op 0.89
enrSubnets - fastDeserialize 4 bits 120.00 ns/op 142.00 ns/op 0.85
enrSubnets - ssz BitVector 4 bits 339.00 ns/op 367.00 ns/op 0.92
prioritizePeers score -10:0 att 32-0.1 sync 2-0 229.75 us/op 262.09 us/op 0.88
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 253.47 us/op 303.57 us/op 0.83
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 371.64 us/op 420.48 us/op 0.88
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 692.43 us/op 900.93 us/op 0.77
prioritizePeers score 0:0 att 64-1 sync 4-1 852.50 us/op 894.17 us/op 0.95
array of 16000 items push then shift 1.5855 us/op 1.7795 us/op 0.89
LinkedList of 16000 items push then shift 7.3330 ns/op 8.1070 ns/op 0.90
array of 16000 items push then pop 73.814 ns/op 84.752 ns/op 0.87
LinkedList of 16000 items push then pop 7.1010 ns/op 7.8070 ns/op 0.91
array of 24000 items push then shift 2.3619 us/op 2.5672 us/op 0.92
LinkedList of 24000 items push then shift 7.3960 ns/op 8.6200 ns/op 0.86
array of 24000 items push then pop 105.03 ns/op 115.58 ns/op 0.91
LinkedList of 24000 items push then pop 7.1160 ns/op 7.8020 ns/op 0.91
intersect bitArray bitLen 8 5.6480 ns/op 6.1720 ns/op 0.92
intersect array and set length 8 34.785 ns/op 38.820 ns/op 0.90
intersect bitArray bitLen 128 28.220 ns/op 30.329 ns/op 0.93
intersect array and set length 128 543.01 ns/op 618.77 ns/op 0.88
bitArray.getTrueBitIndexes() bitLen 128 1.0450 us/op 1.2580 us/op 0.83
bitArray.getTrueBitIndexes() bitLen 248 1.7860 us/op 2.0640 us/op 0.87
bitArray.getTrueBitIndexes() bitLen 512 3.6590 us/op 4.1470 us/op 0.88
Full columns - reconstruct all 6 blobs 311.55 us/op 392.04 us/op 0.79
Full columns - reconstruct half of the blobs out of 6 104.72 us/op 158.43 us/op 0.66
Full columns - reconstruct single blob out of 6 41.364 us/op 50.643 us/op 0.82
Half columns - reconstruct all 6 blobs 265.68 ms/op 300.98 ms/op 0.88
Half columns - reconstruct half of the blobs out of 6 134.57 ms/op 167.97 ms/op 0.80
Half columns - reconstruct single blob out of 6 48.559 ms/op 55.349 ms/op 0.88
Full columns - reconstruct all 10 blobs 313.88 us/op 419.81 us/op 0.75
Full columns - reconstruct half of the blobs out of 10 149.14 us/op 194.04 us/op 0.77
Full columns - reconstruct single blob out of 10 45.317 us/op 53.704 us/op 0.84
Half columns - reconstruct all 10 blobs 442.81 ms/op 506.52 ms/op 0.87
Half columns - reconstruct half of the blobs out of 10 223.06 ms/op 274.00 ms/op 0.81
Half columns - reconstruct single blob out of 10 50.244 ms/op 54.769 ms/op 0.92
Full columns - reconstruct all 20 blobs 793.41 us/op 1.4152 ms/op 0.56
Full columns - reconstruct half of the blobs out of 20 277.24 us/op 527.24 us/op 0.53
Full columns - reconstruct single blob out of 20 41.761 us/op 33.405 us/op 1.25
Half columns - reconstruct all 20 blobs 888.22 ms/op 971.51 ms/op 0.91
Half columns - reconstruct half of the blobs out of 20 441.74 ms/op 512.16 ms/op 0.86
Half columns - reconstruct single blob out of 20 48.913 ms/op 61.888 ms/op 0.79
Set add up to 64 items then delete first 2.0293 us/op 3.2494 us/op 0.62
OrderedSet add up to 64 items then delete first 3.0148 us/op 4.2914 us/op 0.70
Set add up to 64 items then delete last 2.3526 us/op 3.0497 us/op 0.77
OrderedSet add up to 64 items then delete last 3.3725 us/op 4.3118 us/op 0.78
Set add up to 64 items then delete middle 2.3599 us/op 3.0645 us/op 0.77
OrderedSet add up to 64 items then delete middle 4.9496 us/op 6.1575 us/op 0.80
Set add up to 128 items then delete first 4.9406 us/op 6.1276 us/op 0.81
OrderedSet add up to 128 items then delete first 7.4236 us/op 8.0762 us/op 0.92
Set add up to 128 items then delete last 4.6759 us/op 5.3681 us/op 0.87
OrderedSet add up to 128 items then delete last 6.8229 us/op 8.5711 us/op 0.80
Set add up to 128 items then delete middle 4.5908 us/op 6.4321 us/op 0.71
OrderedSet add up to 128 items then delete middle 13.217 us/op 16.912 us/op 0.78
Set add up to 256 items then delete first 10.234 us/op 12.634 us/op 0.81
OrderedSet add up to 256 items then delete first 15.184 us/op 16.798 us/op 0.90
Set add up to 256 items then delete last 9.3900 us/op 13.512 us/op 0.69
OrderedSet add up to 256 items then delete last 13.942 us/op 19.982 us/op 0.70
Set add up to 256 items then delete middle 9.3948 us/op 12.480 us/op 0.75
OrderedSet add up to 256 items then delete middle 40.689 us/op 50.877 us/op 0.80
pass gossip attestations to forkchoice per slot 2.6461 ms/op 3.0687 ms/op 0.86
forkChoice updateHead vc 100000 bc 64 eq 0 465.64 us/op 565.46 us/op 0.82
forkChoice updateHead vc 600000 bc 64 eq 0 2.7724 ms/op 2.9686 ms/op 0.93
forkChoice updateHead vc 1000000 bc 64 eq 0 4.6522 ms/op 5.2358 ms/op 0.89
forkChoice updateHead vc 600000 bc 320 eq 0 2.7850 ms/op 3.2169 ms/op 0.87
forkChoice updateHead vc 600000 bc 1200 eq 0 2.8257 ms/op 3.3019 ms/op 0.86
forkChoice updateHead vc 600000 bc 7200 eq 0 3.1594 ms/op 4.4906 ms/op 0.70
forkChoice updateHead vc 600000 bc 64 eq 1000 3.3896 ms/op 3.7414 ms/op 0.91
forkChoice updateHead vc 600000 bc 64 eq 10000 3.5357 ms/op 3.8391 ms/op 0.92
forkChoice updateHead vc 600000 bc 64 eq 300000 8.9370 ms/op 10.375 ms/op 0.86
computeDeltas 1400000 validators 0% inactive 14.652 ms/op 15.644 ms/op 0.94
computeDeltas 1400000 validators 10% inactive 13.727 ms/op 15.077 ms/op 0.91
computeDeltas 1400000 validators 20% inactive 13.550 ms/op 13.367 ms/op 1.01
computeDeltas 1400000 validators 50% inactive 9.8419 ms/op 10.514 ms/op 0.94
computeDeltas 2100000 validators 0% inactive 22.056 ms/op 23.128 ms/op 0.95
computeDeltas 2100000 validators 10% inactive 20.505 ms/op 22.432 ms/op 0.91
computeDeltas 2100000 validators 20% inactive 19.059 ms/op 19.812 ms/op 0.96
computeDeltas 2100000 validators 50% inactive 14.687 ms/op 15.963 ms/op 0.92
altair processAttestation - 250000 vs - 7PWei normalcase 1.8834 ms/op 2.7661 ms/op 0.68
altair processAttestation - 250000 vs - 7PWei worstcase 2.7615 ms/op 3.7183 ms/op 0.74
altair processAttestation - setStatus - 1/6 committees join 118.00 us/op 128.56 us/op 0.92
altair processAttestation - setStatus - 1/3 committees join 232.47 us/op 251.30 us/op 0.93
altair processAttestation - setStatus - 1/2 committees join 318.03 us/op 349.64 us/op 0.91
altair processAttestation - setStatus - 2/3 committees join 415.86 us/op 449.57 us/op 0.93
altair processAttestation - setStatus - 4/5 committees join 573.93 us/op 619.46 us/op 0.93
altair processAttestation - setStatus - 100% committees join 676.94 us/op 736.90 us/op 0.92
altair processBlock - 250000 vs - 7PWei normalcase 3.8776 ms/op 5.1418 ms/op 0.75
altair processBlock - 250000 vs - 7PWei normalcase hashState 17.419 ms/op 28.248 ms/op 0.62
altair processBlock - 250000 vs - 7PWei worstcase 23.600 ms/op 28.960 ms/op 0.81
altair processBlock - 250000 vs - 7PWei worstcase hashState 53.440 ms/op 66.063 ms/op 0.81
phase0 processBlock - 250000 vs - 7PWei normalcase 1.4446 ms/op 1.7601 ms/op 0.82
phase0 processBlock - 250000 vs - 7PWei worstcase 19.309 ms/op 25.750 ms/op 0.75
altair processEth1Data - 250000 vs - 7PWei normalcase 387.11 us/op 414.07 us/op 0.93
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 7.3750 us/op 12.284 us/op 0.60
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 40.607 us/op 62.391 us/op 0.65
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 10.971 us/op 20.392 us/op 0.54
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 6.6280 us/op 11.833 us/op 0.56
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 158.66 us/op 245.13 us/op 0.65
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 1.9290 ms/op 2.1417 ms/op 0.90
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 2.7550 ms/op 3.2349 ms/op 0.85
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 2.5590 ms/op 2.7196 ms/op 0.94
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 5.0654 ms/op 6.1572 ms/op 0.82
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.7277 ms/op 2.8645 ms/op 0.95
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.9614 ms/op 6.2035 ms/op 0.80
Tree 40 250000 create 367.43 ms/op 407.60 ms/op 0.90
Tree 40 250000 get(125000) 127.71 ns/op 131.18 ns/op 0.97
Tree 40 250000 set(125000) 1.2309 us/op 1.3287 us/op 0.93
Tree 40 250000 toArray() 15.163 ms/op 19.267 ms/op 0.79
Tree 40 250000 iterate all - toArray() + loop 15.478 ms/op 20.027 ms/op 0.77
Tree 40 250000 iterate all - get(i) 44.629 ms/op 49.797 ms/op 0.90
Array 250000 create 2.5953 ms/op 2.7338 ms/op 0.95
Array 250000 clone - spread 825.48 us/op 917.19 us/op 0.90
Array 250000 get(125000) 0.34700 ns/op 0.36500 ns/op 0.95
Array 250000 set(125000) 0.35400 ns/op 0.36800 ns/op 0.96
Array 250000 iterate all - loop 61.700 us/op 63.585 us/op 0.97
phase0 afterProcessEpoch - 250000 vs - 7PWei 41.753 ms/op 43.951 ms/op 0.95
Array.fill - length 1000000 2.8624 ms/op 3.3421 ms/op 0.86
Array push - length 1000000 11.259 ms/op 13.843 ms/op 0.81
Array.get 0.21974 ns/op 0.23491 ns/op 0.94
Uint8Array.get 0.22105 ns/op 0.24768 ns/op 0.89
phase0 beforeProcessEpoch - 250000 vs - 7PWei 16.148 ms/op 21.080 ms/op 0.77
altair processEpoch - mainnet_e81889 225.78 ms/op 295.45 ms/op 0.76
mainnet_e81889 - altair beforeProcessEpoch 17.638 ms/op 24.144 ms/op 0.73
mainnet_e81889 - altair processJustificationAndFinalization 5.4470 us/op 5.9870 us/op 0.91
mainnet_e81889 - altair processInactivityUpdates 3.8335 ms/op 4.1913 ms/op 0.91
mainnet_e81889 - altair processRewardsAndPenalties 18.289 ms/op 20.894 ms/op 0.88
mainnet_e81889 - altair processRegistryUpdates 616.00 ns/op 703.00 ns/op 0.88
mainnet_e81889 - altair processSlashings 164.00 ns/op 188.00 ns/op 0.87
mainnet_e81889 - altair processEth1DataReset 159.00 ns/op 181.00 ns/op 0.88
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.7848 ms/op 7.2064 ms/op 0.25
mainnet_e81889 - altair processSlashingsReset 775.00 ns/op 874.00 ns/op 0.89
mainnet_e81889 - altair processRandaoMixesReset 1.0230 us/op 1.1440 us/op 0.89
mainnet_e81889 - altair processHistoricalRootsUpdate 160.00 ns/op 189.00 ns/op 0.85
mainnet_e81889 - altair processParticipationFlagUpdates 493.00 ns/op 641.00 ns/op 0.77
mainnet_e81889 - altair processSyncCommitteeUpdates 127.00 ns/op 153.00 ns/op 0.83
mainnet_e81889 - altair afterProcessEpoch 43.690 ms/op 47.667 ms/op 0.92
capella processEpoch - mainnet_e217614 785.86 ms/op 850.21 ms/op 0.92
mainnet_e217614 - capella beforeProcessEpoch 82.354 ms/op 95.289 ms/op 0.86
mainnet_e217614 - capella processJustificationAndFinalization 5.2190 us/op 5.8580 us/op 0.89
mainnet_e217614 - capella processInactivityUpdates 15.166 ms/op 22.729 ms/op 0.67
mainnet_e217614 - capella processRewardsAndPenalties 109.00 ms/op 118.55 ms/op 0.92
mainnet_e217614 - capella processRegistryUpdates 6.1960 us/op 8.2340 us/op 0.75
mainnet_e217614 - capella processSlashings 162.00 ns/op 171.00 ns/op 0.95
mainnet_e217614 - capella processEth1DataReset 164.00 ns/op 174.00 ns/op 0.94
mainnet_e217614 - capella processEffectiveBalanceUpdates 23.046 ms/op 16.721 ms/op 1.38
mainnet_e217614 - capella processSlashingsReset 797.00 ns/op 843.00 ns/op 0.95
mainnet_e217614 - capella processRandaoMixesReset 1.0640 us/op 1.1950 us/op 0.89
mainnet_e217614 - capella processHistoricalRootsUpdate 162.00 ns/op 176.00 ns/op 0.92
mainnet_e217614 - capella processParticipationFlagUpdates 501.00 ns/op 536.00 ns/op 0.93
mainnet_e217614 - capella afterProcessEpoch 114.42 ms/op 119.99 ms/op 0.95
phase0 processEpoch - mainnet_e58758 231.12 ms/op 254.53 ms/op 0.91
mainnet_e58758 - phase0 beforeProcessEpoch 54.879 ms/op 59.868 ms/op 0.92
mainnet_e58758 - phase0 processJustificationAndFinalization 6.1540 us/op 5.7140 us/op 1.08
mainnet_e58758 - phase0 processRewardsAndPenalties 19.829 ms/op 19.684 ms/op 1.01
mainnet_e58758 - phase0 processRegistryUpdates 3.0020 us/op 3.1610 us/op 0.95
mainnet_e58758 - phase0 processSlashings 164.00 ns/op 212.00 ns/op 0.77
mainnet_e58758 - phase0 processEth1DataReset 163.00 ns/op 167.00 ns/op 0.98
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.1017 ms/op 1.0085 ms/op 1.09
mainnet_e58758 - phase0 processSlashingsReset 1.2420 us/op 935.00 ns/op 1.33
mainnet_e58758 - phase0 processRandaoMixesReset 1.0880 us/op 1.0940 us/op 0.99
mainnet_e58758 - phase0 processHistoricalRootsUpdate 198.00 ns/op 185.00 ns/op 1.07
mainnet_e58758 - phase0 processParticipationRecordUpdates 820.00 ns/op 850.00 ns/op 0.96
mainnet_e58758 - phase0 afterProcessEpoch 35.150 ms/op 37.110 ms/op 0.95
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.8402 ms/op 1.7434 ms/op 1.06
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.8022 ms/op 2.1424 ms/op 0.84
altair processInactivityUpdates - 250000 normalcase 12.169 ms/op 15.723 ms/op 0.77
altair processInactivityUpdates - 250000 worstcase 12.035 ms/op 16.077 ms/op 0.75
phase0 processRegistryUpdates - 250000 normalcase 4.9530 us/op 7.3490 us/op 0.67
phase0 processRegistryUpdates - 250000 badcase_full_deposits 248.98 us/op 323.01 us/op 0.77
phase0 processRegistryUpdates - 250000 worstcase 0.5 74.338 ms/op 93.059 ms/op 0.80
altair processRewardsAndPenalties - 250000 normalcase 17.439 ms/op 17.419 ms/op 1.00
altair processRewardsAndPenalties - 250000 worstcase 17.456 ms/op 17.195 ms/op 1.02
phase0 getAttestationDeltas - 250000 normalcase 6.8365 ms/op 7.2499 ms/op 0.94
phase0 getAttestationDeltas - 250000 worstcase 6.8839 ms/op 7.2913 ms/op 0.94
phase0 processSlashings - 250000 worstcase 94.319 us/op 111.78 us/op 0.84
altair processSyncCommitteeUpdates - 250000 10.943 ms/op 12.567 ms/op 0.87
BeaconState.hashTreeRoot - No change 192.00 ns/op 248.00 ns/op 0.77
BeaconState.hashTreeRoot - 1 full validator 68.917 us/op 95.719 us/op 0.72
BeaconState.hashTreeRoot - 32 full validator 896.63 us/op 1.1086 ms/op 0.81
BeaconState.hashTreeRoot - 512 full validator 7.5886 ms/op 9.5847 ms/op 0.79
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 86.073 us/op 128.42 us/op 0.67
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.3227 ms/op 1.8834 ms/op 0.70
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 15.448 ms/op 22.232 ms/op 0.69
BeaconState.hashTreeRoot - 1 balances 68.176 us/op 98.458 us/op 0.69
BeaconState.hashTreeRoot - 32 balances 712.42 us/op 947.46 us/op 0.75
BeaconState.hashTreeRoot - 512 balances 5.8340 ms/op 7.2094 ms/op 0.81
BeaconState.hashTreeRoot - 250000 balances 122.29 ms/op 154.81 ms/op 0.79
aggregationBits - 2048 els - zipIndexesInBitList 20.746 us/op 25.218 us/op 0.82
regular array get 100000 times 24.613 us/op 27.868 us/op 0.88
wrappedArray get 100000 times 24.731 us/op 27.895 us/op 0.89
arrayWithProxy get 100000 times 15.894 ms/op 16.648 ms/op 0.95
ssz.Root.equals 23.469 ns/op 27.734 ns/op 0.85
byteArrayEquals 22.898 ns/op 26.712 ns/op 0.86
Buffer.compare 9.7500 ns/op 11.322 ns/op 0.86
processSlot - 1 slots 10.613 us/op 13.215 us/op 0.80
processSlot - 32 slots 2.0554 ms/op 2.8100 ms/op 0.73
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 4.4553 ms/op 4.3326 ms/op 1.03
getCommitteeAssignments - req 1 vs - 250000 vc 1.9016 ms/op 1.9251 ms/op 0.99
getCommitteeAssignments - req 100 vs - 250000 vc 3.6957 ms/op 3.7767 ms/op 0.98
getCommitteeAssignments - req 1000 vs - 250000 vc 3.9390 ms/op 4.0307 ms/op 0.98
findModifiedValidators - 10000 modified validators 575.96 ms/op 633.30 ms/op 0.91
findModifiedValidators - 1000 modified validators 513.78 ms/op 465.17 ms/op 1.10
findModifiedValidators - 100 modified validators 325.18 ms/op 282.04 ms/op 1.15
findModifiedValidators - 10 modified validators 171.43 ms/op 256.62 ms/op 0.67
findModifiedValidators - 1 modified validators 142.39 ms/op 231.94 ms/op 0.61
findModifiedValidators - no difference 171.01 ms/op 207.87 ms/op 0.82
migrate state 1500000 validators, 3400 modified, 2000 new 1.1191 s/op 1.1532 s/op 0.97
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.2900 ns/op 4.2600 ns/op 1.01
state getBlockRootAtSlot - 250000 vs - 7PWei 541.00 ns/op 535.65 ns/op 1.01
computeProposerIndex 100000 validators 1.5556 ms/op 1.5973 ms/op 0.97
getNextSyncCommitteeIndices 1000 validators 116.22 ms/op 121.64 ms/op 0.96
getNextSyncCommitteeIndices 10000 validators 122.11 ms/op 121.65 ms/op 1.00
getNextSyncCommitteeIndices 100000 validators 127.06 ms/op 124.47 ms/op 1.02
computeProposers - vc 250000 680.38 us/op 657.39 us/op 1.03
computeEpochShuffling - vc 250000 42.078 ms/op 46.962 ms/op 0.90
getNextSyncCommittee - vc 250000 10.736 ms/op 10.896 ms/op 0.99
nodejs block root to RootHex using toHex 143.97 ns/op 158.21 ns/op 0.91
nodejs block root to RootHex using toRootHex 93.259 ns/op 98.660 ns/op 0.95
nodejs fromHex(blob) 212.06 us/op 226.43 us/op 0.94
nodejs fromHexInto(blob) 694.54 us/op 769.54 us/op 0.90
nodejs block root to RootHex using the deprecated toHexString 577.14 ns/op 598.23 ns/op 0.96
browser block root to RootHex using toHex 390.97 ns/op 404.88 ns/op 0.97
browser block root to RootHex using toRootHex 152.96 ns/op 162.71 ns/op 0.94
browser fromHex(blob) 1.0440 ms/op 1.5696 ms/op 0.67
browser fromHexInto(blob) 716.20 us/op 731.74 us/op 0.98
browser block root to RootHex using the deprecated toHexString 587.46 ns/op 601.83 ns/op 0.98

by benchmarkbot/action

Copy link
Member

@nflaig nflaig left a comment

Choose a reason for hiding this comment

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

sim and e2e tests are consistently failing on this branch

@twoeths
Copy link
Contributor

twoeths commented Nov 28, 2025

somehow memory and gc increased in this branch

Screenshot 2025-11-28 at 08 26 34

looks like it was caused by publishing more DatacolumnSidecars

Screenshot 2025-11-28 at 08 28 52

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.

5 participants