feat: upgrade to v1.7.0-alpha.8 spec#9383
Conversation
There was a problem hiding this comment.
Code Review
This pull request updates the codebase to align with the Ethereum consensus spec v1.7.0-alpha.8. Key changes include renaming gas_limit to target_gas_limit across several components (ProposerPreferences, PayloadAttributes, and validator services) and implementing logic to resolve the proposer's target gas limit during block production. Additionally, it updates the payload_present flag logic to check envelope arrival times against a new getPayloadDueMs configuration and increases the MIN_BUILDER_WITHDRAWABILITY_DELAY constant. A significant portion of the PR also involves updating spec references and test data to match the new alpha.8 version. One critical issue was identified: the isStatePostGloas type guard is used in produceBlockBody.ts but is missing from the imports, which will lead to a compilation error.
|
| Benchmark suite | Current: 37bdc0c | Previous: c5efeb6 | Ratio |
|---|---|---|---|
| proposeBlockBody type=full, size=empty | 3.8491 ms/op | 988.33 us/op | 3.89 |
Full benchmark results
| Benchmark suite | Current: 37bdc0c | Previous: c5efeb6 | Ratio |
|---|---|---|---|
| getPubkeys - index2pubkey - req 1000 vs - 250000 vc | 965.21 us/op | 1.1200 ms/op | 0.86 |
| getPubkeys - validatorsArr - req 1000 vs - 250000 vc | 39.854 us/op | 37.720 us/op | 1.06 |
| BLS verify - blst | 645.07 us/op | 728.03 us/op | 0.89 |
| BLS verifyMultipleSignatures 3 - blst | 1.3291 ms/op | 1.3458 ms/op | 0.99 |
| BLS verifyMultipleSignatures 8 - blst | 2.0959 ms/op | 2.1503 ms/op | 0.97 |
| BLS verifyMultipleSignatures 32 - blst | 6.5205 ms/op | 6.8729 ms/op | 0.95 |
| BLS verifyMultipleSignatures 64 - blst | 12.752 ms/op | 13.281 ms/op | 0.96 |
| BLS verifyMultipleSignatures 128 - blst | 25.790 ms/op | 26.143 ms/op | 0.99 |
| BLS deserializing 10000 signatures | 627.15 ms/op | 605.21 ms/op | 1.04 |
| BLS deserializing 100000 signatures | 6.1043 s/op | 6.1346 s/op | 1.00 |
| BLS verifyMultipleSignatures - same message - 3 - blst | 670.52 us/op | 712.96 us/op | 0.94 |
| BLS verifyMultipleSignatures - same message - 8 - blst | 847.96 us/op | 901.87 us/op | 0.94 |
| BLS verifyMultipleSignatures - same message - 32 - blst | 1.4713 ms/op | 1.6049 ms/op | 0.92 |
| BLS verifyMultipleSignatures - same message - 64 - blst | 2.1408 ms/op | 2.4647 ms/op | 0.87 |
| BLS verifyMultipleSignatures - same message - 128 - blst | 3.8477 ms/op | 4.1585 ms/op | 0.93 |
| BLS aggregatePubkeys 32 - blst | 16.723 us/op | 18.086 us/op | 0.92 |
| BLS aggregatePubkeys 128 - blst | 59.664 us/op | 64.639 us/op | 0.92 |
| getSlashingsAndExits - default max | 44.857 us/op | 59.383 us/op | 0.76 |
| getSlashingsAndExits - 2k | 494.43 us/op | 408.25 us/op | 1.21 |
| proposeBlockBody type=full, size=empty | 3.8491 ms/op | 988.33 us/op | 3.89 |
| isKnown best case - 1 super set check | 165.00 ns/op | 159.00 ns/op | 1.04 |
| isKnown normal case - 2 super set checks | 163.00 ns/op | 165.00 ns/op | 0.99 |
| isKnown worse case - 16 super set checks | 159.00 ns/op | 158.00 ns/op | 1.01 |
| validate api signedAggregateAndProof - struct | 1.4842 ms/op | 1.5508 ms/op | 0.96 |
| validate gossip signedAggregateAndProof - struct | 1.4823 ms/op | 1.5515 ms/op | 0.96 |
| batch validate gossip attestation - vc 640000 - chunk 32 | 110.85 us/op | 109.24 us/op | 1.01 |
| batch validate gossip attestation - vc 640000 - chunk 64 | 95.033 us/op | 94.929 us/op | 1.00 |
| batch validate gossip attestation - vc 640000 - chunk 128 | 89.900 us/op | 90.689 us/op | 0.99 |
| batch validate gossip attestation - vc 640000 - chunk 256 | 92.278 us/op | 86.181 us/op | 1.07 |
| bytes32 toHexString | 283.00 ns/op | 273.00 ns/op | 1.04 |
| bytes32 Buffer.toString(hex) | 173.00 ns/op | 165.00 ns/op | 1.05 |
| bytes32 Buffer.toString(hex) from Uint8Array | 234.00 ns/op | 242.00 ns/op | 0.97 |
| bytes32 Buffer.toString(hex) + 0x | 176.00 ns/op | 165.00 ns/op | 1.07 |
| Return object 10000 times | 0.20660 ns/op | 0.20340 ns/op | 1.02 |
| Throw Error 10000 times | 3.2429 us/op | 3.2047 us/op | 1.01 |
| toHex | 89.034 ns/op | 96.009 ns/op | 0.93 |
| Buffer.from | 82.097 ns/op | 81.382 ns/op | 1.01 |
| shared Buffer | 53.293 ns/op | 53.390 ns/op | 1.00 |
| fastMsgIdFn sha256 / 200 bytes | 1.4020 us/op | 1.4450 us/op | 0.97 |
| fastMsgIdFn h32 xxhash / 200 bytes | 150.00 ns/op | 164.00 ns/op | 0.91 |
| fastMsgIdFn h64 xxhash / 200 bytes | 198.00 ns/op | 218.00 ns/op | 0.91 |
| fastMsgIdFn sha256 / 1000 bytes | 4.5870 us/op | 4.8780 us/op | 0.94 |
| fastMsgIdFn h32 xxhash / 1000 bytes | 236.00 ns/op | 246.00 ns/op | 0.96 |
| fastMsgIdFn h64 xxhash / 1000 bytes | 247.00 ns/op | 258.00 ns/op | 0.96 |
| fastMsgIdFn sha256 / 10000 bytes | 40.348 us/op | 43.164 us/op | 0.93 |
| fastMsgIdFn h32 xxhash / 10000 bytes | 1.2480 us/op | 1.3120 us/op | 0.95 |
| fastMsgIdFn h64 xxhash / 10000 bytes | 802.00 ns/op | 860.00 ns/op | 0.93 |
| send data - 1000 256B messages | 4.5226 ms/op | 4.3986 ms/op | 1.03 |
| send data - 1000 512B messages | 4.3134 ms/op | 4.6498 ms/op | 0.93 |
| send data - 1000 1024B messages | 4.4129 ms/op | 4.5332 ms/op | 0.97 |
| send data - 1000 1200B messages | 4.7458 ms/op | 4.7997 ms/op | 0.99 |
| send data - 1000 2048B messages | 4.8124 ms/op | 5.0721 ms/op | 0.95 |
| send data - 1000 4096B messages | 5.6702 ms/op | 5.5759 ms/op | 1.02 |
| send data - 1000 16384B messages | 13.807 ms/op | 16.633 ms/op | 0.83 |
| send data - 1000 65536B messages | 166.75 ms/op | 192.67 ms/op | 0.87 |
| enrSubnets - fastDeserialize 64 bits | 726.00 ns/op | 693.00 ns/op | 1.05 |
| enrSubnets - ssz BitVector 64 bits | 249.00 ns/op | 255.00 ns/op | 0.98 |
| enrSubnets - fastDeserialize 4 bits | 102.00 ns/op | 94.000 ns/op | 1.09 |
| enrSubnets - ssz BitVector 4 bits | 255.00 ns/op | 250.00 ns/op | 1.02 |
| prioritizePeers score -10:0 att 32-0.1 sync 2-0 | 203.02 us/op | 208.22 us/op | 0.98 |
| prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 | 228.41 us/op | 244.96 us/op | 0.93 |
| prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 | 330.13 us/op | 350.04 us/op | 0.94 |
| prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 | 595.71 us/op | 593.12 us/op | 1.00 |
| prioritizePeers score 0:0 att 64-1 sync 4-1 | 697.48 us/op | 712.08 us/op | 0.98 |
| array of 16000 items push then shift | 1.2315 us/op | 1.2231 us/op | 1.01 |
| LinkedList of 16000 items push then shift | 7.4170 ns/op | 7.1990 ns/op | 1.03 |
| array of 16000 items push then pop | 67.148 ns/op | 69.077 ns/op | 0.97 |
| LinkedList of 16000 items push then pop | 5.8310 ns/op | 5.7460 ns/op | 1.01 |
| array of 24000 items push then shift | 1.7930 us/op | 1.7962 us/op | 1.00 |
| LinkedList of 24000 items push then shift | 6.9910 ns/op | 7.0640 ns/op | 0.99 |
| array of 24000 items push then pop | 94.930 ns/op | 102.93 ns/op | 0.92 |
| LinkedList of 24000 items push then pop | 5.8620 ns/op | 6.2500 ns/op | 0.94 |
| intersect bitArray bitLen 8 | 4.6070 ns/op | 4.8950 ns/op | 0.94 |
| intersect array and set length 8 | 28.186 ns/op | 28.030 ns/op | 1.01 |
| intersect bitArray bitLen 128 | 23.201 ns/op | 23.023 ns/op | 1.01 |
| intersect array and set length 128 | 482.66 ns/op | 477.68 ns/op | 1.01 |
| bitArray.getTrueBitIndexes() bitLen 128 | 1.0200 us/op | 1.0300 us/op | 0.99 |
| bitArray.getTrueBitIndexes() bitLen 248 | 1.7730 us/op | 1.7720 us/op | 1.00 |
| bitArray.getTrueBitIndexes() bitLen 512 | 3.5930 us/op | 3.5960 us/op | 1.00 |
| Full columns - reconstruct all 6 blobs | 181.80 us/op | 140.76 us/op | 1.29 |
| Full columns - reconstruct half of the blobs out of 6 | 73.878 us/op | 67.584 us/op | 1.09 |
| Full columns - reconstruct single blob out of 6 | 30.080 us/op | 35.645 us/op | 0.84 |
| Half columns - reconstruct all 6 blobs | 375.86 ms/op | 395.33 ms/op | 0.95 |
| Half columns - reconstruct half of the blobs out of 6 | 188.41 ms/op | 200.51 ms/op | 0.94 |
| Half columns - reconstruct single blob out of 6 | 66.834 ms/op | 71.626 ms/op | 0.93 |
| Full columns - reconstruct all 10 blobs | 412.25 us/op | 703.62 us/op | 0.59 |
| Full columns - reconstruct half of the blobs out of 10 | 118.92 us/op | 155.73 us/op | 0.76 |
| Full columns - reconstruct single blob out of 10 | 31.708 us/op | 28.964 us/op | 1.09 |
| Half columns - reconstruct all 10 blobs | 620.49 ms/op | 655.61 ms/op | 0.95 |
| Half columns - reconstruct half of the blobs out of 10 | 312.92 ms/op | 329.43 ms/op | 0.95 |
| Half columns - reconstruct single blob out of 10 | 65.124 ms/op | 72.103 ms/op | 0.90 |
| Full columns - reconstruct all 20 blobs | 906.79 us/op | 1.9813 ms/op | 0.46 |
| Full columns - reconstruct half of the blobs out of 20 | 415.50 us/op | 206.91 us/op | 2.01 |
| Full columns - reconstruct single blob out of 20 | 32.483 us/op | 32.006 us/op | 1.01 |
| Half columns - reconstruct all 20 blobs | 1.2248 s/op | 1.2898 s/op | 0.95 |
| Half columns - reconstruct half of the blobs out of 20 | 613.49 ms/op | 648.72 ms/op | 0.95 |
| Half columns - reconstruct single blob out of 20 | 64.836 ms/op | 71.565 ms/op | 0.91 |
| Set add up to 64 items then delete first | 2.3899 us/op | 2.2384 us/op | 1.07 |
| OrderedSet add up to 64 items then delete first | 3.1956 us/op | 3.5522 us/op | 0.90 |
| Set add up to 64 items then delete last | 2.2666 us/op | 2.3335 us/op | 0.97 |
| OrderedSet add up to 64 items then delete last | 3.2155 us/op | 3.4962 us/op | 0.92 |
| Set add up to 64 items then delete middle | 2.0700 us/op | 2.2402 us/op | 0.92 |
| OrderedSet add up to 64 items then delete middle | 4.4969 us/op | 5.1221 us/op | 0.88 |
| Set add up to 128 items then delete first | 3.9613 us/op | 4.3373 us/op | 0.91 |
| OrderedSet add up to 128 items then delete first | 6.1172 us/op | 6.5480 us/op | 0.93 |
| Set add up to 128 items then delete last | 3.6257 us/op | 4.0662 us/op | 0.89 |
| OrderedSet add up to 128 items then delete last | 5.4095 us/op | 6.2786 us/op | 0.86 |
| Set add up to 128 items then delete middle | 3.6737 us/op | 3.8849 us/op | 0.95 |
| OrderedSet add up to 128 items then delete middle | 11.042 us/op | 11.979 us/op | 0.92 |
| Set add up to 256 items then delete first | 7.3213 us/op | 7.5890 us/op | 0.96 |
| OrderedSet add up to 256 items then delete first | 11.475 us/op | 12.279 us/op | 0.93 |
| Set add up to 256 items then delete last | 7.0353 us/op | 9.5604 us/op | 0.74 |
| OrderedSet add up to 256 items then delete last | 10.834 us/op | 12.513 us/op | 0.87 |
| Set add up to 256 items then delete middle | 7.1395 us/op | 8.0492 us/op | 0.89 |
| OrderedSet add up to 256 items then delete middle | 32.977 us/op | 37.679 us/op | 0.88 |
| pass gossip attestations to forkchoice per slot | 2.4176 ms/op | 2.5668 ms/op | 0.94 |
| forkChoice updateHead vc 100000 bc 64 eq 0 | 368.46 us/op | 424.39 us/op | 0.87 |
| forkChoice updateHead vc 600000 bc 64 eq 0 | 2.1923 ms/op | 2.2480 ms/op | 0.98 |
| forkChoice updateHead vc 1000000 bc 64 eq 0 | 3.6765 ms/op | 3.7360 ms/op | 0.98 |
| forkChoice updateHead vc 600000 bc 320 eq 0 | 2.2053 ms/op | 2.2609 ms/op | 0.98 |
| forkChoice updateHead vc 600000 bc 1200 eq 0 | 2.2488 ms/op | 2.3022 ms/op | 0.98 |
| forkChoice updateHead vc 600000 bc 7200 eq 0 | 2.5183 ms/op | 2.8660 ms/op | 0.88 |
| forkChoice updateHead vc 600000 bc 64 eq 1000 | 2.7941 ms/op | 3.0478 ms/op | 0.92 |
| forkChoice updateHead vc 600000 bc 64 eq 10000 | 2.8849 ms/op | 3.1554 ms/op | 0.91 |
| forkChoice updateHead vc 600000 bc 64 eq 300000 | 6.4236 ms/op | 7.1017 ms/op | 0.90 |
| computeDeltas 1400000 validators 0% inactive | 11.904 ms/op | 12.986 ms/op | 0.92 |
| computeDeltas 1400000 validators 10% inactive | 11.150 ms/op | 12.144 ms/op | 0.92 |
| computeDeltas 1400000 validators 20% inactive | 10.196 ms/op | 11.021 ms/op | 0.93 |
| computeDeltas 1400000 validators 50% inactive | 7.8402 ms/op | 8.4975 ms/op | 0.92 |
| computeDeltas 2100000 validators 0% inactive | 17.912 ms/op | 19.418 ms/op | 0.92 |
| computeDeltas 2100000 validators 10% inactive | 16.777 ms/op | 18.245 ms/op | 0.92 |
| computeDeltas 2100000 validators 20% inactive | 15.248 ms/op | 17.069 ms/op | 0.89 |
| computeDeltas 2100000 validators 50% inactive | 9.7840 ms/op | 9.8594 ms/op | 0.99 |
| altair processAttestation - 250000 vs - 7PWei normalcase | 2.0012 ms/op | 2.1062 ms/op | 0.95 |
| altair processAttestation - 250000 vs - 7PWei worstcase | 3.1688 ms/op | 2.8345 ms/op | 1.12 |
| altair processAttestation - setStatus - 1/6 committees join | 101.53 us/op | 109.17 us/op | 0.93 |
| altair processAttestation - setStatus - 1/3 committees join | 197.96 us/op | 208.62 us/op | 0.95 |
| altair processAttestation - setStatus - 1/2 committees join | 282.59 us/op | 294.89 us/op | 0.96 |
| altair processAttestation - setStatus - 2/3 committees join | 375.47 us/op | 377.50 us/op | 0.99 |
| altair processAttestation - setStatus - 4/5 committees join | 500.31 us/op | 533.73 us/op | 0.94 |
| altair processAttestation - setStatus - 100% committees join | 580.83 us/op | 624.67 us/op | 0.93 |
| altair processBlock - 250000 vs - 7PWei normalcase | 4.3821 ms/op | 4.0522 ms/op | 1.08 |
| altair processBlock - 250000 vs - 7PWei normalcase hashState | 17.306 ms/op | 18.570 ms/op | 0.93 |
| altair processBlock - 250000 vs - 7PWei worstcase | 21.492 ms/op | 21.725 ms/op | 0.99 |
| altair processBlock - 250000 vs - 7PWei worstcase hashState | 44.937 ms/op | 43.101 ms/op | 1.04 |
| phase0 processBlock - 250000 vs - 7PWei normalcase | 1.4706 ms/op | 1.6605 ms/op | 0.89 |
| phase0 processBlock - 250000 vs - 7PWei worstcase | 17.320 ms/op | 17.623 ms/op | 0.98 |
| altair processEth1Data - 250000 vs - 7PWei normalcase | 293.59 us/op | 312.19 us/op | 0.94 |
| getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 | 8.1040 us/op | 3.1500 us/op | 2.57 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 | 20.530 us/op | 20.411 us/op | 1.01 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 | 6.4850 us/op | 6.8010 us/op | 0.95 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 | 5.2910 us/op | 4.3980 us/op | 1.20 |
| getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 | 90.897 us/op | 93.337 us/op | 0.97 |
| getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 | 1.4143 ms/op | 1.4232 ms/op | 0.99 |
| getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 | 1.8334 ms/op | 1.7579 ms/op | 1.04 |
| getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 | 1.8349 ms/op | 1.7755 ms/op | 1.03 |
| getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 | 3.7176 ms/op | 3.4384 ms/op | 1.08 |
| getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 | 2.0773 ms/op | 2.1690 ms/op | 0.96 |
| getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 | 4.1164 ms/op | 4.3367 ms/op | 0.95 |
| Tree 40 250000 create | 326.40 ms/op | 343.91 ms/op | 0.95 |
| Tree 40 250000 get(125000) | 91.843 ns/op | 97.014 ns/op | 0.95 |
| Tree 40 250000 set(125000) | 1.0024 us/op | 1.0383 us/op | 0.97 |
| Tree 40 250000 toArray() | 13.331 ms/op | 9.6347 ms/op | 1.38 |
| Tree 40 250000 iterate all - toArray() + loop | 15.249 ms/op | 9.6346 ms/op | 1.58 |
| Tree 40 250000 iterate all - get(i) | 37.447 ms/op | 36.438 ms/op | 1.03 |
| Array 250000 create | 2.2112 ms/op | 2.2922 ms/op | 0.96 |
| Array 250000 clone - spread | 695.05 us/op | 698.15 us/op | 1.00 |
| Array 250000 get(125000) | 0.30600 ns/op | 0.29800 ns/op | 1.03 |
| Array 250000 set(125000) | 0.30600 ns/op | 0.30300 ns/op | 1.01 |
| Array 250000 iterate all - loop | 59.425 us/op | 58.462 us/op | 1.02 |
| phase0 afterProcessEpoch - 250000 vs - 7PWei | 63.687 ms/op | 40.105 ms/op | 1.59 |
| Array.fill - length 1000000 | 2.2356 ms/op | 2.1999 ms/op | 1.02 |
| Array push - length 1000000 | 9.8639 ms/op | 8.1325 ms/op | 1.21 |
| Array.get | 0.21405 ns/op | 0.21216 ns/op | 1.01 |
| Uint8Array.get | 0.23345 ns/op | 0.22976 ns/op | 1.02 |
| phase0 beforeProcessEpoch - 250000 vs - 7PWei | 15.447 ms/op | 17.846 ms/op | 0.87 |
| altair processEpoch - mainnet_e81889 | 286.25 ms/op | 302.74 ms/op | 0.95 |
| mainnet_e81889 - altair beforeProcessEpoch | 22.736 ms/op | 20.594 ms/op | 1.10 |
| mainnet_e81889 - altair processJustificationAndFinalization | 6.3030 us/op | 6.6720 us/op | 0.94 |
| mainnet_e81889 - altair processInactivityUpdates | 3.6287 ms/op | 3.4363 ms/op | 1.06 |
| mainnet_e81889 - altair processRewardsAndPenalties | 20.467 ms/op | 19.445 ms/op | 1.05 |
| mainnet_e81889 - altair processRegistryUpdates | 574.00 ns/op | 568.00 ns/op | 1.01 |
| mainnet_e81889 - altair processSlashings | 131.00 ns/op | 130.00 ns/op | 1.01 |
| mainnet_e81889 - altair processEth1DataReset | 131.00 ns/op | 133.00 ns/op | 0.98 |
| mainnet_e81889 - altair processEffectiveBalanceUpdates | 1.7895 ms/op | 1.6898 ms/op | 1.06 |
| mainnet_e81889 - altair processSlashingsReset | 702.00 ns/op | 737.00 ns/op | 0.95 |
| mainnet_e81889 - altair processRandaoMixesReset | 1.3050 us/op | 1.4330 us/op | 0.91 |
| mainnet_e81889 - altair processHistoricalRootsUpdate | 134.00 ns/op | 147.00 ns/op | 0.91 |
| mainnet_e81889 - altair processParticipationFlagUpdates | 430.00 ns/op | 466.00 ns/op | 0.92 |
| mainnet_e81889 - altair processSyncCommitteeUpdates | 110.00 ns/op | 106.00 ns/op | 1.04 |
| mainnet_e81889 - altair afterProcessEpoch | 42.791 ms/op | 41.691 ms/op | 1.03 |
| capella processEpoch - mainnet_e217614 | 859.48 ms/op | 1.0453 s/op | 0.82 |
| mainnet_e217614 - capella beforeProcessEpoch | 58.474 ms/op | 65.859 ms/op | 0.89 |
| mainnet_e217614 - capella processJustificationAndFinalization | 5.9520 us/op | 6.7960 us/op | 0.88 |
| mainnet_e217614 - capella processInactivityUpdates | 15.312 ms/op | 15.316 ms/op | 1.00 |
| mainnet_e217614 - capella processRewardsAndPenalties | 92.673 ms/op | 94.480 ms/op | 0.98 |
| mainnet_e217614 - capella processRegistryUpdates | 4.3750 us/op | 4.3780 us/op | 1.00 |
| mainnet_e217614 - capella processSlashings | 135.00 ns/op | 133.00 ns/op | 1.02 |
| mainnet_e217614 - capella processEth1DataReset | 131.00 ns/op | 125.00 ns/op | 1.05 |
| mainnet_e217614 - capella processEffectiveBalanceUpdates | 14.963 ms/op | 15.640 ms/op | 0.96 |
| mainnet_e217614 - capella processSlashingsReset | 677.00 ns/op | 667.00 ns/op | 1.01 |
| mainnet_e217614 - capella processRandaoMixesReset | 1.2640 us/op | 1.4500 us/op | 0.87 |
| mainnet_e217614 - capella processHistoricalRootsUpdate | 134.00 ns/op | 141.00 ns/op | 0.95 |
| mainnet_e217614 - capella processParticipationFlagUpdates | 426.00 ns/op | 460.00 ns/op | 0.93 |
| mainnet_e217614 - capella afterProcessEpoch | 109.94 ms/op | 110.17 ms/op | 1.00 |
| phase0 processEpoch - mainnet_e58758 | 309.29 ms/op | 348.44 ms/op | 0.89 |
| mainnet_e58758 - phase0 beforeProcessEpoch | 67.513 ms/op | 79.752 ms/op | 0.85 |
| mainnet_e58758 - phase0 processJustificationAndFinalization | 6.3210 us/op | 7.7320 us/op | 0.82 |
| mainnet_e58758 - phase0 processRewardsAndPenalties | 16.947 ms/op | 16.822 ms/op | 1.01 |
| mainnet_e58758 - phase0 processRegistryUpdates | 2.3060 us/op | 2.2280 us/op | 1.04 |
| mainnet_e58758 - phase0 processSlashings | 135.00 ns/op | 134.00 ns/op | 1.01 |
| mainnet_e58758 - phase0 processEth1DataReset | 133.00 ns/op | 138.00 ns/op | 0.96 |
| mainnet_e58758 - phase0 processEffectiveBalanceUpdates | 945.38 us/op | 892.15 us/op | 1.06 |
| mainnet_e58758 - phase0 processSlashingsReset | 924.00 ns/op | 937.00 ns/op | 0.99 |
| mainnet_e58758 - phase0 processRandaoMixesReset | 1.2030 us/op | 1.4220 us/op | 0.85 |
| mainnet_e58758 - phase0 processHistoricalRootsUpdate | 137.00 ns/op | 128.00 ns/op | 1.07 |
| mainnet_e58758 - phase0 processParticipationRecordUpdates | 1.1600 us/op | 1.2610 us/op | 0.92 |
| mainnet_e58758 - phase0 afterProcessEpoch | 35.031 ms/op | 31.928 ms/op | 1.10 |
| phase0 processEffectiveBalanceUpdates - 250000 normalcase | 1.0933 ms/op | 1.3118 ms/op | 0.83 |
| phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 | 1.8132 ms/op | 1.2708 ms/op | 1.43 |
| altair processInactivityUpdates - 250000 normalcase | 10.601 ms/op | 10.941 ms/op | 0.97 |
| altair processInactivityUpdates - 250000 worstcase | 11.300 ms/op | 11.137 ms/op | 1.01 |
| phase0 processRegistryUpdates - 250000 normalcase | 2.1590 us/op | 2.4350 us/op | 0.89 |
| phase0 processRegistryUpdates - 250000 badcase_full_deposits | 137.95 us/op | 149.24 us/op | 0.92 |
| phase0 processRegistryUpdates - 250000 worstcase 0.5 | 61.341 ms/op | 63.014 ms/op | 0.97 |
| altair processRewardsAndPenalties - 250000 normalcase | 15.708 ms/op | 14.527 ms/op | 1.08 |
| altair processRewardsAndPenalties - 250000 worstcase | 15.362 ms/op | 14.055 ms/op | 1.09 |
| phase0 getAttestationDeltas - 250000 normalcase | 5.3562 ms/op | 5.2127 ms/op | 1.03 |
| phase0 getAttestationDeltas - 250000 worstcase | 5.2775 ms/op | 5.2119 ms/op | 1.01 |
| phase0 processSlashings - 250000 worstcase | 62.414 us/op | 58.906 us/op | 1.06 |
| altair processSyncCommitteeUpdates - 250000 | 10.075 ms/op | 10.253 ms/op | 0.98 |
| BeaconState.hashTreeRoot - No change | 168.00 ns/op | 163.00 ns/op | 1.03 |
| BeaconState.hashTreeRoot - 1 full validator | 73.549 us/op | 79.697 us/op | 0.92 |
| BeaconState.hashTreeRoot - 32 full validator | 849.07 us/op | 895.34 us/op | 0.95 |
| BeaconState.hashTreeRoot - 512 full validator | 6.7834 ms/op | 6.5333 ms/op | 1.04 |
| BeaconState.hashTreeRoot - 1 validator.effectiveBalance | 93.683 us/op | 102.64 us/op | 0.91 |
| BeaconState.hashTreeRoot - 32 validator.effectiveBalance | 1.3876 ms/op | 1.6060 ms/op | 0.86 |
| BeaconState.hashTreeRoot - 512 validator.effectiveBalance | 14.045 ms/op | 21.680 ms/op | 0.65 |
| BeaconState.hashTreeRoot - 1 balances | 69.272 us/op | 87.470 us/op | 0.79 |
| BeaconState.hashTreeRoot - 32 balances | 735.59 us/op | 1.3806 ms/op | 0.53 |
| BeaconState.hashTreeRoot - 512 balances | 5.0001 ms/op | 5.3877 ms/op | 0.93 |
| BeaconState.hashTreeRoot - 250000 balances | 138.56 ms/op | 189.45 ms/op | 0.73 |
| aggregationBits - 2048 els - zipIndexesInBitList | 19.289 us/op | 171.20 us/op | 0.11 |
| regular array get 100000 times | 22.753 us/op | 22.220 us/op | 1.02 |
| wrappedArray get 100000 times | 22.820 us/op | 22.231 us/op | 1.03 |
| arrayWithProxy get 100000 times | 9.1624 ms/op | 9.2237 ms/op | 0.99 |
| ssz.Root.equals | 20.768 ns/op | 20.653 ns/op | 1.01 |
| byteArrayEquals | 20.273 ns/op | 20.375 ns/op | 0.99 |
| Buffer.compare | 8.4170 ns/op | 8.4980 ns/op | 0.99 |
| processSlot - 1 slots | 7.6540 us/op | 11.784 us/op | 0.65 |
| processSlot - 32 slots | 1.9184 ms/op | 2.3291 ms/op | 0.82 |
| getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei | 4.4753 ms/op | 5.7897 ms/op | 0.77 |
| getCommitteeAssignments - req 1 vs - 250000 vc | 1.5871 ms/op | 1.7258 ms/op | 0.92 |
| getCommitteeAssignments - req 100 vs - 250000 vc | 3.2763 ms/op | 3.5606 ms/op | 0.92 |
| getCommitteeAssignments - req 1000 vs - 250000 vc | 3.4942 ms/op | 3.8431 ms/op | 0.91 |
| findModifiedValidators - 10000 modified validators | 602.36 ms/op | 690.35 ms/op | 0.87 |
| findModifiedValidators - 1000 modified validators | 413.33 ms/op | 455.50 ms/op | 0.91 |
| findModifiedValidators - 100 modified validators | 288.51 ms/op | 311.51 ms/op | 0.93 |
| findModifiedValidators - 10 modified validators | 216.27 ms/op | 242.61 ms/op | 0.89 |
| findModifiedValidators - 1 modified validators | 153.77 ms/op | 260.38 ms/op | 0.59 |
| findModifiedValidators - no difference | 174.21 ms/op | 182.26 ms/op | 0.96 |
| migrate state 1500000 validators, 3400 modified, 2000 new | 2.6580 s/op | 3.8336 s/op | 0.69 |
| RootCache.getBlockRootAtSlot - 250000 vs - 7PWei | 3.5500 ns/op | 3.7400 ns/op | 0.95 |
| state getBlockRootAtSlot - 250000 vs - 7PWei | 332.47 ns/op | 284.76 ns/op | 1.17 |
| computeProposerIndex 100000 validators | 1.2905 ms/op | 1.3727 ms/op | 0.94 |
| getNextSyncCommitteeIndices 1000 validators | 2.7308 ms/op | 2.9330 ms/op | 0.93 |
| getNextSyncCommitteeIndices 10000 validators | 23.952 ms/op | 26.064 ms/op | 0.92 |
| getNextSyncCommitteeIndices 100000 validators | 83.272 ms/op | 90.993 ms/op | 0.92 |
| computeProposers - vc 250000 | 529.09 us/op | 555.38 us/op | 0.95 |
| computeEpochShuffling - vc 250000 | 37.914 ms/op | 41.095 ms/op | 0.92 |
| getNextSyncCommittee - vc 250000 | 9.0081 ms/op | 9.8053 ms/op | 0.92 |
| nodejs block root to RootHex using toHex | 87.709 ns/op | 100.57 ns/op | 0.87 |
| nodejs block root to RootHex using toRootHex | 53.828 ns/op | 61.104 ns/op | 0.88 |
| nodejs fromHex(blob) | 711.53 us/op | 834.10 us/op | 0.85 |
| nodejs fromHexInto(blob) | 594.98 us/op | 596.53 us/op | 1.00 |
| nodejs block root to RootHex using the deprecated toHexString | 461.52 ns/op | 528.77 ns/op | 0.87 |
| nodejs byteArrayEquals 32 bytes (block root) | 24.875 ns/op | 24.863 ns/op | 1.00 |
| nodejs byteArrayEquals 48 bytes (pubkey) | 35.934 ns/op | 35.894 ns/op | 1.00 |
| nodejs byteArrayEquals 96 bytes (signature) | 32.063 ns/op | 32.475 ns/op | 0.99 |
| nodejs byteArrayEquals 1024 bytes | 38.461 ns/op | 38.339 ns/op | 1.00 |
| nodejs byteArrayEquals 131072 bytes (blob) | 1.6739 us/op | 1.6777 us/op | 1.00 |
| browser block root to RootHex using toHex | 137.80 ns/op | 137.70 ns/op | 1.00 |
| browser block root to RootHex using toRootHex | 123.73 ns/op | 123.60 ns/op | 1.00 |
| browser fromHex(blob) | 1.4270 ms/op | 1.5983 ms/op | 0.89 |
| browser fromHexInto(blob) | 606.19 us/op | 595.64 us/op | 1.02 |
| browser block root to RootHex using the deprecated toHexString | 467.88 ns/op | 517.65 ns/op | 0.90 |
| browser byteArrayEquals 32 bytes (block root) | 27.411 ns/op | 26.581 ns/op | 1.03 |
| browser byteArrayEquals 48 bytes (pubkey) | 38.443 ns/op | 37.773 ns/op | 1.02 |
| browser byteArrayEquals 96 bytes (signature) | 72.442 ns/op | 70.317 ns/op | 1.03 |
| browser byteArrayEquals 1024 bytes | 735.03 ns/op | 718.35 ns/op | 1.02 |
| browser byteArrayEquals 131072 bytes (blob) | 92.662 us/op | 91.566 us/op | 1.01 |
by benchmarkbot/action
|
found this in the e2e https://github.com/ChainSafe/lodestar/actions/runs/26099502380/job/76750258577?pr=9383 |
Resolved in #9380 |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## unstable #9383 +/- ##
=========================================
Coverage 52.55% 52.55%
=========================================
Files 848 848
Lines 60950 60950
Branches 4487 4487
=========================================
Hits 32034 32034
Misses 28854 28854
Partials 62 62 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: be04b1fc0d
ℹ️ 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".
| })(); | ||
|
|
||
| const pref = dependentRootHex !== null ? chain.proposerPreferencesPool.get(prepareSlot, dependentRootHex) : null; | ||
| return Number(pref ? pref.message.targetGasLimit : state.latestExecutionPayloadBid.gasLimit); |
There was a problem hiding this comment.
Derive fallback target gas limit from parent payload
When no proposer preferences are found, this fallback uses state.latestExecutionPayloadBid.gasLimit, but that field is the previous block’s bid gas limit, not necessarily the latest executed payload gas limit. In Gloas, latestExecutionPayloadBid is overwritten for every block (including EMPTY-parent cases), so after an EMPTY block with a custom proposer target, the next slot can inherit that target even though no payload changed, violating the stated “keep parent payload gas limit unchanged” behavior and producing incorrect targetGasLimit in PayloadAttributesV4.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
we need to come up with chain.targetGasLimit option
Prysm has something like DefaultBuilderGasLimit for that
|
confirmed that participants_matrix:
el:
- el_type: ethrex
el_image: ethpandaops/ethrex:glamsterdam-devnet-4
el_extra_params:
- --http.api=eth,net,web3,admin # workaround for kurtosis enode probe, see https://github.com/ethpandaops/ethereum-package/pull/1392
cl:
- cl_type: prysm
cl_image: ethpandaops/prysm-beacon-chain:glamsterdam-devnet-4-tmp
vc_type: prysm
vc_image: ethpandaops/prysm-validator:glamsterdam-devnet-4-tmp
- cl_type: lighthouse
cl_image: ethpandaops/lighthouse:glamsterdam-devnet-4
- cl_type: lodestar
cl_image: te:v1.7.0_alpha.8
count: 1
network_params:
gloas_fork_epoch: 1
withdrawal_type: "0x01"
seconds_per_slot: 6
validator_balance: 40000
genesis_gaslimit: 150000000
gas_limit: 150000000
additional_services:
- dora
- assertoor
- spamoor
- checkpointz
spamoor_params:
image: ethpandaops/spamoor:master
assertoor_params:
run_stability_check: false
run_block_proposal_check: false
tests:
- { file: "https://raw.githubusercontent.com/ethpandaops/assertoor/refs/heads/master/playbooks/gloas-dev/builder-lifecycle.yaml" }
snooper_enabled: false
global_log_level: debug
port_publisher:
additional_services:
enabled: true
checkpointz_params:
image: ethpandaops/checkpointz:gloas-latest |
|
🎉 This PR is included in v1.44.0 🎉 |
Motivation
Upgrade Lodestar to the
v1.7.0-alpha.8following #9375What's changed since #9375
PAYLOAD_DUE_BPSinstead ofPAYLOAD_ATTESTATION_DUE_BPSDetailed Description
spec-tests-version.jsontov1.7.0-alpha.8and apply the matchingspecrefs/*updates.MIN_BUILDER_WITHDRAWABILITY_DELAY64 → 8192; addPAYLOAD_DUE_BPS(mainnet/minimal/types + validator critical params).targetGasLimittoPayloadAttributes(SSZ, execution-enginePayloadAttributes/RPC + serialize/deserialize).ProposerPreferences.gasLimit → targetGasLimit(alpha.8) and update the unstable-only consumers not present on the feat: upgrade to alpha.8 spec #9375 branch:validatorStore.signProposerPreferences, gossipvalidateExecutionPayloadBid, and test/event fixtures. The gossip bid-validation rule keeps strict equality (rename only);is_gas_limit_target_compatibleis a separate follow-up.upgradeStateToGloas: setlatestExecutionPayloadBid.gasLimitfrom the Fulu header and bump the spec-comment URL. The existingonboardBuildersFromPendingDepositsis already spec-equivalent and is left as-is; the previously-skippedfork_invalid_validator_deposit_followed_by_builder_credentialsspec test is re-enabled and passes.produceBlockBody: resolve the Gloas payload-attributestargetGasLimitfrom theProposerPreferencesPool(same(slot, dependent_root)lookup as bid validation), falling back to the parent payload gas limit when no preferences are pooled. Addresses the feat: upgrade to alpha.8 spec #9375 review note that the builder-registration source was incorrect.getPayloadDueMs()toforkConfig(specget_payload_due_ms,PAYLOAD_DUE_BPS) and gateproducePayloadAttestationData'spayloadPresenton the execution payload envelope being seen before that deadline (uses the envelope's own arrival time). Addresses the feat: upgrade to alpha.8 spec #9375 review note about usingPAYLOAD_DUE_BPSinstead ofPAYLOAD_ATTESTATION_DUE_BPS.gloas/fork_choice/on_payload_attestation_messagespec suite (PTC fork choice not yet implemented).AI Assistance Disclosure
Used Claude Code to port and adapt the changes, address the PR review comments, and run verification.
🤖 Generated with Claude Code