feat: include EL client info in graffiti
This PR shifts the responsibility of setting the default graffiti from validator to beacon-node and also defines engine_getClientVersionV1.
Due to validator package no longer determines default graffiti, graffiti ValidatorStore is now marked as optional (type string | undefined). This implies produce block endpoints in validator api accepts optional graffiti and getGraffiti in key manager api now may throw error if no graffiti is available for the queried pubkey.
When the api module first starts. engine_getClientVersionV1 will be called to determine the default graffiti and store it in memory. Afterwards this endpoint will be called in prepareNextSlot if proposing next slot.
Default graffiti will be used during produceBlock api call when the block graffiti is undefined and private flag is unset.
Closes #6463
Performance Report
✔️ no performance regression detected
🚀🚀 Significant benchmark improvement detected
| Benchmark suite | Current: 0517efab8972804eaad23304e2b27807e0e5cb05 | Previous: 59f72d016758124d1dd34bba8229e465a021d400 | Ratio |
|---|---|---|---|
| Object set x1000 | 22.447 ns/op | 77.701 ns/op | 0.29 |
| phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 | 1.1752 ms/op | 7.7077 ms/op | 0.15 |
| Buffer.compare 123687377 | 3.7715 ms/op | 12.212 ms/op | 0.31 |
| Buffer.compare 123687377 - diff last byte | 3.8291 ms/op | 11.603 ms/op | 0.33 |
Full benchmark results
| Benchmark suite | Current: 0517efab8972804eaad23304e2b27807e0e5cb05 | Previous: 59f72d016758124d1dd34bba8229e465a021d400 | Ratio |
|---|---|---|---|
| getPubkeys - index2pubkey - req 1000 vs - 250000 vc | 1.7793 ms/op | 2.8144 ms/op | 0.63 |
| getPubkeys - validatorsArr - req 1000 vs - 250000 vc | 42.729 us/op | 58.733 us/op | 0.73 |
| BLS verify - blst | 881.49 us/op | 1.0293 ms/op | 0.86 |
| BLS verifyMultipleSignatures 3 - blst | 1.3211 ms/op | 1.5085 ms/op | 0.88 |
| BLS verifyMultipleSignatures 8 - blst | 2.0886 ms/op | 2.2218 ms/op | 0.94 |
| BLS verifyMultipleSignatures 32 - blst | 4.4211 ms/op | 7.0741 ms/op | 0.62 |
| BLS verifyMultipleSignatures 64 - blst | 8.4489 ms/op | 12.137 ms/op | 0.70 |
| BLS verifyMultipleSignatures 128 - blst | 16.110 ms/op | 20.810 ms/op | 0.77 |
| BLS deserializing 10000 signatures | 597.32 ms/op | 739.80 ms/op | 0.81 |
| BLS deserializing 100000 signatures | 6.0290 s/op | 7.6259 s/op | 0.79 |
| BLS verifyMultipleSignatures - same message - 3 - blst | 932.89 us/op | 1.0784 ms/op | 0.87 |
| BLS verifyMultipleSignatures - same message - 8 - blst | 1.0616 ms/op | 1.2278 ms/op | 0.86 |
| BLS verifyMultipleSignatures - same message - 32 - blst | 1.6548 ms/op | 1.7701 ms/op | 0.93 |
| BLS verifyMultipleSignatures - same message - 64 - blst | 2.4113 ms/op | 2.6861 ms/op | 0.90 |
| BLS verifyMultipleSignatures - same message - 128 - blst | 3.9779 ms/op | 4.3882 ms/op | 0.91 |
| BLS aggregatePubkeys 32 - blst | 18.158 us/op | 21.434 us/op | 0.85 |
| BLS aggregatePubkeys 128 - blst | 63.399 us/op | 76.979 us/op | 0.82 |
| notSeenSlots=1 numMissedVotes=1 numBadVotes=10 | 41.615 ms/op | 101.51 ms/op | 0.41 |
| notSeenSlots=1 numMissedVotes=0 numBadVotes=4 | 49.909 ms/op | 67.655 ms/op | 0.74 |
| notSeenSlots=2 numMissedVotes=1 numBadVotes=10 | 28.654 ms/op | 40.916 ms/op | 0.70 |
| getSlashingsAndExits - default max | 64.316 us/op | 166.98 us/op | 0.39 |
| getSlashingsAndExits - 2k | 245.53 us/op | 496.12 us/op | 0.49 |
| proposeBlockBody type=full, size=empty | 4.7304 ms/op | 6.7414 ms/op | 0.70 |
| isKnown best case - 1 super set check | 505.00 ns/op | 500.00 ns/op | 1.01 |
| isKnown normal case - 2 super set checks | 459.00 ns/op | 535.00 ns/op | 0.86 |
| isKnown worse case - 16 super set checks | 449.00 ns/op | 442.00 ns/op | 1.02 |
| InMemoryCheckpointStateCache - add get delete | 4.7770 us/op | 6.7200 us/op | 0.71 |
| validate api signedAggregateAndProof - struct | 2.1065 ms/op | 1.7594 ms/op | 1.20 |
| validate gossip signedAggregateAndProof - struct | 1.9123 ms/op | 1.6286 ms/op | 1.17 |
| validate gossip attestation - vc 640000 | 968.80 us/op | 1.1567 ms/op | 0.84 |
| batch validate gossip attestation - vc 640000 - chunk 32 | 118.13 us/op | 141.22 us/op | 0.84 |
| batch validate gossip attestation - vc 640000 - chunk 64 | 106.65 us/op | 125.17 us/op | 0.85 |
| batch validate gossip attestation - vc 640000 - chunk 128 | 95.604 us/op | 114.95 us/op | 0.83 |
| batch validate gossip attestation - vc 640000 - chunk 256 | 97.481 us/op | 117.75 us/op | 0.83 |
| pickEth1Vote - no votes | 856.53 us/op | 1.1676 ms/op | 0.73 |
| pickEth1Vote - max votes | 7.9364 ms/op | 12.274 ms/op | 0.65 |
| pickEth1Vote - Eth1Data hashTreeRoot value x2048 | 12.317 ms/op | 17.013 ms/op | 0.72 |
| pickEth1Vote - Eth1Data hashTreeRoot tree x2048 | 18.274 ms/op | 29.311 ms/op | 0.62 |
| pickEth1Vote - Eth1Data fastSerialize value x2048 | 383.10 us/op | 558.93 us/op | 0.69 |
| pickEth1Vote - Eth1Data fastSerialize tree x2048 | 5.3173 ms/op | 4.5172 ms/op | 1.18 |
| bytes32 toHexString | 593.00 ns/op | 483.00 ns/op | 1.23 |
| bytes32 Buffer.toString(hex) | 419.00 ns/op | 256.00 ns/op | 1.64 |
| bytes32 Buffer.toString(hex) from Uint8Array | 517.00 ns/op | 384.00 ns/op | 1.35 |
| bytes32 Buffer.toString(hex) + 0x | 429.00 ns/op | 278.00 ns/op | 1.54 |
| Object access 1 prop | 0.32700 ns/op | 0.14400 ns/op | 2.27 |
| Map access 1 prop | 0.36300 ns/op | 0.13400 ns/op | 2.71 |
| Object get x1000 | 5.2110 ns/op | 6.0310 ns/op | 0.86 |
| Map get x1000 | 5.8690 ns/op | 6.7980 ns/op | 0.86 |
| Object set x1000 | 22.447 ns/op | 77.701 ns/op | 0.29 |
| Map set x1000 | 18.664 ns/op | 51.335 ns/op | 0.36 |
| Return object 10000 times | 0.29620 ns/op | 0.32530 ns/op | 0.91 |
| Throw Error 10000 times | 2.6666 us/op | 4.0236 us/op | 0.66 |
| fastMsgIdFn sha256 / 200 bytes | 1.9410 us/op | 2.5380 us/op | 0.76 |
| fastMsgIdFn h32 xxhash / 200 bytes | 416.00 ns/op | 331.00 ns/op | 1.26 |
| fastMsgIdFn h64 xxhash / 200 bytes | 435.00 ns/op | 312.00 ns/op | 1.39 |
| fastMsgIdFn sha256 / 1000 bytes | 5.9050 us/op | 8.2050 us/op | 0.72 |
| fastMsgIdFn h32 xxhash / 1000 bytes | 523.00 ns/op | 423.00 ns/op | 1.24 |
| fastMsgIdFn h64 xxhash / 1000 bytes | 525.00 ns/op | 369.00 ns/op | 1.42 |
| fastMsgIdFn sha256 / 10000 bytes | 50.277 us/op | 68.185 us/op | 0.74 |
| fastMsgIdFn h32 xxhash / 10000 bytes | 1.8610 us/op | 1.9830 us/op | 0.94 |
| fastMsgIdFn h64 xxhash / 10000 bytes | 1.3060 us/op | 1.3210 us/op | 0.99 |
| send data - 1000 256B messages | 9.3293 ms/op | 14.074 ms/op | 0.66 |
| send data - 1000 512B messages | 12.601 ms/op | 18.766 ms/op | 0.67 |
| send data - 1000 1024B messages | 21.178 ms/op | 27.920 ms/op | 0.76 |
| send data - 1000 1200B messages | 22.029 ms/op | 33.507 ms/op | 0.66 |
| send data - 1000 2048B messages | 29.309 ms/op | 36.791 ms/op | 0.80 |
| send data - 1000 4096B messages | 26.587 ms/op | 37.187 ms/op | 0.71 |
| send data - 1000 16384B messages | 66.482 ms/op | 73.300 ms/op | 0.91 |
| send data - 1000 65536B messages | 251.27 ms/op | 244.60 ms/op | 1.03 |
| enrSubnets - fastDeserialize 64 bits | 1.2030 us/op | 1.3780 us/op | 0.87 |
| enrSubnets - ssz BitVector 64 bits | 548.00 ns/op | 466.00 ns/op | 1.18 |
| enrSubnets - fastDeserialize 4 bits | 325.00 ns/op | 186.00 ns/op | 1.75 |
| enrSubnets - ssz BitVector 4 bits | 516.00 ns/op | 411.00 ns/op | 1.26 |
| prioritizePeers score -10:0 att 32-0.1 sync 2-0 | 128.78 us/op | 225.14 us/op | 0.57 |
| prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 | 116.45 us/op | 189.71 us/op | 0.61 |
| prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 | 271.70 us/op | 398.79 us/op | 0.68 |
| prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 | 457.65 us/op | 595.66 us/op | 0.77 |
| prioritizePeers score 0:0 att 64-1 sync 4-1 | 506.94 us/op | 1.1148 ms/op | 0.45 |
| array of 16000 items push then shift | 1.2357 us/op | 1.8577 us/op | 0.67 |
| LinkedList of 16000 items push then shift | 7.2390 ns/op | 8.7960 ns/op | 0.82 |
| array of 16000 items push then pop | 85.642 ns/op | 155.81 ns/op | 0.55 |
| LinkedList of 16000 items push then pop | 6.2570 ns/op | 8.2190 ns/op | 0.76 |
| array of 24000 items push then shift | 1.8232 us/op | 3.2274 us/op | 0.56 |
| LinkedList of 24000 items push then shift | 6.8880 ns/op | 17.365 ns/op | 0.40 |
| array of 24000 items push then pop | 109.79 ns/op | 268.90 ns/op | 0.41 |
| LinkedList of 24000 items push then pop | 6.0910 ns/op | 10.238 ns/op | 0.59 |
| intersect bitArray bitLen 8 | 5.1660 ns/op | 7.8480 ns/op | 0.66 |
| intersect array and set length 8 | 37.009 ns/op | 112.91 ns/op | 0.33 |
| intersect bitArray bitLen 128 | 25.528 ns/op | 34.438 ns/op | 0.74 |
| intersect array and set length 128 | 555.27 ns/op | 1.3290 us/op | 0.42 |
| bitArray.getTrueBitIndexes() bitLen 128 | 2.0280 us/op | 2.7600 us/op | 0.73 |
| bitArray.getTrueBitIndexes() bitLen 248 | 3.7370 us/op | 3.9640 us/op | 0.94 |
| bitArray.getTrueBitIndexes() bitLen 512 | 7.7180 us/op | 8.1840 us/op | 0.94 |
| Buffer.concat 32 items | 970.00 ns/op | 988.00 ns/op | 0.98 |
| Uint8Array.set 32 items | 1.3520 us/op | 1.6320 us/op | 0.83 |
| Buffer.copy | 1.5420 us/op | 1.7750 us/op | 0.87 |
| Uint8Array.set - with subarray | 1.9570 us/op | 2.7890 us/op | 0.70 |
| Uint8Array.set - without subarray | 1.2930 us/op | 2.0330 us/op | 0.64 |
| getUint32 - dataview | 415.00 ns/op | 315.00 ns/op | 1.32 |
| getUint32 - manual | 337.00 ns/op | 260.00 ns/op | 1.30 |
| Set add up to 64 items then delete first | 1.7564 us/op | 2.7753 us/op | 0.63 |
| OrderedSet add up to 64 items then delete first | 2.8135 us/op | 3.9113 us/op | 0.72 |
| Set add up to 64 items then delete last | 2.0392 us/op | 3.6145 us/op | 0.56 |
| OrderedSet add up to 64 items then delete last | 3.1010 us/op | 5.1222 us/op | 0.61 |
| Set add up to 64 items then delete middle | 2.0344 us/op | 2.7298 us/op | 0.75 |
| OrderedSet add up to 64 items then delete middle | 4.3678 us/op | 6.0286 us/op | 0.72 |
| Set add up to 128 items then delete first | 3.9099 us/op | 6.8297 us/op | 0.57 |
| OrderedSet add up to 128 items then delete first | 6.2854 us/op | 10.442 us/op | 0.60 |
| Set add up to 128 items then delete last | 3.7895 us/op | 5.5755 us/op | 0.68 |
| OrderedSet add up to 128 items then delete last | 5.8215 us/op | 9.9522 us/op | 0.58 |
| Set add up to 128 items then delete middle | 3.8008 us/op | 5.2590 us/op | 0.72 |
| OrderedSet add up to 128 items then delete middle | 11.201 us/op | 14.926 us/op | 0.75 |
| Set add up to 256 items then delete first | 7.6808 us/op | 13.789 us/op | 0.56 |
| OrderedSet add up to 256 items then delete first | 12.498 us/op | 20.545 us/op | 0.61 |
| Set add up to 256 items then delete last | 7.3044 us/op | 12.554 us/op | 0.58 |
| OrderedSet add up to 256 items then delete last | 11.611 us/op | 15.758 us/op | 0.74 |
| Set add up to 256 items then delete middle | 7.3204 us/op | 10.667 us/op | 0.69 |
| OrderedSet add up to 256 items then delete middle | 32.876 us/op | 46.727 us/op | 0.70 |
| transfer serialized Status (84 B) | 1.2850 us/op | 1.5170 us/op | 0.85 |
| copy serialized Status (84 B) | 1.1110 us/op | 1.3080 us/op | 0.85 |
| transfer serialized SignedVoluntaryExit (112 B) | 1.4650 us/op | 1.6990 us/op | 0.86 |
| copy serialized SignedVoluntaryExit (112 B) | 1.1330 us/op | 1.3360 us/op | 0.85 |
| transfer serialized ProposerSlashing (416 B) | 1.4600 us/op | 2.1890 us/op | 0.67 |
| copy serialized ProposerSlashing (416 B) | 1.3270 us/op | 2.2500 us/op | 0.59 |
| transfer serialized Attestation (485 B) | 1.5100 us/op | 2.4170 us/op | 0.62 |
| copy serialized Attestation (485 B) | 1.3530 us/op | 2.2720 us/op | 0.60 |
| transfer serialized AttesterSlashing (33232 B) | 1.8160 us/op | 2.7010 us/op | 0.67 |
| copy serialized AttesterSlashing (33232 B) | 5.0070 us/op | 8.8250 us/op | 0.57 |
| transfer serialized Small SignedBeaconBlock (128000 B) | 1.9420 us/op | 2.8150 us/op | 0.69 |
| copy serialized Small SignedBeaconBlock (128000 B) | 14.715 us/op | 24.634 us/op | 0.60 |
| transfer serialized Avg SignedBeaconBlock (200000 B) | 2.0090 us/op | 3.6840 us/op | 0.55 |
| copy serialized Avg SignedBeaconBlock (200000 B) | 19.508 us/op | 25.755 us/op | 0.76 |
| transfer serialized BlobsSidecar (524380 B) | 2.1600 us/op | 2.6350 us/op | 0.82 |
| copy serialized BlobsSidecar (524380 B) | 96.491 us/op | 96.379 us/op | 1.00 |
| transfer serialized Big SignedBeaconBlock (1000000 B) | 2.2710 us/op | 3.8180 us/op | 0.59 |
| copy serialized Big SignedBeaconBlock (1000000 B) | 157.27 us/op | 183.77 us/op | 0.86 |
| pass gossip attestations to forkchoice per slot | 2.7298 ms/op | 3.5957 ms/op | 0.76 |
| forkChoice updateHead vc 100000 bc 64 eq 0 | 389.62 us/op | 552.73 us/op | 0.70 |
| forkChoice updateHead vc 600000 bc 64 eq 0 | 2.4767 ms/op | 3.2941 ms/op | 0.75 |
| forkChoice updateHead vc 1000000 bc 64 eq 0 | 4.1319 ms/op | 6.1188 ms/op | 0.68 |
| forkChoice updateHead vc 600000 bc 320 eq 0 | 2.3900 ms/op | 3.3470 ms/op | 0.71 |
| forkChoice updateHead vc 600000 bc 1200 eq 0 | 2.4532 ms/op | 4.8470 ms/op | 0.51 |
| forkChoice updateHead vc 600000 bc 7200 eq 0 | 3.0453 ms/op | 4.5896 ms/op | 0.66 |
| forkChoice updateHead vc 600000 bc 64 eq 1000 | 9.0543 ms/op | 11.543 ms/op | 0.78 |
| forkChoice updateHead vc 600000 bc 64 eq 10000 | 8.9082 ms/op | 11.883 ms/op | 0.75 |
| forkChoice updateHead vc 600000 bc 64 eq 300000 | 11.564 ms/op | 23.222 ms/op | 0.50 |
| computeDeltas 500000 validators 300 proto nodes | 2.9930 ms/op | 4.0673 ms/op | 0.74 |
| computeDeltas 500000 validators 1200 proto nodes | 2.9517 ms/op | 4.2413 ms/op | 0.70 |
| computeDeltas 500000 validators 7200 proto nodes | 2.9256 ms/op | 4.6100 ms/op | 0.63 |
| computeDeltas 750000 validators 300 proto nodes | 4.4562 ms/op | 6.7896 ms/op | 0.66 |
| computeDeltas 750000 validators 1200 proto nodes | 4.3800 ms/op | 6.7521 ms/op | 0.65 |
| computeDeltas 750000 validators 7200 proto nodes | 4.3926 ms/op | 6.3722 ms/op | 0.69 |
| computeDeltas 1400000 validators 300 proto nodes | 7.9035 ms/op | 12.043 ms/op | 0.66 |
| computeDeltas 1400000 validators 1200 proto nodes | 7.9221 ms/op | 11.148 ms/op | 0.71 |
| computeDeltas 1400000 validators 7200 proto nodes | 8.1631 ms/op | 11.517 ms/op | 0.71 |
| computeDeltas 2100000 validators 300 proto nodes | 12.301 ms/op | 15.815 ms/op | 0.78 |
| computeDeltas 2100000 validators 1200 proto nodes | 12.194 ms/op | 15.677 ms/op | 0.78 |
| computeDeltas 2100000 validators 7200 proto nodes | 12.289 ms/op | 15.222 ms/op | 0.81 |
| altair processAttestation - 250000 vs - 7PWei normalcase | 1.2823 ms/op | 1.7476 ms/op | 0.73 |
| altair processAttestation - 250000 vs - 7PWei worstcase | 2.1288 ms/op | 2.6841 ms/op | 0.79 |
| altair processAttestation - setStatus - 1/6 committees join | 69.921 us/op | 92.773 us/op | 0.75 |
| altair processAttestation - setStatus - 1/3 committees join | 136.80 us/op | 180.33 us/op | 0.76 |
| altair processAttestation - setStatus - 1/2 committees join | 203.50 us/op | 265.68 us/op | 0.77 |
| altair processAttestation - setStatus - 2/3 committees join | 277.06 us/op | 333.22 us/op | 0.83 |
| altair processAttestation - setStatus - 4/5 committees join | 393.97 us/op | 507.92 us/op | 0.78 |
| altair processAttestation - setStatus - 100% committees join | 473.36 us/op | 604.03 us/op | 0.78 |
| altair processBlock - 250000 vs - 7PWei normalcase | 3.0422 ms/op | 4.5631 ms/op | 0.67 |
| altair processBlock - 250000 vs - 7PWei normalcase hashState | 21.464 ms/op | 32.407 ms/op | 0.66 |
| altair processBlock - 250000 vs - 7PWei worstcase | 37.580 ms/op | 39.460 ms/op | 0.95 |
| altair processBlock - 250000 vs - 7PWei worstcase hashState | 69.189 ms/op | 85.532 ms/op | 0.81 |
| phase0 processBlock - 250000 vs - 7PWei normalcase | 2.0173 ms/op | 2.7890 ms/op | 0.72 |
| phase0 processBlock - 250000 vs - 7PWei worstcase | 22.495 ms/op | 28.085 ms/op | 0.80 |
| altair processEth1Data - 250000 vs - 7PWei normalcase | 243.16 us/op | 467.26 us/op | 0.52 |
| getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 | 5.9140 us/op | 7.1460 us/op | 0.83 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 | 22.735 us/op | 30.398 us/op | 0.75 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 | 6.7120 us/op | 13.232 us/op | 0.51 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 | 5.4840 us/op | 8.4650 us/op | 0.65 |
| getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 | 84.248 us/op | 119.36 us/op | 0.71 |
| getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 | 701.91 us/op | 916.20 us/op | 0.77 |
| getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 | 617.38 us/op | 1.2645 ms/op | 0.49 |
| getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 | 633.84 us/op | 1.1508 ms/op | 0.55 |
| getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 | 2.0612 ms/op | 3.0927 ms/op | 0.67 |
| getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 | 1.2384 ms/op | 2.1243 ms/op | 0.58 |
| getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 | 3.0565 ms/op | 4.8473 ms/op | 0.63 |
| Tree 40 250000 create | 173.01 ms/op | 483.00 ms/op | 0.36 |
| Tree 40 250000 get(125000) | 119.30 ns/op | 179.48 ns/op | 0.66 |
| Tree 40 250000 set(125000) | 564.35 ns/op | 1.6828 us/op | 0.34 |
| Tree 40 250000 toArray() | 19.022 ms/op | 25.753 ms/op | 0.74 |
| Tree 40 250000 iterate all - toArray() + loop | 10.604 ms/op | 26.396 ms/op | 0.40 |
| Tree 40 250000 iterate all - get(i) | 41.199 ms/op | 74.884 ms/op | 0.55 |
| MutableVector 250000 create | 6.7242 ms/op | 16.958 ms/op | 0.40 |
| MutableVector 250000 get(125000) | 9.2830 ns/op | 7.9280 ns/op | 1.17 |
| MutableVector 250000 set(125000) | 192.19 ns/op | 300.55 ns/op | 0.64 |
| MutableVector 250000 toArray() | 3.2579 ms/op | 5.0849 ms/op | 0.64 |
| MutableVector 250000 iterate all - toArray() + loop | 2.9751 ms/op | 5.4807 ms/op | 0.54 |
| MutableVector 250000 iterate all - get(i) | 1.4246 ms/op | 1.7584 ms/op | 0.81 |
| Array 250000 create | 2.9623 ms/op | 4.8963 ms/op | 0.61 |
| Array 250000 clone - spread | 1.4099 ms/op | 3.6722 ms/op | 0.38 |
| Array 250000 get(125000) | 0.57800 ns/op | 0.51300 ns/op | 1.13 |
| Array 250000 set(125000) | 0.57600 ns/op | 0.53800 ns/op | 1.07 |
| Array 250000 iterate all - loop | 75.045 us/op | 123.48 us/op | 0.61 |
| effectiveBalanceIncrements clone Uint8Array 300000 | 26.591 us/op | 78.460 us/op | 0.34 |
| effectiveBalanceIncrements clone MutableVector 300000 | 303.00 ns/op | 167.00 ns/op | 1.81 |
| effectiveBalanceIncrements rw all Uint8Array 300000 | 165.47 us/op | 221.00 us/op | 0.75 |
| effectiveBalanceIncrements rw all MutableVector 300000 | 66.497 ms/op | 179.53 ms/op | 0.37 |
| phase0 afterProcessEpoch - 250000 vs - 7PWei | 78.258 ms/op | 99.330 ms/op | 0.79 |
| Array.fill - length 1000000 | 3.2196 ms/op | 7.9360 ms/op | 0.41 |
| Array push - length 1000000 | 15.876 ms/op | 26.478 ms/op | 0.60 |
| Array.get | 0.26466 ns/op | 0.31746 ns/op | 0.83 |
| Uint8Array.get | 0.34182 ns/op | 0.49242 ns/op | 0.69 |
| phase0 beforeProcessEpoch - 250000 vs - 7PWei | 24.472 ms/op | 30.087 ms/op | 0.81 |
| altair processEpoch - mainnet_e81889 | 323.05 ms/op | 385.46 ms/op | 0.84 |
| mainnet_e81889 - altair beforeProcessEpoch | 39.601 ms/op | 36.538 ms/op | 1.08 |
| mainnet_e81889 - altair processJustificationAndFinalization | 10.142 us/op | 18.921 us/op | 0.54 |
| mainnet_e81889 - altair processInactivityUpdates | 6.5669 ms/op | 6.3351 ms/op | 1.04 |
| mainnet_e81889 - altair processRewardsAndPenalties | 47.353 ms/op | 56.362 ms/op | 0.84 |
| mainnet_e81889 - altair processRegistryUpdates | 2.0850 us/op | 3.3880 us/op | 0.62 |
| mainnet_e81889 - altair processSlashings | 862.00 ns/op | 847.00 ns/op | 1.02 |
| mainnet_e81889 - altair processEth1DataReset | 715.00 ns/op | 732.00 ns/op | 0.98 |
| mainnet_e81889 - altair processEffectiveBalanceUpdates | 1.3096 ms/op | 2.3132 ms/op | 0.57 |
| mainnet_e81889 - altair processSlashingsReset | 2.9260 us/op | 8.3150 us/op | 0.35 |
| mainnet_e81889 - altair processRandaoMixesReset | 7.1230 us/op | 8.5160 us/op | 0.84 |
| mainnet_e81889 - altair processHistoricalRootsUpdate | 917.00 ns/op | 1.2700 us/op | 0.72 |
| mainnet_e81889 - altair processParticipationFlagUpdates | 2.5780 us/op | 3.6310 us/op | 0.71 |
| mainnet_e81889 - altair processSyncCommitteeUpdates | 1.3910 us/op | 1.0030 us/op | 1.39 |
| mainnet_e81889 - altair afterProcessEpoch | 80.011 ms/op | 106.20 ms/op | 0.75 |
| capella processEpoch - mainnet_e217614 | 1.4229 s/op | 1.9567 s/op | 0.73 |
| mainnet_e217614 - capella beforeProcessEpoch | 119.77 ms/op | 174.03 ms/op | 0.69 |
| mainnet_e217614 - capella processJustificationAndFinalization | 22.547 us/op | 32.672 us/op | 0.69 |
| mainnet_e217614 - capella processInactivityUpdates | 16.520 ms/op | 23.799 ms/op | 0.69 |
| mainnet_e217614 - capella processRewardsAndPenalties | 260.76 ms/op | 293.13 ms/op | 0.89 |
| mainnet_e217614 - capella processRegistryUpdates | 15.038 us/op | 22.909 us/op | 0.66 |
| mainnet_e217614 - capella processSlashings | 810.00 ns/op | 821.00 ns/op | 0.99 |
| mainnet_e217614 - capella processEth1DataReset | 968.00 ns/op | 1.2620 us/op | 0.77 |
| mainnet_e217614 - capella processEffectiveBalanceUpdates | 16.403 ms/op | 25.334 ms/op | 0.65 |
| mainnet_e217614 - capella processSlashingsReset | 8.1500 us/op | 8.8370 us/op | 0.92 |
| mainnet_e217614 - capella processRandaoMixesReset | 5.2110 us/op | 14.103 us/op | 0.37 |
| mainnet_e217614 - capella processHistoricalRootsUpdate | 1.1310 us/op | 1.2750 us/op | 0.89 |
| mainnet_e217614 - capella processParticipationFlagUpdates | 2.7410 us/op | 8.0520 us/op | 0.34 |
| mainnet_e217614 - capella afterProcessEpoch | 248.67 ms/op | 412.89 ms/op | 0.60 |
| phase0 processEpoch - mainnet_e58758 | 426.01 ms/op | 800.70 ms/op | 0.53 |
| mainnet_e58758 - phase0 beforeProcessEpoch | 90.051 ms/op | 218.61 ms/op | 0.41 |
| mainnet_e58758 - phase0 processJustificationAndFinalization | 13.975 us/op | 41.852 us/op | 0.33 |
| mainnet_e58758 - phase0 processRewardsAndPenalties | 29.171 ms/op | 58.574 ms/op | 0.50 |
| mainnet_e58758 - phase0 processRegistryUpdates | 6.7570 us/op | 20.839 us/op | 0.32 |
| mainnet_e58758 - phase0 processSlashings | 718.00 ns/op | 1.3770 us/op | 0.52 |
| mainnet_e58758 - phase0 processEth1DataReset | 707.00 ns/op | 1.3080 us/op | 0.54 |
| mainnet_e58758 - phase0 processEffectiveBalanceUpdates | 699.71 us/op | 2.0452 ms/op | 0.34 |
| mainnet_e58758 - phase0 processSlashingsReset | 2.3820 us/op | 7.3930 us/op | 0.32 |
| mainnet_e58758 - phase0 processRandaoMixesReset | 5.4480 us/op | 13.948 us/op | 0.39 |
| mainnet_e58758 - phase0 processHistoricalRootsUpdate | 1.0220 us/op | 1.1550 us/op | 0.88 |
| mainnet_e58758 - phase0 processParticipationRecordUpdates | 3.4080 us/op | 20.240 us/op | 0.17 |
| mainnet_e58758 - phase0 afterProcessEpoch | 68.913 ms/op | 137.32 ms/op | 0.50 |
| phase0 processEffectiveBalanceUpdates - 250000 normalcase | 820.03 us/op | 2.0470 ms/op | 0.40 |
| phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 | 1.1752 ms/op | 7.7077 ms/op | 0.15 |
| altair processInactivityUpdates - 250000 normalcase | 17.489 ms/op | 29.936 ms/op | 0.58 |
| altair processInactivityUpdates - 250000 worstcase | 15.116 ms/op | 34.112 ms/op | 0.44 |
| phase0 processRegistryUpdates - 250000 normalcase | 8.6240 us/op | 20.105 us/op | 0.43 |
| phase0 processRegistryUpdates - 250000 badcase_full_deposits | 289.42 us/op | 507.66 us/op | 0.57 |
| phase0 processRegistryUpdates - 250000 worstcase 0.5 | 116.36 ms/op | 168.90 ms/op | 0.69 |
| altair processRewardsAndPenalties - 250000 normalcase | 35.702 ms/op | 46.280 ms/op | 0.77 |
| altair processRewardsAndPenalties - 250000 worstcase | 40.680 ms/op | 46.715 ms/op | 0.87 |
| phase0 getAttestationDeltas - 250000 normalcase | 6.0080 ms/op | 12.549 ms/op | 0.48 |
| phase0 getAttestationDeltas - 250000 worstcase | 5.9634 ms/op | 9.9824 ms/op | 0.60 |
| phase0 processSlashings - 250000 worstcase | 89.930 us/op | 110.95 us/op | 0.81 |
| altair processSyncCommitteeUpdates - 250000 | 94.319 ms/op | 146.44 ms/op | 0.64 |
| BeaconState.hashTreeRoot - No change | 530.00 ns/op | 358.00 ns/op | 1.48 |
| BeaconState.hashTreeRoot - 1 full validator | 132.06 us/op | 129.24 us/op | 1.02 |
| BeaconState.hashTreeRoot - 32 full validator | 1.2572 ms/op | 1.7672 ms/op | 0.71 |
| BeaconState.hashTreeRoot - 512 full validator | 10.401 ms/op | 15.259 ms/op | 0.68 |
| BeaconState.hashTreeRoot - 1 validator.effectiveBalance | 110.74 us/op | 189.02 us/op | 0.59 |
| BeaconState.hashTreeRoot - 32 validator.effectiveBalance | 1.4868 ms/op | 2.7816 ms/op | 0.53 |
| BeaconState.hashTreeRoot - 512 validator.effectiveBalance | 26.327 ms/op | 34.706 ms/op | 0.76 |
| BeaconState.hashTreeRoot - 1 balances | 97.310 us/op | 140.65 us/op | 0.69 |
| BeaconState.hashTreeRoot - 32 balances | 1.0132 ms/op | 1.5437 ms/op | 0.66 |
| BeaconState.hashTreeRoot - 512 balances | 10.019 ms/op | 10.871 ms/op | 0.92 |
| BeaconState.hashTreeRoot - 250000 balances | 208.61 ms/op | 164.90 ms/op | 1.27 |
| aggregationBits - 2048 els - zipIndexesInBitList | 20.346 us/op | 28.413 us/op | 0.72 |
| byteArrayEquals 32 | 47.793 ns/op | 56.290 ns/op | 0.85 |
| Buffer.compare 32 | 15.454 ns/op | 17.995 ns/op | 0.86 |
| byteArrayEquals 1024 | 1.2549 us/op | 1.6530 us/op | 0.76 |
| Buffer.compare 1024 | 24.202 ns/op | 26.526 ns/op | 0.91 |
| byteArrayEquals 16384 | 19.948 us/op | 26.347 us/op | 0.76 |
| Buffer.compare 16384 | 155.58 ns/op | 189.44 ns/op | 0.82 |
| byteArrayEquals 123687377 | 149.40 ms/op | 212.68 ms/op | 0.70 |
| Buffer.compare 123687377 | 3.7715 ms/op | 12.212 ms/op | 0.31 |
| byteArrayEquals 32 - diff last byte | 46.380 ns/op | 59.934 ns/op | 0.77 |
| Buffer.compare 32 - diff last byte | 15.953 ns/op | 19.879 ns/op | 0.80 |
| byteArrayEquals 1024 - diff last byte | 1.2479 us/op | 1.8055 us/op | 0.69 |
| Buffer.compare 1024 - diff last byte | 24.360 ns/op | 29.804 ns/op | 0.82 |
| byteArrayEquals 16384 - diff last byte | 19.806 us/op | 28.535 us/op | 0.69 |
| Buffer.compare 16384 - diff last byte | 160.25 ns/op | 227.59 ns/op | 0.70 |
| byteArrayEquals 123687377 - diff last byte | 146.68 ms/op | 221.27 ms/op | 0.66 |
| Buffer.compare 123687377 - diff last byte | 3.8291 ms/op | 11.603 ms/op | 0.33 |
| byteArrayEquals 32 - random bytes | 4.8260 ns/op | 5.9520 ns/op | 0.81 |
| Buffer.compare 32 - random bytes | 16.682 ns/op | 20.094 ns/op | 0.83 |
| byteArrayEquals 1024 - random bytes | 4.7870 ns/op | 5.8630 ns/op | 0.82 |
| Buffer.compare 1024 - random bytes | 16.366 ns/op | 22.471 ns/op | 0.73 |
| byteArrayEquals 16384 - random bytes | 4.8160 ns/op | 6.1990 ns/op | 0.78 |
| Buffer.compare 16384 - random bytes | 16.525 ns/op | 19.813 ns/op | 0.83 |
| byteArrayEquals 123687377 - random bytes | 7.6800 ns/op | 7.8500 ns/op | 0.98 |
| Buffer.compare 123687377 - random bytes | 19.770 ns/op | 22.730 ns/op | 0.87 |
| regular array get 100000 times | 30.526 us/op | 41.934 us/op | 0.73 |
| wrappedArray get 100000 times | 30.526 us/op | 41.472 us/op | 0.74 |
| arrayWithProxy get 100000 times | 9.7538 ms/op | 19.437 ms/op | 0.50 |
| ssz.Root.equals | 43.566 ns/op | 55.656 ns/op | 0.78 |
| byteArrayEquals | 41.998 ns/op | 54.337 ns/op | 0.77 |
| Buffer.compare | 9.6200 ns/op | 12.061 ns/op | 0.80 |
| shuffle list - 16384 els | 5.0603 ms/op | 7.3299 ms/op | 0.69 |
| shuffle list - 250000 els | 74.913 ms/op | 112.99 ms/op | 0.66 |
| processSlot - 1 slots | 11.718 us/op | 22.444 us/op | 0.52 |
| processSlot - 32 slots | 3.2559 ms/op | 4.3905 ms/op | 0.74 |
| getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei | 40.773 ms/op | 54.205 ms/op | 0.75 |
| getCommitteeAssignments - req 1 vs - 250000 vc | 1.7885 ms/op | 2.5613 ms/op | 0.70 |
| getCommitteeAssignments - req 100 vs - 250000 vc | 3.4958 ms/op | 5.3312 ms/op | 0.66 |
| getCommitteeAssignments - req 1000 vs - 250000 vc | 3.6206 ms/op | 5.2454 ms/op | 0.69 |
| findModifiedValidators - 10000 modified validators | 245.57 ms/op | 625.53 ms/op | 0.39 |
| findModifiedValidators - 1000 modified validators | 156.63 ms/op | 450.90 ms/op | 0.35 |
| findModifiedValidators - 100 modified validators | 149.03 ms/op | 345.77 ms/op | 0.43 |
| findModifiedValidators - 10 modified validators | 149.94 ms/op | 286.71 ms/op | 0.52 |
| findModifiedValidators - 1 modified validators | 132.52 ms/op | 303.21 ms/op | 0.44 |
| findModifiedValidators - no difference | 131.78 ms/op | 324.18 ms/op | 0.41 |
| compare ViewDUs | 3.3485 s/op | 4.3672 s/op | 0.77 |
| compare each validator Uint8Array | 1.6489 s/op | 2.2950 s/op | 0.72 |
| compare ViewDU to Uint8Array | 647.16 ms/op | 1.6281 s/op | 0.40 |
| migrate state 1000000 validators, 24 modified, 0 new | 573.49 ms/op | 683.43 ms/op | 0.84 |
| migrate state 1000000 validators, 1700 modified, 1000 new | 827.44 ms/op | 1.0534 s/op | 0.79 |
| migrate state 1000000 validators, 3400 modified, 2000 new | 897.26 ms/op | 1.2155 s/op | 0.74 |
| migrate state 1500000 validators, 24 modified, 0 new | 548.12 ms/op | 762.66 ms/op | 0.72 |
| migrate state 1500000 validators, 1700 modified, 1000 new | 725.86 ms/op | 832.10 ms/op | 0.87 |
| migrate state 1500000 validators, 3400 modified, 2000 new | 993.52 ms/op | 1.0789 s/op | 0.92 |
| RootCache.getBlockRootAtSlot - 250000 vs - 7PWei | 5.7000 ns/op | 4.7300 ns/op | 1.21 |
| state getBlockRootAtSlot - 250000 vs - 7PWei | 661.64 ns/op | 949.94 ns/op | 0.70 |
| computeProposers - vc 250000 | 6.4387 ms/op | 7.6173 ms/op | 0.85 |
| computeEpochShuffling - vc 250000 | 82.125 ms/op | 96.464 ms/op | 0.85 |
| getNextSyncCommittee - vc 250000 | 96.728 ms/op | 123.15 ms/op | 0.79 |
| computeSigningRoot for AttestationData | 24.690 us/op | 24.217 us/op | 1.02 |
| hash AttestationData serialized data then Buffer.toString(base64) | 1.1678 us/op | 1.5446 us/op | 0.76 |
| toHexString serialized data | 786.46 ns/op | 927.19 ns/op | 0.85 |
| Buffer.toString(base64) | 147.94 ns/op | 194.50 ns/op | 0.76 |
by benchmarkbot/action
Codecov Report
Attention: Patch coverage is 66.66667% with 8 lines in your changes missing coverage. Please review.
Project coverage is 62.49%. Comparing base (
48a5a94) to head (cb7a5d4).
Additional details and impacted files
@@ Coverage Diff @@
## unstable #6753 +/- ##
============================================
- Coverage 62.49% 62.49% -0.01%
============================================
Files 576 576
Lines 61190 61199 +9
Branches 2141 2138 -3
============================================
+ Hits 38243 38245 +2
- Misses 22908 22915 +7
Partials 39 39
:tada: This PR is included in v1.21.0 :tada: