Skip to content

feat: eip-8025 - #10384

Draft
spiral-ladder wants to merge 20 commits into
unstablefrom
bing/eip-8025
Draft

spiral-ladder wants to merge 20 commits into
unstablefrom
bing/eip-8025

Conversation

@spiral-ladder

@spiral-ladder spiral-ladder commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

Motivation

implements eip-8025, this should replace our optional proofs branch which implements an outdated spec

Description

WIP

AI Assistance Disclosure

Planning, implementation by fable
Cross-checked with sol 6.1 orchestration

Adds the eip8025 SSZ namespace (ProofData, ProofType, PublicInput, ExecutionProof,
ExecutionProofEnvelope, SignedExecutionProofEnvelope), MAX_PROOF_SIZE,
STATELESS_INPUT_SCHEMA_ID, DOMAIN_EXECUTION_PROOF and
MAX_SIGNED_EXECUTION_PROOF_ENVELOPE_SIZE, the envelope signature set, a ProofEngine
interface with a noop default, the per-block proof cache (spec Store.execution_proofs
plus the Seen dedup sets) and validate_execution_proof_gossip as
validateGossipExecutionProof. Gossip topic wiring, ENR eproof, the API and the
lodestar-z backed engine follow in later commits.
…m over the beacon API

Adds NativeProofEngine over the lodestar-z ere verifier (loaded at runtime, selected by
--chain.executionProofVerifiers <proofType>:<zkvm>:<programVkPath>), POST /eth/v1/beacon/execution_proofs
(beacon-APIs#660), network.publishExecutionProof, verifier metrics, and a discovery preference for
eproof peers when this node is execution proof-aware.
@spiral-ladder

Copy link
Copy Markdown
Member Author

pretty big PR, progressively splitting this up for reviewability

wemeetagain pushed a commit that referenced this pull request Oct 14, 2026
**Motivation**

extracted from #10384 for reviewability

implements the ssz types for eip-8025

See spec:
https://github.com/ethereum/consensus-specs/blob/e42b24931bd08e638016e02b5e63ede3d463cfff/specs/_features/eip8025/beacon-chain.md

**Description**

 Adds the EIP-8025 SSZ types as a standalone change:

- ProofData, ProofType, PublicInput, ExecutionProof,
ExecutionProofEnvelope,
   and SignedExecutionProofEnvelope.
 - Progressive SSZ merkleization for proof data and public input.
- Type exports and constants for the 4 MiB proof limit, public-input
schema,
   and signed-envelope size.
- Tests for merkleization, size limits, public-input serialization, and
JSON
   round trips.

**AI Assistance Disclosure**

sol 6.1
Use the exact lodestar-z verifier commit directly from NativeProofEngine and update the node startup caller. Preserve the ProofEngine API, serialized public-input contract, result metrics, and timer cleanup. Align proof construction with the merged bigint chainId type. Add real native verification and metrics regressions, an explicit pinned fixture downloader, ignored fixture data, and CI setup. Bound the entire download, including its response body. The raw verification helper is shared by the production engine and the generic ere fixture tests, without adding a second engine class.
Follow the separate Vitest project pattern used by spec and compliance suites. Move the fixture-dependent native tests out of the default unit project and add pnpm test:8025 at the root and beacon-node package. Keep ordinary EIP-8025 unit tests in test:unit without fixture downloads. Give the native suite its own CI job and document the explicit download step. Use eip8025 as the internal project name because the CLI parses a numeric-only project selector as a number. Verify 123 targeted unit tests with fixtures absent, all 14 native tests from both working directories, missing-fixture errors, type checks, lint, formatting, and frozen install.
@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Performance Report

🚀🚀 Significant benchmark improvement detected

Benchmark suite Current: 8ad7df0 Previous: e2c534f Ratio
enrSubnets - fastDeserialize 64 bits 272.00 ns/op 2.8700 us/op 0.09
phase0 afterProcessEpoch - 250000 vs - 7PWei 6.1502 ms/op 40.712 ms/op 0.15
Full benchmark results
Benchmark suite Current: 8ad7df0 Previous: e2c534f Ratio
getPubkeys - native cache - req 1000 vs - 250000 vc 452.72 us/op 1.1637 ms/op 0.39
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 38.937 us/op 38.150 us/op 1.02
BLS verify - blst 842.06 us/op 825.42 us/op 1.02
BLS verifyMultipleSignatures 3 - blst 1.2566 ms/op 1.2455 ms/op 1.01
BLS verifyMultipleSignatures 8 - blst 2.0895 ms/op 2.0361 ms/op 1.03
BLS verifyMultipleSignatures 32 - blst 6.8451 ms/op 6.8238 ms/op 1.00
BLS verifyMultipleSignatures 64 - blst 13.361 ms/op 12.750 ms/op 1.05
BLS verifyMultipleSignatures 128 - blst 25.310 ms/op 24.453 ms/op 1.04
BLS deserializing 10000 signatures 607.33 ms/op 592.55 ms/op 1.02
BLS deserializing 100000 signatures 5.9449 s/op 6.0861 s/op 0.98
BLS verifyMultipleSignatures - same message - 3 - blst 857.46 us/op 886.24 us/op 0.97
BLS verifyMultipleSignatures - same message - 8 - blst 973.12 us/op 1.0037 ms/op 0.97
BLS verifyMultipleSignatures - same message - 32 - blst 1.5240 ms/op 1.5650 ms/op 0.97
BLS verifyMultipleSignatures - same message - 64 - blst 2.2723 ms/op 2.3362 ms/op 0.97
BLS verifyMultipleSignatures - same message - 128 - blst 3.7555 ms/op 3.8645 ms/op 0.97
BLS aggregatePubkeys 32 - blst 17.432 us/op 17.866 us/op 0.98
BLS aggregatePubkeys 128 - blst 62.911 us/op 64.629 us/op 0.97
getSlashingsAndExits - default max 49.103 us/op 55.710 us/op 0.88
getSlashingsAndExits - 2k 346.58 us/op 444.30 us/op 0.78
proposeBlockBody type=full, size=empty 632.84 us/op 1.1087 ms/op 0.57
isKnown best case - 1 super set check 144.00 ns/op 164.00 ns/op 0.88
isKnown normal case - 2 super set checks 143.00 ns/op 154.00 ns/op 0.93
isKnown worse case - 16 super set checks 143.00 ns/op 152.00 ns/op 0.94
validate api signedAggregateAndProof - struct 1.3247 ms/op 1.4053 ms/op 0.94
validate gossip signedAggregateAndProof - struct 1.3230 ms/op 1.3976 ms/op 0.95
batch validate gossip attestation - vc 640000 - chunk 32 109.36 us/op 125.85 us/op 0.87
batch validate gossip attestation - vc 640000 - chunk 64 95.025 us/op 106.48 us/op 0.89
batch validate gossip attestation - vc 640000 - chunk 128 89.014 us/op 97.014 us/op 0.92
batch validate gossip attestation - vc 640000 - chunk 256 85.226 us/op 93.664 us/op 0.91
bytes32 toHexString 260.00 ns/op 262.00 ns/op 0.99
bytes32 Buffer.toString(hex) 149.00 ns/op 152.00 ns/op 0.98
bytes32 Buffer.toString(hex) from Uint8Array 209.00 ns/op 210.00 ns/op 1.00
bytes32 Buffer.toString(hex) + 0x 151.00 ns/op 151.00 ns/op 1.00
Return object 10000 times 0.19010 ns/op 0.19710 ns/op 0.96
Throw Error 10000 times 1.7857 us/op 1.6790 us/op 1.06
toHex 83.343 ns/op 88.837 ns/op 0.94
Buffer.from 78.067 ns/op 80.170 ns/op 0.97
shared Buffer 52.589 ns/op 53.932 ns/op 0.98
fastMsgIdFn sha256 / 200 bytes 1.3380 us/op 1.3530 us/op 0.99
fastMsgIdFn h32 xxhash / 200 bytes 133.00 ns/op 137.00 ns/op 0.97
fastMsgIdFn h64 xxhash / 200 bytes 178.00 ns/op 173.00 ns/op 1.03
fastMsgIdFn sha256 / 1000 bytes 4.2930 us/op 4.3610 us/op 0.98
fastMsgIdFn h32 xxhash / 1000 bytes 223.00 ns/op 221.00 ns/op 1.01
fastMsgIdFn h64 xxhash / 1000 bytes 224.00 ns/op 223.00 ns/op 1.00
fastMsgIdFn sha256 / 10000 bytes 37.950 us/op 38.650 us/op 0.98
fastMsgIdFn h32 xxhash / 10000 bytes 1.1280 us/op 1.1820 us/op 0.95
fastMsgIdFn h64 xxhash / 10000 bytes 738.00 ns/op 765.00 ns/op 0.96
send data - 1000 256B messages 3.9464 ms/op 4.1112 ms/op 0.96
send data - 1000 512B messages 5.3413 ms/op 5.7242 ms/op 0.93
send data - 1000 1024B messages 5.8190 ms/op 6.9184 ms/op 0.84
send data - 1000 1200B messages 6.6211 ms/op 8.0653 ms/op 0.82
send data - 1000 2048B messages 12.041 ms/op 14.376 ms/op 0.84
send data - 1000 4096B messages 78.030 ms/op 103.90 ms/op 0.75
send data - 1000 16384B messages 415.25 ms/op 364.87 ms/op 1.14
send data - 1000 65536B messages 2.1728 s/op 2.5775 s/op 0.84
enrSubnets - fastDeserialize 64 bits 272.00 ns/op 2.8700 us/op 0.09
enrSubnets - ssz BitVector 64 bits 251.00 ns/op 308.00 ns/op 0.81
enrSubnets - fastDeserialize 4 bits 86.000 ns/op 89.000 ns/op 0.97
enrSubnets - ssz BitVector 4 bits 237.00 ns/op 248.00 ns/op 0.96
prioritizePeers score -10:0 att 32-0.1 sync 2-0 234.03 us/op 242.16 us/op 0.97
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 276.33 us/op 281.08 us/op 0.98
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 354.34 us/op 356.14 us/op 0.99
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 624.25 us/op 597.81 us/op 1.04
prioritizePeers score 0:0 att 64-1 sync 4-1 723.21 us/op 797.60 us/op 0.91
archive index / 1 slot / archive root index lookup 97.453 us/op 24.384 us/op 4.00
archive index / 1 slot / archive block lookup, decode and hash 2.7657 ms/op 2.7145 ms/op 1.02
archive index / 1 slots / 1 columns / legacy 25.153 us/op 28.538 us/op 0.88
archive index / 1 slots / 1 columns / flat files 185.32 us/op 207.61 us/op 0.89
archive index / 1 slots / 8 columns / legacy 93.326 us/op 79.623 us/op 1.17
archive index / 1 slots / 8 columns / flat files 428.50 us/op 440.46 us/op 0.97
archive index / 1 slots / 128 columns / legacy 11.776 ms/op 8.7833 ms/op 1.34
archive index / 1 slots / 128 columns / flat files 6.3433 ms/op 6.3078 ms/op 1.01
archive index / 8 slots / 1 columns / legacy 204.92 us/op 205.06 us/op 1.00
archive index / 8 slots / 1 columns / flat files 1.1474 ms/op 1.5395 ms/op 0.75
archive index / 8 slots / 8 columns / legacy 7.4241 ms/op 2.2403 ms/op 3.31
archive index / 8 slots / 8 columns / flat files 4.3255 ms/op 4.6307 ms/op 0.93
archive index / 8 slots / 128 columns / legacy 125.77 ms/op 132.99 ms/op 0.95
archive index / 8 slots / 128 columns / flat files 405.26 ms/op 460.76 ms/op 0.88
head state / 1 slot / archive root index lookup 22.306 us/op 21.822 us/op 1.02
head state / 1 slot / archive block lookup, decode and hash 2.9117 ms/op 2.5372 ms/op 1.15
head state / 1 slots / 1 columns / legacy 24.893 us/op 27.216 us/op 0.91
head state / 1 slots / 1 columns / flat files 135.53 us/op 168.11 us/op 0.81
head state / 1 slots / 8 columns / legacy 90.027 us/op 103.81 us/op 0.87
head state / 1 slots / 8 columns / flat files 446.08 us/op 446.51 us/op 1.00
head state / 1 slots / 128 columns / legacy 11.661 ms/op 2.3231 ms/op 5.02
head state / 1 slots / 128 columns / flat files 7.9763 ms/op 8.9179 ms/op 0.89
head state / 8 slots / 1 columns / legacy 205.95 us/op 202.48 us/op 1.02
head state / 8 slots / 1 columns / flat files 1.0161 ms/op 1.0762 ms/op 0.94
head state / 8 slots / 8 columns / legacy 1.1952 ms/op 1.5785 ms/op 0.76
head state / 8 slots / 8 columns / flat files 3.9777 ms/op 3.8014 ms/op 1.05
head state / 8 slots / 128 columns / legacy 122.27 ms/op 106.32 ms/op 1.15
head state / 8 slots / 128 columns / flat files 31.504 ms/op 310.26 ms/op 0.10
array of 16000 items push then shift 1.2124 us/op 1.1999 us/op 1.01
LinkedList of 16000 items push then shift 8.5970 ns/op 7.9200 ns/op 1.09
array of 16000 items push then pop 93.813 ns/op 82.492 ns/op 1.14
LinkedList of 16000 items push then pop 6.5940 ns/op 6.1320 ns/op 1.08
array of 24000 items push then shift 1.7876 us/op 1.7929 us/op 1.00
LinkedList of 24000 items push then shift 8.3580 ns/op 7.9130 ns/op 1.06
array of 24000 items push then pop 125.70 ns/op 120.08 ns/op 1.05
LinkedList of 24000 items push then pop 6.6330 ns/op 6.2500 ns/op 1.06
intersect bitArray bitLen 8 3.6400 ns/op 3.6640 ns/op 0.99
intersect array and set length 8 28.765 ns/op 28.390 ns/op 1.01
intersect bitArray bitLen 128 21.971 ns/op 22.051 ns/op 1.00
intersect array and set length 128 479.69 ns/op 477.14 ns/op 1.01
bitArray.getTrueBitIndexes() bitLen 128 1.0800 us/op 931.00 ns/op 1.16
bitArray.getTrueBitIndexes() bitLen 248 1.7900 us/op 1.7050 us/op 1.05
bitArray.getTrueBitIndexes() bitLen 512 3.6860 us/op 3.6050 us/op 1.02
Full columns - reconstruct all 6 blobs 191.73 us/op 157.14 us/op 1.22
Full columns - reconstruct half of the blobs out of 6 92.068 us/op 103.31 us/op 0.89
Full columns - reconstruct single blob out of 6 35.415 us/op 45.125 us/op 0.78
Half columns - reconstruct all 6 blobs 361.79 ms/op 394.41 ms/op 0.92
Half columns - reconstruct half of the blobs out of 6 181.13 ms/op 193.55 ms/op 0.94
Half columns - reconstruct single blob out of 6 64.548 ms/op 69.736 ms/op 0.93
Set add up to 64 items then delete first 2.4748 us/op 3.5191 us/op 0.70
OrderedSet add up to 64 items then delete first 3.2849 us/op 4.4567 us/op 0.74
Set add up to 64 items then delete last 2.7370 us/op 4.1238 us/op 0.66
OrderedSet add up to 64 items then delete last 3.5829 us/op 6.7995 us/op 0.53
Set add up to 64 items then delete middle 2.7035 us/op 4.5845 us/op 0.59
OrderedSet add up to 64 items then delete middle 4.9035 us/op 8.4772 us/op 0.58
Set add up to 128 items then delete first 5.5643 us/op 10.464 us/op 0.53
OrderedSet add up to 128 items then delete first 6.9965 us/op 13.734 us/op 0.51
Set add up to 128 items then delete last 5.4989 us/op 10.620 us/op 0.52
OrderedSet add up to 128 items then delete last 7.3342 us/op 14.174 us/op 0.52
Set add up to 128 items then delete middle 5.4042 us/op 10.398 us/op 0.52
OrderedSet add up to 128 items then delete middle 12.351 us/op 20.896 us/op 0.59
Set add up to 256 items then delete first 11.637 us/op 20.549 us/op 0.57
OrderedSet add up to 256 items then delete first 15.542 us/op 25.062 us/op 0.62
Set add up to 256 items then delete last 11.279 us/op 17.412 us/op 0.65
OrderedSet add up to 256 items then delete last 14.890 us/op 21.893 us/op 0.68
Set add up to 256 items then delete middle 11.240 us/op 16.487 us/op 0.68
OrderedSet add up to 256 items then delete middle 36.415 us/op 46.580 us/op 0.78
runFastConfirmationRules vc:100000 bc:96 eq:0 3.2632 ms/op 4.6645 ms/op 0.70
runFastConfirmationRules vc:600000 bc:96 eq:0 27.424 ms/op 33.214 ms/op 0.83
runFastConfirmationRules vc:1000000 bc:96 eq:0 45.288 ms/op 54.609 ms/op 0.83
runFastConfirmationRules vc:600000 bc:320 eq:0 27.445 ms/op 32.231 ms/op 0.85
runFastConfirmationRules vc:100000 bc:96 eq:1000 1.1220 s/op 1.4445 s/op 0.78
pass gossip attestations to forkchoice per slot 4.2183 ms/op 5.3085 ms/op 0.79
forkChoice updateHead vc 100000 bc 64 eq 0 368.96 us/op 408.23 us/op 0.90
forkChoice updateHead vc 600000 bc 64 eq 0 2.1928 ms/op 2.4283 ms/op 0.90
forkChoice updateHead vc 1000000 bc 64 eq 0 3.6387 ms/op 3.9339 ms/op 0.92
forkChoice updateHead vc 600000 bc 320 eq 0 2.1907 ms/op 2.4033 ms/op 0.91
forkChoice updateHead vc 600000 bc 1200 eq 0 2.2262 ms/op 2.4503 ms/op 0.91
forkChoice updateHead vc 600000 bc 7200 eq 0 2.5321 ms/op 3.1300 ms/op 0.81
forkChoice updateHead vc 600000 bc 64 eq 1000 2.1931 ms/op 2.3849 ms/op 0.92
forkChoice updateHead vc 600000 bc 64 eq 10000 2.2681 ms/op 2.4898 ms/op 0.91
forkChoice updateHead vc 600000 bc 64 eq 300000 6.2670 ms/op 6.8852 ms/op 0.91
forkChoice updateHead vc 600000 bc 64 eq 0 gloas boosted 2.6656 ms/op 2.8109 ms/op 0.95
computeDeltas 1400000 validators 0% inactive 10.960 ms/op 11.296 ms/op 0.97
computeDeltas 1400000 validators 10% inactive 10.401 ms/op 10.714 ms/op 0.97
computeDeltas 1400000 validators 20% inactive 9.7763 ms/op 10.110 ms/op 0.97
computeDeltas 1400000 validators 50% inactive 8.0078 ms/op 8.2941 ms/op 0.97
computeDeltas 2100000 validators 0% inactive 16.476 ms/op 16.965 ms/op 0.97
computeDeltas 2100000 validators 10% inactive 15.602 ms/op 16.009 ms/op 0.97
computeDeltas 2100000 validators 20% inactive 12.193 ms/op 15.097 ms/op 0.81
computeDeltas 2100000 validators 50% inactive 9.8160 ms/op 10.033 ms/op 0.98
altair processAttestation - 250000 vs - 7PWei normalcase 9.3280 ms/op 11.842 ms/op 0.79
altair processAttestation - 250000 vs - 7PWei worstcase 12.119 ms/op 17.904 ms/op 0.68
altair processAttestation - setStatus - 1/6 committees join 113.05 us/op 115.70 us/op 0.98
altair processAttestation - setStatus - 1/3 committees join 225.02 us/op 228.71 us/op 0.98
altair processAttestation - setStatus - 1/2 committees join 298.28 us/op 299.90 us/op 0.99
altair processAttestation - setStatus - 2/3 committees join 363.33 us/op 366.43 us/op 0.99
altair processAttestation - setStatus - 4/5 committees join 551.36 us/op 558.63 us/op 0.99
altair processAttestation - setStatus - 100% committees join 627.31 us/op 632.69 us/op 0.99
altair processBlock - 250000 vs - 7PWei normalcase 11.937 ms/op 16.576 ms/op 0.72
altair processBlock - 250000 vs - 7PWei normalcase hashState 31.721 ms/op 41.746 ms/op 0.76
altair processBlock - 250000 vs - 7PWei worstcase 35.295 ms/op 41.013 ms/op 0.86
altair processBlock - 250000 vs - 7PWei worstcase hashState 72.278 ms/op 64.785 ms/op 1.12
phase0 processBlock - 250000 vs - 7PWei normalcase 4.2233 ms/op 5.7748 ms/op 0.73
phase0 processBlock - 250000 vs - 7PWei worstcase 40.272 ms/op 52.522 ms/op 0.77
altair processEth1Data - 250000 vs - 7PWei normalcase 263.97 us/op 281.69 us/op 0.94
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 2.9470 us/op 2.9890 us/op 0.99
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 19.500 us/op 19.887 us/op 0.98
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 5.4630 us/op 5.8200 us/op 0.94
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.4070 us/op 3.5410 us/op 0.96
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 86.637 us/op 93.310 us/op 0.93
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.3022 ms/op 1.3489 ms/op 0.97
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.6825 ms/op 1.9534 ms/op 0.86
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.7028 ms/op 1.9760 ms/op 0.86
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.6594 ms/op 5.5916 ms/op 0.65
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.9651 ms/op 2.0361 ms/op 0.97
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.2939 ms/op 4.8181 ms/op 0.89
Tree 40 250000 create 338.59 ms/op 365.14 ms/op 0.93
Tree 40 250000 get(125000) 84.718 ns/op 86.956 ns/op 0.97
Tree 40 250000 set(125000) 935.03 ns/op 1.1749 us/op 0.80
Tree 40 250000 toArray() 16.323 ms/op 18.708 ms/op 0.87
Tree 40 250000 iterate all - toArray() + loop 16.372 ms/op 20.011 ms/op 0.82
Tree 40 250000 iterate all - get(i) 37.416 ms/op 40.462 ms/op 0.92
Array 250000 create 2.4543 ms/op 2.5518 ms/op 0.96
Array 250000 clone - spread 781.84 us/op 828.14 us/op 0.94
Array 250000 get(125000) 0.27200 ns/op 0.27900 ns/op 0.97
Array 250000 set(125000) 0.27400 ns/op 0.27600 ns/op 0.99
Array 250000 iterate all - loop 53.808 us/op 54.652 us/op 0.98
phase0 afterProcessEpoch - 250000 vs - 7PWei 6.1502 ms/op 40.712 ms/op 0.15
Array.fill - length 1000000 3.6655 ms/op 3.8975 ms/op 0.94
Array push - length 1000000 15.242 ms/op 13.883 ms/op 1.10
Array.get 0.19429 ns/op 0.19366 ns/op 1.00
Uint8Array.get 0.23255 ns/op 0.21549 ns/op 1.08
phase0 beforeProcessEpoch - 250000 vs - 7PWei 19.382 ms/op 23.235 ms/op 0.83
altair processEpoch - mainnet_e81889 206.02 ms/op 270.30 ms/op 0.76
mainnet_e81889 - altair beforeProcessEpoch 21.950 ms/op 55.874 ms/op 0.39
mainnet_e81889 - altair processJustificationAndFinalization 5.5820 us/op 6.2930 us/op 0.89
mainnet_e81889 - altair processInactivityUpdates 6.0319 ms/op 4.0176 ms/op 1.50
mainnet_e81889 - altair processRewardsAndPenalties 18.375 ms/op 18.972 ms/op 0.97
mainnet_e81889 - altair processRegistryUpdates 542.00 ns/op 540.00 ns/op 1.00
mainnet_e81889 - altair processSlashings 131.00 ns/op 130.00 ns/op 1.01
mainnet_e81889 - altair processEth1DataReset 127.00 ns/op 121.00 ns/op 1.05
mainnet_e81889 - altair processEffectiveBalanceUpdates 8.8907 ms/op 2.7676 ms/op 3.21
mainnet_e81889 - altair processSlashingsReset 649.00 ns/op 648.00 ns/op 1.00
mainnet_e81889 - altair processRandaoMixesReset 915.00 ns/op 938.00 ns/op 0.98
mainnet_e81889 - altair processHistoricalRootsUpdate 130.00 ns/op 127.00 ns/op 1.02
mainnet_e81889 - altair processParticipationFlagUpdates 431.00 ns/op 437.00 ns/op 0.99
mainnet_e81889 - altair processSyncCommitteeUpdates 101.00 ns/op 98.000 ns/op 1.03
mainnet_e81889 - altair afterProcessEpoch 44.483 ms/op 43.232 ms/op 1.03
capella processEpoch - mainnet_e217614 623.92 ms/op 763.16 ms/op 0.82
mainnet_e217614 - capella beforeProcessEpoch 57.718 ms/op 65.498 ms/op 0.88
mainnet_e217614 - capella processJustificationAndFinalization 5.2590 us/op 5.2190 us/op 1.01
mainnet_e217614 - capella processInactivityUpdates 14.739 ms/op 15.593 ms/op 0.95
mainnet_e217614 - capella processRewardsAndPenalties 84.101 ms/op 94.391 ms/op 0.89
mainnet_e217614 - capella processRegistryUpdates 4.2170 us/op 4.2080 us/op 1.00
mainnet_e217614 - capella processSlashings 125.00 ns/op 125.00 ns/op 1.00
mainnet_e217614 - capella processEth1DataReset 125.00 ns/op 121.00 ns/op 1.03
mainnet_e217614 - capella processEffectiveBalanceUpdates 17.901 ms/op 21.723 ms/op 0.82
mainnet_e217614 - capella processSlashingsReset 629.00 ns/op 645.00 ns/op 0.98
mainnet_e217614 - capella processRandaoMixesReset 947.00 ns/op 998.00 ns/op 0.95
mainnet_e217614 - capella processHistoricalSummariesUpdate 124.00 ns/op 128.00 ns/op 0.97
mainnet_e217614 - capella processParticipationFlagUpdates 414.00 ns/op 439.00 ns/op 0.94
mainnet_e217614 - capella afterProcessEpoch 31.093 ms/op 69.374 ms/op 0.45
phase0 processEpoch - mainnet_e58758 182.19 ms/op 206.27 ms/op 0.88
mainnet_e58758 - phase0 beforeProcessEpoch 49.855 ms/op 51.847 ms/op 0.96
mainnet_e58758 - phase0 processJustificationAndFinalization 5.0670 us/op 4.9800 us/op 1.02
mainnet_e58758 - phase0 processRewardsAndPenalties 16.033 ms/op 16.393 ms/op 0.98
mainnet_e58758 - phase0 processRegistryUpdates 2.1240 us/op 2.0710 us/op 1.03
mainnet_e58758 - phase0 processSlashings 124.00 ns/op 124.00 ns/op 1.00
mainnet_e58758 - phase0 processEth1DataReset 125.00 ns/op 119.00 ns/op 1.05
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.3145 ms/op 937.56 us/op 1.40
mainnet_e58758 - phase0 processSlashingsReset 850.00 ns/op 864.00 ns/op 0.98
mainnet_e58758 - phase0 processRandaoMixesReset 926.00 ns/op 968.00 ns/op 0.96
mainnet_e58758 - phase0 processHistoricalRootsUpdate 125.00 ns/op 122.00 ns/op 1.02
mainnet_e58758 - phase0 processParticipationRecordUpdates 859.00 ns/op 874.00 ns/op 0.98
mainnet_e58758 - phase0 afterProcessEpoch 5.3238 ms/op 6.6622 ms/op 0.80
phase0 processEffectiveBalanceUpdates - 250000 normalcase 934.40 us/op 908.53 us/op 1.03
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.4710 ms/op 3.0716 ms/op 0.48
gloas processInactivityUpdates - 250000 inactivity leak all eligible missed target 11.056 ms/op 11.488 ms/op 0.96
phase0 processRegistryUpdates - 250000 normalcase 2.2190 us/op 2.0950 us/op 1.06
phase0 processRegistryUpdates - 250000 badcase_full_deposits 131.67 us/op 138.17 us/op 0.95
phase0 processRegistryUpdates - 250000 worstcase 0.5 57.950 ms/op 67.072 ms/op 0.86
altair processRewardsAndPenalties - 250000 normalcase 15.713 ms/op 15.522 ms/op 1.01
altair processRewardsAndPenalties - 250000 worstcase 15.238 ms/op 14.882 ms/op 1.02
phase0 getAttestationDeltas - 250000 normalcase 5.3445 ms/op 5.1295 ms/op 1.04
phase0 getAttestationDeltas - 250000 worstcase 5.3435 ms/op 5.2359 ms/op 1.02
phase0 processSlashings - 250000 worstcase 58.002 us/op 56.209 us/op 1.03
altair processSyncCommitteeUpdates - 250000 10.149 ms/op 9.4486 ms/op 1.07
BeaconState.hashTreeRoot - No change 159.00 ns/op 153.00 ns/op 1.04
BeaconState.hashTreeRoot - 1 full validator 74.850 us/op 78.533 us/op 0.95
BeaconState.hashTreeRoot - 32 full validator 847.16 us/op 914.08 us/op 0.93
BeaconState.hashTreeRoot - 512 full validator 8.0690 ms/op 8.2693 ms/op 0.98
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 103.98 us/op 112.71 us/op 0.92
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.3508 ms/op 1.6177 ms/op 0.84
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 18.951 ms/op 18.397 ms/op 1.03
BeaconState.hashTreeRoot - 1 balances 81.282 us/op 89.817 us/op 0.90
BeaconState.hashTreeRoot - 32 balances 736.62 us/op 1.2388 ms/op 0.59
BeaconState.hashTreeRoot - 512 balances 6.1689 ms/op 5.2953 ms/op 1.16
BeaconState.hashTreeRoot - 250000 balances 117.73 ms/op 170.60 ms/op 0.69
aggregationBits - 2048 els - zipIndexesInBitList 18.653 us/op 18.879 us/op 0.99
regular array get 100000 times 21.612 us/op 21.551 us/op 1.00
wrappedArray get 100000 times 21.562 us/op 21.521 us/op 1.00
arrayWithProxy get 100000 times 8.9371 ms/op 8.9298 ms/op 1.00
ssz.Root.equals 20.128 ns/op 20.182 ns/op 1.00
byteArrayEquals 19.930 ns/op 19.905 ns/op 1.00
Buffer.compare 8.2880 ns/op 8.2900 ns/op 1.00
processSlot - 1 slots 9.0220 us/op 8.7120 us/op 1.04
processSlot - 32 slots 2.0395 ms/op 3.1634 ms/op 0.64
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 4.1577 ms/op 5.3110 ms/op 0.78
getCommitteeAssignments - req 1 vs - 250000 vc 1.5572 ms/op 1.5684 ms/op 0.99
getCommitteeAssignments - req 100 vs - 250000 vc 3.1965 ms/op 3.2157 ms/op 0.99
getCommitteeAssignments - req 1000 vs - 250000 vc 3.4537 ms/op 3.4505 ms/op 1.00
findModifiedValidators - 10000 modified validators 676.22 ms/op 780.15 ms/op 0.87
findModifiedValidators - 1000 modified validators 513.16 ms/op 477.19 ms/op 1.08
findModifiedValidators - 100 modified validators 337.50 ms/op 308.09 ms/op 1.10
findModifiedValidators - 10 modified validators 302.83 ms/op 287.73 ms/op 1.05
findModifiedValidators - 1 modified validators 199.77 ms/op 265.53 ms/op 0.75
findModifiedValidators - no difference 220.18 ms/op 201.49 ms/op 1.09
migrate state 1500000 validators, 3400 modified, 2000 new 3.2084 s/op 4.5375 s/op 0.71
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.1500 ns/op 3.2600 ns/op 0.97
state getBlockRootAtSlot - 250000 vs - 7PWei 420.78 ns/op 507.03 ns/op 0.83
computeProposerIndex 100000 validators 1.1966 ms/op 1.2116 ms/op 0.99
getNextSyncCommitteeIndices 1000 validators 146.87 us/op 149.75 us/op 0.98
getNextSyncCommitteeIndices 10000 validators 333.88 us/op 339.84 us/op 0.98
getNextSyncCommitteeIndices 100000 validators 2.1960 ms/op 2.2726 ms/op 0.97
computeProposers - vc 250000 488.36 us/op 455.06 us/op 1.07
computeEpochShuffling - vc 250000 35.392 ms/op 36.743 ms/op 0.96
getNextSyncCommittee - vc 250000 9.1687 ms/op 14.393 ms/op 0.64
nodejs block root to RootHex using toHex 87.655 ns/op 90.451 ns/op 0.97
nodejs block root to RootHex using toRootHex 57.402 ns/op 59.156 ns/op 0.97
nodejs fromHex(blob) 902.00 us/op 1.0097 ms/op 0.89
nodejs fromHexInto(blob) 67.617 us/op 71.072 us/op 0.95
nodejs block root to RootHex using the deprecated toHexString 567.38 ns/op 574.09 ns/op 0.99
nodejs byteArrayEquals 32 bytes (block root) 23.933 ns/op 24.743 ns/op 0.97
nodejs byteArrayEquals 48 bytes (pubkey) 34.580 ns/op 35.649 ns/op 0.97
nodejs byteArrayEquals 96 bytes (signature) 32.003 ns/op 32.498 ns/op 0.98
nodejs byteArrayEquals 1024 bytes 37.019 ns/op 39.636 ns/op 0.93
nodejs byteArrayEquals 131072 bytes (blob) 1.6170 us/op 1.6607 us/op 0.97
browser block root to RootHex using toHex 132.85 ns/op 136.09 ns/op 0.98
browser block root to RootHex using toRootHex 119.10 ns/op 123.51 ns/op 0.96
browser fromHex(blob) 1.7516 ms/op 1.8197 ms/op 0.96
browser fromHexInto(blob) 548.28 us/op 550.72 us/op 1.00
browser block root to RootHex using the deprecated toHexString 563.27 ns/op 364.57 ns/op 1.55
browser byteArrayEquals 32 bytes (block root) 25.716 ns/op 25.691 ns/op 1.00
browser byteArrayEquals 48 bytes (pubkey) 36.198 ns/op 37.091 ns/op 0.98
browser byteArrayEquals 96 bytes (signature) 67.528 ns/op 69.130 ns/op 0.98
browser byteArrayEquals 1024 bytes 682.74 ns/op 693.13 ns/op 0.98
browser byteArrayEquals 131072 bytes (blob) 87.141 us/op 87.352 us/op 1.00

by benchmarkbot/action

consensus-specs #5762 fixes ProofType 1..7 to one guest program, zkVM and
verification key digest each, and makes all seven supported. Move the table
into @lodestar/params, derive the zkVM from the proof type instead of the CLI,
and check the configured key's SHA-256 against the table when the native engine
registers it. Gossip now REJECTs only unassigned types; an assigned type this
node holds no key for is IGNOREd, since it can be neither confirmed nor refuted.
The ere fixture tests register with the binding directly because their keys
are not spec assignments.
… Sepolia setup

The spec table's key digests are the ere-guests v0.17.0 keys, while Sepolia
provers (zkboost v0.19.1) sign for ere-guests v0.19.0 keys and five proof
types the spec has not assigned. Accept <proofType>:<zkvm>:<verificationKeyPath>
to assign a type explicitly, skipping the table and its digest check, and treat
explicitly assigned types as supported on gossip. Add a run guide with the
Sepolia key files per proof type.
…tive engine

Download zkboost v0.19.1's stateless-validator fixture proofs and the
ere-guests v0.19.0 keys they verify against next to ere's own fixtures, and
run them through NativeProofEngine with explicit proof type assignments.
Pin ere's fixtures to the v0.19.6 tag the next lodestar-z verifier is built
from; the test:8025 project stays red until the catalog follows.
The provers active on Sepolia run eth-act/lighthouse with the ERE v0.17.2
verifier and zkboost 0.12.0 on the ere-guests v0.17.0 keys, which are the
spec digests, so types 1 to 7 go through the digest-checked form and only the
zkboost v0.19.1 additions (types 8 to 12) are assigned explicitly.
Covers building the branch, building lodestar-z with the ERE v0.19.6 verifier
until a release carries it and why the whole pnpm store entry must be
replaced, fetching both key generations, the start command, how to check
proof topic peers and verify counters, peering with outbound-only provers,
and the failure modes seen while bringing nodes up on a VPN host and on a
public Linux host.
With the ERE v0.19.2 verifier of lodestar-z 2.2.0, CI verified the OpenVM and
SP1 proofs from the v0.19.6 provers and failed only the ZisK ones, so the
notes now blame ZisK release skew instead of SP1 and ZisK alike.
…proofs

The proofs on Sepolia commit to hash_tree_root(NewPayloadRequest) as the
execution-specs stateless validator computes it: a plain container whose
versioned_hashes is a ProgressiveList, which ere-guests, zkboost and
eth-act/lighthouse share. The consensus spec hashes a ProgressiveContainer
over the bounded Deneb list, so every live proof failed with
public_input_mismatch. Derive both roots from the imported payload, let the
engine accept a proof that proves either, and report which convention
matched on the verify result metric. The Lighthouse unit-test vector for an
empty Gloas payload pins the execution-specs root.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

1 participant