Skip to content

test: update fast confirmation spec tests to v1.7.0-alpha.13 - #9778

Merged
matthewkeil merged 4 commits into
unstablefrom
nh/fcr-spec-update-5400
Aug 10, 2026
Merged

test: update fast confirmation spec tests to v1.7.0-alpha.13#9778
matthewkeil merged 4 commits into
unstablefrom
nh/fcr-spec-update-5400

Conversation

@nazarhussain

@nazarhussain nazarhussain commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Motivation

Update spec tests to v1.7.0-alpha.13 FCR fixes proposed from #9690 (consensus-specs#5489, consensus-specs#5490) and complete the missing FCR assertions.

Description

fast_confirmation (minimal): 1416 passed / 20 skipped / 0 failed. Full spec suites green: minimal 70,899 passed, mainnet 13,586 passed, 0 failures.

Refs #9690

AI Assistance Disclosure

Implemented and verified with AI assistance (Claude Code); all changes reviewed and tests executed locally.

🤖 Generated with Claude Code

nazarhussain and others added 4 commits August 7, 2026 20:23
- unskip is_one_confirmed_fails_large_validator_slashed: passes on the
  slot-start schedule since consensus-specs #5490 reordered the
  slashing before the tick
- assert safe_execution_block_hash (consensus-specs #5449) and the
  FastConfirmationStore variables in every FCR checks step, exposed via
  IForkChoice.getFastConfirmationStore()
- return ZERO_HASH from getSafeExecutionBlockHash for a genesis anchor:
  the genesis block body carries a default payload so it is not an
  execution block per spec; proto array reports the state header hash
- skip vectors blocked on upstream generation artifacts (stub deposit
  signatures, double/skipped on_fast_confirmation runs) and the gloas
  suite pending the alpha.13 gloas implementation

Refs #9690

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
consensus-specs #5498/#5499 fix the double/skipped on_fast_confirmation
runs; unskip on the next spec-tests release.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Gloas alpha.13 state transition and the gloas-modified
get_safe_execution_block_hash landed on unstable (#9393), so the suite
passes fully, safe_execution_block_hash assertions included.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@nazarhussain
nazarhussain force-pushed the nh/fcr-spec-update-5400 branch from 3923506 to a3344bb Compare August 7, 2026 16:19
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Performance Report

🚀🚀 Significant benchmark improvement detected

Benchmark suite Current: 3853506 Previous: 4da7a94 Ratio
proposeBlockBody type=full, size=empty 750.64 us/op 3.2589 ms/op 0.23
Full benchmark results
Benchmark suite Current: 3853506 Previous: 4da7a94 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.3214 ms/op 997.33 us/op 1.32
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 43.070 us/op 41.653 us/op 1.03
BLS verify - blst 754.23 us/op 657.39 us/op 1.15
BLS verifyMultipleSignatures 3 - blst 1.3755 ms/op 1.3538 ms/op 1.02
BLS verifyMultipleSignatures 8 - blst 2.1709 ms/op 2.1316 ms/op 1.02
BLS verifyMultipleSignatures 32 - blst 7.4688 ms/op 6.8353 ms/op 1.09
BLS verifyMultipleSignatures 64 - blst 13.562 ms/op 13.807 ms/op 0.98
BLS verifyMultipleSignatures 128 - blst 25.340 ms/op 25.740 ms/op 0.98
BLS deserializing 10000 signatures 653.82 ms/op 642.88 ms/op 1.02
BLS deserializing 100000 signatures 6.4515 s/op 6.4880 s/op 0.99
BLS verifyMultipleSignatures - same message - 3 - blst 809.26 us/op 796.80 us/op 1.02
BLS verifyMultipleSignatures - same message - 8 - blst 951.03 us/op 901.51 us/op 1.05
BLS verifyMultipleSignatures - same message - 32 - blst 1.5757 ms/op 1.5080 ms/op 1.04
BLS verifyMultipleSignatures - same message - 64 - blst 2.4250 ms/op 2.3846 ms/op 1.02
BLS verifyMultipleSignatures - same message - 128 - blst 4.0319 ms/op 4.0964 ms/op 0.98
BLS aggregatePubkeys 32 - blst 17.804 us/op 17.927 us/op 0.99
BLS aggregatePubkeys 128 - blst 63.616 us/op 63.296 us/op 1.01
getSlashingsAndExits - default max 50.002 us/op 71.992 us/op 0.69
getSlashingsAndExits - 2k 401.38 us/op 395.46 us/op 1.01
proposeBlockBody type=full, size=empty 750.64 us/op 3.2589 ms/op 0.23
isKnown best case - 1 super set check 161.00 ns/op 161.00 ns/op 1.00
isKnown normal case - 2 super set checks 161.00 ns/op 160.00 ns/op 1.01
isKnown worse case - 16 super set checks 162.00 ns/op 163.00 ns/op 0.99
validate api signedAggregateAndProof - struct 1.5015 ms/op 1.4885 ms/op 1.01
validate gossip signedAggregateAndProof - struct 1.5627 ms/op 1.4738 ms/op 1.06
batch validate gossip attestation - vc 640000 - chunk 32 125.66 us/op 108.01 us/op 1.16
batch validate gossip attestation - vc 640000 - chunk 64 114.85 us/op 95.565 us/op 1.20
batch validate gossip attestation - vc 640000 - chunk 128 94.570 us/op 89.792 us/op 1.05
batch validate gossip attestation - vc 640000 - chunk 256 95.264 us/op 91.871 us/op 1.04
bytes32 toHexString 278.00 ns/op 284.00 ns/op 0.98
bytes32 Buffer.toString(hex) 173.00 ns/op 173.00 ns/op 1.00
bytes32 Buffer.toString(hex) from Uint8Array 239.00 ns/op 237.00 ns/op 1.01
bytes32 Buffer.toString(hex) + 0x 173.00 ns/op 175.00 ns/op 0.99
Return object 10000 times 0.21220 ns/op 0.21040 ns/op 1.01
Throw Error 10000 times 3.3358 us/op 3.2810 us/op 1.02
toHex 93.830 ns/op 99.553 ns/op 0.94
Buffer.from 84.319 ns/op 87.675 ns/op 0.96
shared Buffer 57.436 ns/op 56.895 ns/op 1.01
fastMsgIdFn sha256 / 200 bytes 1.4700 us/op 1.4670 us/op 1.00
fastMsgIdFn h32 xxhash / 200 bytes 155.00 ns/op 154.00 ns/op 1.01
fastMsgIdFn h64 xxhash / 200 bytes 213.00 ns/op 203.00 ns/op 1.05
fastMsgIdFn sha256 / 1000 bytes 4.7570 us/op 4.6840 us/op 1.02
fastMsgIdFn h32 xxhash / 1000 bytes 245.00 ns/op 246.00 ns/op 1.00
fastMsgIdFn h64 xxhash / 1000 bytes 256.00 ns/op 250.00 ns/op 1.02
fastMsgIdFn sha256 / 10000 bytes 41.670 us/op 41.021 us/op 1.02
fastMsgIdFn h32 xxhash / 10000 bytes 1.2810 us/op 1.2740 us/op 1.01
fastMsgIdFn h64 xxhash / 10000 bytes 830.00 ns/op 823.00 ns/op 1.01
send data - 1000 256B messages 4.4591 ms/op 4.3971 ms/op 1.01
send data - 1000 512B messages 5.5944 ms/op 5.7018 ms/op 0.98
send data - 1000 1024B messages 6.0947 ms/op 5.9999 ms/op 1.02
send data - 1000 1200B messages 6.7619 ms/op 6.5909 ms/op 1.03
send data - 1000 2048B messages 14.741 ms/op 29.603 ms/op 0.50
send data - 1000 4096B messages 50.678 ms/op 71.377 ms/op 0.71
send data - 1000 16384B messages 110.42 ms/op 288.96 ms/op 0.38
send data - 1000 65536B messages 1.1104 s/op 1.0797 s/op 1.03
enrSubnets - fastDeserialize 64 bits 764.00 ns/op 764.00 ns/op 1.00
enrSubnets - ssz BitVector 64 bits 261.00 ns/op 271.00 ns/op 0.96
enrSubnets - fastDeserialize 4 bits 98.000 ns/op 104.00 ns/op 0.94
enrSubnets - ssz BitVector 4 bits 258.00 ns/op 274.00 ns/op 0.94
prioritizePeers score -10:0 att 32-0.1 sync 2-0 208.48 us/op 204.85 us/op 1.02
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 230.41 us/op 236.19 us/op 0.98
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 340.52 us/op 333.59 us/op 1.02
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 587.93 us/op 603.22 us/op 0.97
prioritizePeers score 0:0 att 64-1 sync 4-1 665.16 us/op 709.35 us/op 0.94
array of 16000 items push then shift 1.2342 us/op 1.2635 us/op 0.98
LinkedList of 16000 items push then shift 7.3400 ns/op 8.2740 ns/op 0.89
array of 16000 items push then pop 65.617 ns/op 67.589 ns/op 0.97
LinkedList of 16000 items push then pop 5.7920 ns/op 6.4960 ns/op 0.89
array of 24000 items push then shift 1.7972 us/op 1.8183 us/op 0.99
LinkedList of 24000 items push then shift 7.0240 ns/op 7.4080 ns/op 0.95
array of 24000 items push then pop 89.999 ns/op 96.733 ns/op 0.93
LinkedList of 24000 items push then pop 5.7490 ns/op 6.5790 ns/op 0.87
intersect bitArray bitLen 8 3.7410 ns/op 3.8270 ns/op 0.98
intersect array and set length 8 28.201 ns/op 29.452 ns/op 0.96
intersect bitArray bitLen 128 22.520 ns/op 22.874 ns/op 0.98
intersect array and set length 128 474.81 ns/op 486.04 ns/op 0.98
bitArray.getTrueBitIndexes() bitLen 128 896.00 ns/op 927.00 ns/op 0.97
bitArray.getTrueBitIndexes() bitLen 248 1.6090 us/op 1.7420 us/op 0.92
bitArray.getTrueBitIndexes() bitLen 512 3.3550 us/op 3.7200 us/op 0.90
Full columns - reconstruct all 6 blobs 288.79 us/op 184.07 us/op 1.57
Full columns - reconstruct half of the blobs out of 6 95.254 us/op 90.635 us/op 1.05
Full columns - reconstruct single blob out of 6 44.805 us/op 33.816 us/op 1.32
Half columns - reconstruct all 6 blobs 366.28 ms/op 376.79 ms/op 0.97
Half columns - reconstruct half of the blobs out of 6 186.75 ms/op 189.48 ms/op 0.99
Half columns - reconstruct single blob out of 6 67.335 ms/op 68.224 ms/op 0.99
Set add up to 64 items then delete first 1.5810 us/op 1.5803 us/op 1.00
OrderedSet add up to 64 items then delete first 2.4677 us/op 2.4328 us/op 1.01
Set add up to 64 items then delete last 1.8331 us/op 1.8372 us/op 1.00
OrderedSet add up to 64 items then delete last 2.8959 us/op 2.7182 us/op 1.07
Set add up to 64 items then delete middle 1.8402 us/op 1.8119 us/op 1.02
OrderedSet add up to 64 items then delete middle 4.1613 us/op 4.1690 us/op 1.00
Set add up to 128 items then delete first 3.6125 us/op 3.5836 us/op 1.01
OrderedSet add up to 128 items then delete first 5.6322 us/op 5.5214 us/op 1.02
Set add up to 128 items then delete last 3.4623 us/op 3.4364 us/op 1.01
OrderedSet add up to 128 items then delete last 5.2103 us/op 5.3219 us/op 0.98
Set add up to 128 items then delete middle 3.4794 us/op 3.5550 us/op 0.98
OrderedSet add up to 128 items then delete middle 10.995 us/op 11.488 us/op 0.96
Set add up to 256 items then delete first 7.9960 us/op 7.6407 us/op 1.05
OrderedSet add up to 256 items then delete first 11.772 us/op 12.309 us/op 0.96
Set add up to 256 items then delete last 7.2319 us/op 7.2857 us/op 0.99
OrderedSet add up to 256 items then delete last 11.444 us/op 11.410 us/op 1.00
Set add up to 256 items then delete middle 7.2035 us/op 6.9098 us/op 1.04
OrderedSet add up to 256 items then delete middle 34.505 us/op 34.884 us/op 0.99
runFastConfirmationRules vc:100000 bc:96 eq:0 4.4842 ms/op 4.5120 ms/op 0.99
runFastConfirmationRules vc:600000 bc:96 eq:0 35.385 ms/op 35.589 ms/op 0.99
runFastConfirmationRules vc:1000000 bc:96 eq:0 59.790 ms/op 60.894 ms/op 0.98
runFastConfirmationRules vc:600000 bc:320 eq:0 34.645 ms/op 35.653 ms/op 0.97
runFastConfirmationRules vc:100000 bc:96 eq:1000 1.1211 s/op 1.0705 s/op 1.05
pass gossip attestations to forkchoice per slot 2.4521 ms/op 2.5851 ms/op 0.95
forkChoice updateHead vc 100000 bc 64 eq 0 388.34 us/op 404.57 us/op 0.96
forkChoice updateHead vc 600000 bc 64 eq 0 2.3370 ms/op 2.4360 ms/op 0.96
forkChoice updateHead vc 1000000 bc 64 eq 0 3.9659 ms/op 4.0212 ms/op 0.99
forkChoice updateHead vc 600000 bc 320 eq 0 2.3786 ms/op 2.3849 ms/op 1.00
forkChoice updateHead vc 600000 bc 1200 eq 0 2.4218 ms/op 2.5335 ms/op 0.96
forkChoice updateHead vc 600000 bc 7200 eq 0 2.9966 ms/op 3.2070 ms/op 0.93
forkChoice updateHead vc 600000 bc 64 eq 1000 2.4265 ms/op 2.4153 ms/op 1.00
forkChoice updateHead vc 600000 bc 64 eq 10000 2.4889 ms/op 2.4758 ms/op 1.01
forkChoice updateHead vc 600000 bc 64 eq 300000 6.3462 ms/op 6.3623 ms/op 1.00
computeDeltas 1400000 validators 0% inactive 12.033 ms/op 11.858 ms/op 1.01
computeDeltas 1400000 validators 10% inactive 11.566 ms/op 11.165 ms/op 1.04
computeDeltas 1400000 validators 20% inactive 10.865 ms/op 10.576 ms/op 1.03
computeDeltas 1400000 validators 50% inactive 8.7375 ms/op 8.7887 ms/op 0.99
computeDeltas 2100000 validators 0% inactive 17.824 ms/op 17.829 ms/op 1.00
computeDeltas 2100000 validators 10% inactive 17.044 ms/op 16.863 ms/op 1.01
computeDeltas 2100000 validators 20% inactive 16.291 ms/op 15.861 ms/op 1.03
computeDeltas 2100000 validators 50% inactive 10.551 ms/op 10.485 ms/op 1.01
altair processAttestation - 250000 vs - 7PWei normalcase 2.0365 ms/op 2.5542 ms/op 0.80
altair processAttestation - 250000 vs - 7PWei worstcase 2.8210 ms/op 3.1474 ms/op 0.90
altair processAttestation - setStatus - 1/6 committees join 105.59 us/op 96.630 us/op 1.09
altair processAttestation - setStatus - 1/3 committees join 203.75 us/op 192.55 us/op 1.06
altair processAttestation - setStatus - 1/2 committees join 287.13 us/op 278.50 us/op 1.03
altair processAttestation - setStatus - 2/3 committees join 369.66 us/op 363.64 us/op 1.02
altair processAttestation - setStatus - 4/5 committees join 505.13 us/op 497.01 us/op 1.02
altair processAttestation - setStatus - 100% committees join 592.29 us/op 584.55 us/op 1.01
altair processBlock - 250000 vs - 7PWei normalcase 3.9021 ms/op 4.3509 ms/op 0.90
altair processBlock - 250000 vs - 7PWei normalcase hashState 16.406 ms/op 17.335 ms/op 0.95
altair processBlock - 250000 vs - 7PWei worstcase 20.798 ms/op 21.596 ms/op 0.96
altair processBlock - 250000 vs - 7PWei worstcase hashState 41.079 ms/op 45.016 ms/op 0.91
phase0 processBlock - 250000 vs - 7PWei normalcase 1.2374 ms/op 1.4269 ms/op 0.87
phase0 processBlock - 250000 vs - 7PWei worstcase 16.539 ms/op 16.469 ms/op 1.00
altair processEth1Data - 250000 vs - 7PWei normalcase 275.23 us/op 283.56 us/op 0.97
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.4830 us/op 4.0740 us/op 0.85
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 20.632 us/op 21.535 us/op 0.96
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 5.8240 us/op 5.5050 us/op 1.06
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.5680 us/op 4.7790 us/op 0.75
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 87.557 us/op 89.359 us/op 0.98
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.3272 ms/op 1.4155 ms/op 0.94
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.7606 ms/op 1.8927 ms/op 0.93
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8008 ms/op 1.8569 ms/op 0.97
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.5490 ms/op 3.6155 ms/op 0.98
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 1.9752 ms/op 2.0092 ms/op 0.98
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.7708 ms/op 4.4111 ms/op 0.85
Tree 40 250000 create 316.31 ms/op 322.71 ms/op 0.98
Tree 40 250000 get(125000) 86.535 ns/op 90.053 ns/op 0.96
Tree 40 250000 set(125000) 950.86 ns/op 964.42 ns/op 0.99
Tree 40 250000 toArray() 13.047 ms/op 14.442 ms/op 0.90
Tree 40 250000 iterate all - toArray() + loop 13.488 ms/op 15.731 ms/op 0.86
Tree 40 250000 iterate all - get(i) 36.039 ms/op 38.531 ms/op 0.94
Array 250000 create 2.0986 ms/op 2.0889 ms/op 1.00
Array 250000 clone - spread 644.22 us/op 650.68 us/op 0.99
Array 250000 get(125000) 0.28600 ns/op 0.28600 ns/op 1.00
Array 250000 set(125000) 0.29100 ns/op 0.28600 ns/op 1.02
Array 250000 iterate all - loop 56.333 us/op 55.867 us/op 1.01
phase0 afterProcessEpoch - 250000 vs - 7PWei 50.712 ms/op 63.221 ms/op 0.80
Array.fill - length 1000000 2.0807 ms/op 2.0457 ms/op 1.02
Array push - length 1000000 8.4969 ms/op 9.0734 ms/op 0.94
Array.get 0.19425 ns/op 0.20261 ns/op 0.96
Uint8Array.get 0.22343 ns/op 0.23503 ns/op 0.95
phase0 beforeProcessEpoch - 250000 vs - 7PWei 15.656 ms/op 14.228 ms/op 1.10
altair processEpoch - mainnet_e81889 273.91 ms/op 280.41 ms/op 0.98
mainnet_e81889 - altair beforeProcessEpoch 15.232 ms/op 16.725 ms/op 0.91
mainnet_e81889 - altair processJustificationAndFinalization 6.2950 us/op 6.1090 us/op 1.03
mainnet_e81889 - altair processInactivityUpdates 3.4973 ms/op 3.8775 ms/op 0.90
mainnet_e81889 - altair processRewardsAndPenalties 19.561 ms/op 20.492 ms/op 0.95
mainnet_e81889 - altair processRegistryUpdates 569.00 ns/op 564.00 ns/op 1.01
mainnet_e81889 - altair processSlashings 148.00 ns/op 142.00 ns/op 1.04
mainnet_e81889 - altair processEth1DataReset 142.00 ns/op 136.00 ns/op 1.04
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.4585 ms/op 3.9276 ms/op 0.37
mainnet_e81889 - altair processSlashingsReset 789.00 ns/op 670.00 ns/op 1.18
mainnet_e81889 - altair processRandaoMixesReset 1.2080 us/op 1.1610 us/op 1.04
mainnet_e81889 - altair processHistoricalRootsUpdate 142.00 ns/op 134.00 ns/op 1.06
mainnet_e81889 - altair processParticipationFlagUpdates 445.00 ns/op 438.00 ns/op 1.02
mainnet_e81889 - altair processSyncCommitteeUpdates 118.00 ns/op 104.00 ns/op 1.13
mainnet_e81889 - altair afterProcessEpoch 41.373 ms/op 39.912 ms/op 1.04
capella processEpoch - mainnet_e217614 798.53 ms/op 872.91 ms/op 0.91
mainnet_e217614 - capella beforeProcessEpoch 56.472 ms/op 80.983 ms/op 0.70
mainnet_e217614 - capella processJustificationAndFinalization 6.3250 us/op 7.9530 us/op 0.80
mainnet_e217614 - capella processInactivityUpdates 15.464 ms/op 19.501 ms/op 0.79
mainnet_e217614 - capella processRewardsAndPenalties 90.313 ms/op 134.25 ms/op 0.67
mainnet_e217614 - capella processRegistryUpdates 4.4930 us/op 4.6050 us/op 0.98
mainnet_e217614 - capella processSlashings 147.00 ns/op 144.00 ns/op 1.02
mainnet_e217614 - capella processEth1DataReset 143.00 ns/op 142.00 ns/op 1.01
mainnet_e217614 - capella processEffectiveBalanceUpdates 14.199 ms/op 20.048 ms/op 0.71
mainnet_e217614 - capella processSlashingsReset 689.00 ns/op 701.00 ns/op 0.98
mainnet_e217614 - capella processRandaoMixesReset 1.1660 us/op 1.4120 us/op 0.83
mainnet_e217614 - capella processHistoricalRootsUpdate 143.00 ns/op 142.00 ns/op 1.01
mainnet_e217614 - capella processParticipationFlagUpdates 449.00 ns/op 568.00 ns/op 0.79
mainnet_e217614 - capella afterProcessEpoch 109.86 ms/op 109.48 ms/op 1.00
phase0 processEpoch - mainnet_e58758 302.41 ms/op 331.89 ms/op 0.91
mainnet_e58758 - phase0 beforeProcessEpoch 66.876 ms/op 71.822 ms/op 0.93
mainnet_e58758 - phase0 processJustificationAndFinalization 6.5530 us/op 6.1650 us/op 1.06
mainnet_e58758 - phase0 processRewardsAndPenalties 15.864 ms/op 16.075 ms/op 0.99
mainnet_e58758 - phase0 processRegistryUpdates 2.2800 us/op 2.2450 us/op 1.02
mainnet_e58758 - phase0 processSlashings 221.00 ns/op 138.00 ns/op 1.60
mainnet_e58758 - phase0 processEth1DataReset 144.00 ns/op 136.00 ns/op 1.06
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 803.21 us/op 834.59 us/op 0.96
mainnet_e58758 - phase0 processSlashingsReset 869.00 ns/op 880.00 ns/op 0.99
mainnet_e58758 - phase0 processRandaoMixesReset 1.2890 us/op 1.3420 us/op 0.96
mainnet_e58758 - phase0 processHistoricalRootsUpdate 145.00 ns/op 136.00 ns/op 1.07
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.1820 us/op 1.4660 us/op 0.81
mainnet_e58758 - phase0 afterProcessEpoch 33.424 ms/op 34.226 ms/op 0.98
phase0 processEffectiveBalanceUpdates - 250000 normalcase 979.46 us/op 1.0926 ms/op 0.90
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.5641 ms/op 1.6210 ms/op 0.96
altair processInactivityUpdates - 250000 normalcase 11.159 ms/op 11.185 ms/op 1.00
altair processInactivityUpdates - 250000 worstcase 10.780 ms/op 13.661 ms/op 0.79
phase0 processRegistryUpdates - 250000 normalcase 2.4850 us/op 2.4520 us/op 1.01
phase0 processRegistryUpdates - 250000 badcase_full_deposits 142.95 us/op 146.98 us/op 0.97
phase0 processRegistryUpdates - 250000 worstcase 0.5 62.920 ms/op 58.032 ms/op 1.08
altair processRewardsAndPenalties - 250000 normalcase 17.293 ms/op 16.020 ms/op 1.08
altair processRewardsAndPenalties - 250000 worstcase 15.218 ms/op 15.667 ms/op 0.97
phase0 getAttestationDeltas - 250000 normalcase 5.2874 ms/op 5.1379 ms/op 1.03
phase0 getAttestationDeltas - 250000 worstcase 5.2492 ms/op 5.2769 ms/op 0.99
phase0 processSlashings - 250000 worstcase 58.494 us/op 60.648 us/op 0.96
altair processSyncCommitteeUpdates - 250000 9.7960 ms/op 10.062 ms/op 0.97
BeaconState.hashTreeRoot - No change 171.00 ns/op 172.00 ns/op 0.99
BeaconState.hashTreeRoot - 1 full validator 73.213 us/op 82.161 us/op 0.89
BeaconState.hashTreeRoot - 32 full validator 831.14 us/op 852.30 us/op 0.98
BeaconState.hashTreeRoot - 512 full validator 6.9736 ms/op 8.4459 ms/op 0.83
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 89.821 us/op 105.86 us/op 0.85
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.3072 ms/op 1.4854 ms/op 0.88
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 14.977 ms/op 17.841 ms/op 0.84
BeaconState.hashTreeRoot - 1 balances 71.289 us/op 73.730 us/op 0.97
BeaconState.hashTreeRoot - 32 balances 726.32 us/op 787.79 us/op 0.92
BeaconState.hashTreeRoot - 512 balances 5.9869 ms/op 5.8263 ms/op 1.03
BeaconState.hashTreeRoot - 250000 balances 129.31 ms/op 121.24 ms/op 1.07
aggregationBits - 2048 els - zipIndexesInBitList 19.057 us/op 19.743 us/op 0.97
regular array get 100000 times 22.528 us/op 22.496 us/op 1.00
wrappedArray get 100000 times 22.697 us/op 22.813 us/op 0.99
arrayWithProxy get 100000 times 9.5435 ms/op 9.3173 ms/op 1.02
ssz.Root.equals 21.078 ns/op 21.463 ns/op 0.98
byteArrayEquals 20.886 ns/op 21.259 ns/op 0.98
Buffer.compare 8.6100 ns/op 8.6970 ns/op 0.99
processSlot - 1 slots 8.5100 us/op 8.9430 us/op 0.95
processSlot - 32 slots 1.9784 ms/op 2.0300 ms/op 0.97
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 4.7275 ms/op 5.1617 ms/op 0.92
getCommitteeAssignments - req 1 vs - 250000 vc 1.6555 ms/op 1.6567 ms/op 1.00
getCommitteeAssignments - req 100 vs - 250000 vc 3.3517 ms/op 3.4051 ms/op 0.98
getCommitteeAssignments - req 1000 vs - 250000 vc 3.6116 ms/op 3.6612 ms/op 0.99
findModifiedValidators - 10000 modified validators 668.25 ms/op 775.29 ms/op 0.86
findModifiedValidators - 1000 modified validators 489.35 ms/op 580.13 ms/op 0.84
findModifiedValidators - 100 modified validators 317.61 ms/op 357.64 ms/op 0.89
findModifiedValidators - 10 modified validators 319.57 ms/op 252.11 ms/op 1.27
findModifiedValidators - 1 modified validators 203.37 ms/op 205.63 ms/op 0.99
findModifiedValidators - no difference 189.01 ms/op 231.39 ms/op 0.82
migrate state 1500000 validators, 3400 modified, 2000 new 2.7845 s/op 3.0428 s/op 0.92
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.6100 ns/op 3.7200 ns/op 0.97
state getBlockRootAtSlot - 250000 vs - 7PWei 337.32 ns/op 399.50 ns/op 0.84
computeProposerIndex 100000 validators 1.2919 ms/op 1.3638 ms/op 0.95
getNextSyncCommitteeIndices 1000 validators 2.7629 ms/op 2.8934 ms/op 0.95
getNextSyncCommitteeIndices 10000 validators 24.364 ms/op 25.819 ms/op 0.94
getNextSyncCommitteeIndices 100000 validators 84.092 ms/op 92.597 ms/op 0.91
computeProposers - vc 250000 528.92 us/op 780.47 us/op 0.68
computeEpochShuffling - vc 250000 37.704 ms/op 40.568 ms/op 0.93
getNextSyncCommittee - vc 250000 9.3294 ms/op 10.295 ms/op 0.91
nodejs block root to RootHex using toHex 95.287 ns/op 92.529 ns/op 1.03
nodejs block root to RootHex using toRootHex 62.780 ns/op 60.492 ns/op 1.04
nodejs fromHex(blob) 795.06 us/op 871.42 us/op 0.91
nodejs fromHexInto(blob) 608.10 us/op 623.30 us/op 0.98
nodejs block root to RootHex using the deprecated toHexString 443.95 ns/op 344.77 ns/op 1.29
nodejs byteArrayEquals 32 bytes (block root) 24.770 ns/op 25.797 ns/op 0.96
nodejs byteArrayEquals 48 bytes (pubkey) 35.729 ns/op 36.730 ns/op 0.97
nodejs byteArrayEquals 96 bytes (signature) 32.729 ns/op 32.958 ns/op 0.99
nodejs byteArrayEquals 1024 bytes 38.347 ns/op 40.221 ns/op 0.95
nodejs byteArrayEquals 131072 bytes (blob) 1.6971 us/op 1.7463 us/op 0.97
browser block root to RootHex using toHex 137.44 ns/op 141.66 ns/op 0.97
browser block root to RootHex using toRootHex 125.88 ns/op 129.44 ns/op 0.97
browser fromHex(blob) 1.4810 ms/op 1.6057 ms/op 0.92
browser fromHexInto(blob) 597.36 us/op 630.69 us/op 0.95
browser block root to RootHex using the deprecated toHexString 438.79 ns/op 453.76 ns/op 0.97
browser byteArrayEquals 32 bytes (block root) 26.566 ns/op 33.844 ns/op 0.78
browser byteArrayEquals 48 bytes (pubkey) 37.345 ns/op 39.586 ns/op 0.94
browser byteArrayEquals 96 bytes (signature) 69.507 ns/op 73.627 ns/op 0.94
browser byteArrayEquals 1024 bytes 712.92 ns/op 756.38 ns/op 0.94
browser byteArrayEquals 131072 bytes (blob) 90.373 us/op 96.727 us/op 0.93

by benchmarkbot/action

@nazarhussain
nazarhussain marked this pull request as ready for review August 7, 2026 17:08
@nazarhussain
nazarhussain requested a review from a team as a code owner August 7, 2026 17:08
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Repo admins can enable using credits for code reviews in their settings.

@codecov

codecov Bot commented Aug 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 52.60%. Comparing base (f0f5d06) to head (a3344bb).

Additional details and impacted files
@@            Coverage Diff            @@
##           unstable    #9778   +/-   ##
=========================================
  Coverage     52.60%   52.60%           
=========================================
  Files           848      848           
  Lines         60024    60024           
  Branches       4421     4421           
=========================================
  Hits          31575    31575           
  Misses        28390    28390           
  Partials         59       59           
🚀 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.

@matthewkeil
matthewkeil merged commit 8bab23d into unstable Aug 10, 2026
20 checks passed
@matthewkeil
matthewkeil deleted the nh/fcr-spec-update-5400 branch August 10, 2026 21:30
wemeetagain pushed a commit that referenced this pull request Aug 12, 2026
**Motivation**

#9778 added
`IForkChoice.getFastConfirmationStore()` for the spec-test runner; this
adds its production consumer by exposing the spec
`FastConfirmationStore` variables for debugging fast confirmation on
live nodes.

**Description**

- Add `CheckpointHex` type to lodestar routes and reuse it for existing
checkpoint fields
- Extend `GET /eth/v1/lodestar/fast_confirmation` with
`previousEpochObservedJustifiedCheckpoint`,
`currentEpochObservedJustifiedCheckpoint`,
`previousEpochGreatestUnrealizedCheckpoint`, `previousSlotHead`,
`currentSlotHead`
- Populate them from `forkChoice.getFastConfirmationStore()`; shared
`toCheckpointHex()` helper in api impl utils

Verified: check-types, biome, api + beacon-node unit tests pass;
smoke-tested against a live mainnet node with
`--chain.fastConfirmation`.

Refs:
- #9690
- #9778

**AI Assistance Disclosure**

- [x] External Contributors: I have read the [contributor
guidelines](https://github.com/ChainSafe/lodestar/blob/unstable/CONTRIBUTING.md#ai-assistance-notice)
and disclosed my usage of AI below.

Implemented and verified with Claude Code (Claude Fable 5).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

3 participants