Skip to content

feat: add next fork digest (nfd) entry to ENR#8023

Merged
ensi321 merged 5 commits into
unstablefrom
nflaig/next-fork-digest
Jul 17, 2025
Merged

feat: add next fork digest (nfd) entry to ENR#8023
ensi321 merged 5 commits into
unstablefrom
nflaig/next-fork-digest

Conversation

@nflaig

@nflaig nflaig commented Jun 29, 2025

Copy link
Copy Markdown
Member

Comment thread packages/beacon-node/src/network/metadata.ts
Comment thread packages/beacon-node/src/network/metadata.ts
ensi321 added a commit that referenced this pull request Jul 8, 2025
**Motivation**

- ethereum/consensus-specs#4354

**Description**

- add concept of fork boundaries (`ForkBoundary`) which include both
normal hard-forks (phase0, altair, etc.) and Blob Parameter Only (BPO)
forks and are used to un-/subscribe to gossip topics and compute the
fork digest primarily for domain separation on the p2p layer
- mix in blob parameters (`BlobParameters`) when computing fork digest
(`computeForkDigest`) post-fulu
- update ENR fork id (`ENRForkID`) to consider fork boundaries (next
fork digest (`nfd`) will be updated in
#8023)
- cache pre-computed fork digests by epoch instead of fork name in
genesis config cache

---------

Co-authored-by: NC <17676176+ensi321@users.noreply.github.com>
@ensi321 ensi321 force-pushed the nflaig/next-fork-digest branch from 16cb265 to 122d720 Compare July 11, 2025 04:04
@nflaig nflaig marked this pull request as ready for review July 16, 2025 20:31
@nflaig nflaig requested a review from a team as a code owner July 16, 2025 20:31
Comment thread packages/beacon-node/src/network/metadata.ts
@codecov

codecov Bot commented Jul 16, 2025

Copy link
Copy Markdown

Codecov Report

Attention: Patch coverage is 21.05263% with 15 lines in your changes missing coverage. Please review.

Project coverage is 55.77%. Comparing base (1d9f4aa) to head (1453ee8).

Additional details and impacted files
@@             Coverage Diff              @@
##           unstable    #8023      +/-   ##
============================================
- Coverage     55.78%   55.77%   -0.02%     
============================================
  Files           834      834              
  Lines         59535    59549      +14     
  Branches       4603     4600       -3     
============================================
  Hits          33214    33214              
- Misses        26253    26267      +14     
  Partials         68       68              
🚀 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.

@github-actions

Copy link
Copy Markdown
Contributor

Performance Report

🚀🚀 Significant benchmark improvement detected

Benchmark suite Current: 8747043 Previous: 1d9f4aa Ratio
Array.fill - length 1000000 2.5735 ms/op 8.1017 ms/op 0.32
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.4426 ms/op 5.5961 ms/op 0.26
Full benchmark results
Benchmark suite Current: 8747043 Previous: 1d9f4aa Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 787.70 us/op 990.45 us/op 0.80
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 28.686 us/op 36.611 us/op 0.78
BLS verify - blst 890.76 us/op 729.36 us/op 1.22
BLS verifyMultipleSignatures 3 - blst 1.2591 ms/op 1.1921 ms/op 1.06
BLS verifyMultipleSignatures 8 - blst 2.0490 ms/op 1.9025 ms/op 1.08
BLS verifyMultipleSignatures 32 - blst 4.4690 ms/op 4.9447 ms/op 0.90
BLS verifyMultipleSignatures 64 - blst 8.3350 ms/op 9.1550 ms/op 0.91
BLS verifyMultipleSignatures 128 - blst 16.028 ms/op 17.507 ms/op 0.92
BLS deserializing 10000 signatures 621.03 ms/op 697.51 ms/op 0.89
BLS deserializing 100000 signatures 6.1603 s/op 7.1651 s/op 0.86
BLS verifyMultipleSignatures - same message - 3 - blst 935.75 us/op 973.50 us/op 0.96
BLS verifyMultipleSignatures - same message - 8 - blst 1.0734 ms/op 1.0399 ms/op 1.03
BLS verifyMultipleSignatures - same message - 32 - blst 1.7167 ms/op 1.7261 ms/op 0.99
BLS verifyMultipleSignatures - same message - 64 - blst 2.4646 ms/op 2.6891 ms/op 0.92
BLS verifyMultipleSignatures - same message - 128 - blst 4.1888 ms/op 4.5943 ms/op 0.91
BLS aggregatePubkeys 32 - blst 17.488 us/op 20.139 us/op 0.87
BLS aggregatePubkeys 128 - blst 62.551 us/op 71.603 us/op 0.87
notSeenSlots=1 numMissedVotes=1 numBadVotes=10 46.899 ms/op 51.258 ms/op 0.91
notSeenSlots=1 numMissedVotes=0 numBadVotes=4 43.232 ms/op 46.429 ms/op 0.93
notSeenSlots=2 numMissedVotes=1 numBadVotes=10 33.950 ms/op 37.537 ms/op 0.90
getSlashingsAndExits - default max 47.424 us/op 77.215 us/op 0.61
getSlashingsAndExits - 2k 275.29 us/op 346.07 us/op 0.80
proposeBlockBody type=full, size=empty 4.6279 ms/op 7.3689 ms/op 0.63
isKnown best case - 1 super set check 163.00 ns/op 229.00 ns/op 0.71
isKnown normal case - 2 super set checks 160.00 ns/op 221.00 ns/op 0.72
isKnown worse case - 16 super set checks 188.00 ns/op 220.00 ns/op 0.85
InMemoryCheckpointStateCache - add get delete 1.9060 us/op 2.4640 us/op 0.77
validate api signedAggregateAndProof - struct 1.4536 ms/op 1.6408 ms/op 0.89
validate gossip signedAggregateAndProof - struct 1.4604 ms/op 1.4757 ms/op 0.99
batch validate gossip attestation - vc 640000 - chunk 32 105.19 us/op 121.75 us/op 0.86
batch validate gossip attestation - vc 640000 - chunk 64 91.360 us/op 106.97 us/op 0.85
batch validate gossip attestation - vc 640000 - chunk 128 85.747 us/op 98.660 us/op 0.87
batch validate gossip attestation - vc 640000 - chunk 256 85.567 us/op 101.40 us/op 0.84
pickEth1Vote - no votes 779.19 us/op 970.77 us/op 0.80
pickEth1Vote - max votes 4.3429 ms/op 5.5442 ms/op 0.78
pickEth1Vote - Eth1Data hashTreeRoot value x2048 8.7051 ms/op 11.780 ms/op 0.74
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 11.150 ms/op 18.736 ms/op 0.60
pickEth1Vote - Eth1Data fastSerialize value x2048 351.29 us/op 450.35 us/op 0.78
pickEth1Vote - Eth1Data fastSerialize tree x2048 4.4615 ms/op 4.3275 ms/op 1.03
bytes32 toHexString 279.00 ns/op 375.00 ns/op 0.74
bytes32 Buffer.toString(hex) 179.00 ns/op 252.00 ns/op 0.71
bytes32 Buffer.toString(hex) from Uint8Array 240.00 ns/op 343.00 ns/op 0.70
bytes32 Buffer.toString(hex) + 0x 170.00 ns/op 266.00 ns/op 0.64
Object access 1 prop 0.090000 ns/op 0.12000 ns/op 0.75
Map access 1 prop 0.096000 ns/op 0.12500 ns/op 0.77
Object get x1000 4.8590 ns/op 5.9640 ns/op 0.81
Map get x1000 5.5200 ns/op 6.6120 ns/op 0.83
Object set x1000 18.055 ns/op 31.176 ns/op 0.58
Map set x1000 16.094 ns/op 21.101 ns/op 0.76
Return object 10000 times 0.26210 ns/op 0.29530 ns/op 0.89
Throw Error 10000 times 3.4233 us/op 4.4981 us/op 0.76
toHex 99.100 ns/op 133.32 ns/op 0.74
Buffer.from 90.901 ns/op 124.72 ns/op 0.73
shared Buffer 65.942 ns/op 89.605 ns/op 0.74
fastMsgIdFn sha256 / 200 bytes 1.6630 us/op 2.2600 us/op 0.74
fastMsgIdFn h32 xxhash / 200 bytes 161.00 ns/op 207.00 ns/op 0.78
fastMsgIdFn h64 xxhash / 200 bytes 219.00 ns/op 273.00 ns/op 0.80
fastMsgIdFn sha256 / 1000 bytes 5.3860 us/op 7.5810 us/op 0.71
fastMsgIdFn h32 xxhash / 1000 bytes 277.00 ns/op 335.00 ns/op 0.83
fastMsgIdFn h64 xxhash / 1000 bytes 267.00 ns/op 346.00 ns/op 0.77
fastMsgIdFn sha256 / 10000 bytes 46.033 us/op 66.447 us/op 0.69
fastMsgIdFn h32 xxhash / 10000 bytes 1.5980 us/op 1.8410 us/op 0.87
fastMsgIdFn h64 xxhash / 10000 bytes 1.0440 us/op 1.2240 us/op 0.85
send data - 1000 256B messages 9.8663 ms/op 11.998 ms/op 0.82
send data - 1000 512B messages 13.155 ms/op 17.364 ms/op 0.76
send data - 1000 1024B messages 20.054 ms/op 27.358 ms/op 0.73
send data - 1000 1200B messages 15.839 ms/op 23.883 ms/op 0.66
send data - 1000 2048B messages 16.583 ms/op 25.690 ms/op 0.65
send data - 1000 4096B messages 15.488 ms/op 29.405 ms/op 0.53
send data - 1000 16384B messages 62.888 ms/op 61.718 ms/op 1.02
send data - 1000 65536B messages 187.96 ms/op 263.20 ms/op 0.71
enrSubnets - fastDeserialize 64 bits 1.5860 us/op 900.00 ns/op 1.76
enrSubnets - ssz BitVector 64 bits 272.00 ns/op 343.00 ns/op 0.79
enrSubnets - fastDeserialize 4 bits 104.00 ns/op 124.00 ns/op 0.84
enrSubnets - ssz BitVector 4 bits 258.00 ns/op 338.00 ns/op 0.76
prioritizePeers score -10:0 att 32-0.1 sync 2-0 97.102 us/op 122.01 us/op 0.80
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 115.85 us/op 147.18 us/op 0.79
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 167.11 us/op 218.24 us/op 0.77
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 308.86 us/op 404.81 us/op 0.76
prioritizePeers score 0:0 att 64-1 sync 4-1 365.42 us/op 480.94 us/op 0.76
array of 16000 items push then shift 1.1995 us/op 1.6465 us/op 0.73
LinkedList of 16000 items push then shift 7.1180 ns/op 7.3080 ns/op 0.97
array of 16000 items push then pop 64.418 ns/op 76.324 ns/op 0.84
LinkedList of 16000 items push then pop 5.7880 ns/op 7.0420 ns/op 0.82
array of 24000 items push then shift 1.7762 us/op 2.4466 us/op 0.73
LinkedList of 24000 items push then shift 6.5010 ns/op 7.3080 ns/op 0.89
array of 24000 items push then pop 90.645 ns/op 105.23 ns/op 0.86
LinkedList of 24000 items push then pop 5.6850 ns/op 7.2860 ns/op 0.78
intersect bitArray bitLen 8 5.3420 ns/op 6.6340 ns/op 0.81
intersect array and set length 8 32.354 ns/op 39.459 ns/op 0.82
intersect bitArray bitLen 128 26.678 ns/op 31.052 ns/op 0.86
intersect array and set length 128 543.57 ns/op 648.58 ns/op 0.84
bitArray.getTrueBitIndexes() bitLen 128 885.00 ns/op 1.0240 us/op 0.86
bitArray.getTrueBitIndexes() bitLen 248 1.5410 us/op 1.7870 us/op 0.86
bitArray.getTrueBitIndexes() bitLen 512 3.0280 us/op 3.6790 us/op 0.82
Buffer.concat 32 items 507.00 ns/op 617.00 ns/op 0.82
Uint8Array.set 32 items 1.3030 us/op 987.00 ns/op 1.32
Buffer.copy 1.7110 us/op 2.3640 us/op 0.72
Uint8Array.set - with subarray 1.3710 us/op 1.9150 us/op 0.72
Uint8Array.set - without subarray 1.0110 us/op 1.5630 us/op 0.65
getUint32 - dataview 150.00 ns/op 204.00 ns/op 0.74
getUint32 - manual 97.000 ns/op 120.00 ns/op 0.81
Set add up to 64 items then delete first 1.7862 us/op 2.4568 us/op 0.73
OrderedSet add up to 64 items then delete first 2.7690 us/op 3.8130 us/op 0.73
Set add up to 64 items then delete last 1.9886 us/op 2.4752 us/op 0.80
OrderedSet add up to 64 items then delete last 2.9571 us/op 3.8394 us/op 0.77
Set add up to 64 items then delete middle 1.9380 us/op 2.5617 us/op 0.76
OrderedSet add up to 64 items then delete middle 4.4265 us/op 5.4478 us/op 0.81
Set add up to 128 items then delete first 3.9491 us/op 5.2158 us/op 0.76
OrderedSet add up to 128 items then delete first 6.0493 us/op 8.1701 us/op 0.74
Set add up to 128 items then delete last 3.7340 us/op 5.2935 us/op 0.71
OrderedSet add up to 128 items then delete last 5.7790 us/op 7.9617 us/op 0.73
Set add up to 128 items then delete middle 3.6881 us/op 5.8567 us/op 0.63
OrderedSet add up to 128 items then delete middle 11.432 us/op 16.442 us/op 0.70
Set add up to 256 items then delete first 7.3013 us/op 13.197 us/op 0.55
OrderedSet add up to 256 items then delete first 12.073 us/op 18.587 us/op 0.65
Set add up to 256 items then delete last 7.0968 us/op 10.361 us/op 0.68
OrderedSet add up to 256 items then delete last 11.434 us/op 15.880 us/op 0.72
Set add up to 256 items then delete middle 7.3983 us/op 12.014 us/op 0.62
OrderedSet add up to 256 items then delete middle 32.166 us/op 45.400 us/op 0.71
transfer serialized Status (84 B) 1.7250 us/op 2.3470 us/op 0.73
copy serialized Status (84 B) 1.0060 us/op 1.2760 us/op 0.79
transfer serialized SignedVoluntaryExit (112 B) 1.8000 us/op 2.3360 us/op 0.77
copy serialized SignedVoluntaryExit (112 B) 1.0380 us/op 1.2970 us/op 0.80
transfer serialized ProposerSlashing (416 B) 1.8280 us/op 2.6340 us/op 0.69
copy serialized ProposerSlashing (416 B) 1.0950 us/op 2.1890 us/op 0.50
transfer serialized Attestation (485 B) 2.3430 us/op 3.2410 us/op 0.72
copy serialized Attestation (485 B) 1.1280 us/op 1.9750 us/op 0.57
transfer serialized AttesterSlashing (33232 B) 1.8690 us/op 2.6590 us/op 0.70
copy serialized AttesterSlashing (33232 B) 2.3770 us/op 4.6610 us/op 0.51
transfer serialized Small SignedBeaconBlock (128000 B) 1.9680 us/op 3.0370 us/op 0.65
copy serialized Small SignedBeaconBlock (128000 B) 5.5300 us/op 11.658 us/op 0.47
transfer serialized Avg SignedBeaconBlock (200000 B) 2.0720 us/op 3.5280 us/op 0.59
copy serialized Avg SignedBeaconBlock (200000 B) 8.1420 us/op 16.445 us/op 0.50
transfer serialized BlobsSidecar (524380 B) 3.0220 us/op 3.8160 us/op 0.79
copy serialized BlobsSidecar (524380 B) 61.672 us/op 182.87 us/op 0.34
transfer serialized Big SignedBeaconBlock (1000000 B) 3.5390 us/op 4.2680 us/op 0.83
copy serialized Big SignedBeaconBlock (1000000 B) 106.39 us/op 175.47 us/op 0.61
pass gossip attestations to forkchoice per slot 2.3640 ms/op 2.8392 ms/op 0.83
forkChoice updateHead vc 100000 bc 64 eq 0 353.60 us/op 464.90 us/op 0.76
forkChoice updateHead vc 600000 bc 64 eq 0 2.1695 ms/op 3.0187 ms/op 0.72
forkChoice updateHead vc 1000000 bc 64 eq 0 3.6391 ms/op 5.1128 ms/op 0.71
forkChoice updateHead vc 600000 bc 320 eq 0 2.1401 ms/op 3.0509 ms/op 0.70
forkChoice updateHead vc 600000 bc 1200 eq 0 2.1574 ms/op 3.0291 ms/op 0.71
forkChoice updateHead vc 600000 bc 7200 eq 0 2.3275 ms/op 3.4374 ms/op 0.68
forkChoice updateHead vc 600000 bc 64 eq 1000 9.1284 ms/op 10.758 ms/op 0.85
forkChoice updateHead vc 600000 bc 64 eq 10000 9.1149 ms/op 10.599 ms/op 0.86
forkChoice updateHead vc 600000 bc 64 eq 300000 12.071 ms/op 16.303 ms/op 0.74
computeDeltas 500000 validators 300 proto nodes 3.0846 ms/op 4.2359 ms/op 0.73
computeDeltas 500000 validators 1200 proto nodes 3.0985 ms/op 4.2177 ms/op 0.73
computeDeltas 500000 validators 7200 proto nodes 3.0631 ms/op 5.3819 ms/op 0.57
computeDeltas 750000 validators 300 proto nodes 4.5435 ms/op 6.5378 ms/op 0.69
computeDeltas 750000 validators 1200 proto nodes 4.6786 ms/op 6.6506 ms/op 0.70
computeDeltas 750000 validators 7200 proto nodes 4.5244 ms/op 6.9202 ms/op 0.65
computeDeltas 1400000 validators 300 proto nodes 8.8585 ms/op 13.386 ms/op 0.66
computeDeltas 1400000 validators 1200 proto nodes 8.4812 ms/op 14.697 ms/op 0.58
computeDeltas 1400000 validators 7200 proto nodes 8.6491 ms/op 13.069 ms/op 0.66
computeDeltas 2100000 validators 300 proto nodes 13.100 ms/op 19.298 ms/op 0.68
computeDeltas 2100000 validators 1200 proto nodes 13.687 ms/op 18.569 ms/op 0.74
computeDeltas 2100000 validators 7200 proto nodes 13.023 ms/op 18.547 ms/op 0.70
altair processAttestation - 250000 vs - 7PWei normalcase 1.8409 ms/op 3.2097 ms/op 0.57
altair processAttestation - 250000 vs - 7PWei worstcase 2.6523 ms/op 3.8043 ms/op 0.70
altair processAttestation - setStatus - 1/6 committees join 95.032 us/op 138.46 us/op 0.69
altair processAttestation - setStatus - 1/3 committees join 180.59 us/op 361.28 us/op 0.50
altair processAttestation - setStatus - 1/2 committees join 265.46 us/op 367.49 us/op 0.72
altair processAttestation - setStatus - 2/3 committees join 335.06 us/op 506.40 us/op 0.66
altair processAttestation - setStatus - 4/5 committees join 477.85 us/op 705.60 us/op 0.68
altair processAttestation - setStatus - 100% committees join 561.04 us/op 813.64 us/op 0.69
altair processBlock - 250000 vs - 7PWei normalcase 3.9973 ms/op 5.6942 ms/op 0.70
altair processBlock - 250000 vs - 7PWei normalcase hashState 34.733 ms/op 38.786 ms/op 0.90
altair processBlock - 250000 vs - 7PWei worstcase 33.025 ms/op 50.850 ms/op 0.65
altair processBlock - 250000 vs - 7PWei worstcase hashState 80.229 ms/op 102.02 ms/op 0.79
phase0 processBlock - 250000 vs - 7PWei normalcase 1.8956 ms/op 2.7786 ms/op 0.68
phase0 processBlock - 250000 vs - 7PWei worstcase 20.913 ms/op 32.400 ms/op 0.65
altair processEth1Data - 250000 vs - 7PWei normalcase 275.55 us/op 408.27 us/op 0.67
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 4.8050 us/op 10.399 us/op 0.46
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 33.972 us/op 60.800 us/op 0.56
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 8.9870 us/op 17.579 us/op 0.51
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 5.3440 us/op 11.933 us/op 0.45
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 152.63 us/op 222.47 us/op 0.69
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 1.3830 ms/op 2.0407 ms/op 0.68
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.8302 ms/op 2.7490 ms/op 0.67
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8373 ms/op 2.7721 ms/op 0.66
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.7156 ms/op 6.6867 ms/op 0.56
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.8707 ms/op 2.9638 ms/op 0.63
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.7499 ms/op 6.3886 ms/op 0.59
Tree 40 250000 create 341.78 ms/op 742.79 ms/op 0.46
Tree 40 250000 get(125000) 110.30 ns/op 161.67 ns/op 0.68
Tree 40 250000 set(125000) 1.2115 us/op 2.7490 us/op 0.44
Tree 40 250000 toArray() 9.4584 ms/op 23.359 ms/op 0.40
Tree 40 250000 iterate all - toArray() + loop 9.6366 ms/op 23.478 ms/op 0.41
Tree 40 250000 iterate all - get(i) 38.076 ms/op 83.082 ms/op 0.46
Array 250000 create 1.9327 ms/op 4.6291 ms/op 0.42
Array 250000 clone - spread 619.08 us/op 2.3559 ms/op 0.26
Array 250000 get(125000) 0.35800 ns/op 0.45400 ns/op 0.79
Array 250000 set(125000) 0.37800 ns/op 0.58300 ns/op 0.65
Array 250000 iterate all - loop 101.09 us/op 89.284 us/op 1.13
phase0 afterProcessEpoch - 250000 vs - 7PWei 38.477 ms/op 47.223 ms/op 0.81
Array.fill - length 1000000 2.5735 ms/op 8.1017 ms/op 0.32
Array push - length 1000000 9.3121 ms/op 21.762 ms/op 0.43
Array.get 0.25449 ns/op 0.30168 ns/op 0.84
Uint8Array.get 0.41045 ns/op 0.47583 ns/op 0.86
phase0 beforeProcessEpoch - 250000 vs - 7PWei 13.156 ms/op 26.605 ms/op 0.49
altair processEpoch - mainnet_e81889 215.04 ms/op 342.41 ms/op 0.63
mainnet_e81889 - altair beforeProcessEpoch 14.025 ms/op 26.817 ms/op 0.52
mainnet_e81889 - altair processJustificationAndFinalization 4.1380 us/op 8.3790 us/op 0.49
mainnet_e81889 - altair processInactivityUpdates 3.4547 ms/op 7.7452 ms/op 0.45
mainnet_e81889 - altair processRewardsAndPenalties 44.816 ms/op 75.113 ms/op 0.60
mainnet_e81889 - altair processRegistryUpdates 578.00 ns/op 1.3320 us/op 0.43
mainnet_e81889 - altair processSlashings 155.00 ns/op 314.00 ns/op 0.49
mainnet_e81889 - altair processEth1DataReset 152.00 ns/op 226.00 ns/op 0.67
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.0875 ms/op 1.6168 ms/op 0.67
mainnet_e81889 - altair processSlashingsReset 906.00 ns/op 1.3720 us/op 0.66
mainnet_e81889 - altair processRandaoMixesReset 1.1040 us/op 1.7530 us/op 0.63
mainnet_e81889 - altair processHistoricalRootsUpdate 154.00 ns/op 250.00 ns/op 0.62
mainnet_e81889 - altair processParticipationFlagUpdates 433.00 ns/op 602.00 ns/op 0.72
mainnet_e81889 - altair processSyncCommitteeUpdates 125.00 ns/op 220.00 ns/op 0.57
mainnet_e81889 - altair afterProcessEpoch 40.743 ms/op 50.472 ms/op 0.81
capella processEpoch - mainnet_e217614 901.00 ms/op 1.1534 s/op 0.78
mainnet_e217614 - capella beforeProcessEpoch 63.285 ms/op 72.511 ms/op 0.87
mainnet_e217614 - capella processJustificationAndFinalization 4.1400 us/op 8.2010 us/op 0.50
mainnet_e217614 - capella processInactivityUpdates 10.946 ms/op 17.256 ms/op 0.63
mainnet_e217614 - capella processRewardsAndPenalties 192.33 ms/op 216.23 ms/op 0.89
mainnet_e217614 - capella processRegistryUpdates 6.7950 us/op 7.0970 us/op 0.96
mainnet_e217614 - capella processSlashings 146.00 ns/op 202.00 ns/op 0.72
mainnet_e217614 - capella processEth1DataReset 141.00 ns/op 200.00 ns/op 0.70
mainnet_e217614 - capella processEffectiveBalanceUpdates 3.7948 ms/op 5.2906 ms/op 0.72
mainnet_e217614 - capella processSlashingsReset 723.00 ns/op 1.3040 us/op 0.55
mainnet_e217614 - capella processRandaoMixesReset 962.00 ns/op 1.5010 us/op 0.64
mainnet_e217614 - capella processHistoricalRootsUpdate 145.00 ns/op 198.00 ns/op 0.73
mainnet_e217614 - capella processParticipationFlagUpdates 429.00 ns/op 598.00 ns/op 0.72
mainnet_e217614 - capella afterProcessEpoch 111.68 ms/op 130.47 ms/op 0.86
phase0 processEpoch - mainnet_e58758 225.69 ms/op 381.92 ms/op 0.59
mainnet_e58758 - phase0 beforeProcessEpoch 60.220 ms/op 114.45 ms/op 0.53
mainnet_e58758 - phase0 processJustificationAndFinalization 4.2140 us/op 9.5220 us/op 0.44
mainnet_e58758 - phase0 processRewardsAndPenalties 29.130 ms/op 45.051 ms/op 0.65
mainnet_e58758 - phase0 processRegistryUpdates 2.6160 us/op 5.1850 us/op 0.50
mainnet_e58758 - phase0 processSlashings 152.00 ns/op 199.00 ns/op 0.76
mainnet_e58758 - phase0 processEth1DataReset 147.00 ns/op 244.00 ns/op 0.60
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 988.97 us/op 2.9572 ms/op 0.33
mainnet_e58758 - phase0 processSlashingsReset 682.00 ns/op 1.1940 us/op 0.57
mainnet_e58758 - phase0 processRandaoMixesReset 1.0170 us/op 1.4570 us/op 0.70
mainnet_e58758 - phase0 processHistoricalRootsUpdate 147.00 ns/op 201.00 ns/op 0.73
mainnet_e58758 - phase0 processParticipationRecordUpdates 947.00 ns/op 1.0080 us/op 0.94
mainnet_e58758 - phase0 afterProcessEpoch 34.423 ms/op 41.073 ms/op 0.84
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.0081 ms/op 1.4366 ms/op 0.70
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.4426 ms/op 5.5961 ms/op 0.26
altair processInactivityUpdates - 250000 normalcase 17.764 ms/op 23.096 ms/op 0.77
altair processInactivityUpdates - 250000 worstcase 17.282 ms/op 20.143 ms/op 0.86
phase0 processRegistryUpdates - 250000 normalcase 4.7730 us/op 7.1780 us/op 0.66
phase0 processRegistryUpdates - 250000 badcase_full_deposits 295.61 us/op 299.31 us/op 0.99
phase0 processRegistryUpdates - 250000 worstcase 0.5 103.26 ms/op 126.03 ms/op 0.82
altair processRewardsAndPenalties - 250000 normalcase 26.592 ms/op 31.564 ms/op 0.84
altair processRewardsAndPenalties - 250000 worstcase 30.231 ms/op 26.824 ms/op 1.13
phase0 getAttestationDeltas - 250000 normalcase 6.3647 ms/op 10.912 ms/op 0.58
phase0 getAttestationDeltas - 250000 worstcase 4.9849 ms/op 8.6278 ms/op 0.58
phase0 processSlashings - 250000 worstcase 95.378 us/op 114.42 us/op 0.83
altair processSyncCommitteeUpdates - 250000 9.7198 ms/op 13.859 ms/op 0.70
BeaconState.hashTreeRoot - No change 210.00 ns/op 246.00 ns/op 0.85
BeaconState.hashTreeRoot - 1 full validator 79.969 us/op 83.217 us/op 0.96
BeaconState.hashTreeRoot - 32 full validator 913.40 us/op 1.0525 ms/op 0.87
BeaconState.hashTreeRoot - 512 full validator 7.2577 ms/op 14.527 ms/op 0.50
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 107.22 us/op 132.00 us/op 0.81
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.3518 ms/op 2.0138 ms/op 0.67
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 26.737 ms/op 31.021 ms/op 0.86
BeaconState.hashTreeRoot - 1 balances 72.053 us/op 89.376 us/op 0.81
BeaconState.hashTreeRoot - 32 balances 827.65 us/op 986.70 us/op 0.84
BeaconState.hashTreeRoot - 512 balances 9.7874 ms/op 9.9691 ms/op 0.98
BeaconState.hashTreeRoot - 250000 balances 171.94 ms/op 200.35 ms/op 0.86
aggregationBits - 2048 els - zipIndexesInBitList 17.519 us/op 27.326 us/op 0.64
byteArrayEquals 32 43.701 ns/op 59.562 ns/op 0.73
Buffer.compare 32 15.403 ns/op 18.572 ns/op 0.83
byteArrayEquals 1024 1.2852 us/op 1.7177 us/op 0.75
Buffer.compare 1024 22.606 ns/op 29.378 ns/op 0.77
byteArrayEquals 16384 20.117 us/op 27.495 us/op 0.73
Buffer.compare 16384 191.43 ns/op 192.40 ns/op 0.99
byteArrayEquals 123687377 149.76 ms/op 211.29 ms/op 0.71
Buffer.compare 123687377 5.3828 ms/op 10.668 ms/op 0.50
byteArrayEquals 32 - diff last byte 40.018 ns/op 57.531 ns/op 0.70
Buffer.compare 32 - diff last byte 14.631 ns/op 18.804 ns/op 0.78
byteArrayEquals 1024 - diff last byte 1.1996 us/op 1.6968 us/op 0.71
Buffer.compare 1024 - diff last byte 22.578 ns/op 29.834 ns/op 0.76
byteArrayEquals 16384 - diff last byte 19.088 us/op 28.777 us/op 0.66
Buffer.compare 16384 - diff last byte 185.36 ns/op 212.43 ns/op 0.87
byteArrayEquals 123687377 - diff last byte 144.23 ms/op 215.08 ms/op 0.67
Buffer.compare 123687377 - diff last byte 5.4130 ms/op 11.858 ms/op 0.46
byteArrayEquals 32 - random bytes 4.5370 ns/op 5.6980 ns/op 0.80
Buffer.compare 32 - random bytes 15.213 ns/op 20.063 ns/op 0.76
byteArrayEquals 1024 - random bytes 4.4510 ns/op 5.7970 ns/op 0.77
Buffer.compare 1024 - random bytes 14.533 ns/op 19.114 ns/op 0.76
byteArrayEquals 16384 - random bytes 4.4870 ns/op 5.7170 ns/op 0.78
Buffer.compare 16384 - random bytes 14.813 ns/op 19.465 ns/op 0.76
byteArrayEquals 123687377 - random bytes 5.5900 ns/op 7.0900 ns/op 0.79
Buffer.compare 123687377 - random bytes 16.600 ns/op 20.860 ns/op 0.80
regular array get 100000 times 40.978 us/op 36.010 us/op 1.14
wrappedArray get 100000 times 40.998 us/op 36.147 us/op 1.13
arrayWithProxy get 100000 times 9.1094 ms/op 14.985 ms/op 0.61
ssz.Root.equals 38.664 ns/op 51.434 ns/op 0.75
byteArrayEquals 38.067 ns/op 50.010 ns/op 0.76
Buffer.compare 8.5800 ns/op 12.000 ns/op 0.71
processSlot - 1 slots 9.3370 us/op 14.281 us/op 0.65
processSlot - 32 slots 2.2146 ms/op 3.8554 ms/op 0.57
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 1.9531 ms/op 4.3519 ms/op 0.45
getCommitteeAssignments - req 1 vs - 250000 vc 1.7456 ms/op 2.3361 ms/op 0.75
getCommitteeAssignments - req 100 vs - 250000 vc 3.4343 ms/op 4.8460 ms/op 0.71
getCommitteeAssignments - req 1000 vs - 250000 vc 3.6376 ms/op 4.9581 ms/op 0.73
findModifiedValidators - 10000 modified validators 703.09 ms/op 910.21 ms/op 0.77
findModifiedValidators - 1000 modified validators 657.60 ms/op 852.06 ms/op 0.77
findModifiedValidators - 100 modified validators 173.29 ms/op 247.75 ms/op 0.70
findModifiedValidators - 10 modified validators 152.05 ms/op 262.64 ms/op 0.58
findModifiedValidators - 1 modified validators 171.54 ms/op 250.33 ms/op 0.69
findModifiedValidators - no difference 143.92 ms/op 242.04 ms/op 0.59
compare ViewDUs 5.6391 s/op 7.4586 s/op 0.76
compare each validator Uint8Array 854.00 ms/op 1.4588 s/op 0.59
compare ViewDU to Uint8Array 788.23 ms/op 1.5531 s/op 0.51
migrate state 1000000 validators, 24 modified, 0 new 802.14 ms/op 939.69 ms/op 0.85
migrate state 1000000 validators, 1700 modified, 1000 new 1.1172 s/op 1.1431 s/op 0.98
migrate state 1000000 validators, 3400 modified, 2000 new 1.2569 s/op 1.1617 s/op 1.08
migrate state 1500000 validators, 24 modified, 0 new 920.81 ms/op 869.69 ms/op 1.06
migrate state 1500000 validators, 1700 modified, 1000 new 1.1550 s/op 1.0398 s/op 1.11
migrate state 1500000 validators, 3400 modified, 2000 new 1.3420 s/op 1.3599 s/op 0.99
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.7800 ns/op 4.3700 ns/op 0.86
state getBlockRootAtSlot - 250000 vs - 7PWei 457.31 ns/op 789.24 ns/op 0.58
naive computeProposerIndex 100000 validators 39.091 ms/op 56.798 ms/op 0.69
computeProposerIndex 100000 validators 1.2937 ms/op 1.5146 ms/op 0.85
naiveGetNextSyncCommitteeIndices 1000 validators 5.9293 s/op 7.6535 s/op 0.77
getNextSyncCommitteeIndices 1000 validators 87.180 ms/op 120.80 ms/op 0.72
naiveGetNextSyncCommitteeIndices 10000 validators 6.1342 s/op 8.9001 s/op 0.69
getNextSyncCommitteeIndices 10000 validators 92.568 ms/op 127.37 ms/op 0.73
naiveGetNextSyncCommitteeIndices 100000 validators 6.0512 s/op 8.5760 s/op 0.71
getNextSyncCommitteeIndices 100000 validators 92.999 ms/op 117.02 ms/op 0.79
naive computeShuffledIndex 100000 validators 19.140 s/op 26.503 s/op 0.72
cached computeShuffledIndex 100000 validators 474.73 ms/op 578.12 ms/op 0.82
naive computeShuffledIndex 2000000 validators 390.40 s/op 496.71 s/op 0.79
cached computeShuffledIndex 2000000 validators 15.256 s/op 34.553 s/op 0.44
computeProposers - vc 250000 542.29 us/op 619.37 us/op 0.88
computeEpochShuffling - vc 250000 37.141 ms/op 42.817 ms/op 0.87
getNextSyncCommittee - vc 250000 9.0001 ms/op 10.483 ms/op 0.86
computeSigningRoot for AttestationData 17.400 us/op 19.373 us/op 0.90
hash AttestationData serialized data then Buffer.toString(base64) 1.1302 us/op 1.5252 us/op 0.74
toHexString serialized data 933.76 ns/op 1.0881 us/op 0.86
Buffer.toString(base64) 107.33 ns/op 163.35 ns/op 0.66
nodejs block root to RootHex using toHex 106.61 ns/op 143.59 ns/op 0.74
nodejs block root to RootHex using toRootHex 68.310 ns/op 85.005 ns/op 0.80
browser block root to RootHex using the deprecated toHexString 178.42 ns/op 209.34 ns/op 0.85
browser block root to RootHex using toHex 141.56 ns/op 178.54 ns/op 0.79
browser block root to RootHex using toRootHex 132.81 ns/op 159.84 ns/op 0.83

by benchmarkbot/action

@ensi321 ensi321 merged commit 417cd4b into unstable Jul 17, 2025
26 of 27 checks passed
@ensi321 ensi321 deleted the nflaig/next-fork-digest branch July 17, 2025 02:12
@wemeetagain

Copy link
Copy Markdown
Member

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

3 participants