Skip to content

feat: update data column sidecars for gloas#8938

Draft
nflaig wants to merge 6 commits intounstablefrom
nflaig/gloas-sidecars
Draft

feat: update data column sidecars for gloas#8938
nflaig wants to merge 6 commits intounstablefrom
nflaig/gloas-sidecars

Conversation

@nflaig
Copy link
Member

@nflaig nflaig commented Feb 20, 2026

No description provided.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

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

This pull request integrates support for 'gloas' data column sidecars, a new format with a simplified structure, into the beacon node. The changes involve a significant refactoring effort to introduce a generic DataColumnSidecar type, enabling consistent handling across different forks. It updates core functionalities such as API interactions, block input processing, network communication, and data validation to correctly interpret and manage both 'fulu' and 'gloas' sidecar specifications, ensuring the system remains compatible with future Ethereum upgrades.

Highlights

  • Gloas Data Column Sidecar Support: Introduced comprehensive support for 'gloas' data column sidecars, which feature a simplified structure compared to 'fulu' sidecars, impacting various components from API to network validation.
  • Generic DataColumnSidecar Type: Refactored existing code to utilize a more generic DataColumnSidecar type, replacing fulu.DataColumnSidecar in many instances, and added utility functions to abstract common properties like slot and block root.
  • Fork-Specific Logic and Validation: Implemented fork-specific logic in data column sidecar validation, block input processing, and network request/response handling to correctly differentiate and process 'fulu' and 'gloas' sidecar formats.
  • Serialization and Deserialization Updates: Updated serialization utilities to correctly extract slot and block root from serialized 'gloas' data column sidecars, accommodating their distinct structure.

🧠 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.

Changelog
  • packages/beacon-node/src/api/impl/beacon/blocks/index.ts
    • Updated imports to include DataColumnSidecars and isGloasDataColumnSidecar.
    • Modified dataColumnSidecars type from fulu.DataColumnSidecars to DataColumnSidecars.
    • Adjusted kzgCommitments mapping logic to handle gloas data column sidecars.
  • packages/beacon-node/src/chain/blocks/blockInput/blockInput.ts
    • Updated imports to use isForkPostGloas and generic DataColumnSidecar.
    • Removed BeaconBlockBody import and ForkPreGloas from params.
    • Introduced isGloasDataColumnSidecar and getBlobKzgCommitmentsFromColumnsBlock helper functions.
    • Changed BlockInputColumns generic type from fulu.DataColumnSidecars to DataColumnSidecar[].
    • Modified computedDataPromise type to DataColumnSidecar[].
    • Updated createFromBlock and createFromColumn methods to use getBlobKzgCommitmentsFromColumnsBlock and isGloasDataColumnSidecar for gloas specific logic.
    • Adjusted parentRootHex and slot assignment in createFromColumn for gloas sidecars.
    • Updated getLogMeta, addBlock, getColumn, getCustodyColumns, getSampledColumns, getAllColumns, and waitForComputedAllData methods to use generic DataColumnSidecar types and getBlobKzgCommitmentsFromColumnsBlock.
  • packages/beacon-node/src/chain/blocks/blockInput/types.ts
    • Updated DAData type from fulu.DataColumnSidecars to DataColumnSidecar[].
    • Updated ColumnWithSource type from fulu.DataColumnSidecar to DataColumnSidecar.
  • packages/beacon-node/src/chain/blocks/types.ts
    • Updated DataColumnSidecar import and removed fulu import.
    • Modified DataColumnData type from fulu.DataColumnSidecar to DataColumnSidecar.
  • packages/beacon-node/src/chain/chain.ts
    • Cast blockInput.getAllColumns() return type to DataColumnSidecars.
  • packages/beacon-node/src/chain/emitter.ts
    • Updated DataColumnSidecars import to DataColumnSidecar.
    • Modified publishDataColumns event type from DataColumnSidecars to DataColumnSidecar[].
  • packages/beacon-node/src/chain/seenCache/seenGossipBlockInput.ts
    • Removed ForkPreGloas and isForkPostGloas imports.
    • Removed TODO GLOAS comment and related throw Error('Not implemented') block.
    • Updated createFromBlock block type from SignedBeaconBlock<ForkPostFulu & ForkPreGloas> to SignedBeaconBlock<ForkPostFulu>.
    • Modified columnSidecar type in getByColumn from fulu.DataColumnSidecar to DataColumnSidecar.
    • Adjusted buildCommonProps call in getByColumn to use getDataColumnSidecarSlot.
  • packages/beacon-node/src/chain/validation/dataColumnSidecar.ts
    • Updated imports to include isForkPostGloas, gloas, isGloasDataColumnSidecar, getDataColumnSidecarBlockRoot, and getDataColumnSidecarSlot.
    • Refactored validateGossipDataColumnSidecar to dispatch to validateGossipDataColumnSidecarFulu or validateGossipDataColumnSidecarGloas based on fork.
    • Renamed verifyDataColumnSidecar to verifyDataColumnSidecarFulu.
    • Added validateGossipDataColumnSidecarGloas and verifyDataColumnSidecarGloas functions for gloas specific validation.
    • Modified validateBlockDataColumnSidecars to accept DataColumnSidecar[] and an optional blockKzgCommitments.
    • Updated logic in validateBlockDataColumnSidecars to handle gloas specific sidecar properties and validation checks.
  • packages/beacon-node/src/network/interface.ts
    • Updated return types for sendDataColumnSidecarsByRange and sendDataColumnSidecarsByRoot from fulu.DataColumnSidecar[] to DataColumnSidecar[].
  • packages/beacon-node/src/network/network.ts
    • Removed DataColumnSidecars import.
    • Updated return types for sendDataColumnSidecarsByRange and sendDataColumnSidecarsByRoot to DataColumnSidecar[].
    • Modified onPublishDataColumns handler type from DataColumnSidecars to DataColumnSidecar[].
  • packages/beacon-node/src/network/processor/extractSlotRootFns.ts
    • Added getBlockRootFromDataColumnSidecarSerialized import.
    • Updated data_column_sidecar extraction to include root from getBlockRootFromDataColumnSidecarSerialized.
  • packages/beacon-node/src/network/processor/gossipHandlers.ts
    • Updated imports to include DataColumnSidecar, ForkPostFulu, isGloasDataColumnSidecar, getDataColumnSidecarBlockRoot, and getDataColumnSidecarSlot.
    • Modified validateBeaconDataColumn to accept DataColumnSidecar and use getDataColumnSidecarSlot and getDataColumnSidecarBlockRoot.
    • Adjusted kzgCommitments mapping in validateBeaconDataColumn for gloas sidecars.
    • Updated persistInvalidSszValue to use fork-specific sszTypesFor for DataColumnSidecar.
    • Modified dataColumnSidecar deserialization and slot extraction in gossip handler to use generic DataColumnSidecar and getDataColumnSidecarSlot.
  • packages/beacon-node/src/network/reqresp/types.ts
    • Updated imports to include isForkPostFulu and DataColumnSidecar.
    • Modified ResponseBodyByMethod for DataColumnSidecarsByRange and DataColumnSidecarsByRoot to use DataColumnSidecar.
    • Updated responseSszTypeByMethod for data column sidecars to use sszTypesFor(fork).DataColumnSidecar if isForkPostFulu(fork).
  • packages/beacon-node/src/sync/utils/downloadByRange.ts
    • Updated imports to include DataColumnSidecar and getDataColumnSidecarSlot.
    • Modified columnSidecars type in DownloadByRangeResponses and ValidatedColumnSidecars to DataColumnSidecar[].
    • Adjusted dataSlot extraction in cacheByRangeResponses to use getDataColumnSidecarSlot.
    • Updated columnSidecars type in requestByRange to DataColumnSidecar[].
    • Modified validateColumnsByRangeResponse to accept DataColumnSidecar[] and use getDataColumnSidecarSlot.
    • Changed error handling in validateColumnsByRangeResponse to throw instead of push warnings for duplicate/out-of-order columns.
    • Updated blobCount calculation and validateBlockDataColumnSidecars call in validateColumnsByRangeResponse to pass blockKzgCommitments.
  • packages/beacon-node/src/sync/utils/downloadByRoot.ts
    • Updated imports to include DataColumnSidecar and isGloasDataColumnSidecar.
    • Modified columnSidecars type in FetchByRootResponses to DataColumnSidecar[].
    • Adjusted kzgCommitments mapping in downloadByRoot for gloas sidecars.
    • Updated columnSidecarResult type in fetchByRoot to WarnResult<DataColumnSidecar[], DownloadByRootError>.
    • Modified fetchAndValidateColumns to accept DataColumnSidecar[] and pass blockKzgCommitments to validateBlockDataColumnSidecars.
    • Updated fetchColumnsByRoot return type to Promise<DataColumnSidecar[]>.
  • packages/beacon-node/src/util/blobs.ts
    • Updated imports to include DataColumnSidecar, gloas, and isGloasDataColumnSidecar.
    • Modified partialSidecars type in dataColumnMatrixRecovery to Map<number, DataColumnSidecar>.
    • Adjusted blobCount calculation in dataColumnMatrixRecovery to use firstDataColumn.column.length.
    • Updated result type in dataColumnMatrixRecovery to DataColumnSidecar[].
    • Implemented gloas specific sidecar creation logic in dataColumnMatrixRecovery.
    • Modified reconstructBlobs and recoverBlobCells to accept DataColumnSidecar[].
  • packages/beacon-node/src/util/dataColumns.ts
    • Updated imports to include DataColumnSidecar, DataColumnSidecars, and isGloasDataColumnSidecar.
    • Modified getDataColumnSidecarsFromBlock to return DataColumnSidecars and include gloas specific logic for sidecar creation.
    • Updated getDataColumnSidecarsFromColumnSidecar to accept DataColumnSidecar and include gloas specific logic.
    • Added getDataColumnSidecarSlot and getDataColumnSidecarBlockRoot utility functions to abstract slot and block root extraction.
  • packages/beacon-node/src/util/execution.ts
    • Updated imports to include DataColumnSidecar, SignedBeaconBlock, and isGloasDataColumnSidecar.
    • Modified dataColumnSidecars type in getDataColumnSidecarsFromExecution to DataColumnSidecar[].
    • Adjusted blockInput.getBlock() casting to SignedBeaconBlock<ForkPostFulu>.
    • Updated kzgCommitments mapping in getDataColumnSidecarsFromExecution for gloas sidecars.
  • packages/beacon-node/src/util/sszBytes.ts
    • Updated imports to include isForkPostGloas.
    • Added constants for GLOAS_DATA_COLUMN_SIDECAR_FIRST_OFFSET and slot/block root positions.
    • Introduced isGloasDataColumnSidecarSerialized function.
    • Modified getSlotFromDataColumnSidecarSerialized to handle both fulu and gloas serialized sidecars.
    • Added getBlockRootFromDataColumnSidecarSerialized for gloas sidecars.
    • Updated getBlobKzgCommitmentsCountFromSignedBeaconBlockSerialized to handle gloas blocks.
  • packages/beacon-node/test/unit/db/api/repositories/dataColumn.test.ts
    • Updated type casting for allDataColumnSidecars to fulu.DataColumnSidecars.
  • packages/beacon-node/test/unit/util/kzg.test.ts
    • Updated type casting for sidecars and recoveredSidecars to fulu.DataColumnSidecars.
Activity
  • The pull request was created by nflaig.
  • The changes introduce support for 'gloas' data column sidecars, indicating a feature implementation for a new Ethereum fork.
  • Extensive refactoring was performed across multiple files to accommodate the new sidecar structure and ensure compatibility.
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 introduces support for the gloas fork by updating the handling of DataColumnSidecar. The changes are extensive, refactoring many parts of the codebase to accommodate the new sidecar structure alongside the existing fulu structure. Key changes include using a union type for DataColumnSidecar, adding type guards and helper functions to abstract fork-specific logic, and updating validation and processing flows. Additionally, this PR fixes a few bugs related to state management in BlockInputColumns. The code is well-structured and the changes are consistent across the affected files.

Copy link
Contributor

@lodekeeper lodekeeper left a comment

Choose a reason for hiding this comment

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

Reviewed the Gloas data column sidecar changes. Overall the fork-agnostic abstraction pattern is solid — accessor helpers, type guards, and split validation functions are the right approach.

Two significant issues found (both around the Gloas gossip validation path), plus several suggestions for completeness.

…cars

# Conflicts:
#	packages/beacon-node/src/chain/seenCache/seenGossipBlockInput.ts
#	packages/beacon-node/src/network/processor/gossipHandlers.ts
@github-actions
Copy link
Contributor

github-actions bot commented Feb 27, 2026

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 10b20c4 Previous: 167a02a Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.0720 ms/op 1.0964 ms/op 0.98
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 51.187 us/op 37.432 us/op 1.37
BLS verify - blst 1.2893 ms/op 843.66 us/op 1.53
BLS verifyMultipleSignatures 3 - blst 2.2673 ms/op 1.3542 ms/op 1.67
BLS verifyMultipleSignatures 8 - blst 2.5213 ms/op 1.7083 ms/op 1.48
BLS verifyMultipleSignatures 32 - blst 7.4149 ms/op 4.9086 ms/op 1.51
BLS verifyMultipleSignatures 64 - blst 10.681 ms/op 9.1314 ms/op 1.17
BLS verifyMultipleSignatures 128 - blst 17.538 ms/op 17.297 ms/op 1.01
BLS deserializing 10000 signatures 689.16 ms/op 697.48 ms/op 0.99
BLS deserializing 100000 signatures 7.0417 s/op 7.0726 s/op 1.00
BLS verifyMultipleSignatures - same message - 3 - blst 877.78 us/op 873.84 us/op 1.00
BLS verifyMultipleSignatures - same message - 8 - blst 1.0216 ms/op 1.0049 ms/op 1.02
BLS verifyMultipleSignatures - same message - 32 - blst 1.6980 ms/op 1.6770 ms/op 1.01
BLS verifyMultipleSignatures - same message - 64 - blst 2.5904 ms/op 2.6330 ms/op 0.98
BLS verifyMultipleSignatures - same message - 128 - blst 4.3466 ms/op 4.4177 ms/op 0.98
BLS aggregatePubkeys 32 - blst 19.665 us/op 19.446 us/op 1.01
BLS aggregatePubkeys 128 - blst 70.089 us/op 68.787 us/op 1.02
getSlashingsAndExits - default max 72.509 us/op 69.299 us/op 1.05
getSlashingsAndExits - 2k 319.99 us/op 328.90 us/op 0.97
isKnown best case - 1 super set check 236.00 ns/op 200.00 ns/op 1.18
isKnown normal case - 2 super set checks 220.00 ns/op 196.00 ns/op 1.12
isKnown worse case - 16 super set checks 238.00 ns/op 197.00 ns/op 1.21
validate api signedAggregateAndProof - struct 2.5952 ms/op 1.3914 ms/op 1.87
validate gossip signedAggregateAndProof - struct 1.6969 ms/op 1.3903 ms/op 1.22
batch validate gossip attestation - vc 640000 - chunk 32 140.85 us/op 124.58 us/op 1.13
batch validate gossip attestation - vc 640000 - chunk 64 111.41 us/op 105.82 us/op 1.05
batch validate gossip attestation - vc 640000 - chunk 128 109.61 us/op 99.193 us/op 1.11
batch validate gossip attestation - vc 640000 - chunk 256 98.507 us/op 93.499 us/op 1.05
bytes32 toHexString 459.00 ns/op 363.00 ns/op 1.26
bytes32 Buffer.toString(hex) 320.00 ns/op 237.00 ns/op 1.35
bytes32 Buffer.toString(hex) from Uint8Array 414.00 ns/op 328.00 ns/op 1.26
bytes32 Buffer.toString(hex) + 0x 305.00 ns/op 236.00 ns/op 1.29
Return object 10000 times 0.24100 ns/op 0.23330 ns/op 1.03
Throw Error 10000 times 4.5776 us/op 4.2186 us/op 1.09
toHex 170.83 ns/op 142.06 ns/op 1.20
Buffer.from 144.48 ns/op 114.44 ns/op 1.26
shared Buffer 86.978 ns/op 76.739 ns/op 1.13
fastMsgIdFn sha256 / 200 bytes 2.1000 us/op 1.8370 us/op 1.14
fastMsgIdFn h32 xxhash / 200 bytes 211.00 ns/op 190.00 ns/op 1.11
fastMsgIdFn h64 xxhash / 200 bytes 340.00 ns/op 257.00 ns/op 1.32
fastMsgIdFn sha256 / 1000 bytes 6.7890 us/op 5.8930 us/op 1.15
fastMsgIdFn h32 xxhash / 1000 bytes 345.00 ns/op 287.00 ns/op 1.20
fastMsgIdFn h64 xxhash / 1000 bytes 340.00 ns/op 307.00 ns/op 1.11
fastMsgIdFn sha256 / 10000 bytes 57.403 us/op 51.884 us/op 1.11
fastMsgIdFn h32 xxhash / 10000 bytes 1.5530 us/op 1.4080 us/op 1.10
fastMsgIdFn h64 xxhash / 10000 bytes 1.2710 us/op 928.00 ns/op 1.37
send data - 1000 256B messages 5.5367 ms/op 5.1960 ms/op 1.07
send data - 1000 512B messages 4.9021 ms/op 4.9025 ms/op 1.00
send data - 1000 1024B messages 5.6574 ms/op 5.2777 ms/op 1.07
send data - 1000 1200B messages 5.3760 ms/op 5.9434 ms/op 0.90
send data - 1000 2048B messages 5.7206 ms/op 5.7693 ms/op 0.99
send data - 1000 4096B messages 6.7752 ms/op 7.4671 ms/op 0.91
send data - 1000 16384B messages 30.672 ms/op 31.294 ms/op 0.98
send data - 1000 65536B messages 141.54 ms/op 126.95 ms/op 1.11
enrSubnets - fastDeserialize 64 bits 993.00 ns/op 881.00 ns/op 1.13
enrSubnets - ssz BitVector 64 bits 410.00 ns/op 328.00 ns/op 1.25
enrSubnets - fastDeserialize 4 bits 141.00 ns/op 131.00 ns/op 1.08
enrSubnets - ssz BitVector 4 bits 361.00 ns/op 336.00 ns/op 1.07
prioritizePeers score -10:0 att 32-0.1 sync 2-0 336.39 us/op 232.62 us/op 1.45
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 341.77 us/op 265.71 us/op 1.29
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 443.65 us/op 380.11 us/op 1.17
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 835.95 us/op 756.72 us/op 1.10
prioritizePeers score 0:0 att 64-1 sync 4-1 1.1330 ms/op 862.33 us/op 1.31
array of 16000 items push then shift 1.7213 us/op 1.6201 us/op 1.06
LinkedList of 16000 items push then shift 7.9770 ns/op 7.6820 ns/op 1.04
array of 16000 items push then pop 89.781 ns/op 81.769 ns/op 1.10
LinkedList of 16000 items push then pop 8.7350 ns/op 7.3400 ns/op 1.19
array of 24000 items push then shift 2.5901 us/op 2.4212 us/op 1.07
LinkedList of 24000 items push then shift 8.0590 ns/op 7.5460 ns/op 1.07
array of 24000 items push then pop 119.75 ns/op 112.43 ns/op 1.07
LinkedList of 24000 items push then pop 7.9940 ns/op 7.2620 ns/op 1.10
intersect bitArray bitLen 8 6.4850 ns/op 5.5580 ns/op 1.17
intersect array and set length 8 38.219 ns/op 33.304 ns/op 1.15
intersect bitArray bitLen 128 32.694 ns/op 28.021 ns/op 1.17
intersect array and set length 128 627.22 ns/op 537.98 ns/op 1.17
bitArray.getTrueBitIndexes() bitLen 128 1.1490 us/op 1.1450 us/op 1.00
bitArray.getTrueBitIndexes() bitLen 248 2.0590 us/op 1.9190 us/op 1.07
bitArray.getTrueBitIndexes() bitLen 512 4.1170 us/op 3.7520 us/op 1.10
Full columns - reconstruct all 6 blobs 216.74 us/op 205.01 us/op 1.06
Full columns - reconstruct half of the blobs out of 6 116.02 us/op 128.84 us/op 0.90
Full columns - reconstruct single blob out of 6 34.159 us/op 33.015 us/op 1.03
Half columns - reconstruct all 6 blobs 337.26 ms/op 268.00 ms/op 1.26
Half columns - reconstruct half of the blobs out of 6 174.86 ms/op 140.90 ms/op 1.24
Half columns - reconstruct single blob out of 6 62.300 ms/op 52.777 ms/op 1.18
Full columns - reconstruct all 10 blobs 324.30 us/op 467.06 us/op 0.69
Full columns - reconstruct half of the blobs out of 10 175.11 us/op 180.41 us/op 0.97
Full columns - reconstruct single blob out of 10 39.185 us/op 34.342 us/op 1.14
Half columns - reconstruct all 10 blobs 539.96 ms/op 456.45 ms/op 1.18
Half columns - reconstruct half of the blobs out of 10 280.87 ms/op 228.63 ms/op 1.23
Half columns - reconstruct single blob out of 10 64.141 ms/op 51.033 ms/op 1.26
Full columns - reconstruct all 20 blobs 919.55 us/op 794.13 us/op 1.16
Full columns - reconstruct half of the blobs out of 20 417.68 us/op 380.54 us/op 1.10
Full columns - reconstruct single blob out of 20 37.411 us/op 45.834 us/op 0.82
Half columns - reconstruct all 20 blobs 1.0380 s/op 906.23 ms/op 1.15
Half columns - reconstruct half of the blobs out of 20 540.90 ms/op 455.23 ms/op 1.19
Half columns - reconstruct single blob out of 20 61.656 ms/op 52.977 ms/op 1.16
Set add up to 64 items then delete first 3.0583 us/op 2.0567 us/op 1.49
OrderedSet add up to 64 items then delete first 4.2664 us/op 3.0513 us/op 1.40
Set add up to 64 items then delete last 2.9597 us/op 2.2966 us/op 1.29
OrderedSet add up to 64 items then delete last 3.9922 us/op 3.3467 us/op 1.19
Set add up to 64 items then delete middle 2.8486 us/op 2.3464 us/op 1.21
OrderedSet add up to 64 items then delete middle 6.1044 us/op 4.9458 us/op 1.23
Set add up to 128 items then delete first 6.1421 us/op 4.8792 us/op 1.26
OrderedSet add up to 128 items then delete first 8.9647 us/op 7.4420 us/op 1.20
Set add up to 128 items then delete last 5.6758 us/op 4.6353 us/op 1.22
OrderedSet add up to 128 items then delete last 8.2395 us/op 6.8034 us/op 1.21
Set add up to 128 items then delete middle 5.3639 us/op 4.5928 us/op 1.17
OrderedSet add up to 128 items then delete middle 16.110 us/op 13.257 us/op 1.22
Set add up to 256 items then delete first 12.239 us/op 10.077 us/op 1.21
OrderedSet add up to 256 items then delete first 25.504 us/op 16.160 us/op 1.58
Set add up to 256 items then delete last 14.863 us/op 9.7720 us/op 1.52
OrderedSet add up to 256 items then delete last 24.698 us/op 14.234 us/op 1.74
Set add up to 256 items then delete middle 14.564 us/op 9.3234 us/op 1.56
OrderedSet add up to 256 items then delete middle 55.854 us/op 40.654 us/op 1.37
pass gossip attestations to forkchoice per slot 3.0951 ms/op 2.5199 ms/op 1.23
forkChoice updateHead vc 100000 bc 64 eq 0 616.57 us/op 501.49 us/op 1.23
forkChoice updateHead vc 600000 bc 64 eq 0 3.5200 ms/op 2.9450 ms/op 1.20
forkChoice updateHead vc 1000000 bc 64 eq 0 5.8358 ms/op 4.9203 ms/op 1.19
forkChoice updateHead vc 600000 bc 320 eq 0 3.9209 ms/op 2.9556 ms/op 1.33
forkChoice updateHead vc 600000 bc 1200 eq 0 4.4430 ms/op 2.9827 ms/op 1.49
forkChoice updateHead vc 600000 bc 7200 eq 0 4.4769 ms/op 3.3045 ms/op 1.35
forkChoice updateHead vc 600000 bc 64 eq 1000 4.4421 ms/op 3.3839 ms/op 1.31
forkChoice updateHead vc 600000 bc 64 eq 10000 5.4640 ms/op 3.6140 ms/op 1.51
forkChoice updateHead vc 600000 bc 64 eq 300000 12.146 ms/op 9.3297 ms/op 1.30
computeDeltas 1400000 validators 0% inactive 21.823 ms/op 14.309 ms/op 1.53
computeDeltas 1400000 validators 10% inactive 19.150 ms/op 13.369 ms/op 1.43
computeDeltas 1400000 validators 20% inactive 16.567 ms/op 12.453 ms/op 1.33
computeDeltas 1400000 validators 50% inactive 15.243 ms/op 9.8087 ms/op 1.55
computeDeltas 2100000 validators 0% inactive 36.780 ms/op 21.492 ms/op 1.71
computeDeltas 2100000 validators 10% inactive 30.561 ms/op 20.074 ms/op 1.52
computeDeltas 2100000 validators 20% inactive 24.024 ms/op 18.705 ms/op 1.28
computeDeltas 2100000 validators 50% inactive 18.348 ms/op 14.708 ms/op 1.25
altair processAttestation - 250000 vs - 7PWei normalcase 2.9136 ms/op 2.1727 ms/op 1.34
altair processAttestation - 250000 vs - 7PWei worstcase 3.6777 ms/op 2.7511 ms/op 1.34
altair processAttestation - setStatus - 1/6 committees join 163.81 us/op 113.29 us/op 1.45
altair processAttestation - setStatus - 1/3 committees join 294.45 us/op 223.49 us/op 1.32
altair processAttestation - setStatus - 1/2 committees join 410.85 us/op 311.23 us/op 1.32
altair processAttestation - setStatus - 2/3 committees join 521.89 us/op 399.45 us/op 1.31
altair processAttestation - setStatus - 4/5 committees join 728.70 us/op 557.06 us/op 1.31
altair processAttestation - setStatus - 100% committees join 837.62 us/op 663.52 us/op 1.26
altair processBlock - 250000 vs - 7PWei normalcase 5.3966 ms/op 3.8411 ms/op 1.40
altair processBlock - 250000 vs - 7PWei normalcase hashState 21.695 ms/op 18.361 ms/op 1.18
altair processBlock - 250000 vs - 7PWei worstcase 30.910 ms/op 23.146 ms/op 1.34
altair processBlock - 250000 vs - 7PWei worstcase hashState 72.756 ms/op 54.215 ms/op 1.34
phase0 processBlock - 250000 vs - 7PWei normalcase 2.6470 ms/op 1.6804 ms/op 1.58
phase0 processBlock - 250000 vs - 7PWei worstcase 27.317 ms/op 18.687 ms/op 1.46
altair processEth1Data - 250000 vs - 7PWei normalcase 650.14 us/op 360.26 us/op 1.80
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 10.022 us/op 6.3330 us/op 1.58
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 53.776 us/op 40.047 us/op 1.34
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 13.574 us/op 11.982 us/op 1.13
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 8.4250 us/op 7.2180 us/op 1.17
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 188.46 us/op 155.70 us/op 1.21
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 2.6511 ms/op 1.8366 ms/op 1.44
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 2.9192 ms/op 2.3597 ms/op 1.24
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 3.1472 ms/op 2.3500 ms/op 1.34
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 6.1057 ms/op 4.5454 ms/op 1.34
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 3.4716 ms/op 2.7402 ms/op 1.27
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 7.8498 ms/op 5.3117 ms/op 1.48
Tree 40 250000 create 537.36 ms/op 364.47 ms/op 1.47
Tree 40 250000 get(125000) 186.30 ns/op 125.88 ns/op 1.48
Tree 40 250000 set(125000) 1.6408 us/op 1.1981 us/op 1.37
Tree 40 250000 toArray() 19.963 ms/op 13.216 ms/op 1.51
Tree 40 250000 iterate all - toArray() + loop 22.894 ms/op 13.352 ms/op 1.71
Tree 40 250000 iterate all - get(i) 63.036 ms/op 44.801 ms/op 1.41
Array 250000 create 3.0765 ms/op 2.5216 ms/op 1.22
Array 250000 clone - spread 997.57 us/op 819.10 us/op 1.22
Array 250000 get(125000) 0.56900 ns/op 0.34000 ns/op 1.67
Array 250000 set(125000) 0.59200 ns/op 0.34600 ns/op 1.71
Array 250000 iterate all - loop 73.492 us/op 60.968 us/op 1.21
phase0 afterProcessEpoch - 250000 vs - 7PWei 50.547 ms/op 41.100 ms/op 1.23
Array.fill - length 1000000 3.6819 ms/op 2.8796 ms/op 1.28
Array push - length 1000000 13.114 ms/op 11.356 ms/op 1.15
Array.get 0.25988 ns/op 0.21562 ns/op 1.21
Uint8Array.get 0.27479 ns/op 0.21769 ns/op 1.26
phase0 beforeProcessEpoch - 250000 vs - 7PWei 14.741 ms/op 18.006 ms/op 0.82
altair processEpoch - mainnet_e81889 333.44 ms/op 272.32 ms/op 1.22
mainnet_e81889 - altair beforeProcessEpoch 27.859 ms/op 27.344 ms/op 1.02
mainnet_e81889 - altair processJustificationAndFinalization 8.2810 us/op 8.4440 us/op 0.98
mainnet_e81889 - altair processInactivityUpdates 6.2723 ms/op 3.7373 ms/op 1.68
mainnet_e81889 - altair processRewardsAndPenalties 26.472 ms/op 18.328 ms/op 1.44
mainnet_e81889 - altair processRegistryUpdates 857.00 ns/op 628.00 ns/op 1.36
mainnet_e81889 - altair processSlashings 235.00 ns/op 163.00 ns/op 1.44
mainnet_e81889 - altair processEth1DataReset 227.00 ns/op 158.00 ns/op 1.44
mainnet_e81889 - altair processEffectiveBalanceUpdates 3.4868 ms/op 3.0312 ms/op 1.15
mainnet_e81889 - altair processSlashingsReset 1.0620 us/op 803.00 ns/op 1.32
mainnet_e81889 - altair processRandaoMixesReset 1.6370 us/op 1.1080 us/op 1.48
mainnet_e81889 - altair processHistoricalRootsUpdate 244.00 ns/op 158.00 ns/op 1.54
mainnet_e81889 - altair processParticipationFlagUpdates 720.00 ns/op 484.00 ns/op 1.49
mainnet_e81889 - altair processSyncCommitteeUpdates 172.00 ns/op 133.00 ns/op 1.29
mainnet_e81889 - altair afterProcessEpoch 55.342 ms/op 43.416 ms/op 1.27
capella processEpoch - mainnet_e217614 896.72 ms/op 743.11 ms/op 1.21
mainnet_e217614 - capella beforeProcessEpoch 68.407 ms/op 63.587 ms/op 1.08
mainnet_e217614 - capella processJustificationAndFinalization 6.6610 us/op 5.9360 us/op 1.12
mainnet_e217614 - capella processInactivityUpdates 18.918 ms/op 15.602 ms/op 1.21
mainnet_e217614 - capella processRewardsAndPenalties 105.73 ms/op 97.072 ms/op 1.09
mainnet_e217614 - capella processRegistryUpdates 7.8490 us/op 5.6960 us/op 1.38
mainnet_e217614 - capella processSlashings 189.00 ns/op 165.00 ns/op 1.15
mainnet_e217614 - capella processEth1DataReset 221.00 ns/op 158.00 ns/op 1.40
mainnet_e217614 - capella processEffectiveBalanceUpdates 12.800 ms/op 17.494 ms/op 0.73
mainnet_e217614 - capella processSlashingsReset 934.00 ns/op 811.00 ns/op 1.15
mainnet_e217614 - capella processRandaoMixesReset 1.2700 us/op 1.1140 us/op 1.14
mainnet_e217614 - capella processHistoricalRootsUpdate 205.00 ns/op 164.00 ns/op 1.25
mainnet_e217614 - capella processParticipationFlagUpdates 585.00 ns/op 506.00 ns/op 1.16
mainnet_e217614 - capella afterProcessEpoch 140.43 ms/op 113.33 ms/op 1.24
phase0 processEpoch - mainnet_e58758 287.13 ms/op 238.95 ms/op 1.20
mainnet_e58758 - phase0 beforeProcessEpoch 51.785 ms/op 47.961 ms/op 1.08
mainnet_e58758 - phase0 processJustificationAndFinalization 6.2720 us/op 5.5230 us/op 1.14
mainnet_e58758 - phase0 processRewardsAndPenalties 23.729 ms/op 18.290 ms/op 1.30
mainnet_e58758 - phase0 processRegistryUpdates 3.8090 us/op 3.6980 us/op 1.03
mainnet_e58758 - phase0 processSlashings 207.00 ns/op 164.00 ns/op 1.26
mainnet_e58758 - phase0 processEth1DataReset 229.00 ns/op 157.00 ns/op 1.46
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.7957 ms/op 926.24 us/op 1.94
mainnet_e58758 - phase0 processSlashingsReset 1.0980 us/op 923.00 ns/op 1.19
mainnet_e58758 - phase0 processRandaoMixesReset 1.1580 us/op 1.1380 us/op 1.02
mainnet_e58758 - phase0 processHistoricalRootsUpdate 220.00 ns/op 239.00 ns/op 0.92
mainnet_e58758 - phase0 processParticipationRecordUpdates 946.00 ns/op 835.00 ns/op 1.13
mainnet_e58758 - phase0 afterProcessEpoch 39.183 ms/op 35.080 ms/op 1.12
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.8975 ms/op 1.8106 ms/op 1.05
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 2.9309 ms/op 2.6315 ms/op 1.11
altair processInactivityUpdates - 250000 normalcase 14.953 ms/op 14.474 ms/op 1.03
altair processInactivityUpdates - 250000 worstcase 14.492 ms/op 12.628 ms/op 1.15
phase0 processRegistryUpdates - 250000 normalcase 4.7760 us/op 4.2410 us/op 1.13
phase0 processRegistryUpdates - 250000 badcase_full_deposits 281.33 us/op 226.54 us/op 1.24
phase0 processRegistryUpdates - 250000 worstcase 0.5 118.58 ms/op 73.809 ms/op 1.61
altair processRewardsAndPenalties - 250000 normalcase 22.826 ms/op 19.118 ms/op 1.19
altair processRewardsAndPenalties - 250000 worstcase 21.948 ms/op 18.173 ms/op 1.21
phase0 getAttestationDeltas - 250000 normalcase 7.8218 ms/op 6.7601 ms/op 1.16
phase0 getAttestationDeltas - 250000 worstcase 8.3098 ms/op 6.8829 ms/op 1.21
phase0 processSlashings - 250000 worstcase 97.679 us/op 94.793 us/op 1.03
altair processSyncCommitteeUpdates - 250000 13.988 ms/op 12.259 ms/op 1.14
BeaconState.hashTreeRoot - No change 254.00 ns/op 188.00 ns/op 1.35
BeaconState.hashTreeRoot - 1 full validator 106.70 us/op 84.971 us/op 1.26
BeaconState.hashTreeRoot - 32 full validator 1.3068 ms/op 889.07 us/op 1.47
BeaconState.hashTreeRoot - 512 full validator 10.404 ms/op 7.5964 ms/op 1.37
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 135.82 us/op 102.65 us/op 1.32
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 2.1174 ms/op 2.5643 ms/op 0.83
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 23.817 ms/op 16.148 ms/op 1.47
BeaconState.hashTreeRoot - 1 balances 107.43 us/op 80.212 us/op 1.34
BeaconState.hashTreeRoot - 32 balances 1.3125 ms/op 790.75 us/op 1.66
BeaconState.hashTreeRoot - 512 balances 7.9983 ms/op 5.8619 ms/op 1.36
BeaconState.hashTreeRoot - 250000 balances 195.86 ms/op 152.16 ms/op 1.29
aggregationBits - 2048 els - zipIndexesInBitList 25.325 us/op 20.875 us/op 1.21
regular array get 100000 times 30.684 us/op 24.344 us/op 1.26
wrappedArray get 100000 times 31.071 us/op 24.344 us/op 1.28
arrayWithProxy get 100000 times 18.493 ms/op 13.548 ms/op 1.37
ssz.Root.equals 28.835 ns/op 23.363 ns/op 1.23
byteArrayEquals 28.780 ns/op 22.939 ns/op 1.25
Buffer.compare 12.070 ns/op 9.7470 ns/op 1.24
processSlot - 1 slots 16.159 us/op 11.097 us/op 1.46
processSlot - 32 slots 2.9457 ms/op 2.6479 ms/op 1.11
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 5.3887 ms/op 4.5570 ms/op 1.18
getCommitteeAssignments - req 1 vs - 250000 vc 2.6887 ms/op 1.8479 ms/op 1.45
getCommitteeAssignments - req 100 vs - 250000 vc 4.8444 ms/op 3.5810 ms/op 1.35
getCommitteeAssignments - req 1000 vs - 250000 vc 5.0910 ms/op 3.8310 ms/op 1.33
findModifiedValidators - 10000 modified validators 694.40 ms/op 452.34 ms/op 1.54
findModifiedValidators - 1000 modified validators 545.34 ms/op 407.60 ms/op 1.34
findModifiedValidators - 100 modified validators 399.64 ms/op 340.97 ms/op 1.17
findModifiedValidators - 10 modified validators 292.26 ms/op 185.17 ms/op 1.58
findModifiedValidators - 1 modified validators 288.94 ms/op 171.30 ms/op 1.69
findModifiedValidators - no difference 257.49 ms/op 173.10 ms/op 1.49
migrate state 1500000 validators, 3400 modified, 2000 new 1.0714 s/op 1.0180 s/op 1.05
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 5.8100 ns/op 4.1200 ns/op 1.41
state getBlockRootAtSlot - 250000 vs - 7PWei 644.22 ns/op 487.86 ns/op 1.32
computeProposerIndex 100000 validators 1.9984 ms/op 1.4998 ms/op 1.33
getNextSyncCommitteeIndices 1000 validators 156.13 ms/op 116.83 ms/op 1.34
getNextSyncCommitteeIndices 10000 validators 156.34 ms/op 120.67 ms/op 1.30
getNextSyncCommitteeIndices 100000 validators 154.79 ms/op 120.06 ms/op 1.29
computeProposers - vc 250000 754.28 us/op 606.89 us/op 1.24
computeEpochShuffling - vc 250000 51.149 ms/op 41.187 ms/op 1.24
getNextSyncCommittee - vc 250000 12.867 ms/op 10.766 ms/op 1.20
nodejs block root to RootHex using toHex 169.51 ns/op 136.25 ns/op 1.24
nodejs block root to RootHex using toRootHex 110.14 ns/op 82.480 ns/op 1.34
nodejs fromHex(blob) 272.82 us/op 381.54 us/op 0.72
nodejs fromHexInto(blob) 879.92 us/op 709.08 us/op 1.24
nodejs block root to RootHex using the deprecated toHexString 652.74 ns/op 539.76 ns/op 1.21
nodejs byteArrayEquals 32 bytes (block root) 35.158 ns/op 28.225 ns/op 1.25
nodejs byteArrayEquals 48 bytes (pubkey) 49.239 ns/op 40.416 ns/op 1.22
nodejs byteArrayEquals 96 bytes (signature) 50.028 ns/op 39.569 ns/op 1.26
nodejs byteArrayEquals 1024 bytes 55.633 ns/op 44.105 ns/op 1.26
nodejs byteArrayEquals 131072 bytes (blob) 2.2499 us/op 1.8452 us/op 1.22
browser block root to RootHex using toHex 331.22 ns/op 161.86 ns/op 2.05
browser block root to RootHex using toRootHex 189.29 ns/op 152.34 ns/op 1.24
browser fromHex(blob) 1.5195 ms/op 1.0799 ms/op 1.41
browser fromHexInto(blob) 862.78 us/op 709.67 us/op 1.22
browser block root to RootHex using the deprecated toHexString 664.38 ns/op 392.64 ns/op 1.69
browser byteArrayEquals 32 bytes (block root) 37.395 ns/op 31.459 ns/op 1.19
browser byteArrayEquals 48 bytes (pubkey) 53.294 ns/op 43.991 ns/op 1.21
browser byteArrayEquals 96 bytes (signature) 105.44 ns/op 85.454 ns/op 1.23
browser byteArrayEquals 1024 bytes 992.76 ns/op 807.36 ns/op 1.23
browser byteArrayEquals 131072 bytes (blob) 124.33 us/op 109.88 us/op 1.13

by benchmarkbot/action

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