Skip to content

chore: log aggregation selection errors to debug - #8709

Merged
wemeetagain merged 1 commit into
unstablefrom
nflaig/move-to-debug
Dec 19, 2025
Merged

chore: log aggregation selection errors to debug#8709
wemeetagain merged 1 commit into
unstablefrom
nflaig/move-to-debug

Conversation

@nflaig

@nflaig nflaig commented Dec 19, 2025

Copy link
Copy Markdown
Member

These errors aren't really critical and might be common right now because we moved from per slot to per epoch in #8669 and not all validator clients doing the same will cause calls to time out if signature threshold in DVT middleware is not reached.

@nflaig
nflaig requested a review from a team as a code owner December 19, 2025 18:38
@gemini-code-assist

Copy link
Copy Markdown
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 adjusts the logging severity for specific aggregation selection and proof-related messages within the validator services. Previously logged as errors or warnings, these messages are now considered less critical and have been downgraded to debug level. This change addresses potential log noise stemming from recent shifts in validator client behavior and the transition from per-slot to per-epoch processing, ensuring that only truly critical issues generate high-severity alerts.

Highlights

  • Attestation Aggregation Logging: The log level for 'Error on attestation aggregation selection' has been downgraded from error to debug in AttestationDutiesService.
  • Attestation Reorg Logging: The log level for 'Error on attestation aggregation selection after duties reorg' has been downgraded from error to debug in AttestationDutiesService.
  • Beacon Committee Selection Proof Logging: The log level for 'Did not receive combined beacon committee selection proof' has been downgraded from warn to debug in AttestationDutiesService.
  • Sync Committee Aggregation Logging: The log level for 'Error on sync committee aggregation selection' has been downgraded from error to debug in SyncCommitteeDutiesService.
  • Sync Committee Selection Proof Logging: The log level for 'Did not receive combined sync committee selection proof' has been downgraded from warn to debug in SyncCommitteeDutiesService.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

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.

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

Copy link
Copy Markdown
Contributor

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 reduce log noise by downgrading the log level for aggregation selection errors from error and warn to debug. The changes are consistent across attestationDuties.ts and syncCommitteeDuties.ts.

While the intent to reduce noise from expected errors is clear, I've suggested changing the log level from error to warn instead of debug for cases where the entire aggregation selection task fails. This provides a balance between reducing noise and ensuring that potentially persistent, actionable issues with DVT middleware remain visible in default log configurations. The changes from warn to debug for individual missing selection proofs seem appropriate to reduce high-volume, low-signal logs.

Comment thread packages/validator/src/services/attestationDuties.ts
Comment thread packages/validator/src/services/attestationDuties.ts
Comment thread packages/validator/src/services/syncCommitteeDuties.ts
@github-actions

Copy link
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: a2801e1 Previous: 39dac0f Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.8818 ms/op 1.2931 ms/op 1.46
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 44.407 us/op 40.482 us/op 1.10
BLS verify - blst 1.1132 ms/op 866.34 us/op 1.28
BLS verifyMultipleSignatures 3 - blst 1.6492 ms/op 1.2588 ms/op 1.31
BLS verifyMultipleSignatures 8 - blst 2.4503 ms/op 1.9257 ms/op 1.27
BLS verifyMultipleSignatures 32 - blst 6.6964 ms/op 5.7864 ms/op 1.16
BLS verifyMultipleSignatures 64 - blst 12.072 ms/op 11.039 ms/op 1.09
BLS verifyMultipleSignatures 128 - blst 24.867 ms/op 18.587 ms/op 1.34
BLS deserializing 10000 signatures 804.86 ms/op 720.54 ms/op 1.12
BLS deserializing 100000 signatures 7.5585 s/op 7.0455 s/op 1.07
BLS verifyMultipleSignatures - same message - 3 - blst 982.50 us/op 881.38 us/op 1.11
BLS verifyMultipleSignatures - same message - 8 - blst 1.1344 ms/op 1.8567 ms/op 0.61
BLS verifyMultipleSignatures - same message - 32 - blst 1.8601 ms/op 1.6982 ms/op 1.10
BLS verifyMultipleSignatures - same message - 64 - blst 2.8059 ms/op 2.5646 ms/op 1.09
BLS verifyMultipleSignatures - same message - 128 - blst 4.7492 ms/op 4.3590 ms/op 1.09
BLS aggregatePubkeys 32 - blst 20.896 us/op 19.478 us/op 1.07
BLS aggregatePubkeys 128 - blst 75.252 us/op 68.949 us/op 1.09
getSlashingsAndExits - default max 76.262 us/op 95.016 us/op 0.80
getSlashingsAndExits - 2k 355.19 us/op 342.02 us/op 1.04
isKnown best case - 1 super set check 205.00 ns/op 195.00 ns/op 1.05
isKnown normal case - 2 super set checks 198.00 ns/op 194.00 ns/op 1.02
isKnown worse case - 16 super set checks 194.00 ns/op 194.00 ns/op 1.00
InMemoryCheckpointStateCache - add get delete 2.4910 us/op 2.3190 us/op 1.07
validate api signedAggregateAndProof - struct 1.4770 ms/op 1.5037 ms/op 0.98
validate gossip signedAggregateAndProof - struct 1.4711 ms/op 1.7441 ms/op 0.84
batch validate gossip attestation - vc 640000 - chunk 32 125.36 us/op 126.90 us/op 0.99
batch validate gossip attestation - vc 640000 - chunk 64 111.41 us/op 117.01 us/op 0.95
batch validate gossip attestation - vc 640000 - chunk 128 102.96 us/op 117.13 us/op 0.88
batch validate gossip attestation - vc 640000 - chunk 256 97.644 us/op 94.512 us/op 1.03
bytes32 toHexString 351.00 ns/op 468.00 ns/op 0.75
bytes32 Buffer.toString(hex) 237.00 ns/op 237.00 ns/op 1.00
bytes32 Buffer.toString(hex) from Uint8Array 318.00 ns/op 339.00 ns/op 0.94
bytes32 Buffer.toString(hex) + 0x 354.00 ns/op 250.00 ns/op 1.42
Object access 1 prop 0.11400 ns/op 0.11500 ns/op 0.99
Map access 1 prop 0.11800 ns/op 0.14500 ns/op 0.81
Object get x1000 5.7900 ns/op 5.2940 ns/op 1.09
Map get x1000 0.37300 ns/op 0.37200 ns/op 1.00
Object set x1000 31.295 ns/op 29.199 ns/op 1.07
Map set x1000 21.765 ns/op 20.294 ns/op 1.07
Return object 10000 times 0.24000 ns/op 0.22920 ns/op 1.05
Throw Error 10000 times 4.3424 us/op 4.0271 us/op 1.08
toHex 146.02 ns/op 133.82 ns/op 1.09
Buffer.from 141.26 ns/op 124.19 ns/op 1.14
shared Buffer 82.271 ns/op 75.023 ns/op 1.10
fastMsgIdFn sha256 / 200 bytes 1.9710 us/op 1.8220 us/op 1.08
fastMsgIdFn h32 xxhash / 200 bytes 197.00 ns/op 181.00 ns/op 1.09
fastMsgIdFn h64 xxhash / 200 bytes 266.00 ns/op 305.00 ns/op 0.87
fastMsgIdFn sha256 / 1000 bytes 6.1100 us/op 5.9160 us/op 1.03
fastMsgIdFn h32 xxhash / 1000 bytes 300.00 ns/op 325.00 ns/op 0.92
fastMsgIdFn h64 xxhash / 1000 bytes 328.00 ns/op 299.00 ns/op 1.10
fastMsgIdFn sha256 / 10000 bytes 53.651 us/op 51.291 us/op 1.05
fastMsgIdFn h32 xxhash / 10000 bytes 1.4400 us/op 1.3750 us/op 1.05
fastMsgIdFn h64 xxhash / 10000 bytes 952.00 ns/op 916.00 ns/op 1.04
100 bytes - compress - snappyjs 1.3992 us/op 1.2463 us/op 1.12
100 bytes - compress - snappy 1.1507 us/op 1.1770 us/op 0.98
100 bytes - compress - snappy-wasm 980.77 ns/op 673.66 ns/op 1.46
100 bytes - compress - snappy-wasm - prealloc 2.1069 us/op 1.3476 us/op 1.56
200 bytes - compress - snappyjs 1.9495 us/op 1.9028 us/op 1.02
200 bytes - compress - snappy 1.6151 us/op 1.3806 us/op 1.17
200 bytes - compress - snappy-wasm 1.3882 us/op 682.24 ns/op 2.03
200 bytes - compress - snappy-wasm - prealloc 1.5134 us/op 1.0599 us/op 1.43
300 bytes - compress - snappyjs 2.1661 us/op 2.0057 us/op 1.08
300 bytes - compress - snappy 1.6030 us/op 1.2556 us/op 1.28
300 bytes - compress - snappy-wasm 1.3785 us/op 883.40 ns/op 1.56
300 bytes - compress - snappy-wasm - prealloc 1.2302 us/op 1.9637 us/op 0.63
400 bytes - compress - snappyjs 2.3511 us/op 2.1012 us/op 1.12
400 bytes - compress - snappy 1.5886 us/op 1.4033 us/op 1.13
400 bytes - compress - snappy-wasm 1.1236 us/op 910.11 ns/op 1.23
400 bytes - compress - snappy-wasm - prealloc 1.1445 us/op 2.0584 us/op 0.56
500 bytes - compress - snappyjs 2.7877 us/op 2.5769 us/op 1.08
500 bytes - compress - snappy 1.5455 us/op 1.4885 us/op 1.04
500 bytes - compress - snappy-wasm 1.1475 us/op 979.13 ns/op 1.17
500 bytes - compress - snappy-wasm - prealloc 1.3508 us/op 1.5076 us/op 0.90
1000 bytes - compress - snappyjs 5.7367 us/op 5.3236 us/op 1.08
1000 bytes - compress - snappy 1.7602 us/op 1.9517 us/op 0.90
1000 bytes - compress - snappy-wasm 1.9167 us/op 2.0841 us/op 0.92
1000 bytes - compress - snappy-wasm - prealloc 2.0614 us/op 2.4415 us/op 0.84
10000 bytes - compress - snappyjs 27.692 us/op 23.733 us/op 1.17
10000 bytes - compress - snappy 36.588 us/op 41.230 us/op 0.89
10000 bytes - compress - snappy-wasm 18.204 us/op 22.800 us/op 0.80
10000 bytes - compress - snappy-wasm - prealloc 22.235 us/op 16.023 us/op 1.39
100 bytes - uncompress - snappyjs 781.40 ns/op 701.98 ns/op 1.11
100 bytes - uncompress - snappy 1.2464 us/op 1.1322 us/op 1.10
100 bytes - uncompress - snappy-wasm 992.52 ns/op 882.76 ns/op 1.12
100 bytes - uncompress - snappy-wasm - prealloc 883.20 ns/op 752.59 ns/op 1.17
200 bytes - uncompress - snappyjs 1.0969 us/op 873.05 ns/op 1.26
200 bytes - uncompress - snappy 1.4628 us/op 1.3693 us/op 1.07
200 bytes - uncompress - snappy-wasm 1.6022 us/op 1.0944 us/op 1.46
200 bytes - uncompress - snappy-wasm - prealloc 1.6098 us/op 930.70 ns/op 1.73
300 bytes - uncompress - snappyjs 1.3936 us/op 959.42 ns/op 1.45
300 bytes - uncompress - snappy 1.9138 us/op 1.3739 us/op 1.39
300 bytes - uncompress - snappy-wasm 1.2540 us/op 793.49 ns/op 1.58
300 bytes - uncompress - snappy-wasm - prealloc 1.6088 us/op 952.50 ns/op 1.69
400 bytes - uncompress - snappyjs 1.3360 us/op 1.6980 us/op 0.79
400 bytes - uncompress - snappy 2.4416 us/op 1.4520 us/op 1.68
400 bytes - uncompress - snappy-wasm 1.0105 us/op 705.22 ns/op 1.43
400 bytes - uncompress - snappy-wasm - prealloc 1.1938 us/op 1.3528 us/op 0.88
500 bytes - uncompress - snappyjs 1.7524 us/op 1.3598 us/op 1.29
500 bytes - uncompress - snappy 1.4800 us/op 1.7818 us/op 0.83
500 bytes - uncompress - snappy-wasm 1.1280 us/op 1.1145 us/op 1.01
500 bytes - uncompress - snappy-wasm - prealloc 1.2597 us/op 1.5353 us/op 0.82
1000 bytes - uncompress - snappyjs 2.2226 us/op 2.4719 us/op 0.90
1000 bytes - uncompress - snappy 1.9560 us/op 1.6054 us/op 1.22
1000 bytes - uncompress - snappy-wasm 1.7449 us/op 1.2191 us/op 1.43
1000 bytes - uncompress - snappy-wasm - prealloc 1.7942 us/op 1.2040 us/op 1.49
10000 bytes - uncompress - snappyjs 22.009 us/op 19.668 us/op 1.12
10000 bytes - uncompress - snappy 32.527 us/op 29.110 us/op 1.12
10000 bytes - uncompress - snappy-wasm 37.660 us/op 25.941 us/op 1.45
10000 bytes - uncompress - snappy-wasm - prealloc 17.137 us/op 18.764 us/op 0.91
send data - 1000 256B messages 19.432 ms/op 14.383 ms/op 1.35
send data - 1000 512B messages 21.194 ms/op 17.289 ms/op 1.23
send data - 1000 1024B messages 25.013 ms/op 26.253 ms/op 0.95
send data - 1000 1200B messages 35.106 ms/op 28.443 ms/op 1.23
send data - 1000 2048B messages 35.498 ms/op 30.812 ms/op 1.15
send data - 1000 4096B messages 48.248 ms/op 55.332 ms/op 0.87
send data - 1000 16384B messages 116.79 ms/op 150.62 ms/op 0.78
send data - 1000 65536B messages 294.06 ms/op 294.32 ms/op 1.00
enrSubnets - fastDeserialize 64 bits 915.00 ns/op 899.00 ns/op 1.02
enrSubnets - ssz BitVector 64 bits 338.00 ns/op 427.00 ns/op 0.79
enrSubnets - fastDeserialize 4 bits 163.00 ns/op 185.00 ns/op 0.88
enrSubnets - ssz BitVector 4 bits 342.00 ns/op 406.00 ns/op 0.84
prioritizePeers score -10:0 att 32-0.1 sync 2-0 245.43 us/op 306.76 us/op 0.80
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 273.51 us/op 307.01 us/op 0.89
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 400.41 us/op 487.20 us/op 0.82
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 719.38 us/op 685.82 us/op 1.05
prioritizePeers score 0:0 att 64-1 sync 4-1 863.12 us/op 1.1901 ms/op 0.73
array of 16000 items push then shift 1.6501 us/op 1.5867 us/op 1.04
LinkedList of 16000 items push then shift 7.9680 ns/op 7.2630 ns/op 1.10
array of 16000 items push then pop 80.396 ns/op 74.384 ns/op 1.08
LinkedList of 16000 items push then pop 7.4830 ns/op 7.0570 ns/op 1.06
array of 24000 items push then shift 2.4780 us/op 2.4139 us/op 1.03
LinkedList of 24000 items push then shift 8.7530 ns/op 7.5030 ns/op 1.17
array of 24000 items push then pop 113.48 ns/op 104.62 ns/op 1.08
LinkedList of 24000 items push then pop 7.6630 ns/op 7.0820 ns/op 1.08
intersect bitArray bitLen 8 6.0140 ns/op 5.6620 ns/op 1.06
intersect array and set length 8 36.389 ns/op 33.209 ns/op 1.10
intersect bitArray bitLen 128 29.993 ns/op 27.472 ns/op 1.09
intersect array and set length 128 584.85 ns/op 544.56 ns/op 1.07
bitArray.getTrueBitIndexes() bitLen 128 1.0950 us/op 1.1740 us/op 0.93
bitArray.getTrueBitIndexes() bitLen 248 1.8810 us/op 1.7860 us/op 1.05
bitArray.getTrueBitIndexes() bitLen 512 3.9470 us/op 3.6500 us/op 1.08
Full columns - reconstruct all 6 blobs 397.11 us/op 301.03 us/op 1.32
Full columns - reconstruct half of the blobs out of 6 132.44 us/op 98.605 us/op 1.34
Full columns - reconstruct single blob out of 6 49.531 us/op 42.603 us/op 1.16
Half columns - reconstruct all 6 blobs 292.92 ms/op 263.85 ms/op 1.11
Half columns - reconstruct half of the blobs out of 6 147.53 ms/op 132.96 ms/op 1.11
Half columns - reconstruct single blob out of 6 54.106 ms/op 49.086 ms/op 1.10
Full columns - reconstruct all 10 blobs 412.16 us/op 293.74 us/op 1.40
Full columns - reconstruct half of the blobs out of 10 179.57 us/op 149.13 us/op 1.20
Full columns - reconstruct single blob out of 10 34.304 us/op 40.980 us/op 0.84
Half columns - reconstruct all 10 blobs 480.60 ms/op 438.63 ms/op 1.10
Half columns - reconstruct half of the blobs out of 10 243.40 ms/op 221.63 ms/op 1.10
Half columns - reconstruct single blob out of 10 55.113 ms/op 49.169 ms/op 1.12
Full columns - reconstruct all 20 blobs 743.18 us/op 683.38 us/op 1.09
Full columns - reconstruct half of the blobs out of 20 291.15 us/op 408.90 us/op 0.71
Full columns - reconstruct single blob out of 20 38.748 us/op 31.239 us/op 1.24
Half columns - reconstruct all 20 blobs 959.04 ms/op 875.58 ms/op 1.10
Half columns - reconstruct half of the blobs out of 20 483.68 ms/op 450.94 ms/op 1.07
Half columns - reconstruct single blob out of 20 53.542 ms/op 50.754 ms/op 1.05
Set add up to 64 items then delete first 2.6292 us/op 2.0730 us/op 1.27
OrderedSet add up to 64 items then delete first 4.0821 us/op 3.0756 us/op 1.33
Set add up to 64 items then delete last 2.8312 us/op 2.3839 us/op 1.19
OrderedSet add up to 64 items then delete last 4.4615 us/op 3.5351 us/op 1.26
Set add up to 64 items then delete middle 2.8887 us/op 2.3685 us/op 1.22
OrderedSet add up to 64 items then delete middle 6.0379 us/op 5.0293 us/op 1.20
Set add up to 128 items then delete first 5.5957 us/op 4.8239 us/op 1.16
OrderedSet add up to 128 items then delete first 14.629 us/op 6.7901 us/op 2.15
Set add up to 128 items then delete last 5.7930 us/op 4.7002 us/op 1.23
OrderedSet add up to 128 items then delete last 8.3977 us/op 6.9485 us/op 1.21
Set add up to 128 items then delete middle 5.5564 us/op 4.5496 us/op 1.22
OrderedSet add up to 128 items then delete middle 16.966 us/op 13.293 us/op 1.28
Set add up to 256 items then delete first 13.233 us/op 9.9490 us/op 1.33
OrderedSet add up to 256 items then delete first 20.712 us/op 14.392 us/op 1.44
Set add up to 256 items then delete last 11.963 us/op 9.3767 us/op 1.28
OrderedSet add up to 256 items then delete last 17.371 us/op 14.364 us/op 1.21
Set add up to 256 items then delete middle 11.946 us/op 9.3250 us/op 1.28
OrderedSet add up to 256 items then delete middle 47.745 us/op 40.920 us/op 1.17
pass gossip attestations to forkchoice per slot 2.7829 ms/op 2.5167 ms/op 1.11
forkChoice updateHead vc 100000 bc 64 eq 0 615.31 us/op 494.09 us/op 1.25
forkChoice updateHead vc 600000 bc 64 eq 0 3.1673 ms/op 2.9670 ms/op 1.07
forkChoice updateHead vc 1000000 bc 64 eq 0 5.4389 ms/op 4.9284 ms/op 1.10
forkChoice updateHead vc 600000 bc 320 eq 0 3.2621 ms/op 2.9607 ms/op 1.10
forkChoice updateHead vc 600000 bc 1200 eq 0 3.3282 ms/op 3.0068 ms/op 1.11
forkChoice updateHead vc 600000 bc 7200 eq 0 4.4444 ms/op 3.1519 ms/op 1.41
forkChoice updateHead vc 600000 bc 64 eq 1000 3.8019 ms/op 3.2503 ms/op 1.17
forkChoice updateHead vc 600000 bc 64 eq 10000 3.8664 ms/op 3.5030 ms/op 1.10
forkChoice updateHead vc 600000 bc 64 eq 300000 10.263 ms/op 9.0240 ms/op 1.14
computeDeltas 1400000 validators 0% inactive 15.190 ms/op 14.506 ms/op 1.05
computeDeltas 1400000 validators 10% inactive 14.124 ms/op 13.489 ms/op 1.05
computeDeltas 1400000 validators 20% inactive 13.491 ms/op 12.621 ms/op 1.07
computeDeltas 1400000 validators 50% inactive 11.296 ms/op 9.9240 ms/op 1.14
computeDeltas 2100000 validators 0% inactive 24.111 ms/op 21.710 ms/op 1.11
computeDeltas 2100000 validators 10% inactive 22.426 ms/op 20.242 ms/op 1.11
computeDeltas 2100000 validators 20% inactive 20.884 ms/op 18.876 ms/op 1.11
computeDeltas 2100000 validators 50% inactive 16.381 ms/op 14.782 ms/op 1.11
altair processAttestation - 250000 vs - 7PWei normalcase 3.4094 ms/op 1.8232 ms/op 1.87
altair processAttestation - 250000 vs - 7PWei worstcase 4.2647 ms/op 2.8194 ms/op 1.51
altair processAttestation - setStatus - 1/6 committees join 139.21 us/op 119.80 us/op 1.16
altair processAttestation - setStatus - 1/3 committees join 258.17 us/op 230.17 us/op 1.12
altair processAttestation - setStatus - 1/2 committees join 358.74 us/op 319.72 us/op 1.12
altair processAttestation - setStatus - 2/3 committees join 445.99 us/op 423.78 us/op 1.05
altair processAttestation - setStatus - 4/5 committees join 615.04 us/op 591.00 us/op 1.04
altair processAttestation - setStatus - 100% committees join 738.85 us/op 692.28 us/op 1.07
altair processBlock - 250000 vs - 7PWei normalcase 4.1348 ms/op 4.0947 ms/op 1.01
altair processBlock - 250000 vs - 7PWei normalcase hashState 19.458 ms/op 17.419 ms/op 1.12
altair processBlock - 250000 vs - 7PWei worstcase 24.248 ms/op 21.566 ms/op 1.12
altair processBlock - 250000 vs - 7PWei worstcase hashState 70.724 ms/op 66.609 ms/op 1.06
phase0 processBlock - 250000 vs - 7PWei normalcase 1.7781 ms/op 1.7320 ms/op 1.03
phase0 processBlock - 250000 vs - 7PWei worstcase 25.906 ms/op 19.263 ms/op 1.34
altair processEth1Data - 250000 vs - 7PWei normalcase 374.15 us/op 365.94 us/op 1.02
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 11.556 us/op 7.6250 us/op 1.52
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 71.384 us/op 35.369 us/op 2.02
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 21.125 us/op 14.496 us/op 1.46
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 13.967 us/op 5.8080 us/op 2.40
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 238.40 us/op 146.79 us/op 1.62
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 2.6112 ms/op 1.8444 ms/op 1.42
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 2.5932 ms/op 2.4016 ms/op 1.08
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 3.7136 ms/op 2.3700 ms/op 1.57
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 6.1638 ms/op 4.6238 ms/op 1.33
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 3.0541 ms/op 2.4558 ms/op 1.24
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 6.4931 ms/op 4.6786 ms/op 1.39
Tree 40 250000 create 440.05 ms/op 375.00 ms/op 1.17
Tree 40 250000 get(125000) 136.03 ns/op 121.60 ns/op 1.12
Tree 40 250000 set(125000) 1.4548 us/op 1.2094 us/op 1.20
Tree 40 250000 toArray() 22.766 ms/op 13.167 ms/op 1.73
Tree 40 250000 iterate all - toArray() + loop 25.015 ms/op 13.173 ms/op 1.90
Tree 40 250000 iterate all - get(i) 51.360 ms/op 42.080 ms/op 1.22
Array 250000 create 2.9252 ms/op 2.5165 ms/op 1.16
Array 250000 clone - spread 930.90 us/op 816.41 us/op 1.14
Array 250000 get(125000) 0.36200 ns/op 0.35100 ns/op 1.03
Array 250000 set(125000) 0.36700 ns/op 0.34800 ns/op 1.05
Array 250000 iterate all - loop 65.546 us/op 61.362 us/op 1.07
phase0 afterProcessEpoch - 250000 vs - 7PWei 44.075 ms/op 41.273 ms/op 1.07
Array.fill - length 1000000 3.7923 ms/op 2.8889 ms/op 1.31
Array push - length 1000000 13.203 ms/op 10.845 ms/op 1.22
Array.get 0.22940 ns/op 0.21733 ns/op 1.06
Uint8Array.get 0.22794 ns/op 0.22522 ns/op 1.01
phase0 beforeProcessEpoch - 250000 vs - 7PWei 19.364 ms/op 13.723 ms/op 1.41
altair processEpoch - mainnet_e81889 256.64 ms/op 239.65 ms/op 1.07
mainnet_e81889 - altair beforeProcessEpoch 18.495 ms/op 16.430 ms/op 1.13
mainnet_e81889 - altair processJustificationAndFinalization 5.5720 us/op 5.5540 us/op 1.00
mainnet_e81889 - altair processInactivityUpdates 3.9184 ms/op 3.8922 ms/op 1.01
mainnet_e81889 - altair processRewardsAndPenalties 20.282 ms/op 26.956 ms/op 0.75
mainnet_e81889 - altair processRegistryUpdates 819.00 ns/op 737.00 ns/op 1.11
mainnet_e81889 - altair processSlashings 166.00 ns/op 193.00 ns/op 0.86
mainnet_e81889 - altair processEth1DataReset 164.00 ns/op 187.00 ns/op 0.88
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.6061 ms/op 2.7397 ms/op 0.59
mainnet_e81889 - altair processSlashingsReset 785.00 ns/op 787.00 ns/op 1.00
mainnet_e81889 - altair processRandaoMixesReset 1.0540 us/op 1.0360 us/op 1.02
mainnet_e81889 - altair processHistoricalRootsUpdate 165.00 ns/op 154.00 ns/op 1.07
mainnet_e81889 - altair processParticipationFlagUpdates 499.00 ns/op 501.00 ns/op 1.00
mainnet_e81889 - altair processSyncCommitteeUpdates 126.00 ns/op 127.00 ns/op 0.99
mainnet_e81889 - altair afterProcessEpoch 44.697 ms/op 43.787 ms/op 1.02
capella processEpoch - mainnet_e217614 691.23 ms/op 748.73 ms/op 0.92
mainnet_e217614 - capella beforeProcessEpoch 69.300 ms/op 63.494 ms/op 1.09
mainnet_e217614 - capella processJustificationAndFinalization 8.4530 us/op 5.2490 us/op 1.61
mainnet_e217614 - capella processInactivityUpdates 19.844 ms/op 17.590 ms/op 1.13
mainnet_e217614 - capella processRewardsAndPenalties 139.90 ms/op 96.197 ms/op 1.45
mainnet_e217614 - capella processRegistryUpdates 6.1680 us/op 6.1600 us/op 1.00
mainnet_e217614 - capella processSlashings 170.00 ns/op 157.00 ns/op 1.08
mainnet_e217614 - capella processEth1DataReset 203.00 ns/op 157.00 ns/op 1.29
mainnet_e217614 - capella processEffectiveBalanceUpdates 17.390 ms/op 12.802 ms/op 1.36
mainnet_e217614 - capella processSlashingsReset 1.2420 us/op 778.00 ns/op 1.60
mainnet_e217614 - capella processRandaoMixesReset 1.5450 us/op 1.0580 us/op 1.46
mainnet_e217614 - capella processHistoricalRootsUpdate 177.00 ns/op 155.00 ns/op 1.14
mainnet_e217614 - capella processParticipationFlagUpdates 1.0210 us/op 494.00 ns/op 2.07
mainnet_e217614 - capella afterProcessEpoch 124.45 ms/op 114.56 ms/op 1.09
phase0 processEpoch - mainnet_e58758 287.04 ms/op 229.72 ms/op 1.25
mainnet_e58758 - phase0 beforeProcessEpoch 73.161 ms/op 54.378 ms/op 1.35
mainnet_e58758 - phase0 processJustificationAndFinalization 7.6460 us/op 8.2060 us/op 0.93
mainnet_e58758 - phase0 processRewardsAndPenalties 24.756 ms/op 19.898 ms/op 1.24
mainnet_e58758 - phase0 processRegistryUpdates 2.9440 us/op 3.3850 us/op 0.87
mainnet_e58758 - phase0 processSlashings 347.00 ns/op 159.00 ns/op 2.18
mainnet_e58758 - phase0 processEth1DataReset 260.00 ns/op 153.00 ns/op 1.70
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.1915 ms/op 939.50 us/op 1.27
mainnet_e58758 - phase0 processSlashingsReset 1.0430 us/op 1.0360 us/op 1.01
mainnet_e58758 - phase0 processRandaoMixesReset 1.9890 us/op 1.0420 us/op 1.91
mainnet_e58758 - phase0 processHistoricalRootsUpdate 234.00 ns/op 269.00 ns/op 0.87
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.7700 us/op 823.00 ns/op 2.15
mainnet_e58758 - phase0 afterProcessEpoch 38.531 ms/op 35.263 ms/op 1.09
phase0 processEffectiveBalanceUpdates - 250000 normalcase 5.0042 ms/op 1.9369 ms/op 2.58
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 4.1718 ms/op 1.9731 ms/op 2.11
altair processInactivityUpdates - 250000 normalcase 19.186 ms/op 14.021 ms/op 1.37
altair processInactivityUpdates - 250000 worstcase 21.947 ms/op 14.393 ms/op 1.52
phase0 processRegistryUpdates - 250000 normalcase 12.972 us/op 6.4030 us/op 2.03
phase0 processRegistryUpdates - 250000 badcase_full_deposits 409.64 us/op 370.42 us/op 1.11
phase0 processRegistryUpdates - 250000 worstcase 0.5 90.826 ms/op 71.838 ms/op 1.26
altair processRewardsAndPenalties - 250000 normalcase 19.110 ms/op 21.448 ms/op 0.89
altair processRewardsAndPenalties - 250000 worstcase 23.068 ms/op 18.197 ms/op 1.27
phase0 getAttestationDeltas - 250000 normalcase 11.863 ms/op 6.8033 ms/op 1.74
phase0 getAttestationDeltas - 250000 worstcase 6.5175 ms/op 6.7037 ms/op 0.97
phase0 processSlashings - 250000 worstcase 146.49 us/op 120.59 us/op 1.21
altair processSyncCommitteeUpdates - 250000 13.428 ms/op 10.943 ms/op 1.23
BeaconState.hashTreeRoot - No change 288.00 ns/op 188.00 ns/op 1.53
BeaconState.hashTreeRoot - 1 full validator 93.327 us/op 72.790 us/op 1.28
BeaconState.hashTreeRoot - 32 full validator 1.3215 ms/op 894.72 us/op 1.48
BeaconState.hashTreeRoot - 512 full validator 13.105 ms/op 7.3514 ms/op 1.78
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 161.86 us/op 86.065 us/op 1.88
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 2.9335 ms/op 1.4045 ms/op 2.09
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 24.550 ms/op 17.738 ms/op 1.38
BeaconState.hashTreeRoot - 1 balances 123.51 us/op 69.898 us/op 1.77
BeaconState.hashTreeRoot - 32 balances 985.47 us/op 1.0595 ms/op 0.93
BeaconState.hashTreeRoot - 512 balances 9.2899 ms/op 5.4288 ms/op 1.71
BeaconState.hashTreeRoot - 250000 balances 184.36 ms/op 115.75 ms/op 1.59
aggregationBits - 2048 els - zipIndexesInBitList 23.937 us/op 20.867 us/op 1.15
regular array get 100000 times 26.805 us/op 24.745 us/op 1.08
wrappedArray get 100000 times 26.934 us/op 24.114 us/op 1.12
arrayWithProxy get 100000 times 16.343 ms/op 14.674 ms/op 1.11
ssz.Root.equals 25.892 ns/op 22.553 ns/op 1.15
byteArrayEquals 25.317 ns/op 21.923 ns/op 1.15
Buffer.compare 11.009 ns/op 9.4590 ns/op 1.16
processSlot - 1 slots 10.751 us/op 9.2250 us/op 1.17
processSlot - 32 slots 3.8713 ms/op 1.9288 ms/op 2.01
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 7.4742 ms/op 3.3622 ms/op 2.22
getCommitteeAssignments - req 1 vs - 250000 vc 2.0649 ms/op 1.8671 ms/op 1.11
getCommitteeAssignments - req 100 vs - 250000 vc 4.0398 ms/op 3.6803 ms/op 1.10
getCommitteeAssignments - req 1000 vs - 250000 vc 4.8688 ms/op 4.0205 ms/op 1.21
findModifiedValidators - 10000 modified validators 915.34 ms/op 568.10 ms/op 1.61
findModifiedValidators - 1000 modified validators 680.17 ms/op 519.18 ms/op 1.31
findModifiedValidators - 100 modified validators 391.92 ms/op 266.13 ms/op 1.47
findModifiedValidators - 10 modified validators 281.57 ms/op 286.05 ms/op 0.98
findModifiedValidators - 1 modified validators 231.20 ms/op 148.38 ms/op 1.56
findModifiedValidators - no difference 243.62 ms/op 182.03 ms/op 1.34
migrate state 1500000 validators, 3400 modified, 2000 new 1.7695 s/op 1.1407 s/op 1.55
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 6.8200 ns/op 4.1400 ns/op 1.65
state getBlockRootAtSlot - 250000 vs - 7PWei 946.66 ns/op 612.56 ns/op 1.55
computeProposerIndex 100000 validators 1.9695 ms/op 1.5284 ms/op 1.29
getNextSyncCommitteeIndices 1000 validators 190.16 ms/op 118.45 ms/op 1.61
getNextSyncCommitteeIndices 10000 validators 184.02 ms/op 119.84 ms/op 1.54
getNextSyncCommitteeIndices 100000 validators 157.07 ms/op 118.95 ms/op 1.32
computeProposers - vc 250000 1.0080 ms/op 647.41 us/op 1.56
computeEpochShuffling - vc 250000 49.180 ms/op 42.103 ms/op 1.17
getNextSyncCommittee - vc 250000 23.126 ms/op 10.447 ms/op 2.21
nodejs block root to RootHex using toHex 280.63 ns/op 143.52 ns/op 1.96
nodejs block root to RootHex using toRootHex 163.68 ns/op 82.821 ns/op 1.98
nodejs fromHex(blob) 605.92 us/op 377.94 us/op 1.60
nodejs fromHexInto(blob) 935.74 us/op 715.80 us/op 1.31
nodejs block root to RootHex using the deprecated toHexString 707.09 ns/op 576.84 ns/op 1.23
browser block root to RootHex using toHex 398.96 ns/op 304.95 ns/op 1.31
browser block root to RootHex using toRootHex 321.36 ns/op 157.44 ns/op 2.04
browser fromHex(blob) 1.7047 ms/op 1.0709 ms/op 1.59
browser fromHexInto(blob) 955.28 us/op 753.60 us/op 1.27
browser block root to RootHex using the deprecated toHexString 988.01 ns/op 413.32 ns/op 2.39

by benchmarkbot/action

@wemeetagain
wemeetagain merged commit 7e9e7ca into unstable Dec 19, 2025
30 of 32 checks passed
@wemeetagain
wemeetagain deleted the nflaig/move-to-debug branch December 19, 2025 20:44
@codecov

codecov Bot commented Dec 19, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 52.06%. Comparing base (39dac0f) to head (31b4999).
⚠️ Report is 1 commits behind head on unstable.

Additional details and impacted files
@@            Coverage Diff            @@
##           unstable    #8709   +/-   ##
=========================================
  Coverage     52.06%   52.06%           
=========================================
  Files           848      848           
  Lines         64787    64787           
  Branches       4771     4771           
=========================================
  Hits          33729    33729           
  Misses        30989    30989           
  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.

@wemeetagain

Copy link
Copy Markdown
Member

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

2 participants