Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: v1.26.0 release #7423

Merged
merged 60 commits into from
Feb 4, 2025
Merged

chore: v1.26.0 release #7423

merged 60 commits into from
Feb 4, 2025

Conversation

philknows
Copy link
Member

Motivation

Supersedes #7417 to target correct branch.
Marks the release of v1.26.0

twoeths and others added 30 commits December 16, 2024 22:21
* feat: refactor SeenAttestationDatas for SinlgeAttestation

* feat: add SingleAttestation type

* feat: ssz utils for SingleAttestation

* feat: implement SingleAttestation for network processor and gossip queue

* fix: add SingleAttestation for phase0 and altair

* fix: define and publish SingleAttestation for all forks

* Fix electra SingleAttestation type mapping

* Update api and eventstream

* Update validator client

* Update attestation unit test variables

* chore: SeenAttestationDatas unit tests

* chore: sszBytes unit tests

* Use CommitteeIndex type

* refactor: get/set functions of SeenAttestationDatas

* Always emit single_attestation event

* Validation use new SeenAttDataKey

* validateAttestationNoSignatureCheck first draft

* Add aggregation and committee bits to cache

* AttestationPool accepts SingleAttestation

* Update SingleAttestation event stream

* Update aggregate validation

* Polish

* Lint

* fix check-types

* Remove committee bit cache

* Update attestation pool unit tests

* Lint

* Remove unused committeeBits from attestation data cache

* Fix spec reference comment

* fix: getSeenAttDataKeyFromSignedAggregateAndProof

* Update beacon-api spec tests to run against v3.0.0-alpha.9

---------

Co-authored-by: Nico Flaig <[email protected]>
Co-authored-by: NC <[email protected]>
…7256)

* fix: select correct gossip type when publishing single attestation

* Add SingleAttestation as alias to phase0 ssz types
* fix: remove aggregation bits from seen attestation cache

* Allow passing null as aggregationBits to test pre-electra case

* Only create aggregationBits once for the first attestation

* Avoid second getSingleTrueBit call
…#7261)

* fix: return correct type from attestation validation when using cache

* Remove type casts

* Remove unused import

* Use ternary operator instead of if-else

* Fix aggregationBits type issue

* Add comment
* initial commit

* Address comment

* Lint
* Rename PartialPendingWithdrawal field

* do not change creds type on consolidation

* Use validator EB to process pending consolidation

* lint
* Fix execution request parsing

* lint

* Rename type

---------

Co-authored-by: Nico Flaig <[email protected]>
…685 (#7330)

* test: ensure execution requests are de-/serialized according to EIP-7685

* Fix format

* Add test case where deposits, withdrawals and consolidations are all empty

* Remove map
* Init

* Add reqresp v2 definition

* Update validateGossipBlock

* Partial commit

* Reqresp. Add todos

* polish

* Fork-aware requestSszTypeByMethod

* Fixed minimal constants

* Bump config test version

* Update blob sidecar subnet computation

* Pass proper commitment limit to block gossip error

* Update blob sidecar index check

* Lint

* Update kzg unit test

* Subscribe to correct number of blob sidecar subnets

* Refactor constants getter to constantsHelper

* address comment

* Pass fork as first arg

* Update packages/state-transition/src/block/processExecutionPayload.ts

* refactor: move helper to get max blobs per block to fork config (#7322)

* Simplify type cast

---------

Co-authored-by: Nico Flaig <[email protected]>
chore: skip fulu spec tests
* fix: revert BlobSidecarsByRoot/Range version bump

* Remove version check from handler

* Remove unused imports
* feat: include reason in block production selection logs

* Update comment
* chore: update lighthouse to latest unstable version

* Remove unsupported CLI flags

* Update to deposit_contract_block.txt

* Update to deposit_contract_block.txt for validator
* Remove stale todo

* some refactoring

* Readd comment, seems somewhat useful

* Add alias for getSlotFromOffset

* Use parseInt instead of Number

* Update return type
* feat: check gas limit in header received from builder

* Add constant for gas limit adjustment factor

* Relax header gas limit check to lower / upper bound

* Include parent and target gas limit in warning log

* Add note on why validator pubkey used as key instead of index
…nt (#7368)

* fix: use correct fork constants to limit max request blocks/blobs count

* Add helper to get max request blob sidecars by fork

* Add a more generic getter to fork config

* Formatting

* Revert "Formatting"

This reverts commit 28af071.

* Revert "Add a more generic getter to fork config"

This reverts commit 40b51d2.
nflaig and others added 20 commits January 23, 2025 16:44
**Motivation**

We dropped CJS support 🎉 fixed some file resolution issues causing
wrong hasher to be loaded and got some clean named imports for hasher
instead of having to dig it out of the libs folder.

**Description**

Update ssz and accompanying packages to v1.0.0
**Motivation**

Loading an incorrect hasher can cause strange regressions in performance
which might not be immediately obvious, best to catch this at startup
and exit as there is no reason for the beacon node to use any other
hasher besides as-sha256 (at least right now).

**Description**

Assert as-sha256 is used as hasher by ssz
**Motivation**

E2E tests are failing due to this

**Description**

Correctly set ssz hasher in prover CLI
This avoids an issue we had previously where configs that extend mainnet
preset would inherit wrong parameters. This just ensures this cannot
happen in case we those will be forked after mainnet.
The network is based on devnet-4 specs and it's no longer possible to
join it using our latest unstable since we merged devnet-5 changes.

For users that still wanna experiment on Mekong it's possible to use our
[1.25.0](https://github.com/ChainSafe/lodestar/releases/tag/v1.25.0)
release.
Just some cleanup to use multi fork type for `IndexedAttestation` if a
function should handle both phase0 and electra.
Run against latest spec, there are a bunch of good new test cases (eg.
ethereum/consensus-specs#4090)
**Motivation**

We've seen a lot of batch download errors when trying to sync a node
from far back on devnet-5
```
Jan-27 16:07:08.044[sync]          verbose: Batch download error id=Finalized, startEpoch=97, status=Downloading - Missing blobSidecars for blockSlot=3104 with blobKzgCommitmentsLen=9 blobSidecars=6
Error: Missing blobSidecars for blockSlot=3104 with blobKzgCommitmentsLen=9 blobSidecars=6
```
but from the logs it's hard to tell which peer actually sent the invalid
response and logs might get mixed up if we request data from multiple
peers at the same time.

**Description**

Include peer id in batch download logs. I opted to only include short
peer id (eg. `peer=16...UNpy88`) as this should be sufficient to see to
which request it belongs and based on that determine the client.
…st-electra (#7405)

**Motivation**

The by peer rate limiting needs to be increased post-electra from 768 to
1152 as otherwise we might incorrectly rate limit our peers.

**Description**

Use correct fork constants to apply by peer rate limiting on
BlobSidecarsByRoot/Range

- makes `rateLimitQuotas` fork-aware, it will apply the new rate
limiting during protocol registration of the next fork
- pass fork from protocol registration down to rate limiter quotas to
allow accessing the fork for which it is registered
- always apply new rate limits during registration even if protocol is
already registered
**Motivation**

See ethereum/beacon-APIs#405 and
ethereum/beacon-APIs#349 for further details
and rationale for why we want two different block events.

**Description**

Emit `block_gossip` SSE event when receiving a block through gossip or
api that passes validation rules of the `beacon_block` topic.

On the api the validation might be skipped if the block was produced
locally or a different broadcast validation is requested by the client
but by default it will use gossip validation rules.

Closes #6470
…7409)

Since #7405 we have access to
fork name and can apply correct rate limits to BeaconBlocksByRoot/Range,
we wanna use `MAX_REQUEST_BLOCKS_DENEB` consistently for both methods
since Deneb.
Update various places to handle electra attester slashing type:
- AttesterSlashingRepository
- submitPoolAttesterSlashingsV2
- opPool
- GossipType
- processAttesterSlashing

---------

Co-authored-by: Nico Flaig <[email protected]>
We need to consistently pass fork info to `requestSszTypeByMethod` as
otherwise it might use the incorrect type, eg. in case of Electra we
would use wrong list limit for `BlobSidecarsByRoot` method in some
places.

This addresses last outstanding item from
#7309.
**Motivation**

- Part of an effort to begin simplifying our block import process
- Investigating the code, it appears we are storing serialized data
alongside the deserialized data.
- We do this so that we don't pay for reserialization
- This cached serialized data is currently only used for blocks, to
avoid reserializatoin when storing to disk
- Passing optional serialized data everywhere is cumbersome and
introduces cognitive burden
- It can be accomplished via a WeakMap instead

**Description**
- Use WeakMap to store block serialized bytes
  - add to cache after gossip validation
- blobBytes were not used anywhere before, this PR doesn't reintroduce
them
**Motivation**

- the dependency we use (`@node-rs/crc32`) was very out of date and
still relied explicitly on `Buffer` rather than allowing `Uint8Array`.

**Description**

- bump dependency version to latest
Bumps [undici](https://github.com/nodejs/undici) from 5.28.4 to 5.28.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/nodejs/undici/releases">undici's
releases</a>.</em></p>
<blockquote>
<h2>v5.28.5</h2>
<h1>⚠️ Security Release ⚠️</h1>
<p>Fixes CVE CVE-2025-22150 <a
href="https://github.com/nodejs/undici/security/advisories/GHSA-c76h-2ccp-4975">https://github.com/nodejs/undici/security/advisories/GHSA-c76h-2ccp-4975</a>
(embargoed until 22-01-2025).</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/nodejs/undici/compare/v5.28.4...v5.28.5">https://github.com/nodejs/undici/compare/v5.28.4...v5.28.5</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/nodejs/undici/commit/6139ed2e0c787853243de58ef7c4301b26ca66f2"><code>6139ed2</code></a>
Bumped v5.28.5</li>
<li><a
href="https://github.com/nodejs/undici/commit/711e20772764c29f6622ddc937c63b6eefdf07d0"><code>711e207</code></a>
Backport of c2d78cd</li>
<li>See full diff in <a
href="https://github.com/nodejs/undici/compare/v5.28.4...v5.28.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=undici&package-manager=npm_and_yarn&previous-version=5.28.4&new-version=5.28.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/ChainSafe/lodestar/network/alerts).

</details>

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…oard (#7416)

Further update and improve getBlobs metrics collection and dashboard
based on review of the generated metrics and discussions with @philknows
on them

example dash


![image](https://github.com/user-attachments/assets/9afff12e-4287-4ce6-9eee-d58857f7e8ca)
**Motivation**

Revert changes to the benchmark, so all tests are included. 

**Description**

- Revert changes to the benchmark skip

**Steps to test or reproduce**

- Run all tests

Closes #7380
@philknows philknows mentioned this pull request Feb 3, 2025
…#7420)

**Motivation**

Based on observations from mainnet nodes, it seems like we reject
builder blocks in some cases either due to not being sent within cutoff
time or due to timeout on the api call but looking at the response times
these have been timely. The reason why those were rejected is either we
started the block production race too late into the slot, which is
mostly due to the fact that we take too much time to produce the common
block body or the timeout was handled by the node with a delay, both of
these cases are likely caused by event loop lag either due to GC or
processing something else.

See
[discord](https://discord.com/channels/593655374469660673/1331991458152058991/1335576180815958088)
for details.

**Description**

Increase block production timeouts to account for event loop lag
Copy link

codecov bot commented Feb 3, 2025

Codecov Report

Attention: Patch coverage is 26.08000% with 462 lines in your changes missing coverage. Please review.

Project coverage is 50.26%. Comparing base (191f2f0) to head (32fa092).
Report is 61 commits behind head on stable.

Additional details and impacted files
@@            Coverage Diff             @@
##           stable    #7423      +/-   ##
==========================================
+ Coverage   48.81%   50.26%   +1.44%     
==========================================
  Files         601      602       +1     
  Lines       40243    40376     +133     
  Branches     2066     2206     +140     
==========================================
+ Hits        19646    20293     +647     
+ Misses      20560    20043     -517     
- Partials       37       40       +3     

Copy link
Contributor

github-actions bot commented Feb 3, 2025

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 5bf330c Previous: null Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 961.75 us/op
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 34.593 us/op
BLS verify - blst 909.37 us/op
BLS verifyMultipleSignatures 3 - blst 1.2563 ms/op
BLS verifyMultipleSignatures 8 - blst 1.6777 ms/op
BLS verifyMultipleSignatures 32 - blst 4.9991 ms/op
BLS verifyMultipleSignatures 64 - blst 9.2136 ms/op
BLS verifyMultipleSignatures 128 - blst 17.571 ms/op
BLS deserializing 10000 signatures 703.17 ms/op
BLS deserializing 100000 signatures 7.0784 s/op
BLS verifyMultipleSignatures - same message - 3 - blst 992.70 us/op
BLS verifyMultipleSignatures - same message - 8 - blst 1.0382 ms/op
BLS verifyMultipleSignatures - same message - 32 - blst 1.7799 ms/op
BLS verifyMultipleSignatures - same message - 64 - blst 2.7527 ms/op
BLS verifyMultipleSignatures - same message - 128 - blst 4.5681 ms/op
BLS aggregatePubkeys 32 - blst 19.935 us/op
BLS aggregatePubkeys 128 - blst 71.318 us/op
notSeenSlots=1 numMissedVotes=1 numBadVotes=10 53.524 ms/op
notSeenSlots=1 numMissedVotes=0 numBadVotes=4 53.356 ms/op
notSeenSlots=2 numMissedVotes=1 numBadVotes=10 37.951 ms/op
getSlashingsAndExits - default max 75.430 us/op
getSlashingsAndExits - 2k 342.67 us/op
proposeBlockBody type=full, size=empty 5.1991 ms/op
isKnown best case - 1 super set check 215.00 ns/op
isKnown normal case - 2 super set checks 213.00 ns/op
isKnown worse case - 16 super set checks 213.00 ns/op
InMemoryCheckpointStateCache - add get delete 2.4540 us/op
validate api signedAggregateAndProof - struct 1.7558 ms/op
validate gossip signedAggregateAndProof - struct 1.5704 ms/op
batch validate gossip attestation - vc 640000 - chunk 32 127.04 us/op
batch validate gossip attestation - vc 640000 - chunk 64 107.29 us/op
batch validate gossip attestation - vc 640000 - chunk 128 107.24 us/op
batch validate gossip attestation - vc 640000 - chunk 256 112.51 us/op
pickEth1Vote - no votes 977.66 us/op
pickEth1Vote - max votes 8.5322 ms/op
pickEth1Vote - Eth1Data hashTreeRoot value x2048 16.059 ms/op
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 23.828 ms/op
pickEth1Vote - Eth1Data fastSerialize value x2048 444.79 us/op
pickEth1Vote - Eth1Data fastSerialize tree x2048 2.2663 ms/op
bytes32 toHexString 372.00 ns/op
bytes32 Buffer.toString(hex) 241.00 ns/op
bytes32 Buffer.toString(hex) from Uint8Array 326.00 ns/op
bytes32 Buffer.toString(hex) + 0x 245.00 ns/op
Object access 1 prop 0.12000 ns/op
Map access 1 prop 0.12100 ns/op
Object get x1000 5.8380 ns/op
Map get x1000 6.2350 ns/op
Object set x1000 29.132 ns/op
Map set x1000 19.210 ns/op
Return object 10000 times 0.28890 ns/op
Throw Error 10000 times 4.4646 us/op
toHex 131.82 ns/op
Buffer.from 120.19 ns/op
shared Buffer 78.391 ns/op
fastMsgIdFn sha256 / 200 bytes 2.1650 us/op
fastMsgIdFn h32 xxhash / 200 bytes 206.00 ns/op
fastMsgIdFn h64 xxhash / 200 bytes 261.00 ns/op
fastMsgIdFn sha256 / 1000 bytes 7.6300 us/op
fastMsgIdFn h32 xxhash / 1000 bytes 337.00 ns/op
fastMsgIdFn h64 xxhash / 1000 bytes 334.00 ns/op
fastMsgIdFn sha256 / 10000 bytes 65.991 us/op
fastMsgIdFn h32 xxhash / 10000 bytes 1.8290 us/op
fastMsgIdFn h64 xxhash / 10000 bytes 1.1880 us/op
send data - 1000 256B messages 11.858 ms/op
send data - 1000 512B messages 15.579 ms/op
send data - 1000 1024B messages 30.264 ms/op
send data - 1000 1200B messages 23.527 ms/op
send data - 1000 2048B messages 25.618 ms/op
send data - 1000 4096B messages 33.136 ms/op
send data - 1000 16384B messages 65.356 ms/op
send data - 1000 65536B messages 222.50 ms/op
enrSubnets - fastDeserialize 64 bits 876.00 ns/op
enrSubnets - ssz BitVector 64 bits 318.00 ns/op
enrSubnets - fastDeserialize 4 bits 120.00 ns/op
enrSubnets - ssz BitVector 4 bits 319.00 ns/op
prioritizePeers score -10:0 att 32-0.1 sync 2-0 117.33 us/op
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 143.04 us/op
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 203.66 us/op
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 380.10 us/op
prioritizePeers score 0:0 att 64-1 sync 4-1 466.40 us/op
array of 16000 items push then shift 1.6234 us/op
LinkedList of 16000 items push then shift 7.1410 ns/op
array of 16000 items push then pop 76.679 ns/op
LinkedList of 16000 items push then pop 7.0390 ns/op
array of 24000 items push then shift 2.4122 us/op
LinkedList of 24000 items push then shift 7.1980 ns/op
array of 24000 items push then pop 97.556 ns/op
LinkedList of 24000 items push then pop 6.5910 ns/op
intersect bitArray bitLen 8 6.1140 ns/op
intersect array and set length 8 36.173 ns/op
intersect bitArray bitLen 128 28.532 ns/op
intersect array and set length 128 592.28 ns/op
bitArray.getTrueBitIndexes() bitLen 128 983.00 ns/op
bitArray.getTrueBitIndexes() bitLen 248 1.7400 us/op
bitArray.getTrueBitIndexes() bitLen 512 3.5950 us/op
Buffer.concat 32 items 613.00 ns/op
Uint8Array.set 32 items 1.9230 us/op
Buffer.copy 2.1870 us/op
Uint8Array.set - with subarray 2.0410 us/op
Uint8Array.set - without subarray 1.6870 us/op
getUint32 - dataview 204.00 ns/op
getUint32 - manual 114.00 ns/op
Set add up to 64 items then delete first 2.0006 us/op
OrderedSet add up to 64 items then delete first 3.0773 us/op
Set add up to 64 items then delete last 2.3871 us/op
OrderedSet add up to 64 items then delete last 3.3920 us/op
Set add up to 64 items then delete middle 2.3814 us/op
OrderedSet add up to 64 items then delete middle 4.9246 us/op
Set add up to 128 items then delete first 4.7210 us/op
OrderedSet add up to 128 items then delete first 7.4216 us/op
Set add up to 128 items then delete last 4.7185 us/op
OrderedSet add up to 128 items then delete last 6.9096 us/op
Set add up to 128 items then delete middle 4.6221 us/op
OrderedSet add up to 128 items then delete middle 13.084 us/op
Set add up to 256 items then delete first 9.7524 us/op
OrderedSet add up to 256 items then delete first 15.063 us/op
Set add up to 256 items then delete last 9.1876 us/op
OrderedSet add up to 256 items then delete last 13.691 us/op
Set add up to 256 items then delete middle 9.1376 us/op
OrderedSet add up to 256 items then delete middle 39.193 us/op
transfer serialized Status (84 B) 2.2780 us/op
copy serialized Status (84 B) 1.1810 us/op
transfer serialized SignedVoluntaryExit (112 B) 2.2620 us/op
copy serialized SignedVoluntaryExit (112 B) 1.1790 us/op
transfer serialized ProposerSlashing (416 B) 2.2840 us/op
copy serialized ProposerSlashing (416 B) 1.2320 us/op
transfer serialized Attestation (485 B) 2.3000 us/op
copy serialized Attestation (485 B) 1.2520 us/op
transfer serialized AttesterSlashing (33232 B) 2.7360 us/op
copy serialized AttesterSlashing (33232 B) 3.6470 us/op
transfer serialized Small SignedBeaconBlock (128000 B) 3.1340 us/op
copy serialized Small SignedBeaconBlock (128000 B) 9.0410 us/op
transfer serialized Avg SignedBeaconBlock (200000 B) 3.7060 us/op
copy serialized Avg SignedBeaconBlock (200000 B) 12.730 us/op
transfer serialized BlobsSidecar (524380 B) 3.9230 us/op
copy serialized BlobsSidecar (524380 B) 57.543 us/op
transfer serialized Big SignedBeaconBlock (1000000 B) 3.8010 us/op
copy serialized Big SignedBeaconBlock (1000000 B) 111.30 us/op
pass gossip attestations to forkchoice per slot 2.7235 ms/op
forkChoice updateHead vc 100000 bc 64 eq 0 445.16 us/op
forkChoice updateHead vc 600000 bc 64 eq 0 2.6854 ms/op
forkChoice updateHead vc 1000000 bc 64 eq 0 4.5567 ms/op
forkChoice updateHead vc 600000 bc 320 eq 0 2.7805 ms/op
forkChoice updateHead vc 600000 bc 1200 eq 0 2.7256 ms/op
forkChoice updateHead vc 600000 bc 7200 eq 0 3.0548 ms/op
forkChoice updateHead vc 600000 bc 64 eq 1000 10.145 ms/op
forkChoice updateHead vc 600000 bc 64 eq 10000 10.058 ms/op
forkChoice updateHead vc 600000 bc 64 eq 300000 13.380 ms/op
computeDeltas 500000 validators 300 proto nodes 3.8631 ms/op
computeDeltas 500000 validators 1200 proto nodes 3.9006 ms/op
computeDeltas 500000 validators 7200 proto nodes 3.9398 ms/op
computeDeltas 750000 validators 300 proto nodes 5.8250 ms/op
computeDeltas 750000 validators 1200 proto nodes 5.7829 ms/op
computeDeltas 750000 validators 7200 proto nodes 5.8580 ms/op
computeDeltas 1400000 validators 300 proto nodes 10.907 ms/op
computeDeltas 1400000 validators 1200 proto nodes 10.803 ms/op
computeDeltas 1400000 validators 7200 proto nodes 11.502 ms/op
computeDeltas 2100000 validators 300 proto nodes 18.378 ms/op
computeDeltas 2100000 validators 1200 proto nodes 17.449 ms/op
computeDeltas 2100000 validators 7200 proto nodes 20.170 ms/op
altair processAttestation - 250000 vs - 7PWei normalcase 3.3914 ms/op
altair processAttestation - 250000 vs - 7PWei worstcase 4.3449 ms/op
altair processAttestation - setStatus - 1/6 committees join 157.59 us/op
altair processAttestation - setStatus - 1/3 committees join 290.03 us/op
altair processAttestation - setStatus - 1/2 committees join 393.95 us/op
altair processAttestation - setStatus - 2/3 committees join 610.98 us/op
altair processAttestation - setStatus - 4/5 committees join 760.64 us/op
altair processAttestation - setStatus - 100% committees join 837.25 us/op
altair processBlock - 250000 vs - 7PWei normalcase 10.187 ms/op
altair processBlock - 250000 vs - 7PWei normalcase hashState 46.798 ms/op
altair processBlock - 250000 vs - 7PWei worstcase 50.266 ms/op
altair processBlock - 250000 vs - 7PWei worstcase hashState 110.36 ms/op
phase0 processBlock - 250000 vs - 7PWei normalcase 4.0541 ms/op
phase0 processBlock - 250000 vs - 7PWei worstcase 30.014 ms/op
altair processEth1Data - 250000 vs - 7PWei normalcase 585.74 us/op
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 10.505 us/op
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 47.445 us/op
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 13.660 us/op
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 10.051 us/op
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 182.59 us/op
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 1.0654 ms/op
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.4651 ms/op
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.4358 ms/op
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 4.2524 ms/op
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.4941 ms/op
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.4780 ms/op
Tree 40 250000 create 748.08 ms/op
Tree 40 250000 get(125000) 183.05 ns/op
Tree 40 250000 set(125000) 2.7226 us/op
Tree 40 250000 toArray() 23.422 ms/op
Tree 40 250000 iterate all - toArray() + loop 23.164 ms/op
Tree 40 250000 iterate all - get(i) 62.373 ms/op
Array 250000 create 2.7332 ms/op
Array 250000 clone - spread 1.8495 ms/op
Array 250000 get(125000) 0.42200 ns/op
Array 250000 set(125000) 0.44500 ns/op
Array 250000 iterate all - loop 92.365 us/op
phase0 afterProcessEpoch - 250000 vs - 7PWei 53.786 ms/op
Array.fill - length 1000000 8.0966 ms/op
Array push - length 1000000 21.110 ms/op
Array.get 0.28684 ns/op
Uint8Array.get 0.45635 ns/op
phase0 beforeProcessEpoch - 250000 vs - 7PWei 20.015 ms/op
altair processEpoch - mainnet_e81889 327.28 ms/op
mainnet_e81889 - altair beforeProcessEpoch 26.181 ms/op
mainnet_e81889 - altair processJustificationAndFinalization 12.416 us/op
mainnet_e81889 - altair processInactivityUpdates 11.044 ms/op
mainnet_e81889 - altair processRewardsAndPenalties 66.979 ms/op
mainnet_e81889 - altair processRegistryUpdates 1.7810 us/op
mainnet_e81889 - altair processSlashings 331.00 ns/op
mainnet_e81889 - altair processEth1DataReset 249.00 ns/op
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.3024 ms/op
mainnet_e81889 - altair processSlashingsReset 918.00 ns/op
mainnet_e81889 - altair processRandaoMixesReset 1.6170 us/op
mainnet_e81889 - altair processHistoricalRootsUpdate 182.00 ns/op
mainnet_e81889 - altair processParticipationFlagUpdates 547.00 ns/op
mainnet_e81889 - altair processSyncCommitteeUpdates 141.00 ns/op
mainnet_e81889 - altair afterProcessEpoch 57.086 ms/op
capella processEpoch - mainnet_e217614 1.2547 s/op
mainnet_e217614 - capella beforeProcessEpoch 84.446 ms/op
mainnet_e217614 - capella processJustificationAndFinalization 6.0780 us/op
mainnet_e217614 - capella processInactivityUpdates 19.192 ms/op
mainnet_e217614 - capella processRewardsAndPenalties 220.98 ms/op
mainnet_e217614 - capella processRegistryUpdates 7.1250 us/op
mainnet_e217614 - capella processSlashings 337.00 ns/op
mainnet_e217614 - capella processEth1DataReset 362.00 ns/op
mainnet_e217614 - capella processEffectiveBalanceUpdates 26.105 ms/op
mainnet_e217614 - capella processSlashingsReset 2.2910 us/op
mainnet_e217614 - capella processRandaoMixesReset 2.2080 us/op
mainnet_e217614 - capella processHistoricalRootsUpdate 403.00 ns/op
mainnet_e217614 - capella processParticipationFlagUpdates 1.3420 us/op
mainnet_e217614 - capella afterProcessEpoch 162.38 ms/op
phase0 processEpoch - mainnet_e58758 377.50 ms/op
mainnet_e58758 - phase0 beforeProcessEpoch 110.19 ms/op
mainnet_e58758 - phase0 processJustificationAndFinalization 8.6330 us/op
mainnet_e58758 - phase0 processRewardsAndPenalties 40.764 ms/op
mainnet_e58758 - phase0 processRegistryUpdates 3.3120 us/op
mainnet_e58758 - phase0 processSlashings 185.00 ns/op
mainnet_e58758 - phase0 processEth1DataReset 183.00 ns/op
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.1179 ms/op
mainnet_e58758 - phase0 processSlashingsReset 1.1190 us/op
mainnet_e58758 - phase0 processRandaoMixesReset 1.9070 us/op
mainnet_e58758 - phase0 processHistoricalRootsUpdate 210.00 ns/op
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.2270 us/op
mainnet_e58758 - phase0 afterProcessEpoch 45.578 ms/op
phase0 processEffectiveBalanceUpdates - 250000 normalcase 2.7891 ms/op
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 5.2460 ms/op
altair processInactivityUpdates - 250000 normalcase 19.196 ms/op
altair processInactivityUpdates - 250000 worstcase 20.852 ms/op
phase0 processRegistryUpdates - 250000 normalcase 16.655 us/op
phase0 processRegistryUpdates - 250000 badcase_full_deposits 374.25 us/op
phase0 processRegistryUpdates - 250000 worstcase 0.5 145.09 ms/op
altair processRewardsAndPenalties - 250000 normalcase 42.884 ms/op
altair processRewardsAndPenalties - 250000 worstcase 45.153 ms/op
phase0 getAttestationDeltas - 250000 normalcase 18.970 ms/op
phase0 getAttestationDeltas - 250000 worstcase 6.9805 ms/op
phase0 processSlashings - 250000 worstcase 132.07 us/op
altair processSyncCommitteeUpdates - 250000 133.14 ms/op
BeaconState.hashTreeRoot - No change 219.00 ns/op
BeaconState.hashTreeRoot - 1 full validator 95.904 us/op
BeaconState.hashTreeRoot - 32 full validator 759.52 us/op
BeaconState.hashTreeRoot - 512 full validator 9.8561 ms/op
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 103.86 us/op
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.4620 ms/op
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 25.619 ms/op
BeaconState.hashTreeRoot - 1 balances 79.861 us/op
BeaconState.hashTreeRoot - 32 balances 1.0860 ms/op
BeaconState.hashTreeRoot - 512 balances 10.291 ms/op
BeaconState.hashTreeRoot - 250000 balances 164.81 ms/op
aggregationBits - 2048 els - zipIndexesInBitList 22.368 us/op
byteArrayEquals 32 55.198 ns/op
Buffer.compare 32 17.526 ns/op
byteArrayEquals 1024 1.6279 us/op
Buffer.compare 1024 26.313 ns/op
byteArrayEquals 16384 25.873 us/op
Buffer.compare 16384 203.18 ns/op
byteArrayEquals 123687377 191.94 ms/op
Buffer.compare 123687377 10.243 ms/op
byteArrayEquals 32 - diff last byte 53.780 ns/op
Buffer.compare 32 - diff last byte 17.560 ns/op
byteArrayEquals 1024 - diff last byte 1.6253 us/op
Buffer.compare 1024 - diff last byte 26.507 ns/op
byteArrayEquals 16384 - diff last byte 25.837 us/op
Buffer.compare 16384 - diff last byte 206.80 ns/op
byteArrayEquals 123687377 - diff last byte 194.08 ms/op
Buffer.compare 123687377 - diff last byte 8.2299 ms/op
byteArrayEquals 32 - random bytes 5.1270 ns/op
Buffer.compare 32 - random bytes 17.457 ns/op
byteArrayEquals 1024 - random bytes 5.2130 ns/op
Buffer.compare 1024 - random bytes 17.471 ns/op
byteArrayEquals 16384 - random bytes 5.2170 ns/op
Buffer.compare 16384 - random bytes 17.487 ns/op
byteArrayEquals 123687377 - random bytes 6.3700 ns/op
Buffer.compare 123687377 - random bytes 18.410 ns/op
regular array get 100000 times 33.172 us/op
wrappedArray get 100000 times 33.404 us/op
arrayWithProxy get 100000 times 13.451 ms/op
ssz.Root.equals 46.626 ns/op
byteArrayEquals 45.720 ns/op
Buffer.compare 10.339 ns/op
processSlot - 1 slots 10.460 us/op
processSlot - 32 slots 1.9961 ms/op
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 51.858 ms/op
getCommitteeAssignments - req 1 vs - 250000 vc 2.1370 ms/op
getCommitteeAssignments - req 100 vs - 250000 vc 4.1870 ms/op
getCommitteeAssignments - req 1000 vs - 250000 vc 4.5052 ms/op
findModifiedValidators - 10000 modified validators 784.71 ms/op
findModifiedValidators - 1000 modified validators 784.61 ms/op
findModifiedValidators - 100 modified validators 186.59 ms/op
findModifiedValidators - 10 modified validators 137.22 ms/op
findModifiedValidators - 1 modified validators 135.80 ms/op
findModifiedValidators - no difference 163.24 ms/op
compare ViewDUs 6.2087 s/op
compare each validator Uint8Array 1.5789 s/op
compare ViewDU to Uint8Array 1.1183 s/op
migrate state 1000000 validators, 24 modified, 0 new 896.87 ms/op
migrate state 1000000 validators, 1700 modified, 1000 new 1.1768 s/op
migrate state 1000000 validators, 3400 modified, 2000 new 1.2771 s/op
migrate state 1500000 validators, 24 modified, 0 new 900.85 ms/op
migrate state 1500000 validators, 1700 modified, 1000 new 1.1624 s/op
migrate state 1500000 validators, 3400 modified, 2000 new 1.3310 s/op
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.2600 ns/op
state getBlockRootAtSlot - 250000 vs - 7PWei 561.99 ns/op
computeProposers - vc 250000 7.5930 ms/op
computeEpochShuffling - vc 250000 42.789 ms/op
getNextSyncCommittee - vc 250000 153.08 ms/op
computeSigningRoot for AttestationData 25.993 us/op
hash AttestationData serialized data then Buffer.toString(base64) 1.5635 us/op
toHexString serialized data 1.0769 us/op
Buffer.toString(base64) 152.92 ns/op
nodejs block root to RootHex using toHex 152.68 ns/op
nodejs block root to RootHex using toRootHex 90.548 ns/op
browser block root to RootHex using the deprecated toHexString 250.14 ns/op
browser block root to RootHex using toHex 172.23 ns/op
browser block root to RootHex using toRootHex 161.77 ns/op

by benchmarkbot/action

@philknows philknows marked this pull request as ready for review February 4, 2025 18:13
@philknows philknows requested a review from a team as a code owner February 4, 2025 18:13
@philknows philknows merged commit 54229fd into stable Feb 4, 2025
31 checks passed
@philknows philknows deleted the rc/v1.26.0 branch February 4, 2025 18:33
@wemeetagain
Copy link
Member

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

8 participants