feat: implement gloas builder api - #9832
Conversation
|
| Benchmark suite | Current: d5ce6e5 | Previous: 9f5d083 | Ratio |
|---|---|---|---|
| proposeBlockBody type=full, size=empty | 3.6629 ms/op | 736.92 us/op | 4.97 |
Full benchmark results
| Benchmark suite | Current: d5ce6e5 | Previous: 9f5d083 | Ratio |
|---|---|---|---|
| getPubkeys - native cache - req 1000 vs - 250000 vc | 580.07 us/op | 464.86 us/op | 1.25 |
| getPubkeys - validatorsArr - req 1000 vs - 250000 vc | 45.501 us/op | 41.158 us/op | 1.11 |
| BLS verify - blst | 903.95 us/op | 902.45 us/op | 1.00 |
| BLS verifyMultipleSignatures 3 - blst | 1.3471 ms/op | 1.3934 ms/op | 0.97 |
| BLS verifyMultipleSignatures 8 - blst | 2.2449 ms/op | 2.3047 ms/op | 0.97 |
| BLS verifyMultipleSignatures 32 - blst | 7.4207 ms/op | 7.6127 ms/op | 0.97 |
| BLS verifyMultipleSignatures 64 - blst | 14.248 ms/op | 14.707 ms/op | 0.97 |
| BLS verifyMultipleSignatures 128 - blst | 26.949 ms/op | 27.718 ms/op | 0.97 |
| BLS deserializing 10000 signatures | 646.51 ms/op | 654.62 ms/op | 0.99 |
| BLS deserializing 100000 signatures | 6.4025 s/op | 6.6017 s/op | 0.97 |
| BLS verifyMultipleSignatures - same message - 3 - blst | 929.31 us/op | 960.26 us/op | 0.97 |
| BLS verifyMultipleSignatures - same message - 8 - blst | 1.0470 ms/op | 1.0926 ms/op | 0.96 |
| BLS verifyMultipleSignatures - same message - 32 - blst | 1.6830 ms/op | 1.7204 ms/op | 0.98 |
| BLS verifyMultipleSignatures - same message - 64 - blst | 2.4896 ms/op | 2.5648 ms/op | 0.97 |
| BLS verifyMultipleSignatures - same message - 128 - blst | 4.0698 ms/op | 4.2297 ms/op | 0.96 |
| BLS aggregatePubkeys 32 - blst | 18.970 us/op | 19.697 us/op | 0.96 |
| BLS aggregatePubkeys 128 - blst | 69.087 us/op | 70.998 us/op | 0.97 |
| getSlashingsAndExits - default max | 49.747 us/op | 42.385 us/op | 1.17 |
| getSlashingsAndExits - 2k | 391.09 us/op | 396.79 us/op | 0.99 |
| proposeBlockBody type=full, size=empty | 3.6629 ms/op | 736.92 us/op | 4.97 |
| isKnown best case - 1 super set check | 166.00 ns/op | 168.00 ns/op | 0.99 |
| isKnown normal case - 2 super set checks | 158.00 ns/op | 167.00 ns/op | 0.95 |
| isKnown worse case - 16 super set checks | 158.00 ns/op | 165.00 ns/op | 0.96 |
| validate api signedAggregateAndProof - struct | 1.4481 ms/op | 1.5512 ms/op | 0.93 |
| validate gossip signedAggregateAndProof - struct | 1.4467 ms/op | 1.5499 ms/op | 0.93 |
| batch validate gossip attestation - vc 640000 - chunk 32 | 128.43 us/op | 130.44 us/op | 0.98 |
| batch validate gossip attestation - vc 640000 - chunk 64 | 110.24 us/op | 111.95 us/op | 0.98 |
| batch validate gossip attestation - vc 640000 - chunk 128 | 98.135 us/op | 101.94 us/op | 0.96 |
| batch validate gossip attestation - vc 640000 - chunk 256 | 100.76 us/op | 106.40 us/op | 0.95 |
| bytes32 toHexString | 274.00 ns/op | 297.00 ns/op | 0.92 |
| bytes32 Buffer.toString(hex) | 159.00 ns/op | 172.00 ns/op | 0.92 |
| bytes32 Buffer.toString(hex) from Uint8Array | 230.00 ns/op | 251.00 ns/op | 0.92 |
| bytes32 Buffer.toString(hex) + 0x | 158.00 ns/op | 177.00 ns/op | 0.89 |
| Return object 10000 times | 0.20640 ns/op | 0.21740 ns/op | 0.95 |
| Throw Error 10000 times | 3.3716 us/op | 3.4295 us/op | 0.98 |
| toHex | 106.72 ns/op | 98.409 ns/op | 1.08 |
| Buffer.from | 93.340 ns/op | 89.099 ns/op | 1.05 |
| shared Buffer | 60.073 ns/op | 63.247 ns/op | 0.95 |
| fastMsgIdFn sha256 / 200 bytes | 1.5160 us/op | 1.5160 us/op | 1.00 |
| fastMsgIdFn h32 xxhash / 200 bytes | 162.00 ns/op | 166.00 ns/op | 0.98 |
| fastMsgIdFn h64 xxhash / 200 bytes | 200.00 ns/op | 218.00 ns/op | 0.92 |
| fastMsgIdFn sha256 / 1000 bytes | 4.7850 us/op | 4.8150 us/op | 0.99 |
| fastMsgIdFn h32 xxhash / 1000 bytes | 252.00 ns/op | 260.00 ns/op | 0.97 |
| fastMsgIdFn h64 xxhash / 1000 bytes | 249.00 ns/op | 274.00 ns/op | 0.91 |
| fastMsgIdFn sha256 / 10000 bytes | 41.359 us/op | 42.532 us/op | 0.97 |
| fastMsgIdFn h32 xxhash / 10000 bytes | 1.2430 us/op | 1.3230 us/op | 0.94 |
| fastMsgIdFn h64 xxhash / 10000 bytes | 807.00 ns/op | 860.00 ns/op | 0.94 |
| send data - 1000 256B messages | 4.4733 ms/op | 4.2478 ms/op | 1.05 |
| send data - 1000 512B messages | 5.8097 ms/op | 5.3707 ms/op | 1.08 |
| send data - 1000 1024B messages | 5.7324 ms/op | 6.3268 ms/op | 0.91 |
| send data - 1000 1200B messages | 7.7506 ms/op | 6.2313 ms/op | 1.24 |
| send data - 1000 2048B messages | 20.928 ms/op | 12.864 ms/op | 1.63 |
| send data - 1000 4096B messages | 58.424 ms/op | 114.13 ms/op | 0.51 |
| send data - 1000 16384B messages | 507.43 ms/op | 496.89 ms/op | 1.02 |
| send data - 1000 65536B messages | 1.9685 s/op | 2.1477 s/op | 0.92 |
| enrSubnets - fastDeserialize 64 bits | 819.00 ns/op | 764.00 ns/op | 1.07 |
| enrSubnets - ssz BitVector 64 bits | 267.00 ns/op | 274.00 ns/op | 0.97 |
| enrSubnets - fastDeserialize 4 bits | 105.00 ns/op | 102.00 ns/op | 1.03 |
| enrSubnets - ssz BitVector 4 bits | 264.00 ns/op | 280.00 ns/op | 0.94 |
| prioritizePeers score -10:0 att 32-0.1 sync 2-0 | 200.14 us/op | 211.79 us/op | 0.94 |
| prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 | 229.43 us/op | 245.42 us/op | 0.93 |
| prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 | 332.85 us/op | 350.96 us/op | 0.95 |
| prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 | 592.21 us/op | 620.00 us/op | 0.96 |
| prioritizePeers score 0:0 att 64-1 sync 4-1 | 693.37 us/op | 719.04 us/op | 0.96 |
| array of 16000 items push then shift | 1.2620 us/op | 1.3392 us/op | 0.94 |
| LinkedList of 16000 items push then shift | 7.8320 ns/op | 7.4260 ns/op | 1.05 |
| array of 16000 items push then pop | 78.095 ns/op | 83.997 ns/op | 0.93 |
| LinkedList of 16000 items push then pop | 5.8530 ns/op | 6.3800 ns/op | 0.92 |
| array of 24000 items push then shift | 1.8166 us/op | 1.9928 us/op | 0.91 |
| LinkedList of 24000 items push then shift | 6.9370 ns/op | 7.5070 ns/op | 0.92 |
| array of 24000 items push then pop | 110.94 ns/op | 118.47 ns/op | 0.94 |
| LinkedList of 24000 items push then pop | 5.8330 ns/op | 6.2480 ns/op | 0.93 |
| intersect bitArray bitLen 8 | 3.7910 ns/op | 3.9830 ns/op | 0.95 |
| intersect array and set length 8 | 28.337 ns/op | 30.664 ns/op | 0.92 |
| intersect bitArray bitLen 128 | 22.736 ns/op | 24.142 ns/op | 0.94 |
| intersect array and set length 128 | 493.61 ns/op | 513.37 ns/op | 0.96 |
| bitArray.getTrueBitIndexes() bitLen 128 | 944.00 ns/op | 957.00 ns/op | 0.99 |
| bitArray.getTrueBitIndexes() bitLen 248 | 1.6950 us/op | 1.7180 us/op | 0.99 |
| bitArray.getTrueBitIndexes() bitLen 512 | 3.6530 us/op | 3.6810 us/op | 0.99 |
| Full columns - reconstruct all 6 blobs | 126.47 us/op | 150.19 us/op | 0.84 |
| Full columns - reconstruct half of the blobs out of 6 | 84.328 us/op | 93.455 us/op | 0.90 |
| Full columns - reconstruct single blob out of 6 | 32.096 us/op | 34.814 us/op | 0.92 |
| Half columns - reconstruct all 6 blobs | 382.54 ms/op | 404.50 ms/op | 0.95 |
| Half columns - reconstruct half of the blobs out of 6 | 189.69 ms/op | 202.77 ms/op | 0.94 |
| Half columns - reconstruct single blob out of 6 | 68.218 ms/op | 73.036 ms/op | 0.93 |
| Set add up to 64 items then delete first | 1.6089 us/op | 1.7009 us/op | 0.95 |
| OrderedSet add up to 64 items then delete first | 2.4566 us/op | 2.5976 us/op | 0.95 |
| Set add up to 64 items then delete last | 1.7924 us/op | 1.8905 us/op | 0.95 |
| OrderedSet add up to 64 items then delete last | 2.6906 us/op | 2.9574 us/op | 0.91 |
| Set add up to 64 items then delete middle | 1.7964 us/op | 1.9062 us/op | 0.94 |
| OrderedSet add up to 64 items then delete middle | 4.1035 us/op | 4.4884 us/op | 0.91 |
| Set add up to 128 items then delete first | 3.5982 us/op | 3.6977 us/op | 0.97 |
| OrderedSet add up to 128 items then delete first | 5.5030 us/op | 5.5473 us/op | 0.99 |
| Set add up to 128 items then delete last | 3.4268 us/op | 3.6680 us/op | 0.93 |
| OrderedSet add up to 128 items then delete last | 5.1463 us/op | 5.7497 us/op | 0.90 |
| Set add up to 128 items then delete middle | 3.4490 us/op | 3.6781 us/op | 0.94 |
| OrderedSet add up to 128 items then delete middle | 10.955 us/op | 11.847 us/op | 0.92 |
| Set add up to 256 items then delete first | 7.1925 us/op | 7.3561 us/op | 0.98 |
| OrderedSet add up to 256 items then delete first | 12.028 us/op | 12.055 us/op | 1.00 |
| Set add up to 256 items then delete last | 7.5553 us/op | 7.3415 us/op | 1.03 |
| OrderedSet add up to 256 items then delete last | 11.757 us/op | 12.319 us/op | 0.95 |
| Set add up to 256 items then delete middle | 6.9289 us/op | 7.3457 us/op | 0.94 |
| OrderedSet add up to 256 items then delete middle | 34.331 us/op | 36.994 us/op | 0.93 |
| runFastConfirmationRules vc:100000 bc:96 eq:0 | 4.5503 ms/op | 4.7246 ms/op | 0.96 |
| runFastConfirmationRules vc:600000 bc:96 eq:0 | 37.782 ms/op | 40.404 ms/op | 0.94 |
| runFastConfirmationRules vc:1000000 bc:96 eq:0 | 63.386 ms/op | 64.912 ms/op | 0.98 |
| runFastConfirmationRules vc:600000 bc:320 eq:0 | 39.907 ms/op | 39.886 ms/op | 1.00 |
| runFastConfirmationRules vc:100000 bc:96 eq:1000 | 1.1335 s/op | 1.1825 s/op | 0.96 |
| pass gossip attestations to forkchoice per slot | 2.9151 ms/op | 2.6568 ms/op | 1.10 |
| forkChoice updateHead vc 100000 bc 64 eq 0 | 409.83 us/op | 430.23 us/op | 0.95 |
| forkChoice updateHead vc 600000 bc 64 eq 0 | 2.4668 ms/op | 2.5632 ms/op | 0.96 |
| forkChoice updateHead vc 1000000 bc 64 eq 0 | 4.0396 ms/op | 4.3766 ms/op | 0.92 |
| forkChoice updateHead vc 600000 bc 320 eq 0 | 2.4602 ms/op | 2.5796 ms/op | 0.95 |
| forkChoice updateHead vc 600000 bc 1200 eq 0 | 2.5026 ms/op | 2.6681 ms/op | 0.94 |
| forkChoice updateHead vc 600000 bc 7200 eq 0 | 3.8451 ms/op | 3.5348 ms/op | 1.09 |
| forkChoice updateHead vc 600000 bc 64 eq 1000 | 2.4486 ms/op | 2.6813 ms/op | 0.91 |
| forkChoice updateHead vc 600000 bc 64 eq 10000 | 2.5391 ms/op | 2.7615 ms/op | 0.92 |
| forkChoice updateHead vc 600000 bc 64 eq 300000 | 7.0423 ms/op | 7.3337 ms/op | 0.96 |
| computeDeltas 1400000 validators 0% inactive | 11.979 ms/op | 13.134 ms/op | 0.91 |
| computeDeltas 1400000 validators 10% inactive | 11.382 ms/op | 12.408 ms/op | 0.92 |
| computeDeltas 1400000 validators 20% inactive | 10.660 ms/op | 11.810 ms/op | 0.90 |
| computeDeltas 1400000 validators 50% inactive | 8.7636 ms/op | 9.3786 ms/op | 0.93 |
| computeDeltas 2100000 validators 0% inactive | 18.055 ms/op | 20.056 ms/op | 0.90 |
| computeDeltas 2100000 validators 10% inactive | 17.167 ms/op | 19.048 ms/op | 0.90 |
| computeDeltas 2100000 validators 20% inactive | 16.151 ms/op | 17.684 ms/op | 0.91 |
| computeDeltas 2100000 validators 50% inactive | 10.572 ms/op | 14.110 ms/op | 0.75 |
| altair processAttestation - 250000 vs - 7PWei normalcase | 2.5277 ms/op | 2.3420 ms/op | 1.08 |
| altair processAttestation - 250000 vs - 7PWei worstcase | 4.0315 ms/op | 2.8821 ms/op | 1.40 |
| altair processAttestation - setStatus - 1/6 committees join | 100.38 us/op | 107.10 us/op | 0.94 |
| altair processAttestation - setStatus - 1/3 committees join | 195.91 us/op | 207.70 us/op | 0.94 |
| altair processAttestation - setStatus - 1/2 committees join | 279.29 us/op | 297.70 us/op | 0.94 |
| altair processAttestation - setStatus - 2/3 committees join | 365.16 us/op | 383.37 us/op | 0.95 |
| altair processAttestation - setStatus - 4/5 committees join | 535.33 us/op | 542.76 us/op | 0.99 |
| altair processAttestation - setStatus - 100% committees join | 639.67 us/op | 635.88 us/op | 1.01 |
| altair processBlock - 250000 vs - 7PWei normalcase | 6.0933 ms/op | 5.0584 ms/op | 1.20 |
| altair processBlock - 250000 vs - 7PWei normalcase hashState | 25.618 ms/op | 22.990 ms/op | 1.11 |
| altair processBlock - 250000 vs - 7PWei worstcase | 33.434 ms/op | 27.099 ms/op | 1.23 |
| altair processBlock - 250000 vs - 7PWei worstcase hashState | 69.363 ms/op | 59.432 ms/op | 1.17 |
| phase0 processBlock - 250000 vs - 7PWei normalcase | 1.7447 ms/op | 1.3442 ms/op | 1.30 |
| phase0 processBlock - 250000 vs - 7PWei worstcase | 22.900 ms/op | 21.583 ms/op | 1.06 |
| altair processEth1Data - 250000 vs - 7PWei normalcase | 335.23 us/op | 310.19 us/op | 1.08 |
| getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 | 3.4830 us/op | 3.1710 us/op | 1.10 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 | 20.814 us/op | 20.169 us/op | 1.03 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 | 5.8300 us/op | 5.7420 us/op | 1.02 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 | 3.8080 us/op | 3.6320 us/op | 1.05 |
| getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 | 87.125 us/op | 90.178 us/op | 0.97 |
| getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 | 1.4329 ms/op | 1.4725 ms/op | 0.97 |
| getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 | 2.0303 ms/op | 1.9332 ms/op | 1.05 |
| getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 | 2.3128 ms/op | 1.9399 ms/op | 1.19 |
| getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 | 7.9766 ms/op | 3.8881 ms/op | 2.05 |
| getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 | 2.8296 ms/op | 2.1473 ms/op | 1.32 |
| getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 | 9.5317 ms/op | 4.2304 ms/op | 2.25 |
| Tree 40 250000 create | 432.50 ms/op | 359.73 ms/op | 1.20 |
| Tree 40 250000 get(125000) | 93.637 ns/op | 99.744 ns/op | 0.94 |
| Tree 40 250000 set(125000) | 1.1838 us/op | 1.0447 us/op | 1.13 |
| Tree 40 250000 toArray() | 39.906 ms/op | 17.194 ms/op | 2.32 |
| Tree 40 250000 iterate all - toArray() + loop | 45.113 ms/op | 15.974 ms/op | 2.82 |
| Tree 40 250000 iterate all - get(i) | 51.483 ms/op | 42.839 ms/op | 1.20 |
| Array 250000 create | 3.3298 ms/op | 2.5939 ms/op | 1.28 |
| Array 250000 clone - spread | 975.28 us/op | 803.43 us/op | 1.21 |
| Array 250000 get(125000) | 0.47800 ns/op | 0.29600 ns/op | 1.61 |
| Array 250000 set(125000) | 0.41100 ns/op | 0.30200 ns/op | 1.36 |
| Array 250000 iterate all - loop | 58.046 us/op | 58.441 us/op | 0.99 |
| phase0 afterProcessEpoch - 250000 vs - 7PWei | 40.042 ms/op | 66.343 ms/op | 0.60 |
| Array.fill - length 1000000 | 4.7494 ms/op | 4.3490 ms/op | 1.09 |
| Array push - length 1000000 | 21.304 ms/op | 16.095 ms/op | 1.32 |
| Array.get | 0.21017 ns/op | 0.21388 ns/op | 0.98 |
| Uint8Array.get | 0.22918 ns/op | 0.26085 ns/op | 0.88 |
| phase0 beforeProcessEpoch - 250000 vs - 7PWei | 27.354 ms/op | 19.227 ms/op | 1.42 |
| altair processEpoch - mainnet_e81889 | 268.05 ms/op | 243.69 ms/op | 1.10 |
| mainnet_e81889 - altair beforeProcessEpoch | 41.595 ms/op | 41.220 ms/op | 1.01 |
| mainnet_e81889 - altair processJustificationAndFinalization | 5.6620 us/op | 4.5020 us/op | 1.26 |
| mainnet_e81889 - altair processInactivityUpdates | 3.5794 ms/op | 5.2404 ms/op | 0.68 |
| mainnet_e81889 - altair processRewardsAndPenalties | 22.734 ms/op | 19.091 ms/op | 1.19 |
| mainnet_e81889 - altair processRegistryUpdates | 640.00 ns/op | 579.00 ns/op | 1.11 |
| mainnet_e81889 - altair processSlashings | 149.00 ns/op | 148.00 ns/op | 1.01 |
| mainnet_e81889 - altair processEth1DataReset | 207.00 ns/op | 145.00 ns/op | 1.43 |
| mainnet_e81889 - altair processEffectiveBalanceUpdates | 2.8421 ms/op | 1.2071 ms/op | 2.35 |
| mainnet_e81889 - altair processSlashingsReset | 756.00 ns/op | 710.00 ns/op | 1.06 |
| mainnet_e81889 - altair processRandaoMixesReset | 1.2440 us/op | 969.00 ns/op | 1.28 |
| mainnet_e81889 - altair processHistoricalRootsUpdate | 209.00 ns/op | 145.00 ns/op | 1.44 |
| mainnet_e81889 - altair processParticipationFlagUpdates | 729.00 ns/op | 456.00 ns/op | 1.60 |
| mainnet_e81889 - altair processSyncCommitteeUpdates | 135.00 ns/op | 122.00 ns/op | 1.11 |
| mainnet_e81889 - altair afterProcessEpoch | 41.087 ms/op | 43.121 ms/op | 0.95 |
| capella processEpoch - mainnet_e217614 | 847.51 ms/op | 750.60 ms/op | 1.13 |
| mainnet_e217614 - capella beforeProcessEpoch | 80.098 ms/op | 64.247 ms/op | 1.25 |
| mainnet_e217614 - capella processJustificationAndFinalization | 7.0830 us/op | 4.8600 us/op | 1.46 |
| mainnet_e217614 - capella processInactivityUpdates | 20.990 ms/op | 16.505 ms/op | 1.27 |
| mainnet_e217614 - capella processRewardsAndPenalties | 105.53 ms/op | 100.33 ms/op | 1.05 |
| mainnet_e217614 - capella processRegistryUpdates | 4.5930 us/op | 4.6450 us/op | 0.99 |
| mainnet_e217614 - capella processSlashings | 156.00 ns/op | 152.00 ns/op | 1.03 |
| mainnet_e217614 - capella processEth1DataReset | 147.00 ns/op | 145.00 ns/op | 1.01 |
| mainnet_e217614 - capella processEffectiveBalanceUpdates | 22.182 ms/op | 13.816 ms/op | 1.61 |
| mainnet_e217614 - capella processSlashingsReset | 709.00 ns/op | 695.00 ns/op | 1.02 |
| mainnet_e217614 - capella processRandaoMixesReset | 1.0650 us/op | 958.00 ns/op | 1.11 |
| mainnet_e217614 - capella processHistoricalRootsUpdate | 151.00 ns/op | 145.00 ns/op | 1.04 |
| mainnet_e217614 - capella processParticipationFlagUpdates | 508.00 ns/op | 467.00 ns/op | 1.09 |
| mainnet_e217614 - capella afterProcessEpoch | 113.05 ms/op | 115.49 ms/op | 0.98 |
| phase0 processEpoch - mainnet_e58758 | 323.85 ms/op | 230.04 ms/op | 1.41 |
| mainnet_e58758 - phase0 beforeProcessEpoch | 95.243 ms/op | 53.142 ms/op | 1.79 |
| mainnet_e58758 - phase0 processJustificationAndFinalization | 10.266 us/op | 4.8710 us/op | 2.11 |
| mainnet_e58758 - phase0 processRewardsAndPenalties | 21.621 ms/op | 18.185 ms/op | 1.19 |
| mainnet_e58758 - phase0 processRegistryUpdates | 3.5780 us/op | 2.3060 us/op | 1.55 |
| mainnet_e58758 - phase0 processSlashings | 214.00 ns/op | 153.00 ns/op | 1.40 |
| mainnet_e58758 - phase0 processEth1DataReset | 328.00 ns/op | 145.00 ns/op | 2.26 |
| mainnet_e58758 - phase0 processEffectiveBalanceUpdates | 833.92 us/op | 841.00 us/op | 0.99 |
| mainnet_e58758 - phase0 processSlashingsReset | 1.6570 us/op | 1.4120 us/op | 1.17 |
| mainnet_e58758 - phase0 processRandaoMixesReset | 1.7360 us/op | 1.0130 us/op | 1.71 |
| mainnet_e58758 - phase0 processHistoricalRootsUpdate | 274.00 ns/op | 147.00 ns/op | 1.86 |
| mainnet_e58758 - phase0 processParticipationRecordUpdates | 1.9570 us/op | 989.00 ns/op | 1.98 |
| mainnet_e58758 - phase0 afterProcessEpoch | 33.905 ms/op | 34.478 ms/op | 0.98 |
| phase0 processEffectiveBalanceUpdates - 250000 normalcase | 1.0175 ms/op | 1.4542 ms/op | 0.70 |
| phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 | 1.6461 ms/op | 1.6435 ms/op | 1.00 |
| altair processInactivityUpdates - 250000 normalcase | 15.040 ms/op | 11.700 ms/op | 1.29 |
| altair processInactivityUpdates - 250000 worstcase | 16.828 ms/op | 11.022 ms/op | 1.53 |
| phase0 processRegistryUpdates - 250000 normalcase | 3.2000 us/op | 2.3680 us/op | 1.35 |
| phase0 processRegistryUpdates - 250000 badcase_full_deposits | 226.13 us/op | 148.81 us/op | 1.52 |
| phase0 processRegistryUpdates - 250000 worstcase 0.5 | 90.741 ms/op | 68.454 ms/op | 1.33 |
| altair processRewardsAndPenalties - 250000 normalcase | 17.631 ms/op | 16.720 ms/op | 1.05 |
| altair processRewardsAndPenalties - 250000 worstcase | 16.483 ms/op | 16.018 ms/op | 1.03 |
| phase0 getAttestationDeltas - 250000 normalcase | 5.7699 ms/op | 5.8307 ms/op | 0.99 |
| phase0 getAttestationDeltas - 250000 worstcase | 5.8120 ms/op | 5.9224 ms/op | 0.98 |
| phase0 processSlashings - 250000 worstcase | 66.057 us/op | 64.023 us/op | 1.03 |
| altair processSyncCommitteeUpdates - 250000 | 12.150 ms/op | 13.942 ms/op | 0.87 |
| BeaconState.hashTreeRoot - No change | 190.00 ns/op | 193.00 ns/op | 0.98 |
| BeaconState.hashTreeRoot - 1 full validator | 85.585 us/op | 77.856 us/op | 1.10 |
| BeaconState.hashTreeRoot - 32 full validator | 836.22 us/op | 818.25 us/op | 1.02 |
| BeaconState.hashTreeRoot - 512 full validator | 9.5932 ms/op | 9.2527 ms/op | 1.04 |
| BeaconState.hashTreeRoot - 1 validator.effectiveBalance | 112.04 us/op | 101.52 us/op | 1.10 |
| BeaconState.hashTreeRoot - 32 validator.effectiveBalance | 1.5868 ms/op | 1.4741 ms/op | 1.08 |
| BeaconState.hashTreeRoot - 512 validator.effectiveBalance | 24.327 ms/op | 17.675 ms/op | 1.38 |
| BeaconState.hashTreeRoot - 1 balances | 86.357 us/op | 77.994 us/op | 1.11 |
| BeaconState.hashTreeRoot - 32 balances | 742.78 us/op | 787.56 us/op | 0.94 |
| BeaconState.hashTreeRoot - 512 balances | 8.1657 ms/op | 6.4392 ms/op | 1.27 |
| BeaconState.hashTreeRoot - 250000 balances | 130.90 ms/op | 134.20 ms/op | 0.98 |
| aggregationBits - 2048 els - zipIndexesInBitList | 22.713 us/op | 20.684 us/op | 1.10 |
| regular array get 100000 times | 23.254 us/op | 23.582 us/op | 0.99 |
| wrappedArray get 100000 times | 23.208 us/op | 23.510 us/op | 0.99 |
| arrayWithProxy get 100000 times | 9.7373 ms/op | 10.573 ms/op | 0.92 |
| ssz.Root.equals | 21.634 ns/op | 21.820 ns/op | 0.99 |
| byteArrayEquals | 21.262 ns/op | 21.560 ns/op | 0.99 |
| Buffer.compare | 8.8660 ns/op | 9.0400 ns/op | 0.98 |
| processSlot - 1 slots | 10.883 us/op | 10.132 us/op | 1.07 |
| processSlot - 32 slots | 2.3638 ms/op | 2.1353 ms/op | 1.11 |
| getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei | 5.3194 ms/op | 3.6818 ms/op | 1.44 |
| getCommitteeAssignments - req 1 vs - 250000 vc | 1.6954 ms/op | 1.7136 ms/op | 0.99 |
| getCommitteeAssignments - req 100 vs - 250000 vc | 3.4347 ms/op | 3.4562 ms/op | 0.99 |
| getCommitteeAssignments - req 1000 vs - 250000 vc | 3.7020 ms/op | 3.7379 ms/op | 0.99 |
| findModifiedValidators - 10000 modified validators | 924.06 ms/op | 751.23 ms/op | 1.23 |
| findModifiedValidators - 1000 modified validators | 566.74 ms/op | 577.05 ms/op | 0.98 |
| findModifiedValidators - 100 modified validators | 504.79 ms/op | 362.72 ms/op | 1.39 |
| findModifiedValidators - 10 modified validators | 321.65 ms/op | 286.09 ms/op | 1.12 |
| findModifiedValidators - 1 modified validators | 250.81 ms/op | 285.61 ms/op | 0.88 |
| findModifiedValidators - no difference | 225.29 ms/op | 224.42 ms/op | 1.00 |
| migrate state 1500000 validators, 3400 modified, 2000 new | 3.4674 s/op | 2.7124 s/op | 1.28 |
| RootCache.getBlockRootAtSlot - 250000 vs - 7PWei | 3.8800 ns/op | 3.7700 ns/op | 1.03 |
| state getBlockRootAtSlot - 250000 vs - 7PWei | 462.14 ns/op | 292.93 ns/op | 1.58 |
| computeProposerIndex 100000 validators | 1.4431 ms/op | 1.3664 ms/op | 1.06 |
| getNextSyncCommitteeIndices 1000 validators | 2.9968 ms/op | 2.8637 ms/op | 1.05 |
| getNextSyncCommitteeIndices 10000 validators | 26.131 ms/op | 25.746 ms/op | 1.01 |
| getNextSyncCommitteeIndices 100000 validators | 92.849 ms/op | 88.611 ms/op | 1.05 |
| computeProposers - vc 250000 | 605.10 us/op | 544.85 us/op | 1.11 |
| computeEpochShuffling - vc 250000 | 41.039 ms/op | 39.162 ms/op | 1.05 |
| getNextSyncCommittee - vc 250000 | 11.198 ms/op | 9.9527 ms/op | 1.13 |
| nodejs block root to RootHex using toHex | 104.80 ns/op | 100.68 ns/op | 1.04 |
| nodejs block root to RootHex using toRootHex | 68.412 ns/op | 67.968 ns/op | 1.01 |
| nodejs fromHex(blob) | 976.27 us/op | 891.98 us/op | 1.09 |
| nodejs fromHexInto(blob) | 656.89 us/op | 664.48 us/op | 0.99 |
| nodejs block root to RootHex using the deprecated toHexString | 603.85 ns/op | 614.75 ns/op | 0.98 |
| nodejs byteArrayEquals 32 bytes (block root) | 26.700 ns/op | 25.709 ns/op | 1.04 |
| nodejs byteArrayEquals 48 bytes (pubkey) | 38.726 ns/op | 37.170 ns/op | 1.04 |
| nodejs byteArrayEquals 96 bytes (signature) | 36.695 ns/op | 40.262 ns/op | 0.91 |
| nodejs byteArrayEquals 1024 bytes | 42.863 ns/op | 54.459 ns/op | 0.79 |
| nodejs byteArrayEquals 131072 bytes (blob) | 1.7987 us/op | 1.7507 us/op | 1.03 |
| browser block root to RootHex using toHex | 146.27 ns/op | 145.71 ns/op | 1.00 |
| browser block root to RootHex using toRootHex | 135.59 ns/op | 132.50 ns/op | 1.02 |
| browser fromHex(blob) | 2.0406 ms/op | 1.8335 ms/op | 1.11 |
| browser fromHexInto(blob) | 638.03 us/op | 662.95 us/op | 0.96 |
| browser block root to RootHex using the deprecated toHexString | 395.02 ns/op | 401.06 ns/op | 0.98 |
| browser byteArrayEquals 32 bytes (block root) | 28.307 ns/op | 28.214 ns/op | 1.00 |
| browser byteArrayEquals 48 bytes (pubkey) | 40.133 ns/op | 39.358 ns/op | 1.02 |
| browser byteArrayEquals 96 bytes (signature) | 74.958 ns/op | 73.593 ns/op | 1.02 |
| browser byteArrayEquals 1024 bytes | 761.28 ns/op | 750.73 ns/op | 1.01 |
| browser byteArrayEquals 131072 bytes (blob) | 96.398 us/op | 94.896 us/op | 1.02 |
by benchmarkbot/action
This reverts commit adc7843.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## unstable #9832 +/- ##
=========================================
Coverage 52.50% 52.50%
=========================================
Files 848 848
Lines 59558 59527 -31
Branches 4365 4359 -6
=========================================
- Hits 31269 31256 -13
+ Misses 28230 28213 -17
+ Partials 59 58 -1 🚀 New features to boost your workflow:
|
| if (proposerPreferences === null) { | ||
| throw Error(`No proposer preferences found for bid slot=${bid.slot} dependentRoot=${dependentRootHex}`); | ||
| } | ||
| if (!byteArrayEquals(bid.feeRecipient, proposerPreferences.message.feeRecipient)) { |
There was a problem hiding this comment.
So we have fee recipient in ExtraProduceBlockV4Opts for produceBlockV4. If supplied one, is it possible that
proposerPreferences.message.feeRecipient here might be different from the requested fee recipient?
There was a problem hiding this comment.
the fee recipient supplied JIT when calling produceBlockV4 can be different but it's very unlikely and mostly there to cover an edge case where the validator client was not able to submit the proposer preferences, eg. when having a proposal right after restarting the node. Two points worth noting, (1) this is a lodestar specific flag, not part of the spec, and (2) this only applied to locally build blocks and not bids, so it's not relevant for the line you commented on
There was a problem hiding this comment.
- Builder and proposer preferences are lost on beacon node restart #9920 follow-up issue to make this case almost irrelevant
Bid values in the p2p bid discard log and bid validation errors are printed in ETH, and the discard log makes clear it is the best p2p bid that did not qualify.
The circuit breaker test now configures a builder entry and asserts no bid request is made. Selection test cases are consistently formatted with forced line breaks.
Implement the Gloas builder API flow end to end so validators can source execution payload bids directly from builders post-ePBS, as specified in:
Builder configuration is owned by the validator client, the beacon node requests and validates bids on its behalf and ranks builder api and p2p bids uniformly during selection.
produceBlockV4is now aPOSTwith a requiredBuilderConfigbody, one bid request per builder entry plus top-levelmin_bidandbuilder_boost_factorgoverning p2p bidsBuilderRequestAuthfor each proposal-slot/auth-data pair ahead of time; bid requests authenticate with the data agreed with the builder, defaulting to the UTF-8 bytes of the builder URLgetExecutionPayloadBidrequests with a fixed 500ms deadline, validates bids against proposer preferences and the entry config with the execution payment counted up to the configured cap, and ranks bids by their boosted counted total. The p2p bid is selected after the same deadline so bids received over gossip have time to bid upEth-Builder-Urlto the winning builder so it can help disseminate the block and promptly learn that its bid won; only previously authenticated builder clients are eligible and redirects are disabledsubmitBuilderPreferencesbeacon api/eth/v1/validator/{pubkey}/builder_configendpoints allow per-key configuration with per-builder overrides--builder.urls(auth data can be appended as a hex fragment),--builder.minBidand--builder.maxExecutionPayment, configuring a max execution payment above0requires the explicit--allowDangerousTrustedPaymentsopt-in as trusted payments are only backed by the builder's promise to paylodestar_builder_api_*metricsThe beacon and builder openapi spec tests still ignore the new endpoints until builder-specs and beacon-APIs cut a release, keymanager is already checked against
v1.2.0-alpha.0.Closes #6242
Closes #6602
Closes #9298
Closes #9918