Skip to content

refactor: use builder boost factor for gloas block production - #9807

Open
nflaig wants to merge 14 commits into
unstablefrom
nflaig/gloas-builder-boost-factor
Open

refactor: use builder boost factor for gloas block production#9807
nflaig wants to merge 14 commits into
unstablefrom
nflaig/gloas-builder-boost-factor

Conversation

@nflaig

@nflaig nflaig commented Aug 11, 2026

Copy link
Copy Markdown
Member

Follow-up to #9595 that removes Lodestar-specific selection modes from Gloas block production and uses builder_boost_factor as the selection input

ethereum/beacon-APIs#630 will move produceBlockV4 to a BuilderConfig request body and add builder-API bid routing. That wire-format change is not implemented here. This keeps builder_boost_factor as the global Gloas selection control so the same preference can apply to p2p and builder-API bids once that flow is implemented.

  • remove the non-standard builder_selection parameter from produceBlockV4
  • keep --builder.selection as validator client aliases for builder_boost_factor
  • treat the legacy executiononly option as executionalways post-Gloas so a viable builder bid can prevent a missed proposal
  • keep builder bids available as fallback unless the circuit breaker is active
  • keep strict fee recipient checks for local payloads while relying on proposer-preferences validation for external bids
  • persist produced Gloas blocks with the selected engine or builder source
  • update the operator docs and focused block production tests

This PR was written primarily by Codex.

@github-actions

github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Performance Report

鉁旓笍 no performance regression detected

Full benchmark results
Benchmark suite Current: 29016ea Previous: 404f689 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 882.88 us/op 890.10 us/op 0.99
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 39.944 us/op 39.260 us/op 1.02
BLS verify - blst 712.60 us/op 741.71 us/op 0.96
BLS verifyMultipleSignatures 3 - blst 1.3533 ms/op 1.3384 ms/op 1.01
BLS verifyMultipleSignatures 8 - blst 2.1619 ms/op 2.1492 ms/op 1.01
BLS verifyMultipleSignatures 32 - blst 6.7867 ms/op 6.7246 ms/op 1.01
BLS verifyMultipleSignatures 64 - blst 13.017 ms/op 12.729 ms/op 1.02
BLS verifyMultipleSignatures 128 - blst 25.481 ms/op 24.986 ms/op 1.02
BLS deserializing 10000 signatures 634.29 ms/op 622.05 ms/op 1.02
BLS deserializing 100000 signatures 6.4348 s/op 6.3169 s/op 1.02
BLS verifyMultipleSignatures - same message - 3 - blst 799.14 us/op 792.82 us/op 1.01
BLS verifyMultipleSignatures - same message - 8 - blst 895.34 us/op 927.09 us/op 0.97
BLS verifyMultipleSignatures - same message - 32 - blst 1.5492 ms/op 1.4458 ms/op 1.07
BLS verifyMultipleSignatures - same message - 64 - blst 2.2658 ms/op 2.2574 ms/op 1.00
BLS verifyMultipleSignatures - same message - 128 - blst 4.0114 ms/op 3.9915 ms/op 1.00
BLS aggregatePubkeys 32 - blst 17.758 us/op 17.643 us/op 1.01
BLS aggregatePubkeys 128 - blst 63.366 us/op 62.678 us/op 1.01
getSlashingsAndExits - default max 48.216 us/op 48.311 us/op 1.00
getSlashingsAndExits - 2k 347.61 us/op 337.63 us/op 1.03
proposeBlockBody type=full, size=empty 796.29 us/op 645.77 us/op 1.23
isKnown best case - 1 super set check 172.00 ns/op 186.00 ns/op 0.92
isKnown normal case - 2 super set checks 317.00 ns/op 168.00 ns/op 1.89
isKnown worse case - 16 super set checks 164.00 ns/op 169.00 ns/op 0.97
validate api signedAggregateAndProof - struct 1.5404 ms/op 1.4949 ms/op 1.03
validate gossip signedAggregateAndProof - struct 1.5250 ms/op 1.4852 ms/op 1.03
batch validate gossip attestation - vc 640000 - chunk 32 110.48 us/op 107.25 us/op 1.03
batch validate gossip attestation - vc 640000 - chunk 64 95.679 us/op 95.076 us/op 1.01
batch validate gossip attestation - vc 640000 - chunk 128 90.775 us/op 88.769 us/op 1.02
batch validate gossip attestation - vc 640000 - chunk 256 86.467 us/op 85.803 us/op 1.01
bytes32 toHexString 296.00 ns/op 292.00 ns/op 1.01
bytes32 Buffer.toString(hex) 170.00 ns/op 182.00 ns/op 0.93
bytes32 Buffer.toString(hex) from Uint8Array 235.00 ns/op 241.00 ns/op 0.98
bytes32 Buffer.toString(hex) + 0x 170.00 ns/op 194.00 ns/op 0.88
Return object 10000 times 0.21440 ns/op 0.21500 ns/op 1.00
Throw Error 10000 times 3.5387 us/op 3.3272 us/op 1.06
toHex 102.48 ns/op 93.957 ns/op 1.09
Buffer.from 88.012 ns/op 85.458 ns/op 1.03
shared Buffer 62.892 ns/op 57.908 ns/op 1.09
fastMsgIdFn sha256 / 200 bytes 1.4830 us/op 1.4660 us/op 1.01
fastMsgIdFn h32 xxhash / 200 bytes 159.00 ns/op 159.00 ns/op 1.00
fastMsgIdFn h64 xxhash / 200 bytes 205.00 ns/op 208.00 ns/op 0.99
fastMsgIdFn sha256 / 1000 bytes 4.7690 us/op 4.7170 us/op 1.01
fastMsgIdFn h32 xxhash / 1000 bytes 247.00 ns/op 243.00 ns/op 1.02
fastMsgIdFn h64 xxhash / 1000 bytes 249.00 ns/op 249.00 ns/op 1.00
fastMsgIdFn sha256 / 10000 bytes 43.358 us/op 41.862 us/op 1.04
fastMsgIdFn h32 xxhash / 10000 bytes 1.2950 us/op 1.2680 us/op 1.02
fastMsgIdFn h64 xxhash / 10000 bytes 827.00 ns/op 818.00 ns/op 1.01
send data - 1000 256B messages 4.1895 ms/op 4.3867 ms/op 0.96
send data - 1000 512B messages 5.5449 ms/op 5.2549 ms/op 1.06
send data - 1000 1024B messages 5.5185 ms/op 5.7162 ms/op 0.97
send data - 1000 1200B messages 6.2270 ms/op 6.1013 ms/op 1.02
send data - 1000 2048B messages 10.517 ms/op 9.6301 ms/op 1.09
send data - 1000 4096B messages 28.818 ms/op 83.808 ms/op 0.34
send data - 1000 16384B messages 239.47 ms/op 242.83 ms/op 0.99
send data - 1000 65536B messages 1.4246 s/op 1.3494 s/op 1.06
enrSubnets - fastDeserialize 64 bits 733.00 ns/op 711.00 ns/op 1.03
enrSubnets - ssz BitVector 64 bits 271.00 ns/op 260.00 ns/op 1.04
enrSubnets - fastDeserialize 4 bits 102.00 ns/op 104.00 ns/op 0.98
enrSubnets - ssz BitVector 4 bits 283.00 ns/op 256.00 ns/op 1.11
prioritizePeers score -10:0 att 32-0.1 sync 2-0 206.98 us/op 195.43 us/op 1.06
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 235.58 us/op 225.00 us/op 1.05
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 338.97 us/op 327.51 us/op 1.03
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 595.81 us/op 567.96 us/op 1.05
prioritizePeers score 0:0 att 64-1 sync 4-1 687.73 us/op 668.79 us/op 1.03
array of 16000 items push then shift 1.3034 us/op 1.2193 us/op 1.07
LinkedList of 16000 items push then shift 6.9150 ns/op 7.2490 ns/op 0.95
array of 16000 items push then pop 70.190 ns/op 65.139 ns/op 1.08
LinkedList of 16000 items push then pop 6.0230 ns/op 5.7710 ns/op 1.04
array of 24000 items push then shift 1.9171 us/op 1.8942 us/op 1.01
LinkedList of 24000 items push then shift 6.4810 ns/op 7.1760 ns/op 0.90
array of 24000 items push then pop 100.92 ns/op 91.557 ns/op 1.10
LinkedList of 24000 items push then pop 5.9960 ns/op 5.8530 ns/op 1.02
intersect bitArray bitLen 8 3.8590 ns/op 3.7710 ns/op 1.02
intersect array and set length 8 30.370 ns/op 28.664 ns/op 1.06
intersect bitArray bitLen 128 23.155 ns/op 22.450 ns/op 1.03
intersect array and set length 128 504.26 ns/op 524.70 ns/op 0.96
bitArray.getTrueBitIndexes() bitLen 128 929.00 ns/op 922.00 ns/op 1.01
bitArray.getTrueBitIndexes() bitLen 248 1.7050 us/op 1.6600 us/op 1.03
bitArray.getTrueBitIndexes() bitLen 512 3.5510 us/op 3.4500 us/op 1.03
Full columns - reconstruct all 6 blobs 119.34 us/op 186.15 us/op 0.64
Full columns - reconstruct half of the blobs out of 6 73.313 us/op 68.710 us/op 1.07
Full columns - reconstruct single blob out of 6 35.314 us/op 33.502 us/op 1.05
Half columns - reconstruct all 6 blobs 394.45 ms/op 387.08 ms/op 1.02
Half columns - reconstruct half of the blobs out of 6 195.82 ms/op 196.46 ms/op 1.00
Half columns - reconstruct single blob out of 6 67.025 ms/op 68.965 ms/op 0.97
Set add up to 64 items then delete first 1.6759 us/op 1.7758 us/op 0.94
OrderedSet add up to 64 items then delete first 2.5203 us/op 2.5262 us/op 1.00
Set add up to 64 items then delete last 1.8819 us/op 1.8457 us/op 1.02
OrderedSet add up to 64 items then delete last 2.7972 us/op 2.7568 us/op 1.01
Set add up to 64 items then delete middle 1.8818 us/op 1.8261 us/op 1.03
OrderedSet add up to 64 items then delete middle 4.2182 us/op 4.2173 us/op 1.00
Set add up to 128 items then delete first 3.7351 us/op 3.6767 us/op 1.02
OrderedSet add up to 128 items then delete first 5.6927 us/op 5.7510 us/op 0.99
Set add up to 128 items then delete last 3.5792 us/op 3.4826 us/op 1.03
OrderedSet add up to 128 items then delete last 5.3633 us/op 5.6071 us/op 0.96
Set add up to 128 items then delete middle 3.5938 us/op 3.4640 us/op 1.04
OrderedSet add up to 128 items then delete middle 11.109 us/op 11.144 us/op 1.00
Set add up to 256 items then delete first 7.3826 us/op 7.1878 us/op 1.03
OrderedSet add up to 256 items then delete first 11.609 us/op 11.558 us/op 1.00
Set add up to 256 items then delete last 7.2576 us/op 6.8778 us/op 1.06
OrderedSet add up to 256 items then delete last 11.011 us/op 11.346 us/op 0.97
Set add up to 256 items then delete middle 7.2273 us/op 7.2208 us/op 1.00
OrderedSet add up to 256 items then delete middle 34.261 us/op 34.048 us/op 1.01
runFastConfirmationRules vc:100000 bc:96 eq:0 4.9224 ms/op 4.4129 ms/op 1.12
runFastConfirmationRules vc:600000 bc:96 eq:0 34.369 ms/op 35.331 ms/op 0.97
runFastConfirmationRules vc:1000000 bc:96 eq:0 57.196 ms/op 58.760 ms/op 0.97
runFastConfirmationRules vc:600000 bc:320 eq:0 35.633 ms/op 34.087 ms/op 1.05
runFastConfirmationRules vc:100000 bc:96 eq:1000 1.1031 s/op 1.0684 s/op 1.03
pass gossip attestations to forkchoice per slot 2.5749 ms/op 2.5774 ms/op 1.00
forkChoice updateHead vc 100000 bc 64 eq 0 455.96 us/op 402.33 us/op 1.13
forkChoice updateHead vc 600000 bc 64 eq 0 2.7372 ms/op 2.5110 ms/op 1.09
forkChoice updateHead vc 1000000 bc 64 eq 0 4.7301 ms/op 4.1335 ms/op 1.14
forkChoice updateHead vc 600000 bc 320 eq 0 2.7236 ms/op 2.4801 ms/op 1.10
forkChoice updateHead vc 600000 bc 1200 eq 0 2.7560 ms/op 2.7230 ms/op 1.01
forkChoice updateHead vc 600000 bc 7200 eq 0 3.0847 ms/op 3.2005 ms/op 0.96
forkChoice updateHead vc 600000 bc 64 eq 1000 2.7718 ms/op 2.4689 ms/op 1.12
forkChoice updateHead vc 600000 bc 64 eq 10000 2.8485 ms/op 2.5510 ms/op 1.12
forkChoice updateHead vc 600000 bc 64 eq 300000 7.1455 ms/op 6.7819 ms/op 1.05
computeDeltas 1400000 validators 0% inactive 13.193 ms/op 12.394 ms/op 1.06
computeDeltas 1400000 validators 10% inactive 12.530 ms/op 11.795 ms/op 1.06
computeDeltas 1400000 validators 20% inactive 11.714 ms/op 10.899 ms/op 1.07
computeDeltas 1400000 validators 50% inactive 9.6240 ms/op 9.4705 ms/op 1.02
computeDeltas 2100000 validators 0% inactive 19.814 ms/op 18.812 ms/op 1.05
computeDeltas 2100000 validators 10% inactive 18.747 ms/op 17.651 ms/op 1.06
computeDeltas 2100000 validators 20% inactive 17.714 ms/op 16.666 ms/op 1.06
computeDeltas 2100000 validators 50% inactive 14.213 ms/op 10.915 ms/op 1.30
altair processAttestation - 250000 vs - 7PWei normalcase 1.7227 ms/op 2.2600 ms/op 0.76
altair processAttestation - 250000 vs - 7PWei worstcase 2.4761 ms/op 3.3386 ms/op 0.74
altair processAttestation - setStatus - 1/6 committees join 102.34 us/op 103.86 us/op 0.99
altair processAttestation - setStatus - 1/3 committees join 204.55 us/op 204.03 us/op 1.00
altair processAttestation - setStatus - 1/2 committees join 289.02 us/op 291.33 us/op 0.99
altair processAttestation - setStatus - 2/3 committees join 372.25 us/op 377.15 us/op 0.99
altair processAttestation - setStatus - 4/5 committees join 514.30 us/op 532.85 us/op 0.97
altair processAttestation - setStatus - 100% committees join 602.71 us/op 611.72 us/op 0.99
altair processBlock - 250000 vs - 7PWei normalcase 3.4885 ms/op 5.0577 ms/op 0.69
altair processBlock - 250000 vs - 7PWei normalcase hashState 16.091 ms/op 18.176 ms/op 0.89
altair processBlock - 250000 vs - 7PWei worstcase 21.404 ms/op 23.767 ms/op 0.90
altair processBlock - 250000 vs - 7PWei worstcase hashState 42.775 ms/op 44.601 ms/op 0.96
phase0 processBlock - 250000 vs - 7PWei normalcase 1.4319 ms/op 1.4670 ms/op 0.98
phase0 processBlock - 250000 vs - 7PWei worstcase 17.437 ms/op 18.302 ms/op 0.95
altair processEth1Data - 250000 vs - 7PWei normalcase 330.37 us/op 294.03 us/op 1.12
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 4.1460 us/op 4.4030 us/op 0.94
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 20.345 us/op 22.429 us/op 0.91
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 5.8720 us/op 7.5300 us/op 0.78
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 3.7610 us/op 4.7230 us/op 0.80
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 92.787 us/op 94.759 us/op 0.98
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.3972 ms/op 1.5256 ms/op 0.92
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.8397 ms/op 2.1400 ms/op 0.86
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.8341 ms/op 2.2384 ms/op 0.82
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.6259 ms/op 5.5733 ms/op 0.65
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.0590 ms/op 2.0559 ms/op 1.00
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 3.8801 ms/op 4.8106 ms/op 0.81
Tree 40 250000 create 321.51 ms/op 348.05 ms/op 0.92
Tree 40 250000 get(125000) 101.07 ns/op 91.918 ns/op 1.10
Tree 40 250000 set(125000) 1.0417 us/op 1.0086 us/op 1.03
Tree 40 250000 toArray() 10.121 ms/op 16.542 ms/op 0.61
Tree 40 250000 iterate all - toArray() + loop 10.313 ms/op 16.491 ms/op 0.63
Tree 40 250000 iterate all - get(i) 41.271 ms/op 41.820 ms/op 0.99
Array 250000 create 2.3115 ms/op 2.1678 ms/op 1.07
Array 250000 clone - spread 714.68 us/op 688.45 us/op 1.04
Array 250000 get(125000) 0.29600 ns/op 0.29600 ns/op 1.00
Array 250000 set(125000) 0.29800 ns/op 0.30100 ns/op 0.99
Array 250000 iterate all - loop 57.236 us/op 58.976 us/op 0.97
phase0 afterProcessEpoch - 250000 vs - 7PWei 53.868 ms/op 53.220 ms/op 1.01
Array.fill - length 1000000 3.8292 ms/op 4.7311 ms/op 0.81
Array push - length 1000000 13.374 ms/op 11.519 ms/op 1.16
Array.get 0.20837 ns/op 0.21163 ns/op 0.98
Uint8Array.get 0.24092 ns/op 0.24015 ns/op 1.00
phase0 beforeProcessEpoch - 250000 vs - 7PWei 13.969 ms/op 16.067 ms/op 0.87
altair processEpoch - mainnet_e81889 231.99 ms/op 281.40 ms/op 0.82
mainnet_e81889 - altair beforeProcessEpoch 13.879 ms/op 21.517 ms/op 0.65
mainnet_e81889 - altair processJustificationAndFinalization 4.8450 us/op 6.7510 us/op 0.72
mainnet_e81889 - altair processInactivityUpdates 3.6819 ms/op 4.6792 ms/op 0.79
mainnet_e81889 - altair processRewardsAndPenalties 16.926 ms/op 20.428 ms/op 0.83
mainnet_e81889 - altair processRegistryUpdates 545.00 ns/op 602.00 ns/op 0.91
mainnet_e81889 - altair processSlashings 148.00 ns/op 162.00 ns/op 0.91
mainnet_e81889 - altair processEth1DataReset 144.00 ns/op 155.00 ns/op 0.93
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.2708 ms/op 1.9179 ms/op 0.66
mainnet_e81889 - altair processSlashingsReset 686.00 ns/op 730.00 ns/op 0.94
mainnet_e81889 - altair processRandaoMixesReset 1.0140 us/op 1.3490 us/op 0.75
mainnet_e81889 - altair processHistoricalRootsUpdate 147.00 ns/op 154.00 ns/op 0.95
mainnet_e81889 - altair processParticipationFlagUpdates 429.00 ns/op 451.00 ns/op 0.95
mainnet_e81889 - altair processSyncCommitteeUpdates 117.00 ns/op 125.00 ns/op 0.94
mainnet_e81889 - altair afterProcessEpoch 40.932 ms/op 41.722 ms/op 0.98
capella processEpoch - mainnet_e217614 695.59 ms/op 797.71 ms/op 0.87
mainnet_e217614 - capella beforeProcessEpoch 54.182 ms/op 67.494 ms/op 0.80
mainnet_e217614 - capella processJustificationAndFinalization 4.9380 us/op 6.5880 us/op 0.75
mainnet_e217614 - capella processInactivityUpdates 11.236 ms/op 15.293 ms/op 0.73
mainnet_e217614 - capella processRewardsAndPenalties 88.125 ms/op 89.922 ms/op 0.98
mainnet_e217614 - capella processRegistryUpdates 4.4460 us/op 4.5140 us/op 0.98
mainnet_e217614 - capella processSlashings 145.00 ns/op 161.00 ns/op 0.90
mainnet_e217614 - capella processEth1DataReset 139.00 ns/op 154.00 ns/op 0.90
mainnet_e217614 - capella processEffectiveBalanceUpdates 5.6221 ms/op 13.641 ms/op 0.41
mainnet_e217614 - capella processSlashingsReset 678.00 ns/op 696.00 ns/op 0.97
mainnet_e217614 - capella processRandaoMixesReset 1.0130 us/op 1.2440 us/op 0.81
mainnet_e217614 - capella processHistoricalRootsUpdate 138.00 ns/op 152.00 ns/op 0.91
mainnet_e217614 - capella processParticipationFlagUpdates 428.00 ns/op 464.00 ns/op 0.92
mainnet_e217614 - capella afterProcessEpoch 104.35 ms/op 113.88 ms/op 0.92
phase0 processEpoch - mainnet_e58758 237.60 ms/op 296.29 ms/op 0.80
mainnet_e58758 - phase0 beforeProcessEpoch 46.940 ms/op 65.814 ms/op 0.71
mainnet_e58758 - phase0 processJustificationAndFinalization 5.1620 us/op 6.1790 us/op 0.84
mainnet_e58758 - phase0 processRewardsAndPenalties 15.251 ms/op 16.398 ms/op 0.93
mainnet_e58758 - phase0 processRegistryUpdates 2.2730 us/op 2.2970 us/op 0.99
mainnet_e58758 - phase0 processSlashings 145.00 ns/op 146.00 ns/op 0.99
mainnet_e58758 - phase0 processEth1DataReset 138.00 ns/op 141.00 ns/op 0.98
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 918.02 us/op 982.68 us/op 0.93
mainnet_e58758 - phase0 processSlashingsReset 806.00 ns/op 880.00 ns/op 0.92
mainnet_e58758 - phase0 processRandaoMixesReset 1.0670 us/op 1.3080 us/op 0.82
mainnet_e58758 - phase0 processHistoricalRootsUpdate 143.00 ns/op 150.00 ns/op 0.95
mainnet_e58758 - phase0 processParticipationRecordUpdates 990.00 ns/op 1.2000 us/op 0.82
mainnet_e58758 - phase0 afterProcessEpoch 32.571 ms/op 33.698 ms/op 0.97
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.0062 ms/op 1.0086 ms/op 1.00
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.6227 ms/op 1.6325 ms/op 0.99
altair processInactivityUpdates - 250000 normalcase 10.403 ms/op 12.400 ms/op 0.84
altair processInactivityUpdates - 250000 worstcase 10.425 ms/op 12.820 ms/op 0.81
phase0 processRegistryUpdates - 250000 normalcase 2.4310 us/op 3.3430 us/op 0.73
phase0 processRegistryUpdates - 250000 badcase_full_deposits 149.87 us/op 151.51 us/op 0.99
phase0 processRegistryUpdates - 250000 worstcase 0.5 60.490 ms/op 60.146 ms/op 1.01
altair processRewardsAndPenalties - 250000 normalcase 14.075 ms/op 16.441 ms/op 0.86
altair processRewardsAndPenalties - 250000 worstcase 13.967 ms/op 16.042 ms/op 0.87
phase0 getAttestationDeltas - 250000 normalcase 5.4444 ms/op 5.4197 ms/op 1.00
phase0 getAttestationDeltas - 250000 worstcase 5.5499 ms/op 5.5567 ms/op 1.00
phase0 processSlashings - 250000 worstcase 61.341 us/op 64.809 us/op 0.95
altair processSyncCommitteeUpdates - 250000 9.9292 ms/op 10.593 ms/op 0.94
BeaconState.hashTreeRoot - No change 173.00 ns/op 183.00 ns/op 0.95
BeaconState.hashTreeRoot - 1 full validator 54.967 us/op 87.824 us/op 0.63
BeaconState.hashTreeRoot - 32 full validator 622.78 us/op 938.13 us/op 0.66
BeaconState.hashTreeRoot - 512 full validator 5.8322 ms/op 8.8325 ms/op 0.66
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 68.291 us/op 102.27 us/op 0.67
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.0193 ms/op 1.5750 ms/op 0.65
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 12.298 ms/op 20.730 ms/op 0.59
BeaconState.hashTreeRoot - 1 balances 54.965 us/op 90.494 us/op 0.61
BeaconState.hashTreeRoot - 32 balances 540.41 us/op 879.43 us/op 0.61
BeaconState.hashTreeRoot - 512 balances 4.5884 ms/op 6.9621 ms/op 0.66
BeaconState.hashTreeRoot - 250000 balances 151.25 ms/op 132.49 ms/op 1.14
aggregationBits - 2048 els - zipIndexesInBitList 21.277 us/op 20.511 us/op 1.04
regular array get 100000 times 22.695 us/op 23.705 us/op 0.96
wrappedArray get 100000 times 22.662 us/op 23.719 us/op 0.96
arrayWithProxy get 100000 times 11.024 ms/op 10.893 ms/op 1.01
ssz.Root.equals 21.374 ns/op 22.092 ns/op 0.97
byteArrayEquals 21.184 ns/op 21.848 ns/op 0.97
Buffer.compare 8.8900 ns/op 9.0160 ns/op 0.99
processSlot - 1 slots 7.8870 us/op 10.023 us/op 0.79
processSlot - 32 slots 1.6248 ms/op 2.2367 ms/op 0.73
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 4.2857 ms/op 4.8555 ms/op 0.88
getCommitteeAssignments - req 1 vs - 250000 vc 1.6709 ms/op 1.6912 ms/op 0.99
getCommitteeAssignments - req 100 vs - 250000 vc 3.3977 ms/op 3.4786 ms/op 0.98
getCommitteeAssignments - req 1000 vs - 250000 vc 3.6719 ms/op 3.7503 ms/op 0.98
findModifiedValidators - 10000 modified validators 865.96 ms/op 922.93 ms/op 0.94
findModifiedValidators - 1000 modified validators 495.15 ms/op 468.28 ms/op 1.06
findModifiedValidators - 100 modified validators 429.15 ms/op 331.08 ms/op 1.30
findModifiedValidators - 10 modified validators 322.45 ms/op 268.05 ms/op 1.20
findModifiedValidators - 1 modified validators 292.40 ms/op 169.97 ms/op 1.72
findModifiedValidators - no difference 190.97 ms/op 189.43 ms/op 1.01
migrate state 1500000 validators, 3400 modified, 2000 new 3.0080 s/op 3.3393 s/op 0.90
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 3.6700 ns/op 3.8300 ns/op 0.96
state getBlockRootAtSlot - 250000 vs - 7PWei 396.13 ns/op 396.13 ns/op 1.00
computeProposerIndex 100000 validators 1.4046 ms/op 1.3759 ms/op 1.02
getNextSyncCommitteeIndices 1000 validators 2.9965 ms/op 2.9154 ms/op 1.03
getNextSyncCommitteeIndices 10000 validators 26.442 ms/op 25.867 ms/op 1.02
getNextSyncCommitteeIndices 100000 validators 92.705 ms/op 90.429 ms/op 1.03
computeProposers - vc 250000 613.44 us/op 555.30 us/op 1.10
computeEpochShuffling - vc 250000 42.194 ms/op 38.998 ms/op 1.08
getNextSyncCommittee - vc 250000 10.544 ms/op 9.5792 ms/op 1.10
nodejs block root to RootHex using toHex 101.56 ns/op 96.071 ns/op 1.06
nodejs block root to RootHex using toRootHex 64.137 ns/op 62.424 ns/op 1.03
nodejs fromHex(blob) 854.92 us/op 822.76 us/op 1.04
nodejs fromHexInto(blob) 645.50 us/op 653.70 us/op 0.99
nodejs block root to RootHex using the deprecated toHexString 502.75 ns/op 463.87 ns/op 1.08
nodejs byteArrayEquals 32 bytes (block root) 26.345 ns/op 26.647 ns/op 0.99
nodejs byteArrayEquals 48 bytes (pubkey) 38.617 ns/op 38.549 ns/op 1.00
nodejs byteArrayEquals 96 bytes (signature) 35.169 ns/op 35.114 ns/op 1.00
nodejs byteArrayEquals 1024 bytes 42.811 ns/op 42.707 ns/op 1.00
nodejs byteArrayEquals 131072 bytes (blob) 1.8149 us/op 1.8110 us/op 1.00
browser block root to RootHex using toHex 148.62 ns/op 147.68 ns/op 1.01
browser block root to RootHex using toRootHex 131.28 ns/op 131.26 ns/op 1.00
browser fromHex(blob) 1.6685 ms/op 1.7363 ms/op 0.96
browser fromHexInto(blob) 648.90 us/op 640.47 us/op 1.01
browser block root to RootHex using the deprecated toHexString 350.40 ns/op 331.81 ns/op 1.06
browser byteArrayEquals 32 bytes (block root) 28.937 ns/op 28.573 ns/op 1.01
browser byteArrayEquals 48 bytes (pubkey) 40.813 ns/op 40.436 ns/op 1.01
browser byteArrayEquals 96 bytes (signature) 76.503 ns/op 75.922 ns/op 1.01
browser byteArrayEquals 1024 bytes 784.08 ns/op 779.68 ns/op 1.01
browser byteArrayEquals 131072 bytes (blob) 98.648 us/op 97.412 us/op 1.01

by benchmarkbot/action

strictFeeRecipientCheck,
// winston logger doesn't like bigint
builderBoostFactor: `${builderBoostFactor}`,
builderBoostFactor,

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.

seems like winston is just fine with it

Comment on lines +899 to +901
// Keep a builder bid as fallback unless the circuit breaker is active
const builderBid = circuitBreakerActive
? null

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.

unsure if we should still pick a builder bid even if the circuit breaker is active in case local fails, it's not very likely that local payload production fails but having bid as a fallback could be good still, on the other hand, it could also be that builders are attacking the network with large payloads that are slow to process or equivocations, or other attacks, so not selecting builder bids at all might be a safety feature

@nflaig
nflaig marked this pull request as ready for review August 11, 2026 16:51
@nflaig
nflaig requested a review from a team as a code owner August 11, 2026 16:51

@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: bc251e502e

鈩癸笍 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".

Comment thread packages/beacon-node/src/chain/produceBlock/produceBlockBody.ts Outdated
Comment on lines +103 to +104
/** Verify that a locally produced execution payload uses `feeRecipient`. */
strictFeeRecipientCheck?: boolean;

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.

can't tell if anyone is using this at all, we could drop support for it in v4 (gloas) and I accidentally didn't support it until now on that api

but for now, it seems worth keeping for backward compatibility but it's also non-spec behavior, so we could drop it at any point when doing a major lodestar release

@matthewkeil
matthewkeil self-requested a review August 12, 2026 16:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

1 participant