Skip to content

feat: implement publishExecutionPayloadBid api#9392

Closed
twoeths wants to merge 1 commit into
unstablefrom
te/publishExecutionPayloadBid
Closed

feat: implement publishExecutionPayloadBid api#9392
twoeths wants to merge 1 commit into
unstablefrom
te/publishExecutionPayloadBid

Conversation

@twoeths

@twoeths twoeths commented May 21, 2026

Copy link
Copy Markdown
Member

Motivation

Implement the publishExecutionPayloadBid Beacon API endpoint so external builders can submit signed bids without running their own beacon node.
Closes a TODO GLOAS gap in the oapi conformance test.

Description

  • add POST /eth/v1/beacon/execution_payload_bid route + handler, mirroring publishExecutionPayloadEnvelope.
  • add network.publishExecutionPayloadBid symmetric to publishProposerPreferences.
  • reuses existing validateApiExecutionPayloadBid, ExecutionPayloadBidPool, error types, gossip topic, metrics, and SSE event.

AI Assistance Disclosure

Used Claude Code.

@twoeths

twoeths commented May 21, 2026

Copy link
Copy Markdown
Member Author

this is already part of #9289

@twoeths twoeths closed this May 21, 2026
@twoeths twoeths deleted the te/publishExecutionPayloadBid branch May 21, 2026 12:43

@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 implements the publishExecutionPayloadBid endpoint, enabling the beacon node to broadcast signed execution payload bids to the network. The changes include updating the API definitions, adding validation logic, and integrating the gossip network publishing functionality. The review feedback suggests improving observability by logging the number of peers reached during publication and using the more idiomatic sszTypesFor(fork) helper for persisting invalid SSZ values to ensure future-proof fork compatibility.

Comment on lines +859 to +864
await network.publishExecutionPayloadBid(signedExecutionPayloadBid);

chain.emitter.emit(routes.events.EventType.executionPayloadBid, {
version: fork,
data: signedExecutionPayloadBid,
});

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

It is recommended to log the number of peers the bid was successfully published to, consistent with the implementation of publishExecutionPayloadEnvelope. This improves observability and helps in debugging network propagation issues.

        const sentPeers = await network.publishExecutionPayloadBid(signedExecutionPayloadBid);

        chain.emitter.emit(routes.events.EventType.executionPayloadBid, {
          version: fork,
          data: signedExecutionPayloadBid,
        });

        chain.logger.info("Published execution payload bid", {...logCtx, sentPeers});

Comment on lines +871 to +873
if (e instanceof ExecutionPayloadBidError && e.action === GossipAction.REJECT) {
chain.persistInvalidSszValue(ssz.gloas.SignedExecutionPayloadBid, signedExecutionPayloadBid, "api_reject");
}

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

Using sszTypesFor(fork).SignedExecutionPayloadBid is more idiomatic in Lodestar and ensures that the correct fork-specific type is used for persistence, especially as the protocol evolves in future forks.

Suggested change
if (e instanceof ExecutionPayloadBidError && e.action === GossipAction.REJECT) {
chain.persistInvalidSszValue(ssz.gloas.SignedExecutionPayloadBid, signedExecutionPayloadBid, "api_reject");
}
if (e instanceof ExecutionPayloadBidError && e.action === GossipAction.REJECT) {
chain.persistInvalidSszValue(sszTypesFor(fork).SignedExecutionPayloadBid, signedExecutionPayloadBid, "api_reject");
}

@github-actions

Copy link
Copy Markdown
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 27d8a2a Previous: 985999b Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 887.97 us/op 878.92 us/op 1.01
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 40.173 us/op 39.458 us/op 1.02
BLS verify - blst 667.61 us/op 674.20 us/op 0.99
BLS verifyMultipleSignatures 3 - blst 1.3765 ms/op 1.3605 ms/op 1.01
BLS verifyMultipleSignatures 8 - blst 2.1835 ms/op 2.1571 ms/op 1.01
BLS verifyMultipleSignatures 32 - blst 6.9900 ms/op 6.8834 ms/op 1.02
BLS verifyMultipleSignatures 64 - blst 13.508 ms/op 13.257 ms/op 1.02
BLS verifyMultipleSignatures 128 - blst 25.930 ms/op 25.624 ms/op 1.01
BLS deserializing 10000 signatures 644.34 ms/op 637.25 ms/op 1.01
BLS deserializing 100000 signatures 6.5317 s/op 6.3682 s/op 1.03
BLS verifyMultipleSignatures - same message - 3 - blst 777.73 us/op 814.52 us/op 0.95
BLS verifyMultipleSignatures - same message - 8 - blst 958.32 us/op 945.08 us/op 1.01
BLS verifyMultipleSignatures - same message - 32 - blst 1.5565 ms/op 1.5765 ms/op 0.99
BLS verifyMultipleSignatures - same message - 64 - blst 2.4072 ms/op 2.3843 ms/op 1.01
BLS verifyMultipleSignatures - same message - 128 - blst 4.2114 ms/op 4.0824 ms/op 1.03
BLS aggregatePubkeys 32 - blst 18.076 us/op 17.905 us/op 1.01
BLS aggregatePubkeys 128 - blst 64.667 us/op 64.002 us/op 1.01
getSlashingsAndExits - default max 59.596 us/op 46.988 us/op 1.27
getSlashingsAndExits - 2k 397.43 us/op 318.95 us/op 1.25
proposeBlockBody type=full, size=empty 699.90 us/op 705.04 us/op 0.99
isKnown best case - 1 super set check 171.00 ns/op 168.00 ns/op 1.02
isKnown normal case - 2 super set checks 165.00 ns/op 172.00 ns/op 0.96
isKnown worse case - 16 super set checks 166.00 ns/op 165.00 ns/op 1.01
validate api signedAggregateAndProof - struct 1.5371 ms/op 1.5094 ms/op 1.02
validate gossip signedAggregateAndProof - struct 1.5386 ms/op 1.5068 ms/op 1.02
batch validate gossip attestation - vc 640000 - chunk 32 110.00 us/op 105.23 us/op 1.05
batch validate gossip attestation - vc 640000 - chunk 64 95.794 us/op 91.613 us/op 1.05
batch validate gossip attestation - vc 640000 - chunk 128 89.365 us/op 84.316 us/op 1.06
batch validate gossip attestation - vc 640000 - chunk 256 86.119 us/op 81.083 us/op 1.06
bytes32 toHexString 290.00 ns/op 287.00 ns/op 1.01
bytes32 Buffer.toString(hex) 179.00 ns/op 179.00 ns/op 1.00
bytes32 Buffer.toString(hex) from Uint8Array 235.00 ns/op 244.00 ns/op 0.96
bytes32 Buffer.toString(hex) + 0x 177.00 ns/op 181.00 ns/op 0.98
Return object 10000 times 0.21800 ns/op 0.21160 ns/op 1.03
Throw Error 10000 times 3.3410 us/op 3.2677 us/op 1.02
toHex 97.769 ns/op 106.27 ns/op 0.92
Buffer.from 89.485 ns/op 92.637 ns/op 0.97
shared Buffer 61.029 ns/op 62.683 ns/op 0.97
fastMsgIdFn sha256 / 200 bytes 1.4930 us/op 1.4620 us/op 1.02
fastMsgIdFn h32 xxhash / 200 bytes 157.00 ns/op 155.00 ns/op 1.01
fastMsgIdFn h64 xxhash / 200 bytes 206.00 ns/op 216.00 ns/op 0.95
fastMsgIdFn sha256 / 1000 bytes 4.8140 us/op 4.7170 us/op 1.02
fastMsgIdFn h32 xxhash / 1000 bytes 253.00 ns/op 245.00 ns/op 1.03
fastMsgIdFn h64 xxhash / 1000 bytes 260.00 ns/op 261.00 ns/op 1.00
fastMsgIdFn sha256 / 10000 bytes 42.679 us/op 41.647 us/op 1.02
fastMsgIdFn h32 xxhash / 10000 bytes 1.2870 us/op 1.2530 us/op 1.03
fastMsgIdFn h64 xxhash / 10000 bytes 825.00 ns/op 819.00 ns/op 1.01
send data - 1000 256B messages 4.3759 ms/op 4.0065 ms/op 1.09
send data - 1000 512B messages 4.4918 ms/op 4.4220 ms/op 1.02
send data - 1000 1024B messages 4.3571 ms/op 4.1799 ms/op 1.04
send data - 1000 1200B messages 4.5851 ms/op 4.4385 ms/op 1.03
send data - 1000 2048B messages 4.6971 ms/op 4.5613 ms/op 1.03
send data - 1000 4096B messages 5.5680 ms/op 5.2196 ms/op 1.07
send data - 1000 16384B messages 23.105 ms/op 26.341 ms/op 0.88
send data - 1000 65536B messages 103.84 ms/op 231.02 ms/op 0.45
enrSubnets - fastDeserialize 64 bits 745.00 ns/op 712.00 ns/op 1.05
enrSubnets - ssz BitVector 64 bits 268.00 ns/op 271.00 ns/op 0.99
enrSubnets - fastDeserialize 4 bits 106.00 ns/op 104.00 ns/op 1.02
enrSubnets - ssz BitVector 4 bits 268.00 ns/op 268.00 ns/op 1.00
prioritizePeers score -10:0 att 32-0.1 sync 2-0 204.71 us/op 203.31 us/op 1.01
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 247.96 us/op 247.88 us/op 1.00
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 350.95 us/op 344.92 us/op 1.02
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 614.23 us/op 593.08 us/op 1.04
prioritizePeers score 0:0 att 64-1 sync 4-1 717.27 us/op 693.78 us/op 1.03
array of 16000 items push then shift 1.3132 us/op 1.2866 us/op 1.02
LinkedList of 16000 items push then shift 7.3020 ns/op 6.7700 ns/op 1.08
array of 16000 items push then pop 71.040 ns/op 66.660 ns/op 1.07
LinkedList of 16000 items push then pop 6.1260 ns/op 5.8900 ns/op 1.04
array of 24000 items push then shift 1.9677 us/op 1.8974 us/op 1.04
LinkedList of 24000 items push then shift 7.3370 ns/op 6.3210 ns/op 1.16
array of 24000 items push then pop 104.67 ns/op 93.729 ns/op 1.12
LinkedList of 24000 items push then pop 6.2170 ns/op 5.8750 ns/op 1.06
intersect bitArray bitLen 8 4.8800 ns/op 4.7260 ns/op 1.03
intersect array and set length 8 30.472 ns/op 29.709 ns/op 1.03
intersect bitArray bitLen 128 24.522 ns/op 24.625 ns/op 1.00
intersect array and set length 128 503.82 ns/op 496.00 ns/op 1.02
bitArray.getTrueBitIndexes() bitLen 128 1.0870 us/op 1.0580 us/op 1.03
bitArray.getTrueBitIndexes() bitLen 248 1.8190 us/op 1.8520 us/op 0.98
bitArray.getTrueBitIndexes() bitLen 512 3.7420 us/op 3.7330 us/op 1.00
Full columns - reconstruct all 6 blobs 165.80 us/op 109.31 us/op 1.52
Full columns - reconstruct half of the blobs out of 6 97.295 us/op 95.490 us/op 1.02
Full columns - reconstruct single blob out of 6 33.813 us/op 33.662 us/op 1.00
Half columns - reconstruct all 6 blobs 391.49 ms/op 375.64 ms/op 1.04
Half columns - reconstruct half of the blobs out of 6 196.50 ms/op 188.40 ms/op 1.04
Half columns - reconstruct single blob out of 6 67.348 ms/op 65.848 ms/op 1.02
Full columns - reconstruct all 10 blobs 292.89 us/op 311.65 us/op 0.94
Full columns - reconstruct half of the blobs out of 10 167.86 us/op 134.13 us/op 1.25
Full columns - reconstruct single blob out of 10 31.813 us/op 33.679 us/op 0.94
Half columns - reconstruct all 10 blobs 638.60 ms/op 623.72 ms/op 1.02
Half columns - reconstruct half of the blobs out of 10 319.52 ms/op 314.48 ms/op 1.02
Half columns - reconstruct single blob out of 10 68.533 ms/op 65.720 ms/op 1.04
Full columns - reconstruct all 20 blobs 832.26 us/op 468.73 us/op 1.78
Full columns - reconstruct half of the blobs out of 20 195.29 us/op 168.53 us/op 1.16
Full columns - reconstruct single blob out of 20 31.515 us/op 34.343 us/op 0.92
Half columns - reconstruct all 20 blobs 1.2749 s/op 1.2415 s/op 1.03
Half columns - reconstruct half of the blobs out of 20 637.23 ms/op 625.25 ms/op 1.02
Half columns - reconstruct single blob out of 20 67.709 ms/op 69.815 ms/op 0.97
Set add up to 64 items then delete first 2.7399 us/op 2.5622 us/op 1.07
OrderedSet add up to 64 items then delete first 3.5521 us/op 3.3091 us/op 1.07
Set add up to 64 items then delete last 2.4565 us/op 2.3677 us/op 1.04
OrderedSet add up to 64 items then delete last 3.3146 us/op 3.2443 us/op 1.02
Set add up to 64 items then delete middle 2.1959 us/op 2.7283 us/op 0.80
OrderedSet add up to 64 items then delete middle 5.0026 us/op 4.7270 us/op 1.06
Set add up to 128 items then delete first 4.3542 us/op 4.2248 us/op 1.03
OrderedSet add up to 128 items then delete first 6.8038 us/op 6.5137 us/op 1.04
Set add up to 128 items then delete last 4.2372 us/op 3.8862 us/op 1.09
OrderedSet add up to 128 items then delete last 5.9721 us/op 5.7854 us/op 1.03
Set add up to 128 items then delete middle 3.9422 us/op 3.8541 us/op 1.02
OrderedSet add up to 128 items then delete middle 12.047 us/op 11.637 us/op 1.04
Set add up to 256 items then delete first 8.0554 us/op 7.8125 us/op 1.03
OrderedSet add up to 256 items then delete first 12.483 us/op 12.068 us/op 1.03
Set add up to 256 items then delete last 7.8011 us/op 7.6229 us/op 1.02
OrderedSet add up to 256 items then delete last 11.847 us/op 11.400 us/op 1.04
Set add up to 256 items then delete middle 7.7660 us/op 7.5655 us/op 1.03
OrderedSet add up to 256 items then delete middle 35.794 us/op 34.436 us/op 1.04
pass gossip attestations to forkchoice per slot 2.6440 ms/op 2.5041 ms/op 1.06
forkChoice updateHead vc 100000 bc 64 eq 0 403.89 us/op 427.70 us/op 0.94
forkChoice updateHead vc 600000 bc 64 eq 0 2.3931 ms/op 2.5855 ms/op 0.93
forkChoice updateHead vc 1000000 bc 64 eq 0 3.9825 ms/op 4.2403 ms/op 0.94
forkChoice updateHead vc 600000 bc 320 eq 0 2.4065 ms/op 2.5114 ms/op 0.96
forkChoice updateHead vc 600000 bc 1200 eq 0 2.4340 ms/op 2.5648 ms/op 0.95
forkChoice updateHead vc 600000 bc 7200 eq 0 2.8939 ms/op 2.8302 ms/op 1.02
forkChoice updateHead vc 600000 bc 64 eq 1000 3.0012 ms/op 3.1090 ms/op 0.97
forkChoice updateHead vc 600000 bc 64 eq 10000 3.1007 ms/op 3.1389 ms/op 0.99
forkChoice updateHead vc 600000 bc 64 eq 300000 7.1728 ms/op 7.0249 ms/op 1.02
computeDeltas 1400000 validators 0% inactive 12.900 ms/op 12.942 ms/op 1.00
computeDeltas 1400000 validators 10% inactive 12.133 ms/op 12.347 ms/op 0.98
computeDeltas 1400000 validators 20% inactive 11.014 ms/op 11.588 ms/op 0.95
computeDeltas 1400000 validators 50% inactive 8.4772 ms/op 8.5477 ms/op 0.99
computeDeltas 2100000 validators 0% inactive 19.448 ms/op 19.264 ms/op 1.01
computeDeltas 2100000 validators 10% inactive 18.153 ms/op 18.735 ms/op 0.97
computeDeltas 2100000 validators 20% inactive 16.481 ms/op 17.102 ms/op 0.96
computeDeltas 2100000 validators 50% inactive 9.6261 ms/op 10.226 ms/op 0.94
altair processAttestation - 250000 vs - 7PWei normalcase 1.6338 ms/op 1.6755 ms/op 0.98
altair processAttestation - 250000 vs - 7PWei worstcase 2.5056 ms/op 2.3838 ms/op 1.05
altair processAttestation - setStatus - 1/6 committees join 104.83 us/op 100.65 us/op 1.04
altair processAttestation - setStatus - 1/3 committees join 208.06 us/op 197.95 us/op 1.05
altair processAttestation - setStatus - 1/2 committees join 305.72 us/op 286.44 us/op 1.07
altair processAttestation - setStatus - 2/3 committees join 373.16 us/op 366.44 us/op 1.02
altair processAttestation - setStatus - 4/5 committees join 540.91 us/op 500.30 us/op 1.08
altair processAttestation - setStatus - 100% committees join 630.39 us/op 605.12 us/op 1.04
altair processBlock - 250000 vs - 7PWei normalcase 3.5071 ms/op 2.8107 ms/op 1.25
altair processBlock - 250000 vs - 7PWei normalcase hashState 16.351 ms/op 11.837 ms/op 1.38
altair processBlock - 250000 vs - 7PWei worstcase 21.269 ms/op 19.547 ms/op 1.09
altair processBlock - 250000 vs - 7PWei worstcase hashState 41.452 ms/op 38.308 ms/op 1.08
phase0 processBlock - 250000 vs - 7PWei normalcase 1.2725 ms/op 1.2816 ms/op 0.99
phase0 processBlock - 250000 vs - 7PWei worstcase 17.766 ms/op 16.798 ms/op 1.06
altair processEth1Data - 250000 vs - 7PWei normalcase 296.80 us/op 300.62 us/op 0.99
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 3.4460 us/op 3.5560 us/op 0.97
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 20.942 us/op 20.713 us/op 1.01
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 5.7320 us/op 5.7100 us/op 1.00
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.6640 us/op 3.6450 us/op 1.01
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 93.312 us/op 94.585 us/op 0.99
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.4280 ms/op 1.3587 ms/op 1.05
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.8553 ms/op 1.7918 ms/op 1.04
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8777 ms/op 1.7980 ms/op 1.04
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.7058 ms/op 3.5194 ms/op 1.05
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.1618 ms/op 2.0267 ms/op 1.07
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.0693 ms/op 3.9487 ms/op 1.03
Tree 40 250000 create 318.76 ms/op 306.18 ms/op 1.04
Tree 40 250000 get(125000) 97.011 ns/op 96.924 ns/op 1.00
Tree 40 250000 set(125000) 1.0323 us/op 1.0356 us/op 1.00
Tree 40 250000 toArray() 9.3912 ms/op 9.2450 ms/op 1.02
Tree 40 250000 iterate all - toArray() + loop 9.5007 ms/op 9.4352 ms/op 1.01
Tree 40 250000 iterate all - get(i) 41.850 ms/op 34.269 ms/op 1.22
Array 250000 create 2.2079 ms/op 1.9843 ms/op 1.11
Array 250000 clone - spread 684.43 us/op 636.09 us/op 1.08
Array 250000 get(125000) 0.30200 ns/op 0.29400 ns/op 1.03
Array 250000 set(125000) 0.30600 ns/op 0.29700 ns/op 1.03
Array 250000 iterate all - loop 58.486 us/op 56.448 us/op 1.04
phase0 afterProcessEpoch - 250000 vs - 7PWei 51.658 ms/op 47.691 ms/op 1.08
Array.fill - length 1000000 2.2743 ms/op 2.2070 ms/op 1.03
Array push - length 1000000 9.9954 ms/op 7.5240 ms/op 1.33
Array.get 0.21002 ns/op 0.20338 ns/op 1.03
Uint8Array.get 0.24920 ns/op 0.24736 ns/op 1.01
phase0 beforeProcessEpoch - 250000 vs - 7PWei 13.476 ms/op 10.759 ms/op 1.25
altair processEpoch - mainnet_e81889 276.92 ms/op 221.07 ms/op 1.25
mainnet_e81889 - altair beforeProcessEpoch 16.610 ms/op 19.366 ms/op 0.86
mainnet_e81889 - altair processJustificationAndFinalization 5.9320 us/op 4.6910 us/op 1.26
mainnet_e81889 - altair processInactivityUpdates 3.6586 ms/op 3.4935 ms/op 1.05
mainnet_e81889 - altair processRewardsAndPenalties 20.580 ms/op 16.785 ms/op 1.23
mainnet_e81889 - altair processRegistryUpdates 567.00 ns/op 535.00 ns/op 1.06
mainnet_e81889 - altair processSlashings 141.00 ns/op 133.00 ns/op 1.06
mainnet_e81889 - altair processEth1DataReset 137.00 ns/op 137.00 ns/op 1.00
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.6359 ms/op 1.1813 ms/op 1.38
mainnet_e81889 - altair processSlashingsReset 723.00 ns/op 703.00 ns/op 1.03
mainnet_e81889 - altair processRandaoMixesReset 1.0470 us/op 995.00 ns/op 1.05
mainnet_e81889 - altair processHistoricalRootsUpdate 136.00 ns/op 138.00 ns/op 0.99
mainnet_e81889 - altair processParticipationFlagUpdates 424.00 ns/op 418.00 ns/op 1.01
mainnet_e81889 - altair processSyncCommitteeUpdates 117.00 ns/op 118.00 ns/op 0.99
mainnet_e81889 - altair afterProcessEpoch 41.372 ms/op 40.387 ms/op 1.02
capella processEpoch - mainnet_e217614 856.20 ms/op 697.87 ms/op 1.23
mainnet_e217614 - capella beforeProcessEpoch 61.842 ms/op 60.221 ms/op 1.03
mainnet_e217614 - capella processJustificationAndFinalization 6.0470 us/op 5.0780 us/op 1.19
mainnet_e217614 - capella processInactivityUpdates 13.848 ms/op 11.123 ms/op 1.24
mainnet_e217614 - capella processRewardsAndPenalties 91.069 ms/op 89.442 ms/op 1.02
mainnet_e217614 - capella processRegistryUpdates 4.6230 us/op 4.4980 us/op 1.03
mainnet_e217614 - capella processSlashings 132.00 ns/op 131.00 ns/op 1.01
mainnet_e217614 - capella processEth1DataReset 126.00 ns/op 128.00 ns/op 0.98
mainnet_e217614 - capella processEffectiveBalanceUpdates 6.1041 ms/op 5.1518 ms/op 1.18
mainnet_e217614 - capella processSlashingsReset 771.00 ns/op 676.00 ns/op 1.14
mainnet_e217614 - capella processRandaoMixesReset 1.2470 us/op 1.0320 us/op 1.21
mainnet_e217614 - capella processHistoricalRootsUpdate 134.00 ns/op 130.00 ns/op 1.03
mainnet_e217614 - capella processParticipationFlagUpdates 441.00 ns/op 422.00 ns/op 1.05
mainnet_e217614 - capella afterProcessEpoch 111.44 ms/op 106.74 ms/op 1.04
phase0 processEpoch - mainnet_e58758 289.32 ms/op 241.53 ms/op 1.20
mainnet_e58758 - phase0 beforeProcessEpoch 52.582 ms/op 46.430 ms/op 1.13
mainnet_e58758 - phase0 processJustificationAndFinalization 5.0600 us/op 4.9480 us/op 1.02
mainnet_e58758 - phase0 processRewardsAndPenalties 14.851 ms/op 50.514 ms/op 0.29
mainnet_e58758 - phase0 processRegistryUpdates 2.2890 us/op 2.2180 us/op 1.03
mainnet_e58758 - phase0 processSlashings 345.00 ns/op 135.00 ns/op 2.56
mainnet_e58758 - phase0 processEth1DataReset 137.00 ns/op 133.00 ns/op 1.03
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 837.26 us/op 999.38 us/op 0.84
mainnet_e58758 - phase0 processSlashingsReset 851.00 ns/op 1.0010 us/op 0.85
mainnet_e58758 - phase0 processRandaoMixesReset 1.0820 us/op 1.0220 us/op 1.06
mainnet_e58758 - phase0 processHistoricalRootsUpdate 137.00 ns/op 137.00 ns/op 1.00
mainnet_e58758 - phase0 processParticipationRecordUpdates 1.0130 us/op 965.00 ns/op 1.05
mainnet_e58758 - phase0 afterProcessEpoch 33.415 ms/op 32.925 ms/op 1.01
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.8877 ms/op 1.0980 ms/op 1.72
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.6372 ms/op 1.7051 ms/op 0.96
altair processInactivityUpdates - 250000 normalcase 11.238 ms/op 10.424 ms/op 1.08
altair processInactivityUpdates - 250000 worstcase 11.557 ms/op 10.419 ms/op 1.11
phase0 processRegistryUpdates - 250000 normalcase 3.9380 us/op 2.2680 us/op 1.74
phase0 processRegistryUpdates - 250000 badcase_full_deposits 154.01 us/op 143.25 us/op 1.08
phase0 processRegistryUpdates - 250000 worstcase 0.5 59.933 ms/op 51.167 ms/op 1.17
altair processRewardsAndPenalties - 250000 normalcase 13.214 ms/op 13.355 ms/op 0.99
altair processRewardsAndPenalties - 250000 worstcase 12.681 ms/op 13.520 ms/op 0.94
phase0 getAttestationDeltas - 250000 normalcase 10.034 ms/op 5.2084 ms/op 1.93
phase0 getAttestationDeltas - 250000 worstcase 5.7564 ms/op 5.2825 ms/op 1.09
phase0 processSlashings - 250000 worstcase 63.324 us/op 57.489 us/op 1.10
altair processSyncCommitteeUpdates - 250000 10.852 ms/op 9.9380 ms/op 1.09
BeaconState.hashTreeRoot - No change 173.00 ns/op 171.00 ns/op 1.01
BeaconState.hashTreeRoot - 1 full validator 83.513 us/op 63.125 us/op 1.32
BeaconState.hashTreeRoot - 32 full validator 852.99 us/op 634.34 us/op 1.34
BeaconState.hashTreeRoot - 512 full validator 7.6873 ms/op 7.5887 ms/op 1.01
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 93.605 us/op 79.521 us/op 1.18
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.5568 ms/op 1.1584 ms/op 1.34
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 14.228 ms/op 16.192 ms/op 0.88
BeaconState.hashTreeRoot - 1 balances 62.835 us/op 64.509 us/op 0.97
BeaconState.hashTreeRoot - 32 balances 785.51 us/op 581.57 us/op 1.35
BeaconState.hashTreeRoot - 512 balances 5.2320 ms/op 6.0963 ms/op 0.86
BeaconState.hashTreeRoot - 250000 balances 120.78 ms/op 116.10 ms/op 1.04
aggregationBits - 2048 els - zipIndexesInBitList 19.890 us/op 25.525 us/op 0.78
regular array get 100000 times 23.539 us/op 22.631 us/op 1.04
wrappedArray get 100000 times 23.481 us/op 22.633 us/op 1.04
arrayWithProxy get 100000 times 10.432 ms/op 11.705 ms/op 0.89
ssz.Root.equals 21.903 ns/op 21.361 ns/op 1.03
byteArrayEquals 21.733 ns/op 21.147 ns/op 1.03
Buffer.compare 8.9910 ns/op 8.8410 ns/op 1.02
processSlot - 1 slots 9.2780 us/op 8.6430 us/op 1.07
processSlot - 32 slots 1.9269 ms/op 1.6013 ms/op 1.20
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 5.9151 ms/op 2.2446 ms/op 2.64
getCommitteeAssignments - req 1 vs - 250000 vc 1.7072 ms/op 1.6626 ms/op 1.03
getCommitteeAssignments - req 100 vs - 250000 vc 3.5091 ms/op 3.3963 ms/op 1.03
getCommitteeAssignments - req 1000 vs - 250000 vc 3.7413 ms/op 3.6421 ms/op 1.03
findModifiedValidators - 10000 modified validators 815.18 ms/op 735.97 ms/op 1.11
findModifiedValidators - 1000 modified validators 574.15 ms/op 508.51 ms/op 1.13
findModifiedValidators - 100 modified validators 404.72 ms/op 286.79 ms/op 1.41
findModifiedValidators - 10 modified validators 303.51 ms/op 229.71 ms/op 1.32
findModifiedValidators - 1 modified validators 277.10 ms/op 147.25 ms/op 1.88
findModifiedValidators - no difference 191.72 ms/op 170.22 ms/op 1.13
migrate state 1500000 validators, 3400 modified, 2000 new 2.7856 s/op 2.5982 s/op 1.07
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.8800 ns/op 3.6600 ns/op 1.06
state getBlockRootAtSlot - 250000 vs - 7PWei 380.95 ns/op 290.41 ns/op 1.31
computeProposerIndex 100000 validators 1.3679 ms/op 1.3170 ms/op 1.04
getNextSyncCommitteeIndices 1000 validators 3.0248 ms/op 2.8336 ms/op 1.07
getNextSyncCommitteeIndices 10000 validators 26.434 ms/op 25.064 ms/op 1.05
getNextSyncCommitteeIndices 100000 validators 88.952 ms/op 86.234 ms/op 1.03
computeProposers - vc 250000 574.66 us/op 552.64 us/op 1.04
computeEpochShuffling - vc 250000 41.184 ms/op 40.175 ms/op 1.03
getNextSyncCommittee - vc 250000 10.017 ms/op 9.3510 ms/op 1.07
nodejs block root to RootHex using toHex 100.17 ns/op 103.72 ns/op 0.97
nodejs block root to RootHex using toRootHex 61.837 ns/op 64.573 ns/op 0.96
nodejs fromHex(blob) 916.02 us/op 735.67 us/op 1.25
nodejs fromHexInto(blob) 659.49 us/op 643.61 us/op 1.02
nodejs block root to RootHex using the deprecated toHexString 558.66 ns/op 501.20 ns/op 1.11
nodejs byteArrayEquals 32 bytes (block root) 26.860 ns/op 25.779 ns/op 1.04
nodejs byteArrayEquals 48 bytes (pubkey) 39.015 ns/op 37.170 ns/op 1.05
nodejs byteArrayEquals 96 bytes (signature) 37.184 ns/op 39.534 ns/op 0.94
nodejs byteArrayEquals 1024 bytes 44.610 ns/op 45.608 ns/op 0.98
nodejs byteArrayEquals 131072 bytes (blob) 1.8663 us/op 1.7348 us/op 1.08
browser block root to RootHex using toHex 151.05 ns/op 144.11 ns/op 1.05
browser block root to RootHex using toRootHex 136.74 ns/op 130.27 ns/op 1.05
browser fromHex(blob) 1.5836 ms/op 1.5273 ms/op 1.04
browser fromHexInto(blob) 657.63 us/op 632.05 us/op 1.04
browser block root to RootHex using the deprecated toHexString 384.00 ns/op 344.81 ns/op 1.11
browser byteArrayEquals 32 bytes (block root) 29.981 ns/op 27.933 ns/op 1.07
browser byteArrayEquals 48 bytes (pubkey) 42.301 ns/op 39.426 ns/op 1.07
browser byteArrayEquals 96 bytes (signature) 77.425 ns/op 73.960 ns/op 1.05
browser byteArrayEquals 1024 bytes 784.85 ns/op 752.24 ns/op 1.04
browser byteArrayEquals 131072 bytes (blob) 98.926 us/op 95.496 us/op 1.04

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