ChainSafe / lodestar

🌟 TypeScript Implementation of Ethereum Consensus
https://lodestar.chainsafe.io
Apache License 2.0
1.19k stars 291 forks source link

feat: placeholder PR for verge #7069

Open g11tech opened 2 months ago

g11tech commented 2 months ago

supercedes https://github.com/ChainSafe/lodestar/pull/5805 for CI and testing

github-actions[bot] commented 2 months ago

Performance Report

✔️ no performance regression detected

Full benchmark results | Benchmark suite | Current: aaba73f3f2b4eeb4d4a12748f3ea0afe8f6a824f | Previous: b05c93e1471083d10fefda20c11514fd3afe94df | Ratio | |-|-|-|-| | getPubkeys - index2pubkey - req 1000 vs - 250000 vc | 1.8955 ms/op | 1.8922 ms/op | 1.00 | | getPubkeys - validatorsArr - req 1000 vs - 250000 vc | 44.184 us/op | 50.311 us/op | 0.88 | | BLS verify - blst | 747.27 us/op | 910.11 us/op | 0.82 | | BLS verifyMultipleSignatures 3 - blst | 1.1524 ms/op | 1.2178 ms/op | 0.95 | | BLS verifyMultipleSignatures 8 - blst | 1.5848 ms/op | 1.9058 ms/op | 0.83 | | BLS verifyMultipleSignatures 32 - blst | 4.6622 ms/op | 5.4504 ms/op | 0.86 | | BLS verifyMultipleSignatures 64 - blst | 8.6721 ms/op | 10.784 ms/op | 0.80 | | BLS verifyMultipleSignatures 128 - blst | 16.636 ms/op | 17.466 ms/op | 0.95 | | BLS deserializing 10000 signatures | 663.10 ms/op | 682.83 ms/op | 0.97 | | BLS deserializing 100000 signatures | 6.5776 s/op | 6.8248 s/op | 0.96 | | BLS verifyMultipleSignatures - same message - 3 - blst | 868.93 us/op | 976.91 us/op | 0.89 | | BLS verifyMultipleSignatures - same message - 8 - blst | 950.10 us/op | 1.0508 ms/op | 0.90 | | BLS verifyMultipleSignatures - same message - 32 - blst | 1.5770 ms/op | 1.7194 ms/op | 0.92 | | BLS verifyMultipleSignatures - same message - 64 - blst | 2.3806 ms/op | 2.6214 ms/op | 0.91 | | BLS verifyMultipleSignatures - same message - 128 - blst | 4.1142 ms/op | 4.3843 ms/op | 0.94 | | BLS aggregatePubkeys 32 - blst | 18.941 us/op | 20.089 us/op | 0.94 | | BLS aggregatePubkeys 128 - blst | 67.850 us/op | 70.620 us/op | 0.96 | | notSeenSlots=1 numMissedVotes=1 numBadVotes=10 | 58.007 ms/op | 66.242 ms/op | 0.88 | | notSeenSlots=1 numMissedVotes=0 numBadVotes=4 | 45.657 ms/op | 65.782 ms/op | 0.69 | | notSeenSlots=2 numMissedVotes=1 numBadVotes=10 | 30.467 ms/op | 40.036 ms/op | 0.76 | | getSlashingsAndExits - default max | 84.112 us/op | 95.929 us/op | 0.88 | | getSlashingsAndExits - 2k | 244.02 us/op | 325.96 us/op | 0.75 | | proposeBlockBody type=full, size=empty | 5.6013 ms/op | 5.8315 ms/op | 0.96 | | isKnown best case - 1 super set check | 278.00 ns/op | 337.00 ns/op | 0.82 | | isKnown normal case - 2 super set checks | 267.00 ns/op | 323.00 ns/op | 0.83 | | isKnown worse case - 16 super set checks | 267.00 ns/op | 308.00 ns/op | 0.87 | | InMemoryCheckpointStateCache - add get delete | 2.5350 us/op | 3.1530 us/op | 0.80 | | updateUnfinalizedPubkeys - updating 10 pubkeys | 684.14 us/op | 619.81 us/op | 1.10 | | updateUnfinalizedPubkeys - updating 100 pubkeys | 2.4567 ms/op | 3.1527 ms/op | 0.78 | | updateUnfinalizedPubkeys - updating 1000 pubkeys | 49.575 ms/op | 55.751 ms/op | 0.89 | | validate api signedAggregateAndProof - struct | 1.3189 ms/op | 1.6223 ms/op | 0.81 | | validate gossip signedAggregateAndProof - struct | 1.3025 ms/op | 2.5773 ms/op | 0.51 | | validate gossip attestation - vc 640000 | 839.88 us/op | 1.1353 ms/op | 0.74 | | batch validate gossip attestation - vc 640000 - chunk 32 | 121.22 us/op | 138.26 us/op | 0.88 | | batch validate gossip attestation - vc 640000 - chunk 64 | 106.27 us/op | 114.88 us/op | 0.93 | | batch validate gossip attestation - vc 640000 - chunk 128 | 99.254 us/op | 107.09 us/op | 0.93 | | batch validate gossip attestation - vc 640000 - chunk 256 | 95.433 us/op | 106.31 us/op | 0.90 | | pickEth1Vote - no votes | 990.65 us/op | 1.2374 ms/op | 0.80 | | pickEth1Vote - max votes | 6.0009 ms/op | 8.7804 ms/op | 0.68 | | pickEth1Vote - Eth1Data hashTreeRoot value x2048 | 14.624 ms/op | 13.294 ms/op | 1.10 | | pickEth1Vote - Eth1Data hashTreeRoot tree x2048 | 19.366 ms/op | 19.563 ms/op | 0.99 | | pickEth1Vote - Eth1Data fastSerialize value x2048 | 442.04 us/op | 488.64 us/op | 0.90 | | pickEth1Vote - Eth1Data fastSerialize tree x2048 | 4.3340 ms/op | 2.7160 ms/op | 1.60 | | bytes32 toHexString | 409.00 ns/op | 475.00 ns/op | 0.86 | | bytes32 Buffer.toString(hex) | 230.00 ns/op | 264.00 ns/op | 0.87 | | bytes32 Buffer.toString(hex) from Uint8Array | 347.00 ns/op | 390.00 ns/op | 0.89 | | bytes32 Buffer.toString(hex) + 0x | 238.00 ns/op | 270.00 ns/op | 0.88 | | Object access 1 prop | 0.12800 ns/op | 0.16000 ns/op | 0.80 | | Map access 1 prop | 0.12000 ns/op | 0.15200 ns/op | 0.79 | | Object get x1000 | 5.5090 ns/op | 6.0560 ns/op | 0.91 | | Map get x1000 | 6.2660 ns/op | 6.7270 ns/op | 0.93 | | Object set x1000 | 30.476 ns/op | 35.636 ns/op | 0.86 | | Map set x1000 | 20.875 ns/op | 24.800 ns/op | 0.84 | | Return object 10000 times | 0.27340 ns/op | 0.29920 ns/op | 0.91 | | Throw Error 10000 times | 3.1864 us/op | 3.4705 us/op | 0.92 | | toHex | 137.13 ns/op | 149.65 ns/op | 0.92 | | Buffer.from | 129.94 ns/op | 139.04 ns/op | 0.93 | | shared Buffer | 82.060 ns/op | 89.769 ns/op | 0.91 | | fastMsgIdFn sha256 / 200 bytes | 2.1860 us/op | 2.3200 us/op | 0.94 | | fastMsgIdFn h32 xxhash / 200 bytes | 221.00 ns/op | 245.00 ns/op | 0.90 | | fastMsgIdFn h64 xxhash / 200 bytes | 269.00 ns/op | 280.00 ns/op | 0.96 | | fastMsgIdFn sha256 / 1000 bytes | 7.2380 us/op | 7.8060 us/op | 0.93 | | fastMsgIdFn h32 xxhash / 1000 bytes | 347.00 ns/op | 383.00 ns/op | 0.91 | | fastMsgIdFn h64 xxhash / 1000 bytes | 334.00 ns/op | 364.00 ns/op | 0.92 | | fastMsgIdFn sha256 / 10000 bytes | 64.384 us/op | 66.111 us/op | 0.97 | | fastMsgIdFn h32 xxhash / 10000 bytes | 1.7940 us/op | 1.9200 us/op | 0.93 | | fastMsgIdFn h64 xxhash / 10000 bytes | 1.1600 us/op | 1.2590 us/op | 0.92 | | send data - 1000 256B messages | 11.487 ms/op | 13.248 ms/op | 0.87 | | send data - 1000 512B messages | 14.883 ms/op | 17.720 ms/op | 0.84 | | send data - 1000 1024B messages | 23.994 ms/op | 26.656 ms/op | 0.90 | | send data - 1000 1200B messages | 24.121 ms/op | 23.076 ms/op | 1.05 | | send data - 1000 2048B messages | 30.799 ms/op | 32.507 ms/op | 0.95 | | send data - 1000 4096B messages | 29.629 ms/op | 32.327 ms/op | 0.92 | | send data - 1000 16384B messages | 68.125 ms/op | 75.337 ms/op | 0.90 | | send data - 1000 65536B messages | 216.43 ms/op | 223.62 ms/op | 0.97 | | enrSubnets - fastDeserialize 64 bits | 1.0820 us/op | 1.0880 us/op | 0.99 | | enrSubnets - ssz BitVector 64 bits | 341.00 ns/op | 402.00 ns/op | 0.85 | | enrSubnets - fastDeserialize 4 bits | 145.00 ns/op | 195.00 ns/op | 0.74 | | enrSubnets - ssz BitVector 4 bits | 349.00 ns/op | 447.00 ns/op | 0.78 | | prioritizePeers score -10:0 att 32-0.1 sync 2-0 | 138.47 us/op | 175.39 us/op | 0.79 | | prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 | 142.29 us/op | 195.94 us/op | 0.73 | | prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 | 243.14 us/op | 391.73 us/op | 0.62 | | prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 | 388.60 us/op | 481.67 us/op | 0.81 | | prioritizePeers score 0:0 att 64-1 sync 4-1 | 575.14 us/op | 739.55 us/op | 0.78 | | array of 16000 items push then shift | 1.5893 us/op | 1.6761 us/op | 0.95 | | LinkedList of 16000 items push then shift | 6.8120 ns/op | 7.8510 ns/op | 0.87 | | array of 16000 items push then pop | 114.67 ns/op | 140.00 ns/op | 0.82 | | LinkedList of 16000 items push then pop | 6.6920 ns/op | 7.8060 ns/op | 0.86 | | array of 24000 items push then shift | 2.3419 us/op | 2.5742 us/op | 0.91 | | LinkedList of 24000 items push then shift | 6.7920 ns/op | 8.4590 ns/op | 0.80 | | array of 24000 items push then pop | 132.13 ns/op | 188.23 ns/op | 0.70 | | LinkedList of 24000 items push then pop | 6.7160 ns/op | 7.6230 ns/op | 0.88 | | intersect bitArray bitLen 8 | 6.3100 ns/op | 6.6780 ns/op | 0.94 | | intersect array and set length 8 | 44.356 ns/op | 54.364 ns/op | 0.82 | | intersect bitArray bitLen 128 | 29.302 ns/op | 31.345 ns/op | 0.93 | | intersect array and set length 128 | 653.34 ns/op | 929.26 ns/op | 0.70 | | bitArray.getTrueBitIndexes() bitLen 128 | 1.7550 us/op | 2.3200 us/op | 0.76 | | bitArray.getTrueBitIndexes() bitLen 248 | 2.9490 us/op | 4.3940 us/op | 0.67 | | bitArray.getTrueBitIndexes() bitLen 512 | 6.5650 us/op | 9.7670 us/op | 0.67 | | Buffer.concat 32 items | 899.00 ns/op | 1.0730 us/op | 0.84 | | Uint8Array.set 32 items | 2.0500 us/op | 1.6300 us/op | 1.26 | | Buffer.copy | 2.4060 us/op | 2.1820 us/op | 1.10 | | Uint8Array.set - with subarray | 2.9490 us/op | 3.1510 us/op | 0.94 | | Uint8Array.set - without subarray | 1.6450 us/op | 1.6310 us/op | 1.01 | | getUint32 - dataview | 231.00 ns/op | 316.00 ns/op | 0.73 | | getUint32 - manual | 150.00 ns/op | 255.00 ns/op | 0.59 | | Set add up to 64 items then delete first | 2.1042 us/op | 2.7536 us/op | 0.76 | | OrderedSet add up to 64 items then delete first | 3.1626 us/op | 4.0716 us/op | 0.78 | | Set add up to 64 items then delete last | 2.4278 us/op | 2.9983 us/op | 0.81 | | OrderedSet add up to 64 items then delete last | 3.5308 us/op | 4.7860 us/op | 0.74 | | Set add up to 64 items then delete middle | 2.4920 us/op | 2.6288 us/op | 0.95 | | OrderedSet add up to 64 items then delete middle | 5.0276 us/op | 6.3458 us/op | 0.79 | | Set add up to 128 items then delete first | 4.9227 us/op | 5.9284 us/op | 0.83 | | OrderedSet add up to 128 items then delete first | 7.3247 us/op | 10.197 us/op | 0.72 | | Set add up to 128 items then delete last | 4.9087 us/op | 5.8826 us/op | 0.83 | | OrderedSet add up to 128 items then delete last | 7.0897 us/op | 8.8673 us/op | 0.80 | | Set add up to 128 items then delete middle | 4.8118 us/op | 5.8234 us/op | 0.83 | | OrderedSet add up to 128 items then delete middle | 13.232 us/op | 15.080 us/op | 0.88 | | Set add up to 256 items then delete first | 9.9725 us/op | 10.754 us/op | 0.93 | | OrderedSet add up to 256 items then delete first | 15.043 us/op | 16.999 us/op | 0.88 | | Set add up to 256 items then delete last | 9.6034 us/op | 11.025 us/op | 0.87 | | OrderedSet add up to 256 items then delete last | 14.300 us/op | 16.788 us/op | 0.85 | | Set add up to 256 items then delete middle | 9.4578 us/op | 10.133 us/op | 0.93 | | OrderedSet add up to 256 items then delete middle | 40.267 us/op | 43.009 us/op | 0.94 | | transfer serialized Status (84 B) | 1.4140 us/op | 1.4900 us/op | 0.95 | | copy serialized Status (84 B) | 1.1830 us/op | 1.2340 us/op | 0.96 | | transfer serialized SignedVoluntaryExit (112 B) | 1.5190 us/op | 1.5790 us/op | 0.96 | | copy serialized SignedVoluntaryExit (112 B) | 1.1640 us/op | 1.2630 us/op | 0.92 | | transfer serialized ProposerSlashing (416 B) | 1.8200 us/op | 2.0960 us/op | 0.87 | | copy serialized ProposerSlashing (416 B) | 1.9800 us/op | 1.8120 us/op | 1.09 | | transfer serialized Attestation (485 B) | 1.9980 us/op | 1.9030 us/op | 1.05 | | copy serialized Attestation (485 B) | 1.7090 us/op | 1.8250 us/op | 0.94 | | transfer serialized AttesterSlashing (33232 B) | 2.5210 us/op | 2.5030 us/op | 1.01 | | copy serialized AttesterSlashing (33232 B) | 5.4570 us/op | 5.4330 us/op | 1.00 | | transfer serialized Small SignedBeaconBlock (128000 B) | 2.9730 us/op | 3.0420 us/op | 0.98 | | copy serialized Small SignedBeaconBlock (128000 B) | 15.745 us/op | 15.933 us/op | 0.99 | | transfer serialized Avg SignedBeaconBlock (200000 B) | 3.4760 us/op | 3.4720 us/op | 1.00 | | copy serialized Avg SignedBeaconBlock (200000 B) | 22.692 us/op | 21.993 us/op | 1.03 | | transfer serialized BlobsSidecar (524380 B) | 3.3190 us/op | 3.2270 us/op | 1.03 | | copy serialized BlobsSidecar (524380 B) | 129.64 us/op | 97.114 us/op | 1.33 | | transfer serialized Big SignedBeaconBlock (1000000 B) | 2.8720 us/op | 3.2000 us/op | 0.90 | | copy serialized Big SignedBeaconBlock (1000000 B) | 142.61 us/op | 258.56 us/op | 0.55 | | pass gossip attestations to forkchoice per slot | 2.7257 ms/op | 2.8533 ms/op | 0.96 | | forkChoice updateHead vc 100000 bc 64 eq 0 | 483.01 us/op | 497.46 us/op | 0.97 | | forkChoice updateHead vc 600000 bc 64 eq 0 | 3.0119 ms/op | 3.9550 ms/op | 0.76 | | forkChoice updateHead vc 1000000 bc 64 eq 0 | 5.0694 ms/op | 5.2531 ms/op | 0.97 | | forkChoice updateHead vc 600000 bc 320 eq 0 | 3.5806 ms/op | 3.0745 ms/op | 1.16 | | forkChoice updateHead vc 600000 bc 1200 eq 0 | 3.0856 ms/op | 3.2760 ms/op | 0.94 | | forkChoice updateHead vc 600000 bc 7200 eq 0 | 3.5816 ms/op | 3.7638 ms/op | 0.95 | | forkChoice updateHead vc 600000 bc 64 eq 1000 | 10.253 ms/op | 10.896 ms/op | 0.94 | | forkChoice updateHead vc 600000 bc 64 eq 10000 | 10.436 ms/op | 10.949 ms/op | 0.95 | | forkChoice updateHead vc 600000 bc 64 eq 300000 | 14.166 ms/op | 14.463 ms/op | 0.98 | | computeDeltas 500000 validators 300 proto nodes | 3.3976 ms/op | 3.7476 ms/op | 0.91 | | computeDeltas 500000 validators 1200 proto nodes | 3.4290 ms/op | 3.7564 ms/op | 0.91 | | computeDeltas 500000 validators 7200 proto nodes | 3.4746 ms/op | 3.8664 ms/op | 0.90 | | computeDeltas 750000 validators 300 proto nodes | 5.0553 ms/op | 5.4558 ms/op | 0.93 | | computeDeltas 750000 validators 1200 proto nodes | 5.0302 ms/op | 5.4714 ms/op | 0.92 | | computeDeltas 750000 validators 7200 proto nodes | 5.1194 ms/op | 5.3540 ms/op | 0.96 | | computeDeltas 1400000 validators 300 proto nodes | 9.6172 ms/op | 10.441 ms/op | 0.92 | | computeDeltas 1400000 validators 1200 proto nodes | 9.5321 ms/op | 10.633 ms/op | 0.90 | | computeDeltas 1400000 validators 7200 proto nodes | 9.4700 ms/op | 10.172 ms/op | 0.93 | | computeDeltas 2100000 validators 300 proto nodes | 14.262 ms/op | 15.100 ms/op | 0.94 | | computeDeltas 2100000 validators 1200 proto nodes | 14.203 ms/op | 15.241 ms/op | 0.93 | | computeDeltas 2100000 validators 7200 proto nodes | 14.165 ms/op | 15.623 ms/op | 0.91 | | altair processAttestation - 250000 vs - 7PWei normalcase | 1.6384 ms/op | 2.1149 ms/op | 0.77 | | altair processAttestation - 250000 vs - 7PWei worstcase | 2.4722 ms/op | 3.5275 ms/op | 0.70 | | altair processAttestation - setStatus - 1/6 committees join | 83.412 us/op | 103.77 us/op | 0.80 | | altair processAttestation - setStatus - 1/3 committees join | 165.93 us/op | 175.70 us/op | 0.94 | | altair processAttestation - setStatus - 1/2 committees join | 242.18 us/op | 245.06 us/op | 0.99 | | altair processAttestation - setStatus - 2/3 committees join | 314.67 us/op | 325.33 us/op | 0.97 | | altair processAttestation - setStatus - 4/5 committees join | 440.35 us/op | 479.87 us/op | 0.92 | | altair processAttestation - setStatus - 100% committees join | 542.86 us/op | 573.26 us/op | 0.95 | | altair processBlock - 250000 vs - 7PWei normalcase | 3.6361 ms/op | 4.2532 ms/op | 0.85 | | altair processBlock - 250000 vs - 7PWei normalcase hashState | 28.102 ms/op | 27.265 ms/op | 1.03 | | altair processBlock - 250000 vs - 7PWei worstcase | 33.182 ms/op | 41.032 ms/op | 0.81 | | altair processBlock - 250000 vs - 7PWei worstcase hashState | 67.630 ms/op | 93.696 ms/op | 0.72 | | phase0 processBlock - 250000 vs - 7PWei normalcase | 1.7313 ms/op | 2.6724 ms/op | 0.65 | | phase0 processBlock - 250000 vs - 7PWei worstcase | 19.164 ms/op | 25.272 ms/op | 0.76 | | altair processEth1Data - 250000 vs - 7PWei normalcase | 276.20 us/op | 375.11 us/op | 0.74 | | getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 | 4.9660 us/op | 6.8920 us/op | 0.72 | | getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 | 26.964 us/op | 37.023 us/op | 0.73 | | getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 | 8.0500 us/op | 9.7680 us/op | 0.82 | | getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 | 4.9980 us/op | 6.2710 us/op | 0.80 | | getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 | 111.41 us/op | 158.84 us/op | 0.70 | | getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 | 1.1539 ms/op | 1.3477 ms/op | 0.86 | | getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 | 1.6425 ms/op | 1.8789 ms/op | 0.87 | | getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 | 1.5472 ms/op | 1.5759 ms/op | 0.98 | | getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 | 3.6199 ms/op | 3.5937 ms/op | 1.01 | | getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 | 1.5972 ms/op | 2.4625 ms/op | 0.65 | | getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 | 3.7473 ms/op | 3.4929 ms/op | 1.07 | | Tree 40 250000 create | 199.59 ms/op | 217.23 ms/op | 0.92 | | Tree 40 250000 get(125000) | 143.86 ns/op | 153.43 ns/op | 0.94 | | Tree 40 250000 set(125000) | 623.33 ns/op | 700.02 ns/op | 0.89 | | Tree 40 250000 toArray() | 14.857 ms/op | 20.130 ms/op | 0.74 | | Tree 40 250000 iterate all - toArray() + loop | 15.084 ms/op | 20.919 ms/op | 0.72 | | Tree 40 250000 iterate all - get(i) | 51.521 ms/op | 57.789 ms/op | 0.89 | | Array 250000 create | 2.9553 ms/op | 3.2383 ms/op | 0.91 | | Array 250000 clone - spread | 1.4071 ms/op | 1.4802 ms/op | 0.95 | | Array 250000 get(125000) | 0.41100 ns/op | 0.42100 ns/op | 0.98 | | Array 250000 set(125000) | 0.42300 ns/op | 0.43100 ns/op | 0.98 | | Array 250000 iterate all - loop | 80.289 us/op | 82.040 us/op | 0.98 | | phase0 afterProcessEpoch - 250000 vs - 7PWei | 90.417 ms/op | 94.741 ms/op | 0.95 | | Array.fill - length 1000000 | 3.4938 ms/op | 3.8215 ms/op | 0.91 | | Array push - length 1000000 | 16.737 ms/op | 21.785 ms/op | 0.77 | | Array.get | 0.25558 ns/op | 0.29227 ns/op | 0.87 | | Uint8Array.get | 0.41359 ns/op | 0.44766 ns/op | 0.92 | | phase0 beforeProcessEpoch - 250000 vs - 7PWei | 16.152 ms/op | 17.651 ms/op | 0.92 | | altair processEpoch - mainnet_e81889 | 311.88 ms/op | 359.23 ms/op | 0.87 | | mainnet_e81889 - altair beforeProcessEpoch | 17.505 ms/op | 18.440 ms/op | 0.95 | | mainnet_e81889 - altair processJustificationAndFinalization | 12.262 us/op | 17.955 us/op | 0.68 | | mainnet_e81889 - altair processInactivityUpdates | 4.9515 ms/op | 5.2782 ms/op | 0.94 | | mainnet_e81889 - altair processRewardsAndPenalties | 45.232 ms/op | 59.699 ms/op | 0.76 | | mainnet_e81889 - altair processRegistryUpdates | 1.6410 us/op | 3.0090 us/op | 0.55 | | mainnet_e81889 - altair processSlashings | 434.00 ns/op | 605.00 ns/op | 0.72 | | mainnet_e81889 - altair processEth1DataReset | 324.00 ns/op | 379.00 ns/op | 0.85 | | mainnet_e81889 - altair processEffectiveBalanceUpdates | 1.9182 ms/op | 2.6697 ms/op | 0.72 | | mainnet_e81889 - altair processSlashingsReset | 2.5930 us/op | 2.5420 us/op | 1.02 | | mainnet_e81889 - altair processRandaoMixesReset | 4.7850 us/op | 3.1160 us/op | 1.54 | | mainnet_e81889 - altair processHistoricalRootsUpdate | 541.00 ns/op | 832.00 ns/op | 0.65 | | mainnet_e81889 - altair processParticipationFlagUpdates | 1.6010 us/op | 3.0030 us/op | 0.53 | | mainnet_e81889 - altair processSyncCommitteeUpdates | 429.00 ns/op | 477.00 ns/op | 0.90 | | mainnet_e81889 - altair afterProcessEpoch | 93.251 ms/op | 99.297 ms/op | 0.94 | | capella processEpoch - mainnet_e217614 | 1.2316 s/op | 1.2617 s/op | 0.98 | | mainnet_e217614 - capella beforeProcessEpoch | 69.742 ms/op | 73.985 ms/op | 0.94 | | mainnet_e217614 - capella processJustificationAndFinalization | 14.521 us/op | 23.602 us/op | 0.62 | | mainnet_e217614 - capella processInactivityUpdates | 16.866 ms/op | 16.281 ms/op | 1.04 | | mainnet_e217614 - capella processRewardsAndPenalties | 226.60 ms/op | 280.78 ms/op | 0.81 | | mainnet_e217614 - capella processRegistryUpdates | 12.846 us/op | 20.223 us/op | 0.64 | | mainnet_e217614 - capella processSlashings | 392.00 ns/op | 658.00 ns/op | 0.60 | | mainnet_e217614 - capella processEth1DataReset | 310.00 ns/op | 603.00 ns/op | 0.51 | | mainnet_e217614 - capella processEffectiveBalanceUpdates | 12.016 ms/op | 12.762 ms/op | 0.94 | | mainnet_e217614 - capella processSlashingsReset | 3.2450 us/op | 3.1980 us/op | 1.01 | | mainnet_e217614 - capella processRandaoMixesReset | 3.8820 us/op | 4.3990 us/op | 0.88 | | mainnet_e217614 - capella processHistoricalRootsUpdate | 725.00 ns/op | 479.00 ns/op | 1.51 | | mainnet_e217614 - capella processParticipationFlagUpdates | 1.9650 us/op | 3.9390 us/op | 0.50 | | mainnet_e217614 - capella afterProcessEpoch | 252.86 ms/op | 238.58 ms/op | 1.06 | | phase0 processEpoch - mainnet_e58758 | 407.33 ms/op | 436.80 ms/op | 0.93 | | mainnet_e58758 - phase0 beforeProcessEpoch | 72.220 ms/op | 83.891 ms/op | 0.86 | | mainnet_e58758 - phase0 processJustificationAndFinalization | 17.068 us/op | 22.790 us/op | 0.75 | | mainnet_e58758 - phase0 processRewardsAndPenalties | 33.520 ms/op | 36.336 ms/op | 0.92 | | mainnet_e58758 - phase0 processRegistryUpdates | 7.5940 us/op | 12.488 us/op | 0.61 | | mainnet_e58758 - phase0 processSlashings | 379.00 ns/op | 490.00 ns/op | 0.77 | | mainnet_e58758 - phase0 processEth1DataReset | 325.00 ns/op | 548.00 ns/op | 0.59 | | mainnet_e58758 - phase0 processEffectiveBalanceUpdates | 1.2296 ms/op | 2.9223 ms/op | 0.42 | | mainnet_e58758 - phase0 processSlashingsReset | 3.1130 us/op | 4.1130 us/op | 0.76 | | mainnet_e58758 - phase0 processRandaoMixesReset | 4.0650 us/op | 5.7890 us/op | 0.70 | | mainnet_e58758 - phase0 processHistoricalRootsUpdate | 358.00 ns/op | 469.00 ns/op | 0.76 | | mainnet_e58758 - phase0 processParticipationRecordUpdates | 3.0550 us/op | 4.3250 us/op | 0.71 | | mainnet_e58758 - phase0 afterProcessEpoch | 78.200 ms/op | 82.402 ms/op | 0.95 | | phase0 processEffectiveBalanceUpdates - 250000 normalcase | 1.4317 ms/op | 1.3079 ms/op | 1.09 | | phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 | 2.2704 ms/op | 2.1866 ms/op | 1.04 | | altair processInactivityUpdates - 250000 normalcase | 16.083 ms/op | 21.012 ms/op | 0.77 | | altair processInactivityUpdates - 250000 worstcase | 13.863 ms/op | 21.391 ms/op | 0.65 | | phase0 processRegistryUpdates - 250000 normalcase | 5.7350 us/op | 6.1370 us/op | 0.93 | | phase0 processRegistryUpdates - 250000 badcase_full_deposits | 236.95 us/op | 341.00 us/op | 0.69 | | phase0 processRegistryUpdates - 250000 worstcase 0.5 | 117.45 ms/op | 122.16 ms/op | 0.96 | | altair processRewardsAndPenalties - 250000 normalcase | 41.871 ms/op | 48.660 ms/op | 0.86 | | altair processRewardsAndPenalties - 250000 worstcase | 39.973 ms/op | 56.556 ms/op | 0.71 | | phase0 getAttestationDeltas - 250000 normalcase | 6.8337 ms/op | 7.1894 ms/op | 0.95 | | phase0 getAttestationDeltas - 250000 worstcase | 6.8327 ms/op | 7.0507 ms/op | 0.97 | | phase0 processSlashings - 250000 worstcase | 75.518 us/op | 120.83 us/op | 0.63 | | altair processSyncCommitteeUpdates - 250000 | 121.47 ms/op | 121.16 ms/op | 1.00 | | BeaconState.hashTreeRoot - No change | 252.00 ns/op | 258.00 ns/op | 0.98 | | BeaconState.hashTreeRoot - 1 full validator | 127.02 us/op | 147.99 us/op | 0.86 | | BeaconState.hashTreeRoot - 32 full validator | 1.1901 ms/op | 1.6052 ms/op | 0.74 | | BeaconState.hashTreeRoot - 512 full validator | 11.731 ms/op | 13.486 ms/op | 0.87 | | BeaconState.hashTreeRoot - 1 validator.effectiveBalance | 143.46 us/op | 142.53 us/op | 1.01 | | BeaconState.hashTreeRoot - 32 validator.effectiveBalance | 1.7011 ms/op | 2.1058 ms/op | 0.81 | | BeaconState.hashTreeRoot - 512 validator.effectiveBalance | 25.190 ms/op | 29.176 ms/op | 0.86 | | BeaconState.hashTreeRoot - 1 balances | 105.61 us/op | 133.49 us/op | 0.79 | | BeaconState.hashTreeRoot - 32 balances | 1.0048 ms/op | 1.1740 ms/op | 0.86 | | BeaconState.hashTreeRoot - 512 balances | 9.7076 ms/op | 11.658 ms/op | 0.83 | | BeaconState.hashTreeRoot - 250000 balances | 178.76 ms/op | 190.76 ms/op | 0.94 | | aggregationBits - 2048 els - zipIndexesInBitList | 22.713 us/op | 23.370 us/op | 0.97 | | byteArrayEquals 32 | 50.657 ns/op | 51.519 ns/op | 0.98 | | Buffer.compare 32 | 16.546 ns/op | 16.419 ns/op | 1.01 | | byteArrayEquals 1024 | 1.4987 us/op | 1.5260 us/op | 0.98 | | Buffer.compare 1024 | 24.716 ns/op | 23.599 ns/op | 1.05 | | byteArrayEquals 16384 | 23.860 us/op | 24.250 us/op | 0.98 | | Buffer.compare 16384 | 194.92 ns/op | 190.85 ns/op | 1.02 | | byteArrayEquals 123687377 | 179.98 ms/op | 183.35 ms/op | 0.98 | | Buffer.compare 123687377 | 6.0819 ms/op | 6.1803 ms/op | 0.98 | | byteArrayEquals 32 - diff last byte | 49.627 ns/op | 51.871 ns/op | 0.96 | | Buffer.compare 32 - diff last byte | 16.298 ns/op | 16.811 ns/op | 0.97 | | byteArrayEquals 1024 - diff last byte | 1.4954 us/op | 1.5570 us/op | 0.96 | | Buffer.compare 1024 - diff last byte | 23.901 ns/op | 25.262 ns/op | 0.95 | | byteArrayEquals 16384 - diff last byte | 23.793 us/op | 24.810 us/op | 0.96 | | Buffer.compare 16384 - diff last byte | 192.95 ns/op | 195.81 ns/op | 0.99 | | byteArrayEquals 123687377 - diff last byte | 179.61 ms/op | 185.48 ms/op | 0.97 | | Buffer.compare 123687377 - diff last byte | 6.0900 ms/op | 6.1979 ms/op | 0.98 | | byteArrayEquals 32 - random bytes | 4.8980 ns/op | 5.0080 ns/op | 0.98 | | Buffer.compare 32 - random bytes | 16.278 ns/op | 16.699 ns/op | 0.97 | | byteArrayEquals 1024 - random bytes | 4.8760 ns/op | 5.0240 ns/op | 0.97 | | Buffer.compare 1024 - random bytes | 16.317 ns/op | 16.664 ns/op | 0.98 | | byteArrayEquals 16384 - random bytes | 4.8670 ns/op | 5.0120 ns/op | 0.97 | | Buffer.compare 16384 - random bytes | 16.256 ns/op | 17.000 ns/op | 0.96 | | byteArrayEquals 123687377 - random bytes | 6.0400 ns/op | 6.3100 ns/op | 0.96 | | Buffer.compare 123687377 - random bytes | 17.430 ns/op | 17.950 ns/op | 0.97 | | regular array get 100000 times | 40.202 us/op | 41.309 us/op | 0.97 | | wrappedArray get 100000 times | 31.042 us/op | 32.121 us/op | 0.97 | | arrayWithProxy get 100000 times | 12.445 ms/op | 14.838 ms/op | 0.84 | | ssz.Root.equals | 43.404 ns/op | 44.671 ns/op | 0.97 | | byteArrayEquals | 42.852 ns/op | 43.937 ns/op | 0.98 | | Buffer.compare | 9.8770 ns/op | 10.101 ns/op | 0.98 | | shuffle list - 16384 els | 5.9793 ms/op | 5.9155 ms/op | 1.01 | | shuffle list - 250000 els | 86.014 ms/op | 87.288 ms/op | 0.99 | | processSlot - 1 slots | 13.206 us/op | 14.754 us/op | 0.90 | | processSlot - 32 slots | 2.8686 ms/op | 3.4247 ms/op | 0.84 | | getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei | 37.117 ms/op | 42.149 ms/op | 0.88 | | getCommitteeAssignments - req 1 vs - 250000 vc | 2.0538 ms/op | 2.1085 ms/op | 0.97 | | getCommitteeAssignments - req 100 vs - 250000 vc | 3.9457 ms/op | 4.0632 ms/op | 0.97 | | getCommitteeAssignments - req 1000 vs - 250000 vc | 4.1969 ms/op | 4.4299 ms/op | 0.95 | | findModifiedValidators - 10000 modified validators | 238.05 ms/op | 248.60 ms/op | 0.96 | | findModifiedValidators - 1000 modified validators | 165.04 ms/op | 173.35 ms/op | 0.95 | | findModifiedValidators - 100 modified validators | 141.09 ms/op | 157.35 ms/op | 0.90 | | findModifiedValidators - 10 modified validators | 131.70 ms/op | 163.10 ms/op | 0.81 | | findModifiedValidators - 1 modified validators | 135.15 ms/op | 157.23 ms/op | 0.86 | | findModifiedValidators - no difference | 167.66 ms/op | 161.34 ms/op | 1.04 | | compare ViewDUs | 2.9429 s/op | 3.1548 s/op | 0.93 | | compare each validator Uint8Array | 1.3522 s/op | 1.8921 s/op | 0.71 | | compare ViewDU to Uint8Array | 949.53 ms/op | 959.79 ms/op | 0.99 | | migrate state 1000000 validators, 24 modified, 0 new | 588.19 ms/op | 622.81 ms/op | 0.94 | | migrate state 1000000 validators, 1700 modified, 1000 new | 838.67 ms/op | 876.93 ms/op | 0.96 | | migrate state 1000000 validators, 3400 modified, 2000 new | 1.0257 s/op | 1.1290 s/op | 0.91 | | migrate state 1500000 validators, 24 modified, 0 new | 608.27 ms/op | 634.19 ms/op | 0.96 | | migrate state 1500000 validators, 1700 modified, 1000 new | 810.93 ms/op | 897.46 ms/op | 0.90 | | migrate state 1500000 validators, 3400 modified, 2000 new | 1.0138 s/op | 1.1186 s/op | 0.91 | | RootCache.getBlockRootAtSlot - 250000 vs - 7PWei | 4.2900 ns/op | 4.5300 ns/op | 0.95 | | state getBlockRootAtSlot - 250000 vs - 7PWei | 670.24 ns/op | 686.92 ns/op | 0.98 | | computeProposers - vc 250000 | 7.8106 ms/op | 8.2807 ms/op | 0.94 | | computeEpochShuffling - vc 250000 | 86.014 ms/op | 92.225 ms/op | 0.93 | | getNextSyncCommittee - vc 250000 | 121.37 ms/op | 129.70 ms/op | 0.94 | | computeSigningRoot for AttestationData | 21.761 us/op | 20.795 us/op | 1.05 | | hash AttestationData serialized data then Buffer.toString(base64) | 1.4842 us/op | 1.5428 us/op | 0.96 | | toHexString serialized data | 834.69 ns/op | 944.59 ns/op | 0.88 | | Buffer.toString(base64) | 165.06 ns/op | 185.19 ns/op | 0.89 | | nodejs block root to RootHex using toHex | 140.34 ns/op | 146.32 ns/op | 0.96 | | nodejs block root to RootHex using toRootHex | 90.235 ns/op | 88.568 ns/op | 1.02 | | browser block root to RootHex using the deprecated toHexString | 216.19 ns/op | 227.77 ns/op | 0.95 | | browser block root to RootHex using toHex | 172.26 ns/op | 184.91 ns/op | 0.93 | | browser block root to RootHex using toRootHex | 152.26 ns/op | 171.18 ns/op | 0.89 |

by benchmarkbot/action