Skip to content

feat: unskip gloas fork choice spec tests#9222

Open
ensi321 wants to merge 3 commits intounstablefrom
nc/gloas-fc-spec-test
Open

feat: unskip gloas fork choice spec tests#9222
ensi321 wants to merge 3 commits intounstablefrom
nc/gloas-fc-spec-test

Conversation

@ensi321
Copy link
Copy Markdown
Contributor

@ensi321 ensi321 commented Apr 16, 2026

No description provided.

@ensi321 ensi321 requested a review from a team as a code owner April 16, 2026 04:02
const fcStoreFinalized = this.fcStore.finalizedCheckpoint;
if (
blockAncestorNode.blockRoot !== fcStoreFinalized.rootHex ||
blockAncestorNode.payloadStatus !== fcStoreFinalized.payloadStatus
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

We remove the payload status comparison because we don't know the payload status of the finalized checkpoint (both before and after deferring payload processing).

We should just compare the root only.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces support for the Gloas (ePBS) fork across the beacon node, fork choice, and state transition packages. Key updates include handling post-Gloas payload statuses during fork choice initialization, integrating execution payload envelopes into spec tests, and adding type guards for Gloas states. The ProtoArray logic was also updated to correctly handle Gloas anchor blocks by ensuring they are processed with a valid execution status. Review feedback suggests refactoring duplicated logic in the fork choice initialization into a helper function to improve maintainability.

Comment on lines +108 to +115
const justifiedPayloadStatus = isForkPostGloas
? PayloadStatus.PENDING
: getCheckpointPayloadStatus(config, state, justifiedCheckpoint.epoch);

// Determine finalized checkpoint payload status
const finalizedPayloadStatus = getCheckpointPayloadStatus(config, state, finalizedCheckpoint.epoch);
const finalizedPayloadStatus = isForkPostGloas
? PayloadStatus.PENDING
: getCheckpointPayloadStatus(config, state, finalizedCheckpoint.epoch);
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.

medium

There's some code duplication here for determining justifiedPayloadStatus and finalizedPayloadStatus. You can introduce a helper function to centralize the logic, which improves maintainability by avoiding repetition of the isForkPostGloas check.

  const getPayloadStatus = (epoch: number): PayloadStatus => {
    if (isForkPostGloas) {
      return PayloadStatus.PENDING;
    }
    return getCheckpointPayloadStatus(config, state, epoch);
  };

  // Determine justified checkpoint payload status
  const justifiedPayloadStatus = getPayloadStatus(justifiedCheckpoint.epoch);

  // Determine finalized checkpoint payload status
  const finalizedPayloadStatus = getPayloadStatus(finalizedCheckpoint.epoch);

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0f5dbda505

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

blockAncestorNode.blockRoot !== fcStoreFinalized.rootHex ||
blockAncestorNode.payloadStatus !== fcStoreFinalized.payloadStatus
) {
if (blockAncestorNode.blockRoot !== fcStoreFinalized.rootHex) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Restore payload-status check for finalized descendants

The finalized-descendant gate in onBlock() now only compares blockRoot and ignores payloadStatus. In post-Gloas fork choice, the same beacon root can have distinct EMPTY/FULL variants, so this change allows a block that extends the wrong finalized variant (e.g., EMPTY branch when store finalized checkpoint is FULL) to pass NOT_FINALIZED_DESCENDANT validation. That weakens finality safety by admitting blocks from a non-finalized payload branch whenever roots match.

Useful? React with 👍 / 👎.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 16, 2026

⚠️ Performance Alert ⚠️

Possible performance regression was detected for some benchmarks.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold.

Benchmark suite Current: eb1042a Previous: 2740f92 Ratio
send data - 1000 16384B messages 147.90 ms/op 17.065 ms/op 8.67
Full benchmark results
Benchmark suite Current: eb1042a Previous: 2740f92 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.0862 ms/op 890.89 us/op 1.22
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 40.625 us/op 37.667 us/op 1.08
BLS verify - blst 658.75 us/op 700.60 us/op 0.94
BLS verifyMultipleSignatures 3 - blst 1.3684 ms/op 1.3176 ms/op 1.04
BLS verifyMultipleSignatures 8 - blst 2.1814 ms/op 2.0753 ms/op 1.05
BLS verifyMultipleSignatures 32 - blst 6.9101 ms/op 6.4771 ms/op 1.07
BLS verifyMultipleSignatures 64 - blst 13.768 ms/op 12.607 ms/op 1.09
BLS verifyMultipleSignatures 128 - blst 25.962 ms/op 24.555 ms/op 1.06
BLS deserializing 10000 signatures 616.90 ms/op 620.32 ms/op 0.99
BLS deserializing 100000 signatures 6.2392 s/op 6.2270 s/op 1.00
BLS verifyMultipleSignatures - same message - 3 - blst 704.22 us/op 733.72 us/op 0.96
BLS verifyMultipleSignatures - same message - 8 - blst 871.52 us/op 911.11 us/op 0.96
BLS verifyMultipleSignatures - same message - 32 - blst 1.4718 ms/op 1.5037 ms/op 0.98
BLS verifyMultipleSignatures - same message - 64 - blst 2.2626 ms/op 2.3570 ms/op 0.96
BLS verifyMultipleSignatures - same message - 128 - blst 3.8963 ms/op 3.9645 ms/op 0.98
BLS aggregatePubkeys 32 - blst 17.392 us/op 17.198 us/op 1.01
BLS aggregatePubkeys 128 - blst 62.258 us/op 61.464 us/op 1.01
getSlashingsAndExits - default max 45.409 us/op 44.132 us/op 1.03
getSlashingsAndExits - 2k 337.27 us/op 360.18 us/op 0.94
proposeBlockBody type=full, size=empty 717.15 us/op 2.5034 ms/op 0.29
isKnown best case - 1 super set check 165.00 ns/op 162.00 ns/op 1.02
isKnown normal case - 2 super set checks 221.00 ns/op 163.00 ns/op 1.36
isKnown worse case - 16 super set checks 168.00 ns/op 164.00 ns/op 1.02
validate api signedAggregateAndProof - struct 1.5452 ms/op 1.4873 ms/op 1.04
validate gossip signedAggregateAndProof - struct 1.5486 ms/op 1.4723 ms/op 1.05
batch validate gossip attestation - vc 640000 - chunk 32 109.02 us/op 108.72 us/op 1.00
batch validate gossip attestation - vc 640000 - chunk 64 96.934 us/op 94.267 us/op 1.03
batch validate gossip attestation - vc 640000 - chunk 128 89.899 us/op 87.064 us/op 1.03
batch validate gossip attestation - vc 640000 - chunk 256 86.124 us/op 82.889 us/op 1.04
bytes32 toHexString 283.00 ns/op 278.00 ns/op 1.02
bytes32 Buffer.toString(hex) 172.00 ns/op 178.00 ns/op 0.97
bytes32 Buffer.toString(hex) from Uint8Array 262.00 ns/op 255.00 ns/op 1.03
bytes32 Buffer.toString(hex) + 0x 176.00 ns/op 180.00 ns/op 0.98
Return object 10000 times 0.21480 ns/op 0.20920 ns/op 1.03
Throw Error 10000 times 3.3776 us/op 3.2624 us/op 1.04
toHex 97.599 ns/op 109.76 ns/op 0.89
Buffer.from 92.431 ns/op 84.059 ns/op 1.10
shared Buffer 63.993 ns/op 58.274 ns/op 1.10
fastMsgIdFn sha256 / 200 bytes 1.4860 us/op 1.4850 us/op 1.00
fastMsgIdFn h32 xxhash / 200 bytes 165.00 ns/op 150.00 ns/op 1.10
fastMsgIdFn h64 xxhash / 200 bytes 207.00 ns/op 208.00 ns/op 1.00
fastMsgIdFn sha256 / 1000 bytes 4.7890 us/op 4.7530 us/op 1.01
fastMsgIdFn h32 xxhash / 1000 bytes 254.00 ns/op 253.00 ns/op 1.00
fastMsgIdFn h64 xxhash / 1000 bytes 250.00 ns/op 255.00 ns/op 0.98
fastMsgIdFn sha256 / 10000 bytes 42.376 us/op 42.347 us/op 1.00
fastMsgIdFn h32 xxhash / 10000 bytes 1.2740 us/op 1.2780 us/op 1.00
fastMsgIdFn h64 xxhash / 10000 bytes 808.00 ns/op 808.00 ns/op 1.00
send data - 1000 256B messages 4.1858 ms/op 4.3736 ms/op 0.96
send data - 1000 512B messages 4.1904 ms/op 4.3910 ms/op 0.95
send data - 1000 1024B messages 4.4652 ms/op 4.5770 ms/op 0.98
send data - 1000 1200B messages 4.6216 ms/op 5.1686 ms/op 0.89
send data - 1000 2048B messages 4.9595 ms/op 5.1081 ms/op 0.97
send data - 1000 4096B messages 5.4907 ms/op 5.8412 ms/op 0.94
send data - 1000 16384B messages 147.90 ms/op 17.065 ms/op 8.67
send data - 1000 65536B messages 192.35 ms/op 213.38 ms/op 0.90
enrSubnets - fastDeserialize 64 bits 694.00 ns/op 737.00 ns/op 0.94
enrSubnets - ssz BitVector 64 bits 260.00 ns/op 277.00 ns/op 0.94
enrSubnets - fastDeserialize 4 bits 98.000 ns/op 107.00 ns/op 0.92
enrSubnets - ssz BitVector 4 bits 260.00 ns/op 272.00 ns/op 0.96
prioritizePeers score -10:0 att 32-0.1 sync 2-0 205.59 us/op 201.80 us/op 1.02
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 253.17 us/op 251.27 us/op 1.01
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 347.40 us/op 346.01 us/op 1.00
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 595.23 us/op 598.95 us/op 0.99
prioritizePeers score 0:0 att 64-1 sync 4-1 703.71 us/op 697.07 us/op 1.01
array of 16000 items push then shift 1.3128 us/op 1.2487 us/op 1.05
LinkedList of 16000 items push then shift 7.4300 ns/op 7.3140 ns/op 1.02
array of 16000 items push then pop 66.891 ns/op 68.135 ns/op 0.98
LinkedList of 16000 items push then pop 6.0690 ns/op 5.9380 ns/op 1.02
array of 24000 items push then shift 1.9221 us/op 1.8453 us/op 1.04
LinkedList of 24000 items push then shift 6.9360 ns/op 6.8570 ns/op 1.01
array of 24000 items push then pop 95.021 ns/op 94.706 ns/op 1.00
LinkedList of 24000 items push then pop 6.1540 ns/op 5.9080 ns/op 1.04
intersect bitArray bitLen 8 4.8060 ns/op 4.6870 ns/op 1.03
intersect array and set length 8 29.636 ns/op 29.579 ns/op 1.00
intersect bitArray bitLen 128 24.271 ns/op 23.669 ns/op 1.03
intersect array and set length 128 500.05 ns/op 488.12 ns/op 1.02
bitArray.getTrueBitIndexes() bitLen 128 1.0070 us/op 1.0220 us/op 0.99
bitArray.getTrueBitIndexes() bitLen 248 1.7330 us/op 1.7480 us/op 0.99
bitArray.getTrueBitIndexes() bitLen 512 3.5770 us/op 3.5770 us/op 1.00
Full columns - reconstruct all 6 blobs 112.31 us/op 141.23 us/op 0.80
Full columns - reconstruct half of the blobs out of 6 64.085 us/op 120.49 us/op 0.53
Full columns - reconstruct single blob out of 6 34.692 us/op 29.962 us/op 1.16
Half columns - reconstruct all 6 blobs 391.53 ms/op 383.65 ms/op 1.02
Half columns - reconstruct half of the blobs out of 6 196.44 ms/op 193.77 ms/op 1.01
Half columns - reconstruct single blob out of 6 69.588 ms/op 68.658 ms/op 1.01
Full columns - reconstruct all 10 blobs 171.86 us/op 367.78 us/op 0.47
Full columns - reconstruct half of the blobs out of 10 92.275 us/op 105.86 us/op 0.87
Full columns - reconstruct single blob out of 10 31.160 us/op 45.443 us/op 0.69
Half columns - reconstruct all 10 blobs 647.40 ms/op 642.46 ms/op 1.01
Half columns - reconstruct half of the blobs out of 10 324.90 ms/op 337.09 ms/op 0.96
Half columns - reconstruct single blob out of 10 70.057 ms/op 70.922 ms/op 0.99
Full columns - reconstruct all 20 blobs 1.4723 ms/op 547.82 us/op 2.69
Full columns - reconstruct half of the blobs out of 20 185.99 us/op 201.41 us/op 0.92
Full columns - reconstruct single blob out of 20 31.409 us/op 30.920 us/op 1.02
Half columns - reconstruct all 20 blobs 1.2987 s/op 1.2936 s/op 1.00
Half columns - reconstruct half of the blobs out of 20 663.24 ms/op 652.41 ms/op 1.02
Half columns - reconstruct single blob out of 20 72.699 ms/op 71.392 ms/op 1.02
Set add up to 64 items then delete first 2.5919 us/op 2.5557 us/op 1.01
OrderedSet add up to 64 items then delete first 3.3762 us/op 3.3802 us/op 1.00
Set add up to 64 items then delete last 2.3782 us/op 2.2961 us/op 1.04
OrderedSet add up to 64 items then delete last 3.2920 us/op 3.1831 us/op 1.03
Set add up to 64 items then delete middle 2.1365 us/op 2.0845 us/op 1.02
OrderedSet add up to 64 items then delete middle 4.7896 us/op 4.6584 us/op 1.03
Set add up to 128 items then delete first 4.2447 us/op 4.1196 us/op 1.03
OrderedSet add up to 128 items then delete first 6.5817 us/op 6.4086 us/op 1.03
Set add up to 128 items then delete last 3.9036 us/op 3.8061 us/op 1.03
OrderedSet add up to 128 items then delete last 5.8139 us/op 5.6602 us/op 1.03
Set add up to 128 items then delete middle 3.8828 us/op 3.7853 us/op 1.03
OrderedSet add up to 128 items then delete middle 11.704 us/op 11.249 us/op 1.04
Set add up to 256 items then delete first 7.8899 us/op 7.5769 us/op 1.04
OrderedSet add up to 256 items then delete first 12.227 us/op 11.924 us/op 1.03
Set add up to 256 items then delete last 7.6685 us/op 7.3484 us/op 1.04
OrderedSet add up to 256 items then delete last 11.530 us/op 11.255 us/op 1.02
Set add up to 256 items then delete middle 7.6206 us/op 7.3554 us/op 1.04
OrderedSet add up to 256 items then delete middle 35.038 us/op 39.701 us/op 0.88
pass gossip attestations to forkchoice per slot 2.4739 ms/op 2.9549 ms/op 0.84
forkChoice updateHead vc 100000 bc 64 eq 0 371.33 us/op 401.74 us/op 0.92
forkChoice updateHead vc 600000 bc 64 eq 0 2.3023 ms/op 2.4170 ms/op 0.95
forkChoice updateHead vc 1000000 bc 64 eq 0 3.7792 ms/op 4.0550 ms/op 0.93
forkChoice updateHead vc 600000 bc 320 eq 0 2.2772 ms/op 2.4471 ms/op 0.93
forkChoice updateHead vc 600000 bc 1200 eq 0 2.3048 ms/op 2.5533 ms/op 0.90
forkChoice updateHead vc 600000 bc 7200 eq 0 3.3808 ms/op 4.1296 ms/op 0.82
forkChoice updateHead vc 600000 bc 64 eq 1000 2.7919 ms/op 2.9969 ms/op 0.93
forkChoice updateHead vc 600000 bc 64 eq 10000 2.9311 ms/op 3.1105 ms/op 0.94
forkChoice updateHead vc 600000 bc 64 eq 300000 6.6308 ms/op 7.3145 ms/op 0.91
computeDeltas 1400000 validators 0% inactive 12.189 ms/op 12.745 ms/op 0.96
computeDeltas 1400000 validators 10% inactive 11.437 ms/op 11.928 ms/op 0.96
computeDeltas 1400000 validators 20% inactive 10.318 ms/op 10.853 ms/op 0.95
computeDeltas 1400000 validators 50% inactive 7.9819 ms/op 8.3951 ms/op 0.95
computeDeltas 2100000 validators 0% inactive 18.212 ms/op 19.135 ms/op 0.95
computeDeltas 2100000 validators 10% inactive 17.018 ms/op 17.955 ms/op 0.95
computeDeltas 2100000 validators 20% inactive 15.538 ms/op 16.340 ms/op 0.95
computeDeltas 2100000 validators 50% inactive 9.0668 ms/op 9.5426 ms/op 0.95
altair processAttestation - 250000 vs - 7PWei normalcase 2.3844 ms/op 2.7725 ms/op 0.86
altair processAttestation - 250000 vs - 7PWei worstcase 2.5818 ms/op 3.6768 ms/op 0.70
altair processAttestation - setStatus - 1/6 committees join 103.89 us/op 105.93 us/op 0.98
altair processAttestation - setStatus - 1/3 committees join 202.43 us/op 219.64 us/op 0.92
altair processAttestation - setStatus - 1/2 committees join 286.19 us/op 298.31 us/op 0.96
altair processAttestation - setStatus - 2/3 committees join 369.89 us/op 372.63 us/op 0.99
altair processAttestation - setStatus - 4/5 committees join 514.94 us/op 523.74 us/op 0.98
altair processAttestation - setStatus - 100% committees join 602.13 us/op 627.97 us/op 0.96
altair processBlock - 250000 vs - 7PWei normalcase 3.0696 ms/op 4.3605 ms/op 0.70
altair processBlock - 250000 vs - 7PWei normalcase hashState 12.636 ms/op 16.182 ms/op 0.78
altair processBlock - 250000 vs - 7PWei worstcase 21.559 ms/op 21.037 ms/op 1.02
altair processBlock - 250000 vs - 7PWei worstcase hashState 41.497 ms/op 39.532 ms/op 1.05
phase0 processBlock - 250000 vs - 7PWei normalcase 1.5367 ms/op 1.3051 ms/op 1.18
phase0 processBlock - 250000 vs - 7PWei worstcase 16.969 ms/op 16.539 ms/op 1.03
altair processEth1Data - 250000 vs - 7PWei normalcase 286.94 us/op 269.60 us/op 1.06
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 7.5250 us/op 3.7740 us/op 1.99
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 21.326 us/op 21.543 us/op 0.99
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 5.6210 us/op 5.5340 us/op 1.02
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.6940 us/op 3.5060 us/op 1.05
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 96.065 us/op 93.674 us/op 1.03
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.3755 ms/op 1.3873 ms/op 0.99
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.8963 ms/op 1.8397 ms/op 1.03
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8242 ms/op 1.7930 ms/op 1.02
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.6538 ms/op 3.5776 ms/op 1.02
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.0983 ms/op 2.0759 ms/op 1.01
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.1848 ms/op 3.8402 ms/op 1.09
Tree 40 250000 create 359.83 ms/op 301.08 ms/op 1.20
Tree 40 250000 get(125000) 94.836 ns/op 86.878 ns/op 1.09
Tree 40 250000 set(125000) 1.0327 us/op 937.47 ns/op 1.10
Tree 40 250000 toArray() 9.1562 ms/op 11.247 ms/op 0.81
Tree 40 250000 iterate all - toArray() + loop 9.1920 ms/op 13.607 ms/op 0.68
Tree 40 250000 iterate all - get(i) 37.451 ms/op 36.078 ms/op 1.04
Array 250000 create 2.1188 ms/op 2.0997 ms/op 1.01
Array 250000 clone - spread 662.16 us/op 649.95 us/op 1.02
Array 250000 get(125000) 0.29700 ns/op 0.29300 ns/op 1.01
Array 250000 set(125000) 0.29800 ns/op 0.29400 ns/op 1.01
Array 250000 iterate all - loop 57.340 us/op 54.801 us/op 1.05
phase0 afterProcessEpoch - 250000 vs - 7PWei 53.232 ms/op 38.560 ms/op 1.38
Array.fill - length 1000000 2.1127 ms/op 1.9010 ms/op 1.11
Array push - length 1000000 9.1925 ms/op 9.6563 ms/op 0.95
Array.get 0.20034 ns/op 0.20112 ns/op 1.00
Uint8Array.get 0.22914 ns/op 0.22302 ns/op 1.03
phase0 beforeProcessEpoch - 250000 vs - 7PWei 19.673 ms/op 13.539 ms/op 1.45
altair processEpoch - mainnet_e81889 333.13 ms/op 245.77 ms/op 1.36
mainnet_e81889 - altair beforeProcessEpoch 20.406 ms/op 14.486 ms/op 1.41
mainnet_e81889 - altair processJustificationAndFinalization 8.0120 us/op 5.3250 us/op 1.50
mainnet_e81889 - altair processInactivityUpdates 3.3045 ms/op 3.4336 ms/op 0.96
mainnet_e81889 - altair processRewardsAndPenalties 17.288 ms/op 18.675 ms/op 0.93
mainnet_e81889 - altair processRegistryUpdates 542.00 ns/op 527.00 ns/op 1.03
mainnet_e81889 - altair processSlashings 147.00 ns/op 144.00 ns/op 1.02
mainnet_e81889 - altair processEth1DataReset 143.00 ns/op 139.00 ns/op 1.03
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.3428 ms/op 1.6731 ms/op 0.80
mainnet_e81889 - altair processSlashingsReset 723.00 ns/op 689.00 ns/op 1.05
mainnet_e81889 - altair processRandaoMixesReset 1.2560 us/op 1.1070 us/op 1.13
mainnet_e81889 - altair processHistoricalRootsUpdate 142.00 ns/op 142.00 ns/op 1.00
mainnet_e81889 - altair processParticipationFlagUpdates 422.00 ns/op 427.00 ns/op 0.99
mainnet_e81889 - altair processSyncCommitteeUpdates 121.00 ns/op 123.00 ns/op 0.98
mainnet_e81889 - altair afterProcessEpoch 41.231 ms/op 39.942 ms/op 1.03
capella processEpoch - mainnet_e217614 1.0019 s/op 802.62 ms/op 1.25
mainnet_e217614 - capella beforeProcessEpoch 57.851 ms/op 60.981 ms/op 0.95
mainnet_e217614 - capella processJustificationAndFinalization 7.1120 us/op 6.4730 us/op 1.10
mainnet_e217614 - capella processInactivityUpdates 14.874 ms/op 16.354 ms/op 0.91
mainnet_e217614 - capella processRewardsAndPenalties 92.284 ms/op 86.178 ms/op 1.07
mainnet_e217614 - capella processRegistryUpdates 4.4330 us/op 4.4590 us/op 0.99
mainnet_e217614 - capella processSlashings 138.00 ns/op 146.00 ns/op 0.95
mainnet_e217614 - capella processEth1DataReset 131.00 ns/op 145.00 ns/op 0.90
mainnet_e217614 - capella processEffectiveBalanceUpdates 15.518 ms/op 17.547 ms/op 0.88
mainnet_e217614 - capella processSlashingsReset 645.00 ns/op 688.00 ns/op 0.94
mainnet_e217614 - capella processRandaoMixesReset 1.2730 us/op 1.3130 us/op 0.97
mainnet_e217614 - capella processHistoricalRootsUpdate 133.00 ns/op 146.00 ns/op 0.91
mainnet_e217614 - capella processParticipationFlagUpdates 421.00 ns/op 460.00 ns/op 0.92
mainnet_e217614 - capella afterProcessEpoch 109.09 ms/op 108.91 ms/op 1.00
phase0 processEpoch - mainnet_e58758 329.31 ms/op 325.47 ms/op 1.01
mainnet_e58758 - phase0 beforeProcessEpoch 63.421 ms/op 68.907 ms/op 0.92
mainnet_e58758 - phase0 processJustificationAndFinalization 6.7930 us/op 6.4380 us/op 1.06
mainnet_e58758 - phase0 processRewardsAndPenalties 15.661 ms/op 16.231 ms/op 0.96
mainnet_e58758 - phase0 processRegistryUpdates 2.1240 us/op 2.2590 us/op 0.94
mainnet_e58758 - phase0 processSlashings 132.00 ns/op 247.00 ns/op 0.53
mainnet_e58758 - phase0 processEth1DataReset 131.00 ns/op 152.00 ns/op 0.86
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 776.39 us/op 2.4895 ms/op 0.31
mainnet_e58758 - phase0 processSlashingsReset 823.00 ns/op 924.00 ns/op 0.89
mainnet_e58758 - phase0 processRandaoMixesReset 1.1820 us/op 1.3030 us/op 0.91
mainnet_e58758 - phase0 processHistoricalRootsUpdate 138.00 ns/op 148.00 ns/op 0.93
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.2010 us/op 1.1840 us/op 1.01
mainnet_e58758 - phase0 afterProcessEpoch 32.062 ms/op 33.365 ms/op 0.96
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.0158 ms/op 979.11 us/op 1.04
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.5947 ms/op 1.5875 ms/op 1.00
altair processInactivityUpdates - 250000 normalcase 11.115 ms/op 10.379 ms/op 1.07
altair processInactivityUpdates - 250000 worstcase 10.520 ms/op 10.286 ms/op 1.02
phase0 processRegistryUpdates - 250000 normalcase 2.1180 us/op 2.1180 us/op 1.00
phase0 processRegistryUpdates - 250000 badcase_full_deposits 148.13 us/op 136.68 us/op 1.08
phase0 processRegistryUpdates - 250000 worstcase 0.5 64.998 ms/op 55.524 ms/op 1.17
altair processRewardsAndPenalties - 250000 normalcase 14.650 ms/op 15.406 ms/op 0.95
altair processRewardsAndPenalties - 250000 worstcase 13.054 ms/op 15.046 ms/op 0.87
phase0 getAttestationDeltas - 250000 normalcase 5.0509 ms/op 5.2284 ms/op 0.97
phase0 getAttestationDeltas - 250000 worstcase 5.1109 ms/op 5.2676 ms/op 0.97
phase0 processSlashings - 250000 worstcase 56.497 us/op 58.319 us/op 0.97
altair processSyncCommitteeUpdates - 250000 9.6673 ms/op 10.018 ms/op 0.97
BeaconState.hashTreeRoot - No change 170.00 ns/op 180.00 ns/op 0.94
BeaconState.hashTreeRoot - 1 full validator 76.733 us/op 63.611 us/op 1.21
BeaconState.hashTreeRoot - 32 full validator 1.0950 ms/op 812.00 us/op 1.35
BeaconState.hashTreeRoot - 512 full validator 6.4356 ms/op 6.7127 ms/op 0.96
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 89.841 us/op 90.634 us/op 0.99
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.6618 ms/op 1.3262 ms/op 1.25
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 19.344 ms/op 14.664 ms/op 1.32
BeaconState.hashTreeRoot - 1 balances 89.491 us/op 68.440 us/op 1.31
BeaconState.hashTreeRoot - 32 balances 794.69 us/op 711.38 us/op 1.12
BeaconState.hashTreeRoot - 512 balances 5.0338 ms/op 5.1583 ms/op 0.98
BeaconState.hashTreeRoot - 250000 balances 153.31 ms/op 102.42 ms/op 1.50
aggregationBits - 2048 els - zipIndexesInBitList 18.918 us/op 18.921 us/op 1.00
regular array get 100000 times 22.916 us/op 22.320 us/op 1.03
wrappedArray get 100000 times 22.955 us/op 22.514 us/op 1.02
arrayWithProxy get 100000 times 9.1386 ms/op 11.588 ms/op 0.79
ssz.Root.equals 20.376 ns/op 20.929 ns/op 0.97
byteArrayEquals 20.182 ns/op 20.747 ns/op 0.97
Buffer.compare 8.3710 ns/op 8.6420 ns/op 0.97
processSlot - 1 slots 9.0990 us/op 9.0690 us/op 1.00
processSlot - 32 slots 2.1505 ms/op 1.9778 ms/op 1.09
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 4.4040 ms/op 4.9768 ms/op 0.88
getCommitteeAssignments - req 1 vs - 250000 vc 1.5857 ms/op 1.6269 ms/op 0.97
getCommitteeAssignments - req 100 vs - 250000 vc 3.2777 ms/op 3.3358 ms/op 0.98
getCommitteeAssignments - req 1000 vs - 250000 vc 3.5458 ms/op 3.5696 ms/op 0.99
findModifiedValidators - 10000 modified validators 669.14 ms/op 703.19 ms/op 0.95
findModifiedValidators - 1000 modified validators 412.95 ms/op 487.76 ms/op 0.85
findModifiedValidators - 100 modified validators 257.78 ms/op 278.81 ms/op 0.92
findModifiedValidators - 10 modified validators 154.69 ms/op 219.13 ms/op 0.71
findModifiedValidators - 1 modified validators 147.52 ms/op 153.93 ms/op 0.96
findModifiedValidators - no difference 169.12 ms/op 147.56 ms/op 1.15
migrate state 1500000 validators, 3400 modified, 2000 new 3.6754 s/op 2.8880 s/op 1.27
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.7500 ns/op 3.4400 ns/op 1.09
state getBlockRootAtSlot - 250000 vs - 7PWei 391.80 ns/op 350.04 ns/op 1.12
computeProposerIndex 100000 validators 1.3433 ms/op 1.3216 ms/op 1.02
getNextSyncCommitteeIndices 1000 validators 2.8801 ms/op 2.8623 ms/op 1.01
getNextSyncCommitteeIndices 10000 validators 25.417 ms/op 24.944 ms/op 1.02
getNextSyncCommitteeIndices 100000 validators 84.621 ms/op 86.507 ms/op 0.98
computeProposers - vc 250000 551.37 us/op 546.16 us/op 1.01
computeEpochShuffling - vc 250000 39.764 ms/op 40.351 ms/op 0.99
getNextSyncCommittee - vc 250000 9.4820 ms/op 9.2745 ms/op 1.02
nodejs block root to RootHex using toHex 110.51 ns/op 105.90 ns/op 1.04
nodejs block root to RootHex using toRootHex 70.938 ns/op 67.324 ns/op 1.05
nodejs fromHex(blob) 808.21 us/op 723.37 us/op 1.12
nodejs fromHexInto(blob) 634.40 us/op 612.84 us/op 1.04
nodejs block root to RootHex using the deprecated toHexString 500.08 ns/op 479.28 ns/op 1.04
nodejs byteArrayEquals 32 bytes (block root) 26.191 ns/op 25.569 ns/op 1.02
nodejs byteArrayEquals 48 bytes (pubkey) 37.841 ns/op 37.000 ns/op 1.02
nodejs byteArrayEquals 96 bytes (signature) 35.178 ns/op 31.776 ns/op 1.11
nodejs byteArrayEquals 1024 bytes 41.291 ns/op 38.933 ns/op 1.06
nodejs byteArrayEquals 131072 bytes (blob) 1.7815 us/op 1.7125 us/op 1.04
browser block root to RootHex using toHex 146.06 ns/op 140.53 ns/op 1.04
browser block root to RootHex using toRootHex 130.25 ns/op 128.79 ns/op 1.01
browser fromHex(blob) 1.6084 ms/op 1.4838 ms/op 1.08
browser fromHexInto(blob) 638.03 us/op 610.66 us/op 1.04
browser block root to RootHex using the deprecated toHexString 351.77 ns/op 473.94 ns/op 0.74
browser byteArrayEquals 32 bytes (block root) 28.403 ns/op 27.468 ns/op 1.03
browser byteArrayEquals 48 bytes (pubkey) 39.963 ns/op 38.864 ns/op 1.03
browser byteArrayEquals 96 bytes (signature) 74.880 ns/op 71.936 ns/op 1.04
browser byteArrayEquals 1024 bytes 763.28 ns/op 745.69 ns/op 1.02
browser byteArrayEquals 131072 bytes (blob) 96.000 us/op 92.656 us/op 1.04

by benchmarkbot/action

// payload_states = {anchor_root: anchor_state.copy()}
// This means the anchor's "payload" is considered received (the anchor state IS the post-payload state).
// Without FULL, blocks extending FULL from the anchor would be orphaned.
if (block.executionPayloadBlockHash !== null) {
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.

this is likely a bug in the spec

Image

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.

we can merge for the sake of passing spec tests
but need to leave a TODO GLOAS to remove later

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants