lodestar
lodestar copied to clipboard
feat: implement focil EIP-7805
Do not merge - PR for reference only
Relevant issue #7340
Performance Report
🚀🚀 Significant benchmark improvement detected
| Benchmark suite | Current: 54f727e12ed51bc70ab5cd342bf76f4283bc394e | Previous: 548d7aa41e8b57a959acf0d3db293e93f0d24c74 | Ratio |
|---|---|---|---|
| 10000 bytes - uncompress - snappy | 8.2573 us/op | 30.164 us/op | 0.27 |
Full benchmark results
| Benchmark suite | Current: 54f727e12ed51bc70ab5cd342bf76f4283bc394e | Previous: 548d7aa41e8b57a959acf0d3db293e93f0d24c74 | Ratio |
|---|---|---|---|
| getPubkeys - index2pubkey - req 1000 vs - 250000 vc | 847.09 us/op | 930.42 us/op | 0.91 |
| getPubkeys - validatorsArr - req 1000 vs - 250000 vc | 36.085 us/op | 36.236 us/op | 1.00 |
| BLS verify - blst | 809.30 us/op | 867.99 us/op | 0.93 |
| BLS verifyMultipleSignatures 3 - blst | 1.1922 ms/op | 1.3086 ms/op | 0.91 |
| BLS verifyMultipleSignatures 8 - blst | 1.6431 ms/op | 1.9669 ms/op | 0.84 |
| BLS verifyMultipleSignatures 32 - blst | 4.8169 ms/op | 4.9972 ms/op | 0.96 |
| BLS verifyMultipleSignatures 64 - blst | 9.4111 ms/op | 9.8835 ms/op | 0.95 |
| BLS verifyMultipleSignatures 128 - blst | 17.401 ms/op | 17.016 ms/op | 1.02 |
| BLS deserializing 10000 signatures | 686.44 ms/op | 697.03 ms/op | 0.98 |
| BLS deserializing 100000 signatures | 6.8799 s/op | 7.0000 s/op | 0.98 |
| BLS verifyMultipleSignatures - same message - 3 - blst | 878.09 us/op | 973.61 us/op | 0.90 |
| BLS verifyMultipleSignatures - same message - 8 - blst | 999.94 us/op | 1.0901 ms/op | 0.92 |
| BLS verifyMultipleSignatures - same message - 32 - blst | 1.6573 ms/op | 1.7495 ms/op | 0.95 |
| BLS verifyMultipleSignatures - same message - 64 - blst | 2.5049 ms/op | 2.6695 ms/op | 0.94 |
| BLS verifyMultipleSignatures - same message - 128 - blst | 4.2587 ms/op | 4.4582 ms/op | 0.96 |
| BLS aggregatePubkeys 32 - blst | 19.156 us/op | 19.749 us/op | 0.97 |
| BLS aggregatePubkeys 128 - blst | 69.206 us/op | 71.079 us/op | 0.97 |
| notSeenSlots=1 numMissedVotes=1 numBadVotes=10 | 47.826 ms/op | 51.693 ms/op | 0.93 |
| notSeenSlots=1 numMissedVotes=0 numBadVotes=4 | 44.169 ms/op | 49.032 ms/op | 0.90 |
| notSeenSlots=2 numMissedVotes=1 numBadVotes=10 | 34.404 ms/op | 38.568 ms/op | 0.89 |
| getSlashingsAndExits - default max | 71.170 us/op | 73.504 us/op | 0.97 |
| getSlashingsAndExits - 2k | 278.50 us/op | 367.92 us/op | 0.76 |
| isKnown best case - 1 super set check | 200.00 ns/op | 206.00 ns/op | 0.97 |
| isKnown normal case - 2 super set checks | 197.00 ns/op | 202.00 ns/op | 0.98 |
| isKnown worse case - 16 super set checks | 194.00 ns/op | 202.00 ns/op | 0.96 |
| InMemoryCheckpointStateCache - add get delete | 2.2810 us/op | 2.3890 us/op | 0.95 |
| validate api signedAggregateAndProof - struct | 1.3112 ms/op | 1.4865 ms/op | 0.88 |
| validate gossip signedAggregateAndProof - struct | 1.3101 ms/op | 1.4470 ms/op | 0.91 |
| batch validate gossip attestation - vc 640000 - chunk 32 | 111.96 us/op | 122.01 us/op | 0.92 |
| batch validate gossip attestation - vc 640000 - chunk 64 | 100.28 us/op | 108.23 us/op | 0.93 |
| batch validate gossip attestation - vc 640000 - chunk 128 | 94.611 us/op | 102.72 us/op | 0.92 |
| batch validate gossip attestation - vc 640000 - chunk 256 | 99.307 us/op | 110.17 us/op | 0.90 |
| pickEth1Vote - no votes | 1.4837 ms/op | 980.74 us/op | 1.51 |
| pickEth1Vote - max votes | 7.5354 ms/op | 7.7709 ms/op | 0.97 |
| pickEth1Vote - Eth1Data hashTreeRoot value x2048 | 11.390 ms/op | 13.349 ms/op | 0.85 |
| pickEth1Vote - Eth1Data hashTreeRoot tree x2048 | 16.515 ms/op | 19.900 ms/op | 0.83 |
| pickEth1Vote - Eth1Data fastSerialize value x2048 | 446.62 us/op | 433.52 us/op | 1.03 |
| pickEth1Vote - Eth1Data fastSerialize tree x2048 | 3.5162 ms/op | 2.4563 ms/op | 1.43 |
| bytes32 toHexString | 364.00 ns/op | 373.00 ns/op | 0.98 |
| bytes32 Buffer.toString(hex) | 254.00 ns/op | 247.00 ns/op | 1.03 |
| bytes32 Buffer.toString(hex) from Uint8Array | 322.00 ns/op | 336.00 ns/op | 0.96 |
| bytes32 Buffer.toString(hex) + 0x | 253.00 ns/op | 249.00 ns/op | 1.02 |
| Object access 1 prop | 0.11600 ns/op | 0.12500 ns/op | 0.93 |
| Map access 1 prop | 0.12200 ns/op | 0.13400 ns/op | 0.91 |
| Object get x1000 | 5.8140 ns/op | 5.8220 ns/op | 1.00 |
| Map get x1000 | 6.2780 ns/op | 6.5170 ns/op | 0.96 |
| Object set x1000 | 29.836 ns/op | 31.877 ns/op | 0.94 |
| Map set x1000 | 20.800 ns/op | 21.298 ns/op | 0.98 |
| Return object 10000 times | 0.28590 ns/op | 0.29410 ns/op | 0.97 |
| Throw Error 10000 times | 4.8683 us/op | 4.3822 us/op | 1.11 |
| toHex | 132.19 ns/op | 140.82 ns/op | 0.94 |
| Buffer.from | 120.30 ns/op | 127.75 ns/op | 0.94 |
| shared Buffer | 91.587 ns/op | 88.892 ns/op | 1.03 |
| fastMsgIdFn sha256 / 200 bytes | 2.1640 us/op | 2.2150 us/op | 0.98 |
| fastMsgIdFn h32 xxhash / 200 bytes | 203.00 ns/op | 203.00 ns/op | 1.00 |
| fastMsgIdFn h64 xxhash / 200 bytes | 262.00 ns/op | 262.00 ns/op | 1.00 |
| fastMsgIdFn sha256 / 1000 bytes | 7.0530 us/op | 7.4480 us/op | 0.95 |
| fastMsgIdFn h32 xxhash / 1000 bytes | 330.00 ns/op | 342.00 ns/op | 0.96 |
| fastMsgIdFn h64 xxhash / 1000 bytes | 334.00 ns/op | 339.00 ns/op | 0.99 |
| fastMsgIdFn sha256 / 10000 bytes | 63.894 us/op | 66.840 us/op | 0.96 |
| fastMsgIdFn h32 xxhash / 10000 bytes | 1.9110 us/op | 1.8390 us/op | 1.04 |
| fastMsgIdFn h64 xxhash / 10000 bytes | 1.3000 us/op | 1.2170 us/op | 1.07 |
| 100 bytes - compress - snappyjs | 2.1451 us/op | 1.5388 us/op | 1.39 |
| 100 bytes - compress - snappy | 1.3147 us/op | 1.1514 us/op | 1.14 |
| 200 bytes - compress - snappyjs | 2.0761 us/op | 1.9755 us/op | 1.05 |
| 200 bytes - compress - snappy | 1.3791 us/op | 1.3096 us/op | 1.05 |
| 300 bytes - compress - snappyjs | 2.6499 us/op | 2.9092 us/op | 0.91 |
| 300 bytes - compress - snappy | 1.8730 us/op | 1.3695 us/op | 1.37 |
| 400 bytes - compress - snappyjs | 3.1558 us/op | 3.1368 us/op | 1.01 |
| 400 bytes - compress - snappy | 1.3797 us/op | 1.3746 us/op | 1.00 |
| 500 bytes - compress - snappyjs | 3.9193 us/op | 3.2497 us/op | 1.21 |
| 500 bytes - compress - snappy | 1.4425 us/op | 1.4557 us/op | 0.99 |
| 1000 bytes - compress - snappyjs | 4.5199 us/op | 4.4018 us/op | 1.03 |
| 1000 bytes - compress - snappy | 1.8067 us/op | 1.9490 us/op | 0.93 |
| 10000 bytes - compress - snappyjs | 32.645 us/op | 33.173 us/op | 0.98 |
| 10000 bytes - compress - snappy | 34.897 us/op | 41.044 us/op | 0.85 |
| 100 bytes - uncompress - snappyjs | 874.60 ns/op | 1.2104 us/op | 0.72 |
| 100 bytes - uncompress - snappy | 1.0910 us/op | 1.1073 us/op | 0.99 |
| 200 bytes - uncompress - snappyjs | 1.4228 us/op | 1.6762 us/op | 0.85 |
| 200 bytes - uncompress - snappy | 1.3319 us/op | 1.0698 us/op | 1.25 |
| 300 bytes - uncompress - snappyjs | 2.0756 us/op | 1.4565 us/op | 1.43 |
| 300 bytes - uncompress - snappy | 1.3055 us/op | 1.1131 us/op | 1.17 |
| 400 bytes - uncompress - snappyjs | 1.3318 us/op | 1.5967 us/op | 0.83 |
| 400 bytes - uncompress - snappy | 2.8984 us/op | 1.2693 us/op | 2.28 |
| 500 bytes - uncompress - snappyjs | 2.1812 us/op | 1.8874 us/op | 1.16 |
| 500 bytes - uncompress - snappy | 1.3916 us/op | 1.2474 us/op | 1.12 |
| 1000 bytes - uncompress - snappyjs | 2.3255 us/op | 2.7853 us/op | 0.83 |
| 1000 bytes - uncompress - snappy | 1.7686 us/op | 1.5457 us/op | 1.14 |
| 10000 bytes - uncompress - snappyjs | 17.926 us/op | 14.725 us/op | 1.22 |
| 10000 bytes - uncompress - snappy | 8.2573 us/op | 30.164 us/op | 0.27 |
| send data - 1000 256B messages | 39.583 ms/op | 17.988 ms/op | 2.20 |
| send data - 1000 512B messages | 46.127 ms/op | 22.664 ms/op | 2.04 |
| send data - 1000 1024B messages | 61.962 ms/op | 32.989 ms/op | 1.88 |
| send data - 1000 1200B messages | 58.685 ms/op | 32.566 ms/op | 1.80 |
| send data - 1000 2048B messages | 60.987 ms/op | 28.950 ms/op | 2.11 |
| send data - 1000 4096B messages | 67.697 ms/op | 34.075 ms/op | 1.99 |
| send data - 1000 16384B messages | 90.496 ms/op | 51.049 ms/op | 1.77 |
| send data - 1000 65536B messages | 214.30 ms/op | 119.80 ms/op | 1.79 |
| enrSubnets - fastDeserialize 64 bits | 2.0140 us/op | 901.00 ns/op | 2.24 |
| enrSubnets - ssz BitVector 64 bits | 762.00 ns/op | 331.00 ns/op | 2.30 |
| enrSubnets - fastDeserialize 4 bits | 285.00 ns/op | 126.00 ns/op | 2.26 |
| enrSubnets - ssz BitVector 4 bits | 765.00 ns/op | 333.00 ns/op | 2.30 |
| prioritizePeers score -10:0 att 32-0.1 sync 2-0 | 375.86 us/op | 238.96 us/op | 1.57 |
| prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 | 345.11 us/op | 268.03 us/op | 1.29 |
| prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 | 485.79 us/op | 392.07 us/op | 1.24 |
| prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 | 956.47 us/op | 726.23 us/op | 1.32 |
| prioritizePeers score 0:0 att 64-1 sync 4-1 | 1.1990 ms/op | 874.15 us/op | 1.37 |
| array of 16000 items push then shift | 1.8133 us/op | 1.6738 us/op | 1.08 |
| LinkedList of 16000 items push then shift | 11.895 ns/op | 7.5640 ns/op | 1.57 |
| array of 16000 items push then pop | 102.90 ns/op | 84.294 ns/op | 1.22 |
| LinkedList of 16000 items push then pop | 10.655 ns/op | 8.0060 ns/op | 1.33 |
| array of 24000 items push then shift | 2.6766 us/op | 2.3882 us/op | 1.12 |
| LinkedList of 24000 items push then shift | 12.785 ns/op | 7.5790 ns/op | 1.69 |
| array of 24000 items push then pop | 144.14 ns/op | 111.10 ns/op | 1.30 |
| LinkedList of 24000 items push then pop | 10.597 ns/op | 8.5430 ns/op | 1.24 |
| intersect bitArray bitLen 8 | 7.0920 ns/op | 6.4600 ns/op | 1.10 |
| intersect array and set length 8 | 47.596 ns/op | 37.644 ns/op | 1.26 |
| intersect bitArray bitLen 128 | 34.011 ns/op | 29.570 ns/op | 1.15 |
| intersect array and set length 128 | 1.1559 us/op | 627.74 ns/op | 1.84 |
| bitArray.getTrueBitIndexes() bitLen 128 | 1.6650 us/op | 1.0170 us/op | 1.64 |
| bitArray.getTrueBitIndexes() bitLen 248 | 2.4850 us/op | 1.7850 us/op | 1.39 |
| bitArray.getTrueBitIndexes() bitLen 512 | 5.8190 us/op | 3.7850 us/op | 1.54 |
| Full columns - reconstruct all 6 blobs | 178.41 us/op | 112.83 us/op | 1.58 |
| Full columns - reconstruct half of the blobs out of 6 | 82.291 us/op | 44.118 us/op | 1.87 |
| Full columns - reconstruct single blob out of 6 | 39.788 us/op | 20.005 us/op | 1.99 |
| Half columns - reconstruct all 6 blobs | 393.83 ms/op | 279.40 ms/op | 1.41 |
| Half columns - reconstruct half of the blobs out of 6 | 181.31 ms/op | 137.91 ms/op | 1.31 |
| Half columns - reconstruct single blob out of 6 | 76.362 ms/op | 57.368 ms/op | 1.33 |
| Full columns - reconstruct all 10 blobs | 329.48 us/op | 153.69 us/op | 2.14 |
| Full columns - reconstruct half of the blobs out of 10 | 144.26 us/op | 72.639 us/op | 1.99 |
| Full columns - reconstruct single blob out of 10 | 36.148 us/op | 21.622 us/op | 1.67 |
| Half columns - reconstruct all 10 blobs | 596.71 ms/op | 488.60 ms/op | 1.22 |
| Half columns - reconstruct half of the blobs out of 10 | 291.44 ms/op | 243.56 ms/op | 1.20 |
| Half columns - reconstruct single blob out of 10 | 67.901 ms/op | 51.053 ms/op | 1.33 |
| Full columns - reconstruct all 20 blobs | 792.28 us/op | 301.38 us/op | 2.63 |
| Full columns - reconstruct half of the blobs out of 20 | 305.11 us/op | 145.38 us/op | 2.10 |
| Full columns - reconstruct single blob out of 20 | 39.273 us/op | 21.550 us/op | 1.82 |
| Half columns - reconstruct all 20 blobs | 1.1058 s/op | 907.67 ms/op | 1.22 |
| Half columns - reconstruct half of the blobs out of 20 | 472.53 ms/op | 460.94 ms/op | 1.03 |
| Half columns - reconstruct single blob out of 20 | 54.147 ms/op | 51.574 ms/op | 1.05 |
| Buffer.concat 32 items | 623.00 ns/op | 618.00 ns/op | 1.01 |
| Uint8Array.set 32 items | 1.0250 us/op | 1.3590 us/op | 0.75 |
| Buffer.copy | 2.7520 us/op | 2.1440 us/op | 1.28 |
| Uint8Array.set - with subarray | 1.7030 us/op | 1.6900 us/op | 1.01 |
| Uint8Array.set - without subarray | 1.1730 us/op | 1.2770 us/op | 0.92 |
| getUint32 - dataview | 200.00 ns/op | 200.00 ns/op | 1.00 |
| getUint32 - manual | 126.00 ns/op | 125.00 ns/op | 1.01 |
| Set add up to 64 items then delete first | 2.2354 us/op | 2.3611 us/op | 0.95 |
| OrderedSet add up to 64 items then delete first | 3.5971 us/op | 3.3344 us/op | 1.08 |
| Set add up to 64 items then delete last | 2.4087 us/op | 2.5730 us/op | 0.94 |
| OrderedSet add up to 64 items then delete last | 4.0709 us/op | 4.2142 us/op | 0.97 |
| Set add up to 64 items then delete middle | 2.5453 us/op | 2.8116 us/op | 0.91 |
| OrderedSet add up to 64 items then delete middle | 6.2293 us/op | 6.2742 us/op | 0.99 |
| Set add up to 128 items then delete first | 5.8591 us/op | 5.7595 us/op | 1.02 |
| OrderedSet add up to 128 items then delete first | 8.1088 us/op | 8.9823 us/op | 0.90 |
| Set add up to 128 items then delete last | 5.6224 us/op | 5.3006 us/op | 1.06 |
| OrderedSet add up to 128 items then delete last | 7.4618 us/op | 8.8718 us/op | 0.84 |
| Set add up to 128 items then delete middle | 4.9780 us/op | 5.3215 us/op | 0.94 |
| OrderedSet add up to 128 items then delete middle | 14.584 us/op | 14.919 us/op | 0.98 |
| Set add up to 256 items then delete first | 11.017 us/op | 11.655 us/op | 0.95 |
| OrderedSet add up to 256 items then delete first | 15.951 us/op | 16.590 us/op | 0.96 |
| Set add up to 256 items then delete last | 9.8245 us/op | 10.198 us/op | 0.96 |
| OrderedSet add up to 256 items then delete last | 14.783 us/op | 15.086 us/op | 0.98 |
| Set add up to 256 items then delete middle | 9.8016 us/op | 9.4703 us/op | 1.03 |
| OrderedSet add up to 256 items then delete middle | 41.655 us/op | 43.032 us/op | 0.97 |
| transfer serialized Status (84 B) | 2.2260 us/op | 2.1850 us/op | 1.02 |
| copy serialized Status (84 B) | 1.2430 us/op | 1.1910 us/op | 1.04 |
| transfer serialized SignedVoluntaryExit (112 B) | 2.2590 us/op | 2.2380 us/op | 1.01 |
| copy serialized SignedVoluntaryExit (112 B) | 1.2260 us/op | 1.2140 us/op | 1.01 |
| transfer serialized ProposerSlashing (416 B) | 2.3470 us/op | 2.2860 us/op | 1.03 |
| copy serialized ProposerSlashing (416 B) | 1.4920 us/op | 1.2600 us/op | 1.18 |
| transfer serialized Attestation (485 B) | 3.7690 us/op | 2.3140 us/op | 1.63 |
| copy serialized Attestation (485 B) | 1.3210 us/op | 1.2850 us/op | 1.03 |
| transfer serialized AttesterSlashing (33232 B) | 2.4550 us/op | 2.5190 us/op | 0.97 |
| copy serialized AttesterSlashing (33232 B) | 3.8360 us/op | 4.3090 us/op | 0.89 |
| transfer serialized Small SignedBeaconBlock (128000 B) | 3.7870 us/op | 4.1020 us/op | 0.92 |
| copy serialized Small SignedBeaconBlock (128000 B) | 10.753 us/op | 14.120 us/op | 0.76 |
| transfer serialized Avg SignedBeaconBlock (200000 B) | 4.2100 us/op | 4.2770 us/op | 0.98 |
| copy serialized Avg SignedBeaconBlock (200000 B) | 17.545 us/op | 18.530 us/op | 0.95 |
| transfer serialized BlobsSidecar (524380 B) | 4.7200 us/op | 5.1500 us/op | 0.92 |
| copy serialized BlobsSidecar (524380 B) | 62.069 us/op | 110.96 us/op | 0.56 |
| transfer serialized Big SignedBeaconBlock (1000000 B) | 5.2890 us/op | 5.2780 us/op | 1.00 |
| copy serialized Big SignedBeaconBlock (1000000 B) | 140.00 us/op | 126.67 us/op | 1.11 |
| pass gossip attestations to forkchoice per slot | 2.7176 ms/op | 2.7269 ms/op | 1.00 |
| forkChoice updateHead vc 100000 bc 64 eq 0 | 488.80 us/op | 471.24 us/op | 1.04 |
| forkChoice updateHead vc 600000 bc 64 eq 0 | 2.7944 ms/op | 2.8099 ms/op | 0.99 |
| forkChoice updateHead vc 1000000 bc 64 eq 0 | 4.7018 ms/op | 4.6809 ms/op | 1.00 |
| forkChoice updateHead vc 600000 bc 320 eq 0 | 2.8461 ms/op | 2.8330 ms/op | 1.00 |
| forkChoice updateHead vc 600000 bc 1200 eq 0 | 2.8566 ms/op | 2.8651 ms/op | 1.00 |
| forkChoice updateHead vc 600000 bc 7200 eq 0 | 3.1062 ms/op | 3.1782 ms/op | 0.98 |
| forkChoice updateHead vc 600000 bc 64 eq 1000 | 2.8314 ms/op | 2.9129 ms/op | 0.97 |
| forkChoice updateHead vc 600000 bc 64 eq 10000 | 2.9454 ms/op | 3.0470 ms/op | 0.97 |
| forkChoice updateHead vc 600000 bc 64 eq 300000 | 9.2782 ms/op | 9.5957 ms/op | 0.97 |
| computeDeltas 1400000 validators 0% inactive | 13.603 ms/op | 13.791 ms/op | 0.99 |
| computeDeltas 1400000 validators 10% inactive | 12.673 ms/op | 12.810 ms/op | 0.99 |
| computeDeltas 1400000 validators 20% inactive | 11.529 ms/op | 11.513 ms/op | 1.00 |
| computeDeltas 1400000 validators 50% inactive | 8.7074 ms/op | 8.7964 ms/op | 0.99 |
| computeDeltas 2100000 validators 0% inactive | 20.534 ms/op | 20.615 ms/op | 1.00 |
| computeDeltas 2100000 validators 10% inactive | 18.818 ms/op | 18.817 ms/op | 1.00 |
| computeDeltas 2100000 validators 20% inactive | 16.636 ms/op | 17.006 ms/op | 0.98 |
| computeDeltas 2100000 validators 50% inactive | 12.584 ms/op | 13.015 ms/op | 0.97 |
| altair processAttestation - 250000 vs - 7PWei normalcase | 1.9350 ms/op | 2.0712 ms/op | 0.93 |
| altair processAttestation - 250000 vs - 7PWei worstcase | 2.7850 ms/op | 2.8745 ms/op | 0.97 |
| altair processAttestation - setStatus - 1/6 committees join | 117.95 us/op | 121.54 us/op | 0.97 |
| altair processAttestation - setStatus - 1/3 committees join | 226.84 us/op | 245.14 us/op | 0.93 |
| altair processAttestation - setStatus - 1/2 committees join | 319.36 us/op | 327.93 us/op | 0.97 |
| altair processAttestation - setStatus - 2/3 committees join | 414.74 us/op | 425.43 us/op | 0.97 |
| altair processAttestation - setStatus - 4/5 committees join | 582.75 us/op | 588.04 us/op | 0.99 |
| altair processAttestation - setStatus - 100% committees join | 677.51 us/op | 688.86 us/op | 0.98 |
| altair processBlock - 250000 vs - 7PWei normalcase | 4.2033 ms/op | 4.1833 ms/op | 1.00 |
| altair processBlock - 250000 vs - 7PWei normalcase hashState | 29.946 ms/op | 32.414 ms/op | 0.92 |
| altair processBlock - 250000 vs - 7PWei worstcase | 33.872 ms/op | 32.092 ms/op | 1.06 |
| altair processBlock - 250000 vs - 7PWei worstcase hashState | 72.891 ms/op | 67.404 ms/op | 1.08 |
| phase0 processBlock - 250000 vs - 7PWei normalcase | 1.7785 ms/op | 1.6079 ms/op | 1.11 |
| phase0 processBlock - 250000 vs - 7PWei worstcase | 21.540 ms/op | 21.154 ms/op | 1.02 |
| altair processEth1Data - 250000 vs - 7PWei normalcase | 346.87 us/op | 329.68 us/op | 1.05 |
| getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 | 6.8650 us/op | 6.4230 us/op | 1.07 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 | 51.651 us/op | 45.606 us/op | 1.13 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 | 13.874 us/op | 11.790 us/op | 1.18 |
| getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 | 8.0030 us/op | 6.4040 us/op | 1.25 |
| getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 | 151.99 us/op | 146.44 us/op | 1.04 |
| getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 | 1.9158 ms/op | 1.8073 ms/op | 1.06 |
| getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 | 2.4532 ms/op | 2.3754 ms/op | 1.03 |
| getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 | 2.4497 ms/op | 2.2702 ms/op | 1.08 |
| getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 | 4.7515 ms/op | 4.6174 ms/op | 1.03 |
| getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 | 2.6079 ms/op | 2.3823 ms/op | 1.09 |
| getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 | 4.8501 ms/op | 4.5779 ms/op | 1.06 |
| Tree 40 250000 create | 453.35 ms/op | 427.18 ms/op | 1.06 |
| Tree 40 250000 get(125000) | 134.04 ns/op | 135.06 ns/op | 0.99 |
| Tree 40 250000 set(125000) | 1.4226 us/op | 1.4687 us/op | 0.97 |
| Tree 40 250000 toArray() | 19.482 ms/op | 15.538 ms/op | 1.25 |
| Tree 40 250000 iterate all - toArray() + loop | 19.741 ms/op | 15.381 ms/op | 1.28 |
| Tree 40 250000 iterate all - get(i) | 56.299 ms/op | 49.062 ms/op | 1.15 |
| Array 250000 create | 3.3891 ms/op | 3.6792 ms/op | 0.92 |
| Array 250000 clone - spread | 819.88 us/op | 784.59 us/op | 1.04 |
| Array 250000 get(125000) | 0.40000 ns/op | 0.40600 ns/op | 0.99 |
| Array 250000 set(125000) | 0.42200 ns/op | 0.43000 ns/op | 0.98 |
| Array 250000 iterate all - loop | 83.928 us/op | 100.67 us/op | 0.83 |
| phase0 afterProcessEpoch - 250000 vs - 7PWei | 84.046 ms/op | 39.972 ms/op | 2.10 |
| Array.fill - length 1000000 | 3.3906 ms/op | 3.2827 ms/op | 1.03 |
| Array push - length 1000000 | 15.594 ms/op | 13.586 ms/op | 1.15 |
| Array.get | 0.28183 ns/op | 0.27835 ns/op | 1.01 |
| Uint8Array.get | 0.43621 ns/op | 0.43404 ns/op | 1.00 |
| phase0 beforeProcessEpoch - 250000 vs - 7PWei | 19.203 ms/op | 16.106 ms/op | 1.19 |
| altair processEpoch - mainnet_e81889 | 298.60 ms/op | 278.45 ms/op | 1.07 |
| mainnet_e81889 - altair beforeProcessEpoch | 19.610 ms/op | 18.917 ms/op | 1.04 |
| mainnet_e81889 - altair processJustificationAndFinalization | 5.6510 us/op | 5.4360 us/op | 1.04 |
| mainnet_e81889 - altair processInactivityUpdates | 4.9660 ms/op | 4.2138 ms/op | 1.18 |
| mainnet_e81889 - altair processRewardsAndPenalties | 38.840 ms/op | 37.470 ms/op | 1.04 |
| mainnet_e81889 - altair processRegistryUpdates | 699.00 ns/op | 651.00 ns/op | 1.07 |
| mainnet_e81889 - altair processSlashings | 177.00 ns/op | 180.00 ns/op | 0.98 |
| mainnet_e81889 - altair processEth1DataReset | 172.00 ns/op | 175.00 ns/op | 0.98 |
| mainnet_e81889 - altair processEffectiveBalanceUpdates | 1.2158 ms/op | 1.2018 ms/op | 1.01 |
| mainnet_e81889 - altair processSlashingsReset | 881.00 ns/op | 832.00 ns/op | 1.06 |
| mainnet_e81889 - altair processRandaoMixesReset | 1.1520 us/op | 1.0900 us/op | 1.06 |
| mainnet_e81889 - altair processHistoricalRootsUpdate | 173.00 ns/op | 174.00 ns/op | 0.99 |
| mainnet_e81889 - altair processParticipationFlagUpdates | 521.00 ns/op | 503.00 ns/op | 1.04 |
| mainnet_e81889 - altair processSyncCommitteeUpdates | 137.00 ns/op | 141.00 ns/op | 0.97 |
| mainnet_e81889 - altair afterProcessEpoch | 89.294 ms/op | 43.873 ms/op | 2.04 |
| capella processEpoch - mainnet_e217614 | 1.1090 s/op | 831.10 ms/op | 1.33 |
| mainnet_e217614 - capella beforeProcessEpoch | 72.031 ms/op | 60.844 ms/op | 1.18 |
| mainnet_e217614 - capella processJustificationAndFinalization | 5.8520 us/op | 5.1700 us/op | 1.13 |
| mainnet_e217614 - capella processInactivityUpdates | 15.378 ms/op | 14.075 ms/op | 1.09 |
| mainnet_e217614 - capella processRewardsAndPenalties | 198.08 ms/op | 175.72 ms/op | 1.13 |
| mainnet_e217614 - capella processRegistryUpdates | 6.9530 us/op | 6.2760 us/op | 1.11 |
| mainnet_e217614 - capella processSlashings | 199.00 ns/op | 173.00 ns/op | 1.15 |
| mainnet_e217614 - capella processEth1DataReset | 210.00 ns/op | 172.00 ns/op | 1.22 |
| mainnet_e217614 - capella processEffectiveBalanceUpdates | 4.5977 ms/op | 10.310 ms/op | 0.45 |
| mainnet_e217614 - capella processSlashingsReset | 927.00 ns/op | 858.00 ns/op | 1.08 |
| mainnet_e217614 - capella processRandaoMixesReset | 1.2160 us/op | 1.1130 us/op | 1.09 |
| mainnet_e217614 - capella processHistoricalRootsUpdate | 182.00 ns/op | 172.00 ns/op | 1.06 |
| mainnet_e217614 - capella processParticipationFlagUpdates | 545.00 ns/op | 517.00 ns/op | 1.05 |
| mainnet_e217614 - capella afterProcessEpoch | 234.61 ms/op | 112.62 ms/op | 2.08 |
| phase0 processEpoch - mainnet_e58758 | 369.29 ms/op | 276.32 ms/op | 1.34 |
| mainnet_e58758 - phase0 beforeProcessEpoch | 102.75 ms/op | 73.257 ms/op | 1.40 |
| mainnet_e58758 - phase0 processJustificationAndFinalization | 6.5640 us/op | 5.5570 us/op | 1.18 |
| mainnet_e58758 - phase0 processRewardsAndPenalties | 50.220 ms/op | 39.694 ms/op | 1.27 |
| mainnet_e58758 - phase0 processRegistryUpdates | 3.3080 us/op | 3.1000 us/op | 1.07 |
| mainnet_e58758 - phase0 processSlashings | 184.00 ns/op | 178.00 ns/op | 1.03 |
| mainnet_e58758 - phase0 processEth1DataReset | 179.00 ns/op | 172.00 ns/op | 1.04 |
| mainnet_e58758 - phase0 processEffectiveBalanceUpdates | 1.6437 ms/op | 1.1940 ms/op | 1.38 |
| mainnet_e58758 - phase0 processSlashingsReset | 1.0340 us/op | 935.00 ns/op | 1.11 |
| mainnet_e58758 - phase0 processRandaoMixesReset | 1.2110 us/op | 1.2050 us/op | 1.00 |
| mainnet_e58758 - phase0 processHistoricalRootsUpdate | 178.00 ns/op | 177.00 ns/op | 1.01 |
| mainnet_e58758 - phase0 processParticipationRecordUpdates | 936.00 ns/op | 891.00 ns/op | 1.05 |
| mainnet_e58758 - phase0 afterProcessEpoch | 75.609 ms/op | 41.204 ms/op | 1.83 |
| phase0 processEffectiveBalanceUpdates - 250000 normalcase | 1.4053 ms/op | 1.3691 ms/op | 1.03 |
| phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 | 3.7009 ms/op | 2.5541 ms/op | 1.45 |
| altair processInactivityUpdates - 250000 normalcase | 22.631 ms/op | 16.882 ms/op | 1.34 |
| altair processInactivityUpdates - 250000 worstcase | 19.521 ms/op | 18.353 ms/op | 1.06 |
| phase0 processRegistryUpdates - 250000 normalcase | 8.9940 us/op | 6.7410 us/op | 1.33 |
| phase0 processRegistryUpdates - 250000 badcase_full_deposits | 301.37 us/op | 255.95 us/op | 1.18 |
| phase0 processRegistryUpdates - 250000 worstcase 0.5 | 121.70 ms/op | 96.545 ms/op | 1.26 |
| altair processRewardsAndPenalties - 250000 normalcase | 32.430 ms/op | 26.161 ms/op | 1.24 |
| altair processRewardsAndPenalties - 250000 worstcase | 31.745 ms/op | 25.134 ms/op | 1.26 |
| phase0 getAttestationDeltas - 250000 normalcase | 9.6704 ms/op | 6.8177 ms/op | 1.42 |
| phase0 getAttestationDeltas - 250000 worstcase | 8.2413 ms/op | 5.8273 ms/op | 1.41 |
| phase0 processSlashings - 250000 worstcase | 115.14 us/op | 85.852 us/op | 1.34 |
| altair processSyncCommitteeUpdates - 250000 | 12.227 ms/op | 10.980 ms/op | 1.11 |
| BeaconState.hashTreeRoot - No change | 228.00 ns/op | 210.00 ns/op | 1.09 |
| BeaconState.hashTreeRoot - 1 full validator | 107.94 us/op | 97.167 us/op | 1.11 |
| BeaconState.hashTreeRoot - 32 full validator | 1.0544 ms/op | 775.74 us/op | 1.36 |
| BeaconState.hashTreeRoot - 512 full validator | 12.855 ms/op | 9.0847 ms/op | 1.42 |
| BeaconState.hashTreeRoot - 1 validator.effectiveBalance | 109.98 us/op | 92.188 us/op | 1.19 |
| BeaconState.hashTreeRoot - 32 validator.effectiveBalance | 1.5276 ms/op | 1.3500 ms/op | 1.13 |
| BeaconState.hashTreeRoot - 512 validator.effectiveBalance | 22.068 ms/op | 22.820 ms/op | 0.97 |
| BeaconState.hashTreeRoot - 1 balances | 73.724 us/op | 74.885 us/op | 0.98 |
| BeaconState.hashTreeRoot - 32 balances | 782.20 us/op | 805.19 us/op | 0.97 |
| BeaconState.hashTreeRoot - 512 balances | 8.7093 ms/op | 8.2607 ms/op | 1.05 |
| BeaconState.hashTreeRoot - 250000 balances | 200.03 ms/op | 168.03 ms/op | 1.19 |
| aggregationBits - 2048 els - zipIndexesInBitList | 33.268 us/op | 21.714 us/op | 1.53 |
| byteArrayEquals 32 | 62.055 ns/op | 53.562 ns/op | 1.16 |
| Buffer.compare 32 | 18.134 ns/op | 16.989 ns/op | 1.07 |
| byteArrayEquals 1024 | 1.7761 us/op | 1.5795 us/op | 1.12 |
| Buffer.compare 1024 | 25.363 ns/op | 25.180 ns/op | 1.01 |
| byteArrayEquals 16384 | 26.105 us/op | 25.041 us/op | 1.04 |
| Buffer.compare 16384 | 184.25 ns/op | 225.83 ns/op | 0.82 |
| byteArrayEquals 123687377 | 197.46 ms/op | 192.24 ms/op | 1.03 |
| Buffer.compare 123687377 | 7.2639 ms/op | 7.0428 ms/op | 1.03 |
| byteArrayEquals 32 - diff last byte | 52.564 ns/op | 51.878 ns/op | 1.01 |
| Buffer.compare 32 - diff last byte | 17.285 ns/op | 16.821 ns/op | 1.03 |
| byteArrayEquals 1024 - diff last byte | 1.5969 us/op | 1.5819 us/op | 1.01 |
| Buffer.compare 1024 - diff last byte | 24.747 ns/op | 24.712 ns/op | 1.00 |
| byteArrayEquals 16384 - diff last byte | 25.568 us/op | 25.204 us/op | 1.01 |
| Buffer.compare 16384 - diff last byte | 199.88 ns/op | 194.10 ns/op | 1.03 |
| byteArrayEquals 123687377 - diff last byte | 195.18 ms/op | 187.06 ms/op | 1.04 |
| Buffer.compare 123687377 - diff last byte | 8.4975 ms/op | 6.3965 ms/op | 1.33 |
| byteArrayEquals 32 - random bytes | 5.2210 ns/op | 4.9590 ns/op | 1.05 |
| Buffer.compare 32 - random bytes | 17.405 ns/op | 16.636 ns/op | 1.05 |
| byteArrayEquals 1024 - random bytes | 5.1270 ns/op | 4.9450 ns/op | 1.04 |
| Buffer.compare 1024 - random bytes | 17.922 ns/op | 16.554 ns/op | 1.08 |
| byteArrayEquals 16384 - random bytes | 5.1600 ns/op | 4.9260 ns/op | 1.05 |
| Buffer.compare 16384 - random bytes | 17.982 ns/op | 16.457 ns/op | 1.09 |
| byteArrayEquals 123687377 - random bytes | 6.3500 ns/op | 6.2500 ns/op | 1.02 |
| Buffer.compare 123687377 - random bytes | 18.770 ns/op | 17.830 ns/op | 1.05 |
| regular array get 100000 times | 35.853 us/op | 42.507 us/op | 0.84 |
| wrappedArray get 100000 times | 32.556 us/op | 31.602 us/op | 1.03 |
| arrayWithProxy get 100000 times | 13.459 ms/op | 17.787 ms/op | 0.76 |
| ssz.Root.equals | 45.806 ns/op | 44.705 ns/op | 1.02 |
| byteArrayEquals | 44.898 ns/op | 43.852 ns/op | 1.02 |
| Buffer.compare | 10.217 ns/op | 10.072 ns/op | 1.01 |
| processSlot - 1 slots | 9.9970 us/op | 10.122 us/op | 0.99 |
| processSlot - 32 slots | 2.0277 ms/op | 3.3013 ms/op | 0.61 |
| getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei | 3.1659 ms/op | 2.8532 ms/op | 1.11 |
| getCommitteeAssignments - req 1 vs - 250000 vc | 2.1154 ms/op | 2.0683 ms/op | 1.02 |
| getCommitteeAssignments - req 100 vs - 250000 vc | 4.1249 ms/op | 4.0247 ms/op | 1.02 |
| getCommitteeAssignments - req 1000 vs - 250000 vc | 4.3770 ms/op | 4.3005 ms/op | 1.02 |
| findModifiedValidators - 10000 modified validators | 723.21 ms/op | 728.18 ms/op | 0.99 |
| findModifiedValidators - 1000 modified validators | 770.35 ms/op | 668.63 ms/op | 1.15 |
| findModifiedValidators - 100 modified validators | 282.87 ms/op | 212.87 ms/op | 1.33 |
| findModifiedValidators - 10 modified validators | 215.13 ms/op | 139.00 ms/op | 1.55 |
| findModifiedValidators - 1 modified validators | 188.79 ms/op | 159.02 ms/op | 1.19 |
| findModifiedValidators - no difference | 258.16 ms/op | 208.95 ms/op | 1.24 |
| compare ViewDUs | 6.5615 s/op | 6.0907 s/op | 1.08 |
| compare each validator Uint8Array | 1.2488 s/op | 1.5051 s/op | 0.83 |
| compare ViewDU to Uint8Array | 1.0471 s/op | 1.0481 s/op | 1.00 |
| migrate state 1000000 validators, 24 modified, 0 new | 1.0214 s/op | 890.15 ms/op | 1.15 |
| migrate state 1000000 validators, 1700 modified, 1000 new | 1.3716 s/op | 1.4564 s/op | 0.94 |
| migrate state 1000000 validators, 3400 modified, 2000 new | 1.5853 s/op | 1.7953 s/op | 0.88 |
| migrate state 1500000 validators, 24 modified, 0 new | 1.0646 s/op | 1.1681 s/op | 0.91 |
| migrate state 1500000 validators, 1700 modified, 1000 new | 1.2143 s/op | 1.5469 s/op | 0.78 |
| migrate state 1500000 validators, 3400 modified, 2000 new | 1.4290 s/op | 1.9849 s/op | 0.72 |
| RootCache.getBlockRootAtSlot - 250000 vs - 7PWei | 4.0600 ns/op | 4.4400 ns/op | 0.91 |
| state getBlockRootAtSlot - 250000 vs - 7PWei | 448.26 ns/op | 572.49 ns/op | 0.78 |
| naive computeProposerIndex 100000 validators | 46.966 ms/op | 79.483 ms/op | 0.59 |
| computeProposerIndex 100000 validators | 1.4696 ms/op | 1.6447 ms/op | 0.89 |
| naiveGetNextSyncCommitteeIndices 1000 validators | 7.5778 s/op | 11.225 s/op | 0.68 |
| getNextSyncCommitteeIndices 1000 validators | 105.88 ms/op | 140.63 ms/op | 0.75 |
| naiveGetNextSyncCommitteeIndices 10000 validators | 7.8099 s/op | 10.201 s/op | 0.77 |
| getNextSyncCommitteeIndices 10000 validators | 108.17 ms/op | 122.97 ms/op | 0.88 |
| naiveGetNextSyncCommitteeIndices 100000 validators | 7.7191 s/op | 9.4836 s/op | 0.81 |
| getNextSyncCommitteeIndices 100000 validators | 107.77 ms/op | 143.47 ms/op | 0.75 |
| naive computeShuffledIndex 100000 validators | 22.847 s/op | 31.771 s/op | 0.72 |
| cached computeShuffledIndex 100000 validators | 558.49 ms/op | 574.19 ms/op | 0.97 |
| naive computeShuffledIndex 2000000 validators | 445.80 s/op | 483.44 s/op | 0.92 |
| cached computeShuffledIndex 2000000 validators | 33.924 s/op | 41.901 s/op | 0.81 |
| computeProposers - vc 250000 | 603.62 us/op | 760.07 us/op | 0.79 |
| computeEpochShuffling - vc 250000 | 81.646 ms/op | 42.008 ms/op | 1.94 |
| getNextSyncCommittee - vc 250000 | 9.9979 ms/op | 10.535 ms/op | 0.95 |
| computeSigningRoot for AttestationData | 19.398 us/op | 21.442 us/op | 0.90 |
| hash AttestationData serialized data then Buffer.toString(base64) | 1.5643 us/op | 1.6005 us/op | 0.98 |
| toHexString serialized data | 1.1280 us/op | 1.2181 us/op | 0.93 |
| Buffer.toString(base64) | 164.71 ns/op | 169.04 ns/op | 0.97 |
| nodejs block root to RootHex using toHex | 144.34 ns/op | 152.79 ns/op | 0.94 |
| nodejs block root to RootHex using toRootHex | 83.988 ns/op | 87.425 ns/op | 0.96 |
| nodejs fromHex(blob) | 112.56 us/op | 120.97 us/op | 0.93 |
| nodejs fromHexInto(blob) | 812.42 us/op | 829.29 us/op | 0.98 |
| nodejs block root to RootHex using the deprecated toHexString | 209.99 ns/op | 218.28 ns/op | 0.96 |
| browser block root to RootHex using toHex | 175.74 ns/op | 176.33 ns/op | 1.00 |
| browser block root to RootHex using toRootHex | 165.76 ns/op | 166.35 ns/op | 1.00 |
| browser fromHex(blob) | 786.04 us/op | 799.93 us/op | 0.98 |
| browser fromHexInto(blob) | 819.88 us/op | 827.60 us/op | 0.99 |
| browser block root to RootHex using the deprecated toHexString | 842.45 ns/op | 837.78 ns/op | 1.01 |
by benchmarkbot/action
Codecov Report
:x: Patch coverage is 30.54662% with 864 lines in your changes missing coverage. Please review.
:white_check_mark: Project coverage is 51.82%. Comparing base (c9deb9b) to head (aed75aa).
:warning: Report is 1 commits behind head on unstable.
Additional details and impacted files
@@ Coverage Diff @@
## unstable #7342 +/- ##
============================================
- Coverage 52.24% 51.82% -0.43%
============================================
Files 852 860 +8
Lines 64991 66170 +1179
Branches 4772 4784 +12
============================================
+ Hits 33952 34290 +338
- Misses 30970 31811 +841
Partials 69 69
:rocket: New features to boost your workflow:
- :snowflake: Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
- :package: JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.