Skip to content

feat: return 204 when producing payload attestation if there is no block#9589

Open
nflaig wants to merge 2 commits into
unstablefrom
nflaig/produce-payload-attestation-204
Open

feat: return 204 when producing payload attestation if there is no block#9589
nflaig wants to merge 2 commits into
unstablefrom
nflaig/produce-payload-attestation-204

Conversation

@nflaig

@nflaig nflaig commented Jul 4, 2026

Copy link
Copy Markdown
Member

As per ethereum/beacon-APIs#612 (comment)

I am beginning to feel more strongly about using 204 here, on glamsterdam-devnet-6, there are a lot of missed blocks right now and lodestar is emitting this as warnings (our standard request handler), I don't wanna special case this api, and this is quite a frequent error/warning being emitted. Today, this was flagged incorrectly by AI as a potential CL issue to me but it's perfectly normal behavior, so let's use a status code that indicates that, 404 does not.

the spec has not settled yet but to avoid noise in the logs we should use 204 for now. Can always revert back to 404 if that's what we decide to go with on the spec side.

@nflaig nflaig requested a review from a team as a code owner July 4, 2026 17:04

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

Copy link
Copy Markdown

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: ec90d98b08

ℹ️ 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".

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

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

try {
const payloadAttestationData = await this.producePayloadAttestationData(slot);
// No canonical block at slot resolves to `undefined`
const payloadAttestationData = (await this.api.validator.producePayloadAttestationData({slot})).value();

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Handle legacy 404 no-block responses

When the VC is pointed at a beacon node that still returns 404 for “no canonical block at this slot” (the behavior this code handled before, and still plausible while the endpoint semantics are unsettled), calling value() directly makes ApiResponse.value() assert the response is OK and throw. The outer catch then logs Error on PTC routine instead of quietly skipping the payload attestation, reintroducing the noise this change is meant to avoid for mixed-version or non-updated beacon nodes. Keep the 404-as-empty handling alongside the new 204/undefined path.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

not a concern, this is only relevant for devnets right now

@gemini-code-assist gemini-code-assist Bot 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.

Code Review

This pull request updates the producePayloadAttestationData endpoint to return a 204 No Content status with undefined data instead of throwing a 404 Not Found error when no canonical block is found at the specified slot. While this is a solid improvement, the reviewer noted that returning early on a 204 response in the Fastify handler without setting metadata headers will cause client-side parsing errors, as the client expects the Eth-Consensus-Version header. It is recommended to serialize and set these headers before returning.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread packages/api/src/utils/server/handler.ts
@nflaig nflaig changed the title feat: return 204 when producing payload attestations if there is no block feat: return 204 when producing payload attestation if there is no block Jul 4, 2026
@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 7ac61be Previous: 51a1c44 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.2536 ms/op 1.0150 ms/op 1.23
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 38.401 us/op 42.785 us/op 0.90
BLS verify - blst 759.94 us/op 725.14 us/op 1.05
BLS verifyMultipleSignatures 3 - blst 1.3833 ms/op 1.3911 ms/op 0.99
BLS verifyMultipleSignatures 8 - blst 2.1948 ms/op 2.2249 ms/op 0.99
BLS verifyMultipleSignatures 32 - blst 7.1311 ms/op 7.0459 ms/op 1.01
BLS verifyMultipleSignatures 64 - blst 14.038 ms/op 13.571 ms/op 1.03
BLS verifyMultipleSignatures 128 - blst 26.993 ms/op 26.526 ms/op 1.02
BLS deserializing 10000 signatures 653.40 ms/op 658.73 ms/op 0.99
BLS deserializing 100000 signatures 6.4122 s/op 6.6095 s/op 0.97
BLS verifyMultipleSignatures - same message - 3 - blst 781.43 us/op 735.37 us/op 1.06
BLS verifyMultipleSignatures - same message - 8 - blst 841.35 us/op 931.16 us/op 0.90
BLS verifyMultipleSignatures - same message - 32 - blst 1.5196 ms/op 1.5853 ms/op 0.96
BLS verifyMultipleSignatures - same message - 64 - blst 2.4244 ms/op 2.4793 ms/op 0.98
BLS verifyMultipleSignatures - same message - 128 - blst 4.1220 ms/op 4.1983 ms/op 0.98
BLS aggregatePubkeys 32 - blst 17.749 us/op 18.373 us/op 0.97
BLS aggregatePubkeys 128 - blst 63.837 us/op 65.431 us/op 0.98
getSlashingsAndExits - default max 49.534 us/op 54.035 us/op 0.92
getSlashingsAndExits - 2k 356.86 us/op 418.48 us/op 0.85
proposeBlockBody type=full, size=empty 712.86 us/op 772.61 us/op 0.92
isKnown best case - 1 super set check 168.00 ns/op 169.00 ns/op 0.99
isKnown normal case - 2 super set checks 175.00 ns/op 174.00 ns/op 1.01
isKnown worse case - 16 super set checks 168.00 ns/op 166.00 ns/op 1.01
validate api signedAggregateAndProof - struct 1.5297 ms/op 1.5562 ms/op 0.98
validate gossip signedAggregateAndProof - struct 1.5261 ms/op 1.5575 ms/op 0.98
batch validate gossip attestation - vc 640000 - chunk 32 105.86 us/op 112.54 us/op 0.94
batch validate gossip attestation - vc 640000 - chunk 64 92.457 us/op 99.528 us/op 0.93
batch validate gossip attestation - vc 640000 - chunk 128 85.746 us/op 93.173 us/op 0.92
batch validate gossip attestation - vc 640000 - chunk 256 82.723 us/op 85.077 us/op 0.97
bytes32 toHexString 292.00 ns/op 291.00 ns/op 1.00
bytes32 Buffer.toString(hex) 169.00 ns/op 167.00 ns/op 1.01
bytes32 Buffer.toString(hex) from Uint8Array 239.00 ns/op 240.00 ns/op 1.00
bytes32 Buffer.toString(hex) + 0x 169.00 ns/op 169.00 ns/op 1.00
Return object 10000 times 0.21410 ns/op 0.21940 ns/op 0.98
Throw Error 10000 times 3.4011 us/op 3.5367 us/op 0.96
toHex 109.11 ns/op 107.29 ns/op 1.02
Buffer.from 91.464 ns/op 94.121 ns/op 0.97
shared Buffer 63.502 ns/op 64.117 ns/op 0.99
fastMsgIdFn sha256 / 200 bytes 1.4930 us/op 1.5280 us/op 0.98
fastMsgIdFn h32 xxhash / 200 bytes 156.00 ns/op 159.00 ns/op 0.98
fastMsgIdFn h64 xxhash / 200 bytes 205.00 ns/op 219.00 ns/op 0.94
fastMsgIdFn sha256 / 1000 bytes 4.7840 us/op 4.9320 us/op 0.97
fastMsgIdFn h32 xxhash / 1000 bytes 245.00 ns/op 246.00 ns/op 1.00
fastMsgIdFn h64 xxhash / 1000 bytes 250.00 ns/op 260.00 ns/op 0.96
fastMsgIdFn sha256 / 10000 bytes 42.220 us/op 43.218 us/op 0.98
fastMsgIdFn h32 xxhash / 10000 bytes 1.2720 us/op 1.3280 us/op 0.96
fastMsgIdFn h64 xxhash / 10000 bytes 817.00 ns/op 866.00 ns/op 0.94
send data - 1000 256B messages 4.0443 ms/op 3.9853 ms/op 1.01
send data - 1000 512B messages 4.9709 ms/op 4.9829 ms/op 1.00
send data - 1000 1024B messages 5.1045 ms/op 5.3636 ms/op 0.95
send data - 1000 1200B messages 6.0650 ms/op 6.0376 ms/op 1.00
send data - 1000 2048B messages 32.419 ms/op 12.225 ms/op 2.65
send data - 1000 4096B messages 50.136 ms/op 36.949 ms/op 1.36
send data - 1000 16384B messages 267.24 ms/op 268.94 ms/op 0.99
send data - 1000 65536B messages 1.0010 s/op 1.2089 s/op 0.83
enrSubnets - fastDeserialize 64 bits 734.00 ns/op 741.00 ns/op 0.99
enrSubnets - ssz BitVector 64 bits 264.00 ns/op 264.00 ns/op 1.00
enrSubnets - fastDeserialize 4 bits 105.00 ns/op 100.00 ns/op 1.05
enrSubnets - ssz BitVector 4 bits 264.00 ns/op 264.00 ns/op 1.00
prioritizePeers score -10:0 att 32-0.1 sync 2-0 210.71 us/op 209.58 us/op 1.01
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 240.71 us/op 235.01 us/op 1.02
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 342.85 us/op 336.83 us/op 1.02
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 613.92 us/op 603.62 us/op 1.02
prioritizePeers score 0:0 att 64-1 sync 4-1 711.22 us/op 698.34 us/op 1.02
array of 16000 items push then shift 1.3183 us/op 1.3027 us/op 1.01
LinkedList of 16000 items push then shift 7.4500 ns/op 6.7310 ns/op 1.11
array of 16000 items push then pop 69.666 ns/op 64.584 ns/op 1.08
LinkedList of 16000 items push then pop 6.2220 ns/op 5.9520 ns/op 1.05
array of 24000 items push then shift 1.9540 us/op 1.9286 us/op 1.01
LinkedList of 24000 items push then shift 7.2420 ns/op 6.3320 ns/op 1.14
array of 24000 items push then pop 98.250 ns/op 88.480 ns/op 1.11
LinkedList of 24000 items push then pop 6.2980 ns/op 5.9730 ns/op 1.05
intersect bitArray bitLen 8 4.8600 ns/op 4.7350 ns/op 1.03
intersect array and set length 8 30.129 ns/op 31.065 ns/op 0.97
intersect bitArray bitLen 128 24.530 ns/op 24.022 ns/op 1.02
intersect array and set length 128 505.78 ns/op 509.05 ns/op 0.99
bitArray.getTrueBitIndexes() bitLen 128 987.00 ns/op 975.00 ns/op 1.01
bitArray.getTrueBitIndexes() bitLen 248 1.7700 us/op 1.7360 us/op 1.02
bitArray.getTrueBitIndexes() bitLen 512 3.7230 us/op 3.5570 us/op 1.05
Full columns - reconstruct all 6 blobs 233.47 us/op 220.61 us/op 1.06
Full columns - reconstruct half of the blobs out of 6 70.475 us/op 67.498 us/op 1.04
Full columns - reconstruct single blob out of 6 35.779 us/op 32.736 us/op 1.09
Half columns - reconstruct all 6 blobs 392.54 ms/op 380.14 ms/op 1.03
Half columns - reconstruct half of the blobs out of 6 199.81 ms/op 190.76 ms/op 1.05
Half columns - reconstruct single blob out of 6 69.188 ms/op 67.838 ms/op 1.02
Set add up to 64 items then delete first 1.6793 us/op 1.7062 us/op 0.98
OrderedSet add up to 64 items then delete first 2.5562 us/op 2.5846 us/op 0.99
Set add up to 64 items then delete last 1.9381 us/op 1.9613 us/op 0.99
OrderedSet add up to 64 items then delete last 2.8411 us/op 2.8655 us/op 0.99
Set add up to 64 items then delete middle 1.9201 us/op 1.9609 us/op 0.98
OrderedSet add up to 64 items then delete middle 4.3584 us/op 4.3242 us/op 1.01
Set add up to 128 items then delete first 3.8024 us/op 3.8980 us/op 0.98
OrderedSet add up to 128 items then delete first 5.9636 us/op 5.8732 us/op 1.02
Set add up to 128 items then delete last 3.6961 us/op 3.7357 us/op 0.99
OrderedSet add up to 128 items then delete last 5.4473 us/op 5.4986 us/op 0.99
Set add up to 128 items then delete middle 3.6726 us/op 3.7196 us/op 0.99
OrderedSet add up to 128 items then delete middle 11.374 us/op 11.360 us/op 1.00
Set add up to 256 items then delete first 7.7290 us/op 7.7126 us/op 1.00
OrderedSet add up to 256 items then delete first 12.056 us/op 12.015 us/op 1.00
Set add up to 256 items then delete last 7.3216 us/op 7.4836 us/op 0.98
OrderedSet add up to 256 items then delete last 12.174 us/op 11.346 us/op 1.07
Set add up to 256 items then delete middle 7.2803 us/op 7.4833 us/op 0.97
OrderedSet add up to 256 items then delete middle 35.431 us/op 34.536 us/op 1.03
runFastConfirmationRules vc:100000 bc:96 eq:0 3.7240 us/op 4.0560 us/op 0.92
runFastConfirmationRules vc:600000 bc:96 eq:0 3.6160 us/op 3.9840 us/op 0.91
runFastConfirmationRules vc:1000000 bc:96 eq:0 3.7200 us/op 3.7330 us/op 1.00
runFastConfirmationRules vc:600000 bc:320 eq:0 10.753 us/op 10.173 us/op 1.06
runFastConfirmationRules vc:600000 bc:1200 eq:0 33.879 us/op 41.661 us/op 0.81
runFastConfirmationRules vc:600000 bc:96 eq:1000 3.6090 us/op 3.8090 us/op 0.95
runFastConfirmationRules vc:600000 bc:96 eq:10000 3.6140 us/op 3.3970 us/op 1.06
runFastConfirmationRules vc:600000 bc:96 eq:300000 3.6880 us/op 3.5090 us/op 1.05
pass gossip attestations to forkchoice per slot 2.6475 ms/op 2.5292 ms/op 1.05
forkChoice updateHead vc 100000 bc 64 eq 0 445.95 us/op 490.15 us/op 0.91
forkChoice updateHead vc 600000 bc 64 eq 0 2.6758 ms/op 2.9476 ms/op 0.91
forkChoice updateHead vc 1000000 bc 64 eq 0 4.4127 ms/op 4.8812 ms/op 0.90
forkChoice updateHead vc 600000 bc 320 eq 0 2.6572 ms/op 2.9202 ms/op 0.91
forkChoice updateHead vc 600000 bc 1200 eq 0 2.7237 ms/op 2.9661 ms/op 0.92
forkChoice updateHead vc 600000 bc 7200 eq 0 3.0324 ms/op 3.2710 ms/op 0.93
forkChoice updateHead vc 600000 bc 64 eq 1000 2.7194 ms/op 3.0183 ms/op 0.90
forkChoice updateHead vc 600000 bc 64 eq 10000 2.8579 ms/op 3.0894 ms/op 0.93
forkChoice updateHead vc 600000 bc 64 eq 300000 6.9486 ms/op 7.4818 ms/op 0.93
computeDeltas 1400000 validators 0% inactive 13.104 ms/op 13.702 ms/op 0.96
computeDeltas 1400000 validators 10% inactive 12.526 ms/op 12.775 ms/op 0.98
computeDeltas 1400000 validators 20% inactive 11.352 ms/op 11.883 ms/op 0.96
computeDeltas 1400000 validators 50% inactive 8.5745 ms/op 9.2631 ms/op 0.93
computeDeltas 2100000 validators 0% inactive 19.273 ms/op 20.453 ms/op 0.94
computeDeltas 2100000 validators 10% inactive 18.795 ms/op 19.211 ms/op 0.98
computeDeltas 2100000 validators 20% inactive 17.528 ms/op 17.851 ms/op 0.98
computeDeltas 2100000 validators 50% inactive 10.169 ms/op 13.948 ms/op 0.73
altair processAttestation - 250000 vs - 7PWei normalcase 1.7116 ms/op 1.6732 ms/op 1.02
altair processAttestation - 250000 vs - 7PWei worstcase 2.4578 ms/op 2.4584 ms/op 1.00
altair processAttestation - setStatus - 1/6 committees join 97.513 us/op 100.40 us/op 0.97
altair processAttestation - setStatus - 1/3 committees join 198.94 us/op 199.68 us/op 1.00
altair processAttestation - setStatus - 1/2 committees join 284.74 us/op 286.02 us/op 1.00
altair processAttestation - setStatus - 2/3 committees join 369.45 us/op 376.61 us/op 0.98
altair processAttestation - setStatus - 4/5 committees join 510.91 us/op 508.25 us/op 1.01
altair processAttestation - setStatus - 100% committees join 599.46 us/op 608.06 us/op 0.99
altair processBlock - 250000 vs - 7PWei normalcase 2.8526 ms/op 2.8811 ms/op 0.99
altair processBlock - 250000 vs - 7PWei normalcase hashState 11.381 ms/op 14.724 ms/op 0.77
altair processBlock - 250000 vs - 7PWei worstcase 19.096 ms/op 19.131 ms/op 1.00
altair processBlock - 250000 vs - 7PWei worstcase hashState 39.545 ms/op 39.366 ms/op 1.00
phase0 processBlock - 250000 vs - 7PWei normalcase 1.2552 ms/op 1.4427 ms/op 0.87
phase0 processBlock - 250000 vs - 7PWei worstcase 16.615 ms/op 17.292 ms/op 0.96
altair processEth1Data - 250000 vs - 7PWei normalcase 298.25 us/op 301.00 us/op 0.99
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.6460 us/op 3.4890 us/op 1.04
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 21.678 us/op 22.167 us/op 0.98
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 5.8360 us/op 6.0930 us/op 0.96
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 4.1380 us/op 3.8880 us/op 1.06
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 105.19 us/op 99.419 us/op 1.06
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.3798 ms/op 1.3845 ms/op 1.00
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.8123 ms/op 1.8464 ms/op 0.98
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8131 ms/op 1.8146 ms/op 1.00
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.3188 ms/op 3.5860 ms/op 0.93
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.0376 ms/op 2.0549 ms/op 0.99
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.5983 ms/op 3.8737 ms/op 0.93
Tree 40 250000 create 312.87 ms/op 324.22 ms/op 0.96
Tree 40 250000 get(125000) 100.86 ns/op 100.17 ns/op 1.01
Tree 40 250000 set(125000) 1.0605 us/op 1.0882 us/op 0.97
Tree 40 250000 toArray() 9.0759 ms/op 9.6178 ms/op 0.94
Tree 40 250000 iterate all - toArray() + loop 9.1892 ms/op 9.7408 ms/op 0.94
Tree 40 250000 iterate all - get(i) 34.190 ms/op 34.547 ms/op 0.99
Array 250000 create 2.0182 ms/op 2.0671 ms/op 0.98
Array 250000 clone - spread 646.97 us/op 654.95 us/op 0.99
Array 250000 get(125000) 0.29300 ns/op 0.29200 ns/op 1.00
Array 250000 set(125000) 0.30200 ns/op 0.29400 ns/op 1.03
Array 250000 iterate all - loop 56.522 us/op 56.168 us/op 1.01
phase0 afterProcessEpoch - 250000 vs - 7PWei 38.134 ms/op 51.628 ms/op 0.74
Array.fill - length 1000000 2.3452 ms/op 2.3095 ms/op 1.02
Array push - length 1000000 7.5871 ms/op 7.6534 ms/op 0.99
Array.get 0.20566 ns/op 0.20529 ns/op 1.00
Uint8Array.get 0.25324 ns/op 0.24427 ns/op 1.04
phase0 beforeProcessEpoch - 250000 vs - 7PWei 12.524 ms/op 11.161 ms/op 1.12
altair processEpoch - mainnet_e81889 218.75 ms/op 228.98 ms/op 0.96
mainnet_e81889 - altair beforeProcessEpoch 19.129 ms/op 13.758 ms/op 1.39
mainnet_e81889 - altair processJustificationAndFinalization 4.8050 us/op 4.6750 us/op 1.03
mainnet_e81889 - altair processInactivityUpdates 3.4990 ms/op 3.6201 ms/op 0.97
mainnet_e81889 - altair processRewardsAndPenalties 16.444 ms/op 17.240 ms/op 0.95
mainnet_e81889 - altair processRegistryUpdates 530.00 ns/op 513.00 ns/op 1.03
mainnet_e81889 - altair processSlashings 127.00 ns/op 133.00 ns/op 0.95
mainnet_e81889 - altair processEth1DataReset 126.00 ns/op 124.00 ns/op 1.02
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.6508 ms/op 1.1717 ms/op 1.41
mainnet_e81889 - altair processSlashingsReset 882.00 ns/op 673.00 ns/op 1.31
mainnet_e81889 - altair processRandaoMixesReset 1.0070 us/op 973.00 ns/op 1.03
mainnet_e81889 - altair processHistoricalRootsUpdate 132.00 ns/op 124.00 ns/op 1.06
mainnet_e81889 - altair processParticipationFlagUpdates 430.00 ns/op 408.00 ns/op 1.05
mainnet_e81889 - altair processSyncCommitteeUpdates 102.00 ns/op 100.00 ns/op 1.02
mainnet_e81889 - altair afterProcessEpoch 41.556 ms/op 40.494 ms/op 1.03
capella processEpoch - mainnet_e217614 763.63 ms/op 698.39 ms/op 1.09
mainnet_e217614 - capella beforeProcessEpoch 58.491 ms/op 56.172 ms/op 1.04
mainnet_e217614 - capella processJustificationAndFinalization 5.4160 us/op 5.0560 us/op 1.07
mainnet_e217614 - capella processInactivityUpdates 11.272 ms/op 11.895 ms/op 0.95
mainnet_e217614 - capella processRewardsAndPenalties 86.445 ms/op 91.442 ms/op 0.95
mainnet_e217614 - capella processRegistryUpdates 4.5520 us/op 4.6450 us/op 0.98
mainnet_e217614 - capella processSlashings 135.00 ns/op 134.00 ns/op 1.01
mainnet_e217614 - capella processEth1DataReset 131.00 ns/op 129.00 ns/op 1.02
mainnet_e217614 - capella processEffectiveBalanceUpdates 5.8387 ms/op 5.4211 ms/op 1.08
mainnet_e217614 - capella processSlashingsReset 678.00 ns/op 655.00 ns/op 1.04
mainnet_e217614 - capella processRandaoMixesReset 1.1500 us/op 989.00 ns/op 1.16
mainnet_e217614 - capella processHistoricalRootsUpdate 131.00 ns/op 125.00 ns/op 1.05
mainnet_e217614 - capella processParticipationFlagUpdates 433.00 ns/op 407.00 ns/op 1.06
mainnet_e217614 - capella afterProcessEpoch 108.35 ms/op 106.03 ms/op 1.02
phase0 processEpoch - mainnet_e58758 247.50 ms/op 240.06 ms/op 1.03
mainnet_e58758 - phase0 beforeProcessEpoch 44.610 ms/op 49.364 ms/op 0.90
mainnet_e58758 - phase0 processJustificationAndFinalization 4.8450 us/op 4.8720 us/op 0.99
mainnet_e58758 - phase0 processRewardsAndPenalties 15.093 ms/op 16.138 ms/op 0.94
mainnet_e58758 - phase0 processRegistryUpdates 2.2690 us/op 2.2130 us/op 1.03
mainnet_e58758 - phase0 processSlashings 132.00 ns/op 160.00 ns/op 0.82
mainnet_e58758 - phase0 processEth1DataReset 130.00 ns/op 123.00 ns/op 1.06
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 977.94 us/op 969.43 us/op 1.01
mainnet_e58758 - phase0 processSlashingsReset 843.00 ns/op 784.00 ns/op 1.08
mainnet_e58758 - phase0 processRandaoMixesReset 1.0170 us/op 1.0060 us/op 1.01
mainnet_e58758 - phase0 processHistoricalRootsUpdate 133.00 ns/op 134.00 ns/op 0.99
mainnet_e58758 - phase0 processParticipationRecordUpdates 990.00 ns/op 980.00 ns/op 1.01
mainnet_e58758 - phase0 afterProcessEpoch 33.149 ms/op 32.679 ms/op 1.01
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.1373 ms/op 1.0211 ms/op 1.11
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.7235 ms/op 1.6394 ms/op 1.05
altair processInactivityUpdates - 250000 normalcase 10.662 ms/op 10.477 ms/op 1.02
altair processInactivityUpdates - 250000 worstcase 10.671 ms/op 10.500 ms/op 1.02
phase0 processRegistryUpdates - 250000 normalcase 2.1980 us/op 2.1140 us/op 1.04
phase0 processRegistryUpdates - 250000 badcase_full_deposits 147.80 us/op 148.88 us/op 0.99
phase0 processRegistryUpdates - 250000 worstcase 0.5 52.856 ms/op 56.826 ms/op 0.93
altair processRewardsAndPenalties - 250000 normalcase 13.096 ms/op 12.936 ms/op 1.01
altair processRewardsAndPenalties - 250000 worstcase 12.841 ms/op 12.957 ms/op 0.99
phase0 getAttestationDeltas - 250000 normalcase 5.4062 ms/op 5.3239 ms/op 1.02
phase0 getAttestationDeltas - 250000 worstcase 5.4185 ms/op 5.3353 ms/op 1.02
phase0 processSlashings - 250000 worstcase 60.649 us/op 59.338 us/op 1.02
altair processSyncCommitteeUpdates - 250000 10.041 ms/op 10.031 ms/op 1.00
BeaconState.hashTreeRoot - No change 176.00 ns/op 163.00 ns/op 1.08
BeaconState.hashTreeRoot - 1 full validator 55.959 us/op 56.084 us/op 1.00
BeaconState.hashTreeRoot - 32 full validator 638.48 us/op 616.75 us/op 1.04
BeaconState.hashTreeRoot - 512 full validator 5.9080 ms/op 5.8597 ms/op 1.01
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 69.637 us/op 67.815 us/op 1.03
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.0365 ms/op 1.0198 ms/op 1.02
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 12.732 ms/op 12.424 ms/op 1.02
BeaconState.hashTreeRoot - 1 balances 55.255 us/op 55.217 us/op 1.00
BeaconState.hashTreeRoot - 32 balances 567.55 us/op 534.69 us/op 1.06
BeaconState.hashTreeRoot - 512 balances 4.5965 ms/op 4.5752 ms/op 1.00
BeaconState.hashTreeRoot - 250000 balances 101.31 ms/op 98.191 ms/op 1.03
aggregationBits - 2048 els - zipIndexesInBitList 18.983 us/op 20.103 us/op 0.94
regular array get 100000 times 22.744 us/op 22.578 us/op 1.01
wrappedArray get 100000 times 22.766 us/op 22.585 us/op 1.01
arrayWithProxy get 100000 times 10.494 ms/op 10.525 ms/op 1.00
ssz.Root.equals 21.486 ns/op 21.386 ns/op 1.00
byteArrayEquals 21.290 ns/op 21.194 ns/op 1.00
Buffer.compare 8.8480 ns/op 9.4160 ns/op 0.94
processSlot - 1 slots 7.8840 us/op 7.8570 us/op 1.00
processSlot - 32 slots 1.5566 ms/op 1.5099 ms/op 1.03
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 2.3478 ms/op 2.0838 ms/op 1.13
getCommitteeAssignments - req 1 vs - 250000 vc 1.7084 ms/op 1.6687 ms/op 1.02
getCommitteeAssignments - req 100 vs - 250000 vc 3.4648 ms/op 3.4115 ms/op 1.02
getCommitteeAssignments - req 1000 vs - 250000 vc 3.7265 ms/op 3.6438 ms/op 1.02
findModifiedValidators - 10000 modified validators 657.67 ms/op 704.78 ms/op 0.93
findModifiedValidators - 1000 modified validators 554.38 ms/op 411.72 ms/op 1.35
findModifiedValidators - 100 modified validators 279.45 ms/op 281.98 ms/op 0.99
findModifiedValidators - 10 modified validators 254.09 ms/op 160.11 ms/op 1.59
findModifiedValidators - 1 modified validators 152.68 ms/op 157.15 ms/op 0.97
findModifiedValidators - no difference 140.48 ms/op 178.49 ms/op 0.79
migrate state 1500000 validators, 3400 modified, 2000 new 2.6018 s/op 2.6126 s/op 1.00
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.7400 ns/op 3.6500 ns/op 1.02
state getBlockRootAtSlot - 250000 vs - 7PWei 264.73 ns/op 280.38 ns/op 0.94
computeProposerIndex 100000 validators 1.3616 ms/op 1.7100 ms/op 0.80
getNextSyncCommitteeIndices 1000 validators 2.9335 ms/op 2.9947 ms/op 0.98
getNextSyncCommitteeIndices 10000 validators 25.451 ms/op 26.397 ms/op 0.96
getNextSyncCommitteeIndices 100000 validators 87.627 ms/op 92.709 ms/op 0.95
computeProposers - vc 250000 547.03 us/op 568.63 us/op 0.96
computeEpochShuffling - vc 250000 39.070 ms/op 39.609 ms/op 0.99
getNextSyncCommittee - vc 250000 9.4719 ms/op 9.7330 ms/op 0.97
nodejs block root to RootHex using toHex 108.84 ns/op 105.69 ns/op 1.03
nodejs block root to RootHex using toRootHex 66.899 ns/op 69.024 ns/op 0.97
nodejs fromHex(blob) 749.69 us/op 775.36 us/op 0.97
nodejs fromHexInto(blob) 635.40 us/op 667.75 us/op 0.95
nodejs block root to RootHex using the deprecated toHexString 540.54 ns/op 482.94 ns/op 1.12
nodejs byteArrayEquals 32 bytes (block root) 26.046 ns/op 26.051 ns/op 1.00
nodejs byteArrayEquals 48 bytes (pubkey) 37.734 ns/op 37.585 ns/op 1.00
nodejs byteArrayEquals 96 bytes (signature) 40.123 ns/op 36.425 ns/op 1.10
nodejs byteArrayEquals 1024 bytes 45.277 ns/op 45.333 ns/op 1.00
nodejs byteArrayEquals 131072 bytes (blob) 1.7625 us/op 1.7660 us/op 1.00
browser block root to RootHex using toHex 146.69 ns/op 146.73 ns/op 1.00
browser block root to RootHex using toRootHex 132.14 ns/op 132.02 ns/op 1.00
browser fromHex(blob) 1.5535 ms/op 1.5639 ms/op 0.99
browser fromHexInto(blob) 634.97 us/op 663.93 us/op 0.96
browser block root to RootHex using the deprecated toHexString 361.83 ns/op 345.87 ns/op 1.05
browser byteArrayEquals 32 bytes (block root) 28.017 ns/op 27.900 ns/op 1.00
browser byteArrayEquals 48 bytes (pubkey) 39.759 ns/op 39.778 ns/op 1.00
browser byteArrayEquals 96 bytes (signature) 74.001 ns/op 73.632 ns/op 1.01
browser byteArrayEquals 1024 bytes 759.97 ns/op 747.40 ns/op 1.02
browser byteArrayEquals 131072 bytes (blob) 94.986 us/op 94.423 us/op 1.01

by benchmarkbot/action

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.

1 participant