Skip to content

fix: harden safe execution block hash handling - #9794

Merged
nflaig merged 3 commits into
unstablefrom
nflaig/safe-block-hash
Aug 11, 2026
Merged

fix: harden safe execution block hash handling#9794
nflaig merged 3 commits into
unstablefrom
nflaig/safe-block-hash

Conversation

@nflaig

@nflaig nflaig commented Aug 10, 2026

Copy link
Copy Markdown
Member

Follow-up on #9393 based on @twoeths' comments

  • log when the confirmed block equals the finalized block
  • throw typed errors for missing fork-choice execution data
  • preserve valid pre-Merge zero-hash behavior
  • remove the unused safe beacon block helper

@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Performance Report

鉁旓笍 no performance regression detected

Full benchmark results
Benchmark suite Current: 267625c Previous: de5f89e Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 883.08 us/op 836.62 us/op 1.06
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 38.258 us/op 39.187 us/op 0.98
BLS verify - blst 734.70 us/op 641.83 us/op 1.14
BLS verifyMultipleSignatures 3 - blst 1.3183 ms/op 1.3627 ms/op 0.97
BLS verifyMultipleSignatures 8 - blst 2.1119 ms/op 2.1629 ms/op 0.98
BLS verifyMultipleSignatures 32 - blst 6.6184 ms/op 6.9541 ms/op 0.95
BLS verifyMultipleSignatures 64 - blst 12.772 ms/op 13.398 ms/op 0.95
BLS verifyMultipleSignatures 128 - blst 25.194 ms/op 25.436 ms/op 0.99
BLS deserializing 10000 signatures 630.29 ms/op 629.83 ms/op 1.00
BLS deserializing 100000 signatures 6.3246 s/op 6.3196 s/op 1.00
BLS verifyMultipleSignatures - same message - 3 - blst 807.81 us/op 799.72 us/op 1.01
BLS verifyMultipleSignatures - same message - 8 - blst 823.90 us/op 939.08 us/op 0.88
BLS verifyMultipleSignatures - same message - 32 - blst 1.5009 ms/op 1.5581 ms/op 0.96
BLS verifyMultipleSignatures - same message - 64 - blst 2.3022 ms/op 2.3823 ms/op 0.97
BLS verifyMultipleSignatures - same message - 128 - blst 4.0187 ms/op 4.0610 ms/op 0.99
BLS aggregatePubkeys 32 - blst 17.842 us/op 17.543 us/op 1.02
BLS aggregatePubkeys 128 - blst 64.479 us/op 62.665 us/op 1.03
getSlashingsAndExits - default max 44.656 us/op 50.951 us/op 0.88
getSlashingsAndExits - 2k 341.55 us/op 402.73 us/op 0.85
proposeBlockBody type=full, size=empty 598.04 us/op 660.73 us/op 0.91
isKnown best case - 1 super set check 217.00 ns/op 161.00 ns/op 1.35
isKnown normal case - 2 super set checks 167.00 ns/op 156.00 ns/op 1.07
isKnown worse case - 16 super set checks 165.00 ns/op 157.00 ns/op 1.05
validate api signedAggregateAndProof - struct 1.5049 ms/op 1.5177 ms/op 0.99
validate gossip signedAggregateAndProof - struct 1.4772 ms/op 1.5120 ms/op 0.98
batch validate gossip attestation - vc 640000 - chunk 32 106.44 us/op 108.01 us/op 0.99
batch validate gossip attestation - vc 640000 - chunk 64 96.445 us/op 93.534 us/op 1.03
batch validate gossip attestation - vc 640000 - chunk 128 87.280 us/op 86.773 us/op 1.01
batch validate gossip attestation - vc 640000 - chunk 256 86.862 us/op 82.744 us/op 1.05
bytes32 toHexString 280.00 ns/op 282.00 ns/op 0.99
bytes32 Buffer.toString(hex) 167.00 ns/op 164.00 ns/op 1.02
bytes32 Buffer.toString(hex) from Uint8Array 238.00 ns/op 233.00 ns/op 1.02
bytes32 Buffer.toString(hex) + 0x 164.00 ns/op 167.00 ns/op 0.98
Return object 10000 times 0.21200 ns/op 0.21190 ns/op 1.00
Throw Error 10000 times 3.2970 us/op 3.2921 us/op 1.00
toHex 96.778 ns/op 96.926 ns/op 1.00
Buffer.from 87.237 ns/op 88.275 ns/op 0.99
shared Buffer 57.643 ns/op 61.849 ns/op 0.93
fastMsgIdFn sha256 / 200 bytes 1.4780 us/op 1.4690 us/op 1.01
fastMsgIdFn h32 xxhash / 200 bytes 153.00 ns/op 150.00 ns/op 1.02
fastMsgIdFn h64 xxhash / 200 bytes 216.00 ns/op 204.00 ns/op 1.06
fastMsgIdFn sha256 / 1000 bytes 4.7410 us/op 4.7310 us/op 1.00
fastMsgIdFn h32 xxhash / 1000 bytes 241.00 ns/op 241.00 ns/op 1.00
fastMsgIdFn h64 xxhash / 1000 bytes 260.00 ns/op 254.00 ns/op 1.02
fastMsgIdFn sha256 / 10000 bytes 42.194 us/op 41.757 us/op 1.01
fastMsgIdFn h32 xxhash / 10000 bytes 1.3090 us/op 1.2830 us/op 1.02
fastMsgIdFn h64 xxhash / 10000 bytes 856.00 ns/op 836.00 ns/op 1.02
send data - 1000 256B messages 4.4674 ms/op 4.2612 ms/op 1.05
send data - 1000 512B messages 5.3896 ms/op 5.0634 ms/op 1.06
send data - 1000 1024B messages 5.9603 ms/op 5.3563 ms/op 1.11
send data - 1000 1200B messages 7.1061 ms/op 5.9433 ms/op 1.20
send data - 1000 2048B messages 15.310 ms/op 9.0019 ms/op 1.70
send data - 1000 4096B messages 69.198 ms/op 87.008 ms/op 0.80
send data - 1000 16384B messages 368.54 ms/op 284.83 ms/op 1.29
send data - 1000 65536B messages 1.3385 s/op 1.2427 s/op 1.08
enrSubnets - fastDeserialize 64 bits 761.00 ns/op 792.00 ns/op 0.96
enrSubnets - ssz BitVector 64 bits 264.00 ns/op 293.00 ns/op 0.90
enrSubnets - fastDeserialize 4 bits 103.00 ns/op 102.00 ns/op 1.01
enrSubnets - ssz BitVector 4 bits 264.00 ns/op 290.00 ns/op 0.91
prioritizePeers score -10:0 att 32-0.1 sync 2-0 206.09 us/op 202.51 us/op 1.02
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 231.53 us/op 230.93 us/op 1.00
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 333.01 us/op 334.19 us/op 1.00
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 604.76 us/op 590.64 us/op 1.02
prioritizePeers score 0:0 att 64-1 sync 4-1 701.22 us/op 689.74 us/op 1.02
array of 16000 items push then shift 1.2780 us/op 1.2957 us/op 0.99
LinkedList of 16000 items push then shift 7.6730 ns/op 6.9240 ns/op 1.11
array of 16000 items push then pop 68.669 ns/op 67.525 ns/op 1.02
LinkedList of 16000 items push then pop 6.0850 ns/op 5.9920 ns/op 1.02
array of 24000 items push then shift 1.8884 us/op 1.9146 us/op 0.99
LinkedList of 24000 items push then shift 7.2480 ns/op 6.4270 ns/op 1.13
array of 24000 items push then pop 95.251 ns/op 101.19 ns/op 0.94
LinkedList of 24000 items push then pop 6.0810 ns/op 6.0000 ns/op 1.01
intersect bitArray bitLen 8 3.9000 ns/op 3.9850 ns/op 0.98
intersect array and set length 8 29.429 ns/op 30.314 ns/op 0.97
intersect bitArray bitLen 128 23.598 ns/op 23.385 ns/op 1.01
intersect array and set length 128 500.67 ns/op 501.52 ns/op 1.00
bitArray.getTrueBitIndexes() bitLen 128 952.00 ns/op 916.00 ns/op 1.04
bitArray.getTrueBitIndexes() bitLen 248 1.7450 us/op 1.6530 us/op 1.06
bitArray.getTrueBitIndexes() bitLen 512 3.6890 us/op 3.4370 us/op 1.07
Full columns - reconstruct all 6 blobs 130.82 us/op 204.74 us/op 0.64
Full columns - reconstruct half of the blobs out of 6 71.373 us/op 68.763 us/op 1.04
Full columns - reconstruct single blob out of 6 32.722 us/op 31.105 us/op 1.05
Half columns - reconstruct all 6 blobs 398.33 ms/op 395.96 ms/op 1.01
Half columns - reconstruct half of the blobs out of 6 202.49 ms/op 197.05 ms/op 1.03
Half columns - reconstruct single blob out of 6 69.868 ms/op 66.549 ms/op 1.05
Set add up to 64 items then delete first 1.6374 us/op 1.6549 us/op 0.99
OrderedSet add up to 64 items then delete first 2.4949 us/op 2.5030 us/op 1.00
Set add up to 64 items then delete last 1.8312 us/op 1.8736 us/op 0.98
OrderedSet add up to 64 items then delete last 2.7566 us/op 2.7538 us/op 1.00
Set add up to 64 items then delete middle 1.7922 us/op 1.8727 us/op 0.96
OrderedSet add up to 64 items then delete middle 4.2038 us/op 4.2096 us/op 1.00
Set add up to 128 items then delete first 3.6195 us/op 3.7071 us/op 0.98
OrderedSet add up to 128 items then delete first 5.5835 us/op 5.6644 us/op 0.99
Set add up to 128 items then delete last 3.4887 us/op 3.5694 us/op 0.98
OrderedSet add up to 128 items then delete last 5.2328 us/op 5.3098 us/op 0.99
Set add up to 128 items then delete middle 3.4454 us/op 3.7325 us/op 0.92
OrderedSet add up to 128 items then delete middle 11.737 us/op 11.408 us/op 1.03
Set add up to 256 items then delete first 7.3603 us/op 7.2593 us/op 1.01
OrderedSet add up to 256 items then delete first 11.616 us/op 12.096 us/op 0.96
Set add up to 256 items then delete last 6.7729 us/op 6.9856 us/op 0.97
OrderedSet add up to 256 items then delete last 10.769 us/op 11.065 us/op 0.97
Set add up to 256 items then delete middle 6.7853 us/op 7.0234 us/op 0.97
OrderedSet add up to 256 items then delete middle 34.023 us/op 34.499 us/op 0.99
runFastConfirmationRules vc:100000 bc:96 eq:0 4.4025 ms/op 4.6283 ms/op 0.95
runFastConfirmationRules vc:600000 bc:96 eq:0 35.509 ms/op 35.516 ms/op 1.00
runFastConfirmationRules vc:1000000 bc:96 eq:0 58.029 ms/op 56.505 ms/op 1.03
runFastConfirmationRules vc:600000 bc:320 eq:0 34.741 ms/op 33.927 ms/op 1.02
runFastConfirmationRules vc:100000 bc:96 eq:1000 1.3610 s/op 1.3122 s/op 1.04
pass gossip attestations to forkchoice per slot 2.6824 ms/op 2.5764 ms/op 1.04
forkChoice updateHead vc 100000 bc 64 eq 0 413.67 us/op 440.58 us/op 0.94
forkChoice updateHead vc 600000 bc 64 eq 0 2.4699 ms/op 2.4923 ms/op 0.99
forkChoice updateHead vc 1000000 bc 64 eq 0 4.0391 ms/op 4.3349 ms/op 0.93
forkChoice updateHead vc 600000 bc 320 eq 0 2.4356 ms/op 2.6410 ms/op 0.92
forkChoice updateHead vc 600000 bc 1200 eq 0 2.5107 ms/op 2.6848 ms/op 0.94
forkChoice updateHead vc 600000 bc 7200 eq 0 3.4364 ms/op 3.0425 ms/op 1.13
forkChoice updateHead vc 600000 bc 64 eq 1000 2.4380 ms/op 2.6816 ms/op 0.91
forkChoice updateHead vc 600000 bc 64 eq 10000 2.5097 ms/op 2.7551 ms/op 0.91
forkChoice updateHead vc 600000 bc 64 eq 300000 6.4518 ms/op 6.7169 ms/op 0.96
computeDeltas 1400000 validators 0% inactive 11.983 ms/op 13.101 ms/op 0.91
computeDeltas 1400000 validators 10% inactive 11.363 ms/op 12.623 ms/op 0.90
computeDeltas 1400000 validators 20% inactive 10.713 ms/op 11.813 ms/op 0.91
computeDeltas 1400000 validators 50% inactive 8.7156 ms/op 9.5150 ms/op 0.92
computeDeltas 2100000 validators 0% inactive 17.978 ms/op 19.618 ms/op 0.92
computeDeltas 2100000 validators 10% inactive 17.061 ms/op 18.990 ms/op 0.90
computeDeltas 2100000 validators 20% inactive 16.169 ms/op 18.049 ms/op 0.90
computeDeltas 2100000 validators 50% inactive 10.731 ms/op 14.344 ms/op 0.75
altair processAttestation - 250000 vs - 7PWei normalcase 2.4000 ms/op 1.6681 ms/op 1.44
altair processAttestation - 250000 vs - 7PWei worstcase 2.8837 ms/op 2.4355 ms/op 1.18
altair processAttestation - setStatus - 1/6 committees join 98.422 us/op 98.990 us/op 0.99
altair processAttestation - setStatus - 1/3 committees join 197.87 us/op 194.79 us/op 1.02
altair processAttestation - setStatus - 1/2 committees join 277.12 us/op 274.50 us/op 1.01
altair processAttestation - setStatus - 2/3 committees join 367.58 us/op 373.84 us/op 0.98
altair processAttestation - setStatus - 4/5 committees join 514.74 us/op 512.13 us/op 1.01
altair processAttestation - setStatus - 100% committees join 607.32 us/op 597.91 us/op 1.02
altair processBlock - 250000 vs - 7PWei normalcase 4.4192 ms/op 3.1148 ms/op 1.42
altair processBlock - 250000 vs - 7PWei normalcase hashState 17.226 ms/op 13.877 ms/op 1.24
altair processBlock - 250000 vs - 7PWei worstcase 23.745 ms/op 21.922 ms/op 1.08
altair processBlock - 250000 vs - 7PWei worstcase hashState 45.516 ms/op 40.926 ms/op 1.11
phase0 processBlock - 250000 vs - 7PWei normalcase 1.5575 ms/op 1.3009 ms/op 1.20
phase0 processBlock - 250000 vs - 7PWei worstcase 18.326 ms/op 16.021 ms/op 1.14
altair processEth1Data - 250000 vs - 7PWei normalcase 322.48 us/op 294.95 us/op 1.09
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 4.8010 us/op 3.2200 us/op 1.49
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 20.730 us/op 22.594 us/op 0.92
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 6.0330 us/op 5.9940 us/op 1.01
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.7040 us/op 3.9640 us/op 0.93
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 95.358 us/op 96.247 us/op 0.99
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.3991 ms/op 1.3919 ms/op 1.01
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.8608 ms/op 1.8527 ms/op 1.00
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8467 ms/op 1.8429 ms/op 1.00
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 4.6030 ms/op 3.6709 ms/op 1.25
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.1289 ms/op 2.1789 ms/op 0.98
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.7861 ms/op 3.9853 ms/op 1.20
Tree 40 250000 create 353.78 ms/op 339.59 ms/op 1.04
Tree 40 250000 get(125000) 91.380 ns/op 100.02 ns/op 0.91
Tree 40 250000 set(125000) 1.0099 us/op 1.0243 us/op 0.99
Tree 40 250000 toArray() 16.699 ms/op 18.460 ms/op 0.90
Tree 40 250000 iterate all - toArray() + loop 16.670 ms/op 16.536 ms/op 1.01
Tree 40 250000 iterate all - get(i) 40.675 ms/op 38.086 ms/op 1.07
Array 250000 create 2.2257 ms/op 2.2881 ms/op 0.97
Array 250000 clone - spread 686.27 us/op 691.31 us/op 0.99
Array 250000 get(125000) 0.29500 ns/op 0.29400 ns/op 1.00
Array 250000 set(125000) 0.29200 ns/op 0.29400 ns/op 0.99
Array 250000 iterate all - loop 57.142 us/op 56.902 us/op 1.00
phase0 afterProcessEpoch - 250000 vs - 7PWei 40.296 ms/op 48.353 ms/op 0.83
Array.fill - length 1000000 2.1839 ms/op 2.2771 ms/op 0.96
Array push - length 1000000 9.1792 ms/op 7.7597 ms/op 1.18
Array.get 0.20827 ns/op 0.20352 ns/op 1.02
Uint8Array.get 0.23337 ns/op 0.24689 ns/op 0.95
phase0 beforeProcessEpoch - 250000 vs - 7PWei 17.072 ms/op 11.621 ms/op 1.47
altair processEpoch - mainnet_e81889 294.02 ms/op 240.57 ms/op 1.22
mainnet_e81889 - altair beforeProcessEpoch 21.427 ms/op 18.834 ms/op 1.14
mainnet_e81889 - altair processJustificationAndFinalization 6.7880 us/op 5.0840 us/op 1.34
mainnet_e81889 - altair processInactivityUpdates 6.7799 ms/op 3.7210 ms/op 1.82
mainnet_e81889 - altair processRewardsAndPenalties 20.650 ms/op 17.087 ms/op 1.21
mainnet_e81889 - altair processRegistryUpdates 567.00 ns/op 556.00 ns/op 1.02
mainnet_e81889 - altair processSlashings 147.00 ns/op 137.00 ns/op 1.07
mainnet_e81889 - altair processEth1DataReset 146.00 ns/op 137.00 ns/op 1.07
mainnet_e81889 - altair processEffectiveBalanceUpdates 5.6529 ms/op 1.1684 ms/op 4.84
mainnet_e81889 - altair processSlashingsReset 749.00 ns/op 693.00 ns/op 1.08
mainnet_e81889 - altair processRandaoMixesReset 1.2950 us/op 1.3420 us/op 0.96
mainnet_e81889 - altair processHistoricalRootsUpdate 144.00 ns/op 141.00 ns/op 1.02
mainnet_e81889 - altair processParticipationFlagUpdates 446.00 ns/op 447.00 ns/op 1.00
mainnet_e81889 - altair processSyncCommitteeUpdates 115.00 ns/op 118.00 ns/op 0.97
mainnet_e81889 - altair afterProcessEpoch 41.414 ms/op 42.228 ms/op 0.98
capella processEpoch - mainnet_e217614 770.20 ms/op 716.08 ms/op 1.08
mainnet_e217614 - capella beforeProcessEpoch 64.437 ms/op 56.941 ms/op 1.13
mainnet_e217614 - capella processJustificationAndFinalization 5.9440 us/op 5.1850 us/op 1.15
mainnet_e217614 - capella processInactivityUpdates 14.836 ms/op 11.762 ms/op 1.26
mainnet_e217614 - capella processRewardsAndPenalties 88.549 ms/op 93.083 ms/op 0.95
mainnet_e217614 - capella processRegistryUpdates 4.3310 us/op 4.5220 us/op 0.96
mainnet_e217614 - capella processSlashings 136.00 ns/op 141.00 ns/op 0.96
mainnet_e217614 - capella processEth1DataReset 135.00 ns/op 135.00 ns/op 1.00
mainnet_e217614 - capella processEffectiveBalanceUpdates 12.106 ms/op 5.2193 ms/op 2.32
mainnet_e217614 - capella processSlashingsReset 698.00 ns/op 677.00 ns/op 1.03
mainnet_e217614 - capella processRandaoMixesReset 1.1310 us/op 1.0840 us/op 1.04
mainnet_e217614 - capella processHistoricalRootsUpdate 134.00 ns/op 136.00 ns/op 0.99
mainnet_e217614 - capella processParticipationFlagUpdates 441.00 ns/op 445.00 ns/op 0.99
mainnet_e217614 - capella afterProcessEpoch 106.00 ms/op 109.14 ms/op 0.97
phase0 processEpoch - mainnet_e58758 293.24 ms/op 251.76 ms/op 1.16
mainnet_e58758 - phase0 beforeProcessEpoch 64.146 ms/op 45.365 ms/op 1.41
mainnet_e58758 - phase0 processJustificationAndFinalization 6.4580 us/op 4.7920 us/op 1.35
mainnet_e58758 - phase0 processRewardsAndPenalties 15.693 ms/op 15.323 ms/op 1.02
mainnet_e58758 - phase0 processRegistryUpdates 2.2600 us/op 2.2450 us/op 1.01
mainnet_e58758 - phase0 processSlashings 138.00 ns/op 136.00 ns/op 1.01
mainnet_e58758 - phase0 processEth1DataReset 134.00 ns/op 135.00 ns/op 0.99
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 792.47 us/op 1.0109 ms/op 0.78
mainnet_e58758 - phase0 processSlashingsReset 868.00 ns/op 807.00 ns/op 1.08
mainnet_e58758 - phase0 processRandaoMixesReset 1.1160 us/op 1.0070 us/op 1.11
mainnet_e58758 - phase0 processHistoricalRootsUpdate 135.00 ns/op 136.00 ns/op 0.99
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.0950 us/op 974.00 ns/op 1.12
mainnet_e58758 - phase0 afterProcessEpoch 32.539 ms/op 32.956 ms/op 0.99
phase0 processEffectiveBalanceUpdates - 250000 normalcase 963.11 us/op 1.0056 ms/op 0.96
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.5884 ms/op 1.6175 ms/op 0.98
altair processInactivityUpdates - 250000 normalcase 10.568 ms/op 10.363 ms/op 1.02
altair processInactivityUpdates - 250000 worstcase 10.865 ms/op 10.327 ms/op 1.05
phase0 processRegistryUpdates - 250000 normalcase 2.2500 us/op 2.3800 us/op 0.95
phase0 processRegistryUpdates - 250000 badcase_full_deposits 137.51 us/op 146.84 us/op 0.94
phase0 processRegistryUpdates - 250000 worstcase 0.5 56.580 ms/op 58.651 ms/op 0.96
altair processRewardsAndPenalties - 250000 normalcase 15.652 ms/op 14.345 ms/op 1.09
altair processRewardsAndPenalties - 250000 worstcase 15.118 ms/op 14.060 ms/op 1.08
phase0 getAttestationDeltas - 250000 normalcase 8.5149 ms/op 5.4425 ms/op 1.56
phase0 getAttestationDeltas - 250000 worstcase 5.3627 ms/op 5.4401 ms/op 0.99
phase0 processSlashings - 250000 worstcase 59.239 us/op 62.018 us/op 0.96
altair processSyncCommitteeUpdates - 250000 9.9942 ms/op 9.9483 ms/op 1.00
BeaconState.hashTreeRoot - No change 178.00 ns/op 168.00 ns/op 1.06
BeaconState.hashTreeRoot - 1 full validator 76.140 us/op 59.262 us/op 1.28
BeaconState.hashTreeRoot - 32 full validator 846.26 us/op 668.50 us/op 1.27
BeaconState.hashTreeRoot - 512 full validator 8.0027 ms/op 6.4278 ms/op 1.25
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 99.854 us/op 73.867 us/op 1.35
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.3341 ms/op 1.0805 ms/op 1.23
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 18.015 ms/op 13.309 ms/op 1.35
BeaconState.hashTreeRoot - 1 balances 76.379 us/op 59.609 us/op 1.28
BeaconState.hashTreeRoot - 32 balances 713.71 us/op 572.60 us/op 1.25
BeaconState.hashTreeRoot - 512 balances 5.8700 ms/op 4.9639 ms/op 1.18
BeaconState.hashTreeRoot - 250000 balances 121.80 ms/op 115.59 ms/op 1.05
aggregationBits - 2048 els - zipIndexesInBitList 19.146 us/op 19.925 us/op 0.96
regular array get 100000 times 22.637 us/op 22.919 us/op 0.99
wrappedArray get 100000 times 22.760 us/op 22.812 us/op 1.00
arrayWithProxy get 100000 times 11.590 ms/op 10.801 ms/op 1.07
ssz.Root.equals 20.801 ns/op 21.462 ns/op 0.97
byteArrayEquals 20.524 ns/op 21.268 ns/op 0.97
Buffer.compare 8.4940 ns/op 8.8890 ns/op 0.96
processSlot - 1 slots 8.4380 us/op 7.9580 us/op 1.06
processSlot - 32 slots 1.8465 ms/op 1.5512 ms/op 1.19
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 3.4368 ms/op 2.7305 ms/op 1.26
getCommitteeAssignments - req 1 vs - 250000 vc 1.5883 ms/op 1.6610 ms/op 0.96
getCommitteeAssignments - req 100 vs - 250000 vc 3.2971 ms/op 3.3854 ms/op 0.97
getCommitteeAssignments - req 1000 vs - 250000 vc 3.5429 ms/op 3.6297 ms/op 0.98
findModifiedValidators - 10000 modified validators 736.17 ms/op 755.06 ms/op 0.97
findModifiedValidators - 1000 modified validators 465.00 ms/op 534.45 ms/op 0.87
findModifiedValidators - 100 modified validators 276.82 ms/op 273.28 ms/op 1.01
findModifiedValidators - 10 modified validators 246.96 ms/op 249.96 ms/op 0.99
findModifiedValidators - 1 modified validators 135.06 ms/op 172.70 ms/op 0.78
findModifiedValidators - no difference 137.85 ms/op 146.58 ms/op 0.94
migrate state 1500000 validators, 3400 modified, 2000 new 3.1064 s/op 2.6970 s/op 1.15
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.7800 ns/op 3.7400 ns/op 1.01
state getBlockRootAtSlot - 250000 vs - 7PWei 402.71 ns/op 281.27 ns/op 1.43
computeProposerIndex 100000 validators 1.4630 ms/op 1.3382 ms/op 1.09
getNextSyncCommitteeIndices 1000 validators 2.9384 ms/op 2.8411 ms/op 1.03
getNextSyncCommitteeIndices 10000 validators 26.087 ms/op 25.280 ms/op 1.03
getNextSyncCommitteeIndices 100000 validators 92.012 ms/op 84.642 ms/op 1.09
computeProposers - vc 250000 540.49 us/op 552.15 us/op 0.98
computeEpochShuffling - vc 250000 40.714 ms/op 40.934 ms/op 0.99
getNextSyncCommittee - vc 250000 10.031 ms/op 9.4627 ms/op 1.06
nodejs block root to RootHex using toHex 102.11 ns/op 99.706 ns/op 1.02
nodejs block root to RootHex using toRootHex 62.671 ns/op 65.398 ns/op 0.96
nodejs fromHex(blob) 839.82 us/op 729.74 us/op 1.15
nodejs fromHexInto(blob) 631.90 us/op 655.74 us/op 0.96
nodejs block root to RootHex using the deprecated toHexString 467.49 ns/op 486.80 ns/op 0.96
nodejs byteArrayEquals 32 bytes (block root) 26.323 ns/op 25.861 ns/op 1.02
nodejs byteArrayEquals 48 bytes (pubkey) 37.896 ns/op 37.351 ns/op 1.01
nodejs byteArrayEquals 96 bytes (signature) 34.691 ns/op 39.596 ns/op 0.88
nodejs byteArrayEquals 1024 bytes 42.956 ns/op 43.597 ns/op 0.99
nodejs byteArrayEquals 131072 bytes (blob) 1.7996 us/op 1.7686 us/op 1.02
browser block root to RootHex using toHex 144.30 ns/op 145.00 ns/op 1.00
browser block root to RootHex using toRootHex 131.73 ns/op 130.83 ns/op 1.01
browser fromHex(blob) 1.6133 ms/op 1.5697 ms/op 1.03
browser fromHexInto(blob) 652.12 us/op 661.21 us/op 0.99
browser block root to RootHex using the deprecated toHexString 325.08 ns/op 347.84 ns/op 0.93
browser byteArrayEquals 32 bytes (block root) 28.568 ns/op 27.653 ns/op 1.03
browser byteArrayEquals 48 bytes (pubkey) 40.289 ns/op 39.042 ns/op 1.03
browser byteArrayEquals 96 bytes (signature) 75.393 ns/op 72.868 ns/op 1.03
browser byteArrayEquals 1024 bytes 777.52 ns/op 745.96 ns/op 1.04
browser byteArrayEquals 131072 bytes (blob) 99.261 us/op 93.823 us/op 1.06

by benchmarkbot/action

@nflaig
nflaig merged commit 673a1a9 into unstable Aug 11, 2026
19 checks passed
@nflaig
nflaig deleted the nflaig/safe-block-hash branch August 11, 2026 17:09
@github-project-automation github-project-automation Bot moved this from In Progress to Done in Lodestar Team Coordination Aug 11, 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.

2 participants