Skip to content

feat(types): add EIP-8025 execution proof SSZ types - #10391

Merged
wemeetagain merged 4 commits into
unstablefrom
bing/8025-types
Oct 14, 2026
Merged

wemeetagain merged 4 commits into
unstablefrom
bing/8025-types

Conversation

@spiral-ladder

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

Copy link
Copy Markdown
Member

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

@spiral-ladder
spiral-ladder marked this pull request as ready for review October 14, 2026 17:10
@spiral-ladder
spiral-ladder requested a review from a team as a code owner October 14, 2026 17:10
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-14T17:13:19.497281Z f4a3d5a Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-project-automation github-project-automation Bot moved this from In Progress to Done in Lodestar Team Coordination Oct 14, 2026
@spiral-ladder spiral-ladder reopened this Oct 14, 2026
@matthewkeil matthewkeil moved this from Done to In Progress in Lodestar Team Coordination Oct 14, 2026
@spiral-ladder

Copy link
Copy Markdown
Member Author

was implementing on an older commit version, just need osme fixes and should be good

Use ByteList[MAX_PROOF_SIZE] rather than a progressive byte list.
Update root regression tests and retain full Uint64 chain ID support.

Spec: https://github.com/ethereum/consensus-specs/blob/12c8b24bc09b12f62688d439ba20ef00b1fdfe1f/specs/_features/eip8025/beacon-chain.md#new-proofdata
@spiral-ladder

spiral-ladder commented Oct 14, 2026 •

Copy link
Copy Markdown
Member Author

think this should be ok to review

@nflaig

nflaig commented Oct 14, 2026

Copy link
Copy Markdown
Member

@lodekeeper please give this a review and check against the latest spec

@spiral-ladder

Copy link
Copy Markdown
Member Author

lodekeeper's spazzing out and giving 👀 on every comment 😆

@github-actions

Copy link
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 8b6b8c2 Previous: 13ce72c Ratio
getPubkeys - native cache - req 1000 vs - 250000 vc 452.26 us/op 460.81 us/op 0.98
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 34.907 us/op 41.433 us/op 0.84
BLS verify - blst 792.32 us/op 924.61 us/op 0.86
BLS verifyMultipleSignatures 3 - blst 1.1830 ms/op 1.3961 ms/op 0.85
BLS verifyMultipleSignatures 8 - blst 1.9865 ms/op 2.3276 ms/op 0.85
BLS verifyMultipleSignatures 32 - blst 6.0164 ms/op 7.7433 ms/op 0.78
BLS verifyMultipleSignatures 64 - blst 11.677 ms/op 14.828 ms/op 0.79
BLS verifyMultipleSignatures 128 - blst 22.092 ms/op 28.061 ms/op 0.79
BLS deserializing 10000 signatures 526.39 ms/op 656.50 ms/op 0.80
BLS deserializing 100000 signatures 5.3531 s/op 6.5478 s/op 0.82
BLS verifyMultipleSignatures - same message - 3 - blst 854.53 us/op 979.51 us/op 0.87
BLS verifyMultipleSignatures - same message - 8 - blst 952.75 us/op 1.1080 ms/op 0.86
BLS verifyMultipleSignatures - same message - 32 - blst 1.4517 ms/op 1.7333 ms/op 0.84
BLS verifyMultipleSignatures - same message - 64 - blst 2.1131 ms/op 2.5642 ms/op 0.82
BLS verifyMultipleSignatures - same message - 128 - blst 3.4894 ms/op 4.2304 ms/op 0.82
BLS aggregatePubkeys 32 - blst 15.731 us/op 20.160 us/op 0.78
BLS aggregatePubkeys 128 - blst 56.479 us/op 72.625 us/op 0.78
getSlashingsAndExits - default max 39.977 us/op 54.327 us/op 0.74
getSlashingsAndExits - 2k 343.96 us/op 507.52 us/op 0.68
proposeBlockBody type=full, size=empty 758.15 us/op 765.42 us/op 0.99
isKnown best case - 1 super set check 126.00 ns/op 173.00 ns/op 0.73
isKnown normal case - 2 super set checks 130.00 ns/op 177.00 ns/op 0.73
isKnown worse case - 16 super set checks 124.00 ns/op 173.00 ns/op 0.72
validate api signedAggregateAndProof - struct 1.2405 ms/op 1.5700 ms/op 0.79
validate gossip signedAggregateAndProof - struct 1.2441 ms/op 1.5498 ms/op 0.80
batch validate gossip attestation - vc 640000 - chunk 32 105.26 us/op 133.61 us/op 0.79
batch validate gossip attestation - vc 640000 - chunk 64 88.567 us/op 114.39 us/op 0.77
batch validate gossip attestation - vc 640000 - chunk 128 78.594 us/op 103.16 us/op 0.76
batch validate gossip attestation - vc 640000 - chunk 256 78.985 us/op 108.30 us/op 0.73
bytes32 toHexString 239.00 ns/op 304.00 ns/op 0.79
bytes32 Buffer.toString(hex) 130.00 ns/op 175.00 ns/op 0.74
bytes32 Buffer.toString(hex) from Uint8Array 203.00 ns/op 247.00 ns/op 0.82
bytes32 Buffer.toString(hex) + 0x 132.00 ns/op 177.00 ns/op 0.75
Return object 10000 times 0.20230 ns/op 0.22000 ns/op 0.92
Throw Error 10000 times 2.8462 us/op 3.4529 us/op 0.82
toHex 74.364 ns/op 98.180 ns/op 0.76
Buffer.from 68.278 ns/op 89.453 ns/op 0.76
shared Buffer 45.086 ns/op 61.486 ns/op 0.73
fastMsgIdFn sha256 / 200 bytes 1.2110 us/op 1.5160 us/op 0.80
fastMsgIdFn h32 xxhash / 200 bytes 120.00 ns/op 166.00 ns/op 0.72
fastMsgIdFn h64 xxhash / 200 bytes 170.00 ns/op 210.00 ns/op 0.81
fastMsgIdFn sha256 / 1000 bytes 3.8460 us/op 4.8900 us/op 0.79
fastMsgIdFn h32 xxhash / 1000 bytes 185.00 ns/op 257.00 ns/op 0.72
fastMsgIdFn h64 xxhash / 1000 bytes 210.00 ns/op 257.00 ns/op 0.82
fastMsgIdFn sha256 / 10000 bytes 33.492 us/op 42.837 us/op 0.78
fastMsgIdFn h32 xxhash / 10000 bytes 950.00 ns/op 1.3370 us/op 0.71
fastMsgIdFn h64 xxhash / 10000 bytes 602.00 ns/op 868.00 ns/op 0.69
send data - 1000 256B messages 4.3228 ms/op 4.2067 ms/op 1.03
send data - 1000 512B messages 5.2954 ms/op 5.1960 ms/op 1.02
send data - 1000 1024B messages 5.3953 ms/op 5.5192 ms/op 0.98
send data - 1000 1200B messages 6.1644 ms/op 7.0852 ms/op 0.87
send data - 1000 2048B messages 18.374 ms/op 18.159 ms/op 1.01
send data - 1000 4096B messages 120.99 ms/op 121.01 ms/op 1.00
send data - 1000 16384B messages 250.02 ms/op 462.04 ms/op 0.54
send data - 1000 65536B messages 969.86 ms/op 2.1454 s/op 0.45
enrSubnets - fastDeserialize 64 bits 146.00 ns/op 218.00 ns/op 0.67
enrSubnets - ssz BitVector 64 bits 232.00 ns/op 265.00 ns/op 0.88
enrSubnets - fastDeserialize 4 bits 70.000 ns/op 102.00 ns/op 0.69
enrSubnets - ssz BitVector 4 bits 237.00 ns/op 269.00 ns/op 0.88
prioritizePeers score -10:0 att 32-0.1 sync 2-0 180.37 us/op 216.42 us/op 0.83
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 205.12 us/op 259.66 us/op 0.79
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 293.68 us/op 351.51 us/op 0.84
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 513.94 us/op 603.22 us/op 0.85
prioritizePeers score 0:0 att 64-1 sync 4-1 599.61 us/op 722.53 us/op 0.83
archive index / 1 slot / archive root index lookup 32.183 us/op 15.737 us/op 2.05
archive index / 1 slot / archive block lookup, decode and hash 2.6230 ms/op 2.9533 ms/op 0.89
archive index / 1 slots / 1 columns / legacy 48.453 us/op 26.207 us/op 1.85
archive index / 1 slots / 1 columns / flat files 292.45 us/op 177.70 us/op 1.65
archive index / 1 slots / 8 columns / legacy 105.31 us/op 95.761 us/op 1.10
archive index / 1 slots / 8 columns / flat files 409.25 us/op 424.51 us/op 0.96
archive index / 1 slots / 128 columns / legacy 3.6652 ms/op 8.1077 ms/op 0.45
archive index / 1 slots / 128 columns / flat files 6.0344 ms/op 5.1469 ms/op 1.17
archive index / 8 slots / 1 columns / legacy 142.27 us/op 190.51 us/op 0.75
archive index / 8 slots / 1 columns / flat files 2.2080 ms/op 1.3611 ms/op 1.62
archive index / 8 slots / 8 columns / legacy 1.0524 ms/op 748.80 us/op 1.41
archive index / 8 slots / 8 columns / flat files 3.4895 ms/op 3.8075 ms/op 0.92
archive index / 8 slots / 128 columns / legacy 87.402 ms/op 113.23 ms/op 0.77
archive index / 8 slots / 128 columns / flat files 258.62 ms/op 321.70 ms/op 0.80
head state / 1 slot / archive root index lookup 40.192 us/op 20.884 us/op 1.92
head state / 1 slot / archive block lookup, decode and hash 2.6260 ms/op 3.0622 ms/op 0.86
head state / 1 slots / 1 columns / legacy 47.241 us/op 22.620 us/op 2.09
head state / 1 slots / 1 columns / flat files 235.58 us/op 153.60 us/op 1.53
head state / 1 slots / 8 columns / legacy 89.284 us/op 81.156 us/op 1.10
head state / 1 slots / 8 columns / flat files 319.87 us/op 377.93 us/op 0.85
head state / 1 slots / 128 columns / legacy 7.3526 ms/op 2.1888 ms/op 3.36
head state / 1 slots / 128 columns / flat files 4.2839 ms/op 5.4113 ms/op 0.79
head state / 8 slots / 1 columns / legacy 11.694 ms/op 183.00 us/op 63.90
head state / 8 slots / 1 columns / flat files 1.6444 ms/op 846.63 us/op 1.94
head state / 8 slots / 8 columns / legacy 3.9135 ms/op 755.86 us/op 5.18
head state / 8 slots / 8 columns / flat files 3.8810 ms/op 3.5264 ms/op 1.10
head state / 8 slots / 128 columns / legacy 115.15 ms/op 97.568 ms/op 1.18
head state / 8 slots / 128 columns / flat files 290.96 ms/op 304.52 ms/op 0.96
array of 16000 items push then shift 861.57 ns/op 1.3482 us/op 0.64
LinkedList of 16000 items push then shift 5.7450 ns/op 7.7460 ns/op 0.74
array of 16000 items push then pop 66.622 ns/op 86.256 ns/op 0.77
LinkedList of 16000 items push then pop 5.6460 ns/op 6.4200 ns/op 0.88
array of 24000 items push then shift 1.2266 us/op 2.0073 us/op 0.61
LinkedList of 24000 items push then shift 6.1440 ns/op 7.2450 ns/op 0.85
array of 24000 items push then pop 86.306 ns/op 122.03 ns/op 0.71
LinkedList of 24000 items push then pop 5.6610 ns/op 6.3430 ns/op 0.89
intersect bitArray bitLen 8 2.8560 ns/op 4.0760 ns/op 0.70
intersect array and set length 8 25.265 ns/op 30.323 ns/op 0.83
intersect bitArray bitLen 128 18.226 ns/op 24.005 ns/op 0.76
intersect array and set length 128 422.26 ns/op 515.49 ns/op 0.82
bitArray.getTrueBitIndexes() bitLen 128 907.00 ns/op 959.00 ns/op 0.95
bitArray.getTrueBitIndexes() bitLen 248 1.5570 us/op 1.7620 us/op 0.88
bitArray.getTrueBitIndexes() bitLen 512 3.4560 us/op 3.7240 us/op 0.93
Full columns - reconstruct all 6 blobs 153.59 us/op 185.84 us/op 0.83
Full columns - reconstruct half of the blobs out of 6 66.856 us/op 74.310 us/op 0.90
Full columns - reconstruct single blob out of 6 27.310 us/op 36.366 us/op 0.75
Half columns - reconstruct all 6 blobs 329.92 ms/op 404.51 ms/op 0.82
Half columns - reconstruct half of the blobs out of 6 165.11 ms/op 203.66 ms/op 0.81
Half columns - reconstruct single blob out of 6 58.451 ms/op 73.640 ms/op 0.79
Set add up to 64 items then delete first 1.4239 us/op 1.7127 us/op 0.83
OrderedSet add up to 64 items then delete first 2.1582 us/op 2.5658 us/op 0.84
Set add up to 64 items then delete last 1.7265 us/op 1.9179 us/op 0.90
OrderedSet add up to 64 items then delete last 3.0476 us/op 2.8763 us/op 1.06
Set add up to 64 items then delete middle 1.7456 us/op 1.9103 us/op 0.91
OrderedSet add up to 64 items then delete middle 3.6449 us/op 4.4074 us/op 0.83
Set add up to 128 items then delete first 4.0565 us/op 3.7921 us/op 1.07
OrderedSet add up to 128 items then delete first 5.8331 us/op 5.9286 us/op 0.98
Set add up to 128 items then delete last 3.9425 us/op 3.6721 us/op 1.07
OrderedSet add up to 128 items then delete last 5.9030 us/op 5.4861 us/op 1.08
Set add up to 128 items then delete middle 4.1671 us/op 3.6773 us/op 1.13
OrderedSet add up to 128 items then delete middle 10.329 us/op 11.678 us/op 0.88
Set add up to 256 items then delete first 8.7680 us/op 7.5383 us/op 1.16
OrderedSet add up to 256 items then delete first 12.759 us/op 13.050 us/op 0.98
Set add up to 256 items then delete last 7.7900 us/op 7.2987 us/op 1.07
OrderedSet add up to 256 items then delete last 12.514 us/op 12.912 us/op 0.97
Set add up to 256 items then delete middle 8.1416 us/op 7.2142 us/op 1.13
OrderedSet add up to 256 items then delete middle 31.722 us/op 36.661 us/op 0.87
runFastConfirmationRules vc:100000 bc:96 eq:0 3.9957 ms/op 4.8925 ms/op 0.82
runFastConfirmationRules vc:600000 bc:96 eq:0 32.259 ms/op 38.977 ms/op 0.83
runFastConfirmationRules vc:1000000 bc:96 eq:0 53.626 ms/op 63.844 ms/op 0.84
runFastConfirmationRules vc:600000 bc:320 eq:0 32.064 ms/op 45.974 ms/op 0.70
runFastConfirmationRules vc:100000 bc:96 eq:1000 1.1594 s/op 1.3798 s/op 0.84
pass gossip attestations to forkchoice per slot 3.9196 ms/op 4.7744 ms/op 0.82
forkChoice updateHead vc 100000 bc 64 eq 0 346.84 us/op 412.71 us/op 0.84
forkChoice updateHead vc 600000 bc 64 eq 0 2.0986 ms/op 2.5106 ms/op 0.84
forkChoice updateHead vc 1000000 bc 64 eq 0 3.4646 ms/op 4.2224 ms/op 0.82
forkChoice updateHead vc 600000 bc 320 eq 0 2.0435 ms/op 2.6272 ms/op 0.78
forkChoice updateHead vc 600000 bc 1200 eq 0 2.0569 ms/op 2.6069 ms/op 0.79
forkChoice updateHead vc 600000 bc 7200 eq 0 3.3381 ms/op 3.7823 ms/op 0.88
forkChoice updateHead vc 600000 bc 64 eq 1000 2.0418 ms/op 2.5650 ms/op 0.80
forkChoice updateHead vc 600000 bc 64 eq 10000 2.1570 ms/op 2.6440 ms/op 0.82
forkChoice updateHead vc 600000 bc 64 eq 300000 5.4032 ms/op 7.3113 ms/op 0.74
forkChoice updateHead vc 600000 bc 64 eq 0 gloas boosted 2.5103 ms/op 3.1216 ms/op 0.80
computeDeltas 1400000 validators 0% inactive 9.2920 ms/op 12.515 ms/op 0.74
computeDeltas 1400000 validators 10% inactive 8.8351 ms/op 11.926 ms/op 0.74
computeDeltas 1400000 validators 20% inactive 8.3952 ms/op 11.173 ms/op 0.75
computeDeltas 1400000 validators 50% inactive 6.9142 ms/op 9.1114 ms/op 0.76
computeDeltas 2100000 validators 0% inactive 14.035 ms/op 18.848 ms/op 0.74
computeDeltas 2100000 validators 10% inactive 11.583 ms/op 17.636 ms/op 0.66
computeDeltas 2100000 validators 20% inactive 11.010 ms/op 16.682 ms/op 0.66
computeDeltas 2100000 validators 50% inactive 8.9030 ms/op 11.135 ms/op 0.80
altair processAttestation - 250000 vs - 7PWei normalcase 10.403 ms/op 10.662 ms/op 0.98
altair processAttestation - 250000 vs - 7PWei worstcase 13.806 ms/op 12.087 ms/op 1.14
altair processAttestation - setStatus - 1/6 committees join 81.118 us/op 96.009 us/op 0.84
altair processAttestation - setStatus - 1/3 committees join 159.36 us/op 195.94 us/op 0.81
altair processAttestation - setStatus - 1/2 committees join 220.51 us/op 252.75 us/op 0.87
altair processAttestation - setStatus - 2/3 committees join 282.11 us/op 338.12 us/op 0.83
altair processAttestation - setStatus - 4/5 committees join 409.34 us/op 496.16 us/op 0.83
altair processAttestation - setStatus - 100% committees join 491.65 us/op 587.07 us/op 0.84
altair processBlock - 250000 vs - 7PWei normalcase 12.872 ms/op 13.937 ms/op 0.92
altair processBlock - 250000 vs - 7PWei normalcase hashState 34.379 ms/op 35.677 ms/op 0.96
altair processBlock - 250000 vs - 7PWei worstcase 35.277 ms/op 37.579 ms/op 0.94
altair processBlock - 250000 vs - 7PWei worstcase hashState 74.935 ms/op 80.437 ms/op 0.93
phase0 processBlock - 250000 vs - 7PWei normalcase 4.9193 ms/op 5.3718 ms/op 0.92
phase0 processBlock - 250000 vs - 7PWei worstcase 47.593 ms/op 42.195 ms/op 1.13
altair processEth1Data - 250000 vs - 7PWei normalcase 243.90 us/op 308.51 us/op 0.79
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 6.2400 us/op 3.1210 us/op 2.00
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 22.294 us/op 21.061 us/op 1.06
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 9.4910 us/op 5.9950 us/op 1.58
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 6.9830 us/op 4.3180 us/op 1.62
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 90.497 us/op 94.106 us/op 0.96
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.1939 ms/op 1.4762 ms/op 0.81
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.5666 ms/op 1.9715 ms/op 0.79
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.5884 ms/op 1.9761 ms/op 0.80
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.3735 ms/op 5.6147 ms/op 0.60
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.7169 ms/op 2.2299 ms/op 0.77
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.6885 ms/op 4.2608 ms/op 0.87
Tree 40 250000 create 295.75 ms/op 388.17 ms/op 0.76
Tree 40 250000 get(125000) 74.714 ns/op 97.103 ns/op 0.77
Tree 40 250000 set(125000) 801.17 ns/op 1.0449 us/op 0.77
Tree 40 250000 toArray() 16.470 ms/op 16.498 ms/op 1.00
Tree 40 250000 iterate all - toArray() + loop 16.825 ms/op 15.110 ms/op 1.11
Tree 40 250000 iterate all - get(i) 34.483 ms/op 44.104 ms/op 0.78
Array 250000 create 1.4693 ms/op 2.9468 ms/op 0.50
Array 250000 clone - spread 362.75 us/op 876.60 us/op 0.41
Array 250000 get(125000) 0.27000 ns/op 0.30600 ns/op 0.88
Array 250000 set(125000) 0.27600 ns/op 0.30500 ns/op 0.90
Array 250000 iterate all - loop 48.725 us/op 59.596 us/op 0.82
phase0 afterProcessEpoch - 250000 vs - 7PWei 17.859 ms/op 21.882 ms/op 0.82
Array.fill - length 1000000 2.4717 ms/op 4.2975 ms/op 0.58
Array push - length 1000000 9.6757 ms/op 16.423 ms/op 0.59
Array.get 0.20051 ns/op 0.21430 ns/op 0.94
Uint8Array.get 0.21360 ns/op 0.25139 ns/op 0.85
phase0 beforeProcessEpoch - 250000 vs - 7PWei 19.358 ms/op 24.627 ms/op 0.79
altair processEpoch - mainnet_e81889 207.41 ms/op 232.23 ms/op 0.89
mainnet_e81889 - altair beforeProcessEpoch 17.584 ms/op 27.082 ms/op 0.65
mainnet_e81889 - altair processJustificationAndFinalization 4.5000 us/op 5.3860 us/op 0.84
mainnet_e81889 - altair processInactivityUpdates 2.6250 ms/op 3.8621 ms/op 0.68
mainnet_e81889 - altair processRewardsAndPenalties 14.933 ms/op 22.144 ms/op 0.67
mainnet_e81889 - altair processRegistryUpdates 467.00 ns/op 630.00 ns/op 0.74
mainnet_e81889 - altair processSlashings 123.00 ns/op 138.00 ns/op 0.89
mainnet_e81889 - altair processEth1DataReset 120.00 ns/op 134.00 ns/op 0.90
mainnet_e81889 - altair processEffectiveBalanceUpdates 864.88 us/op 1.7832 ms/op 0.49
mainnet_e81889 - altair processSlashingsReset 596.00 ns/op 724.00 ns/op 0.82
mainnet_e81889 - altair processRandaoMixesReset 774.00 ns/op 958.00 ns/op 0.81
mainnet_e81889 - altair processHistoricalRootsUpdate 124.00 ns/op 138.00 ns/op 0.90
mainnet_e81889 - altair processParticipationFlagUpdates 362.00 ns/op 482.00 ns/op 0.75
mainnet_e81889 - altair processSyncCommitteeUpdates 102.00 ns/op 104.00 ns/op 0.98
mainnet_e81889 - altair afterProcessEpoch 18.681 ms/op 22.433 ms/op 0.83
capella processEpoch - mainnet_e217614 629.53 ms/op 700.46 ms/op 0.90
mainnet_e217614 - capella beforeProcessEpoch 57.197 ms/op 65.521 ms/op 0.87
mainnet_e217614 - capella processJustificationAndFinalization 3.9560 us/op 5.1650 us/op 0.77
mainnet_e217614 - capella processInactivityUpdates 11.537 ms/op 17.863 ms/op 0.65
mainnet_e217614 - capella processRewardsAndPenalties 79.083 ms/op 103.03 ms/op 0.77
mainnet_e217614 - capella processRegistryUpdates 3.7070 us/op 4.6600 us/op 0.80
mainnet_e217614 - capella processSlashings 125.00 ns/op 137.00 ns/op 0.91
mainnet_e217614 - capella processEth1DataReset 122.00 ns/op 132.00 ns/op 0.92
mainnet_e217614 - capella processEffectiveBalanceUpdates 7.9189 ms/op 22.061 ms/op 0.36
mainnet_e217614 - capella processSlashingsReset 580.00 ns/op 704.00 ns/op 0.82
mainnet_e217614 - capella processRandaoMixesReset 790.00 ns/op 956.00 ns/op 0.83
mainnet_e217614 - capella processHistoricalSummariesUpdate 124.00 ns/op 135.00 ns/op 0.92
mainnet_e217614 - capella processParticipationFlagUpdates 366.00 ns/op 481.00 ns/op 0.76
mainnet_e217614 - capella afterProcessEpoch 49.176 ms/op 58.906 ms/op 0.83
phase0 processEpoch - mainnet_e58758 219.48 ms/op 226.78 ms/op 0.97
mainnet_e58758 - phase0 beforeProcessEpoch 61.039 ms/op 57.954 ms/op 1.05
mainnet_e58758 - phase0 processJustificationAndFinalization 4.1290 us/op 4.9610 us/op 0.83
mainnet_e58758 - phase0 processRewardsAndPenalties 14.559 ms/op 17.890 ms/op 0.81
mainnet_e58758 - phase0 processRegistryUpdates 1.8470 us/op 2.2960 us/op 0.80
mainnet_e58758 - phase0 processSlashings 125.00 ns/op 136.00 ns/op 0.92
mainnet_e58758 - phase0 processEth1DataReset 122.00 ns/op 133.00 ns/op 0.92
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 603.83 us/op 847.95 us/op 0.71
mainnet_e58758 - phase0 processSlashingsReset 716.00 ns/op 966.00 ns/op 0.74
mainnet_e58758 - phase0 processRandaoMixesReset 999.00 ns/op 1.0320 us/op 0.97
mainnet_e58758 - phase0 processHistoricalRootsUpdate 126.00 ns/op 137.00 ns/op 0.92
mainnet_e58758 - phase0 processParticipationRecordUpdates 997.00 ns/op 1.0960 us/op 0.91
mainnet_e58758 - phase0 afterProcessEpoch 15.633 ms/op 30.232 ms/op 0.52
phase0 processEffectiveBalanceUpdates - 250000 normalcase 713.81 us/op 1.0355 ms/op 0.69
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 856.21 us/op 1.6777 ms/op 0.51
gloas processInactivityUpdates - 250000 inactivity leak all eligible missed target 13.498 ms/op 11.428 ms/op 1.18
phase0 processRegistryUpdates - 250000 normalcase 6.7600 us/op 2.5060 us/op 2.70
phase0 processRegistryUpdates - 250000 badcase_full_deposits 132.14 us/op 144.87 us/op 0.91
phase0 processRegistryUpdates - 250000 worstcase 0.5 80.274 ms/op 72.590 ms/op 1.11
altair processRewardsAndPenalties - 250000 normalcase 15.443 ms/op 15.002 ms/op 1.03
altair processRewardsAndPenalties - 250000 worstcase 15.750 ms/op 15.037 ms/op 1.05
phase0 getAttestationDeltas - 250000 normalcase 4.5429 ms/op 5.8810 ms/op 0.77
phase0 getAttestationDeltas - 250000 worstcase 4.3539 ms/op 9.3971 ms/op 0.46
phase0 processSlashings - 250000 worstcase 55.342 us/op 63.530 us/op 0.87
altair processSyncCommitteeUpdates - 250000 15.701 ms/op 13.928 ms/op 1.13
BeaconState.hashTreeRoot - No change 159.00 ns/op 172.00 ns/op 0.92
BeaconState.hashTreeRoot - 1 full validator 88.115 us/op 79.409 us/op 1.11
BeaconState.hashTreeRoot - 32 full validator 997.87 us/op 999.23 us/op 1.00
BeaconState.hashTreeRoot - 512 full validator 10.761 ms/op 8.1893 ms/op 1.31
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 112.47 us/op 106.41 us/op 1.06
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.6109 ms/op 1.3159 ms/op 1.22
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 25.168 ms/op 14.801 ms/op 1.70
BeaconState.hashTreeRoot - 1 balances 83.808 us/op 60.194 us/op 1.39
BeaconState.hashTreeRoot - 32 balances 819.48 us/op 631.61 us/op 1.30
BeaconState.hashTreeRoot - 512 balances 8.2697 ms/op 6.2118 ms/op 1.33
BeaconState.hashTreeRoot - 250000 balances 168.38 ms/op 148.57 ms/op 1.13
aggregationBits - 2048 els - zipIndexesInBitList 18.744 us/op 21.753 us/op 0.86
regular array get 100000 times 19.766 us/op 23.770 us/op 0.83
wrappedArray get 100000 times 19.845 us/op 23.720 us/op 0.84
arrayWithProxy get 100000 times 14.502 ms/op 10.117 ms/op 1.43
ssz.Root.equals 16.056 ns/op 22.111 ns/op 0.73
byteArrayEquals 15.801 ns/op 21.951 ns/op 0.72
Buffer.compare 6.9410 ns/op 9.1320 ns/op 0.76
processSlot - 1 slots 12.071 us/op 11.261 us/op 1.07
processSlot - 32 slots 2.4305 ms/op 2.0590 ms/op 1.18
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 7.8872 ms/op 4.7354 ms/op 1.67
getCommitteeAssignments - req 1 vs - 250000 vc 1.5577 ms/op 2.4320 ms/op 0.64
getCommitteeAssignments - req 100 vs - 250000 vc 3.5673 ms/op 3.5342 ms/op 1.01
getCommitteeAssignments - req 1000 vs - 250000 vc 3.7409 ms/op 3.7855 ms/op 0.99
findModifiedValidators - 10000 modified validators 891.95 ms/op 969.36 ms/op 0.92
findModifiedValidators - 1000 modified validators 587.91 ms/op 560.00 ms/op 1.05
findModifiedValidators - 100 modified validators 393.78 ms/op 420.01 ms/op 0.94
findModifiedValidators - 10 modified validators 384.54 ms/op 324.40 ms/op 1.19
findModifiedValidators - 1 modified validators 305.24 ms/op 246.86 ms/op 1.24
findModifiedValidators - no difference 226.72 ms/op 206.36 ms/op 1.10
migrate state 1500000 validators, 3400 modified, 2000 new 2.8346 s/op 3.1400 s/op 0.90
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 2.6000 ns/op 3.4700 ns/op 0.75
state getBlockRootAtSlot - 250000 vs - 7PWei 377.86 ns/op 399.12 ns/op 0.95
computeProposerIndex 100000 validators 2.4860 ms/op 2.7799 ms/op 0.89
getNextSyncCommitteeIndices 1000 validators 1.3506 ms/op 1.4591 ms/op 0.93
getNextSyncCommitteeIndices 10000 validators 13.377 ms/op 13.982 ms/op 0.96
getNextSyncCommitteeIndices 100000 validators 51.391 ms/op 56.464 ms/op 0.91
computeProposers - vc 250000 1.1307 ms/op 1.2711 ms/op 0.89
computeEpochShuffling - vc 250000 17.728 ms/op 21.004 ms/op 0.84
getNextSyncCommittee - vc 250000 10.975 ms/op 13.320 ms/op 0.82
nodejs block root to RootHex using toHex 75.540 ns/op 98.615 ns/op 0.77
nodejs block root to RootHex using toRootHex 46.781 ns/op 66.314 ns/op 0.71
nodejs fromHex(blob) 779.41 us/op 1.1224 ms/op 0.69
nodejs fromHexInto(blob) 57.705 us/op 84.385 us/op 0.68
nodejs block root to RootHex using the deprecated toHexString 581.70 ns/op 731.51 ns/op 0.80
nodejs byteArrayEquals 32 bytes (block root) 18.446 ns/op 26.687 ns/op 0.69
nodejs byteArrayEquals 48 bytes (pubkey) 26.489 ns/op 38.449 ns/op 0.69
nodejs byteArrayEquals 96 bytes (signature) 28.750 ns/op 39.458 ns/op 0.73
nodejs byteArrayEquals 1024 bytes 34.034 ns/op 44.550 ns/op 0.76
nodejs byteArrayEquals 131072 bytes (blob) 1.0904 us/op 1.8021 us/op 0.61
browser block root to RootHex using toHex 114.19 ns/op 147.36 ns/op 0.77
browser block root to RootHex using toRootHex 106.41 ns/op 134.50 ns/op 0.79
browser fromHex(blob) 1.3658 ms/op 1.9293 ms/op 0.71
browser fromHexInto(blob) 465.16 us/op 614.05 us/op 0.76
browser block root to RootHex using the deprecated toHexString 587.19 ns/op 504.62 ns/op 1.16
browser byteArrayEquals 32 bytes (block root) 19.669 ns/op 28.127 ns/op 0.70
browser byteArrayEquals 48 bytes (pubkey) 28.226 ns/op 39.940 ns/op 0.71
browser byteArrayEquals 96 bytes (signature) 53.178 ns/op 75.119 ns/op 0.71
browser byteArrayEquals 1024 bytes 529.49 ns/op 758.46 ns/op 0.70
browser byteArrayEquals 131072 bytes (blob) 66.392 us/op 96.223 us/op 0.69

by benchmarkbot/action

@lodekeeper lodekeeper left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM. Checked against consensus-specs master (12c8b24bc). e42b24931 (#5639), linked in the description, is still the latest change to specs/_features/eip8025, so the types match the current spec:

  • ProofData is ByteList[MAX_PROOF_SIZE] after #5593, not progressive, and the test pins that through the root
  • PublicInput is a progressive container with 4 active fields in spec order, and chain_id as bigint is right for chain ids above 2^53
  • ExecutionProof, ExecutionProofEnvelope and SignedExecutionProofEnvelope fields and order match
  • MAX_PROOF_SIZE, STATELESS_INPUT_SCHEMA_ID and MAX_SIGNED_EXECUTION_PROOF_ENVELOPE_SIZE match, and the envelope max size works out to 4 + 8 + 96 + (4 + 1 + 32 + 4194304) = 4194449

DOMAIN_EXECUTION_PROOF (0x0F000000) isn't added yet, which is fine for a types-only PR. It'll be needed with the signature verification part of #10384.

@matthewkeil matthewkeil moved this from In Progress to Awaiting Author in Lodestar Team Coordination Oct 14, 2026

@nflaig nflaig left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think this is fine but curious about thoughts from others whether adding eip specific types is something we want

@lodekeeper

Copy link
Copy Markdown
Contributor

On EIP-specific types: I think a separate namespace fits here. EIP-8025 is an opt-in _features spec that isn't scheduled for any fork, and these containers are standalone gossip/proof types that don't extend a fork's state or block. So there's nothing to version per fork, and putting them under heze would suggest a schedule that doesn't exist. If it ever gets scheduled, moving them into that fork's namespace is a small mechanical change.

Also, sorry about the 👀 noise. The notification sweep was acking every comment it picked up. It now only does that for comments addressed to me.

@spiral-ladder

spiral-ladder commented Oct 14, 2026 •

Copy link
Copy Markdown
Member Author

I think this is fine but curious about thoughts from others whether adding eip specific types is something we want

imo, regardless we still probably have to add these anyway (unless we do optional proofs entirely on a separate branch optional-proofs and only merge it once its SFI in H?), namespacing these types to be eip specific also means we can do a easy sweep and remove if this eip ends up being withdrawn or abandoned for w/e reason

happy to do either

@nflaig

nflaig commented Oct 14, 2026

Copy link
Copy Markdown
Member

unless we do optional proofs entirely on a separate branch optional-proofs

nah I dislike this, let's try to get the code into our trunk branch, it should be pretty isolated/optional

@spiral-ladder

Copy link
Copy Markdown
Member Author

if/when 8025 goes in, we can rename to something more appropriate, maybe proofs or something

@wemeetagain

Copy link
Copy Markdown
Member

I think this is fine but curious about thoughts from others whether adding eip specific types is something we want

Imo all production types should be organized by fork.
But since this is not CFI'd I guess its fine to live as its own self-contained (and deleteable) module

if/when 8025 goes in, we can rename to something more appropriate, maybe proofs or something

rather just move it into heze or whatever fork.

@nflaig nflaig left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

not so sure about the tests but otherwise lgtm

@wemeetagain
wemeetagain merged commit fd649df into unstable Oct 14, 2026
24 checks passed
@wemeetagain
wemeetagain deleted the bing/8025-types branch October 14, 2026 23:50
@github-project-automation github-project-automation Bot moved this from Awaiting Author to Done in Lodestar Team Coordination Oct 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

4 participants