ChainSafe / lodestar

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

fix: ignore empty array when filtering validator rewards #6882

Closed nflaig closed 2 weeks ago

nflaig commented 2 weeks ago

Motivation

Fix all remaining routes to properly handle empty [] filter

Description

Ignore empty array when filtering validator rewards

These two request will result in return data for all validators, without filtering

with empty array body

curl -X POST http://localhost:9596/eth/v1/beacon/rewards/attestations/290253 -H "content-type: application/json" -d "[]"

and without body (depends on https://github.com/ChainSafe/lodestar/pull/6881)

curl -X POST http://localhost:9596/eth/v1/beacon/rewards/attestations/290253
codecov[bot] commented 2 weeks ago

Codecov Report

All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 62.76%. Comparing base (f4460cd) to head (444029d).

Additional details and impacted files ```diff @@ Coverage Diff @@ ## unstable #6882 +/- ## ========================================= Coverage 62.76% 62.76% ========================================= Files 578 578 Lines 61273 61273 Branches 2112 2112 ========================================= Hits 38455 38455 Misses 22780 22780 Partials 38 38 ```
github-actions[bot] commented 2 weeks ago

Performance Report

✔️ no performance regression detected

Full benchmark results | Benchmark suite | Current: 23d99ef557369676e2b1af380c13d9dc5bd3beb6 | Previous: f4460cd1d6e766bc8800f833caf9a694c1a1e809 | Ratio | |-|-|-|-| | getPubkeys - index2pubkey - req 1000 vs - 250000 vc | 546.18 us/op | 615.97 us/op | 0.89 | | getPubkeys - validatorsArr - req 1000 vs - 250000 vc | 65.610 us/op | 40.460 us/op | 1.62 | | BLS verify - blst-native | 1.3486 ms/op | 1.1166 ms/op | 1.21 | | BLS verifyMultipleSignatures 3 - blst-native | 2.8013 ms/op | 2.3757 ms/op | 1.18 | | BLS verifyMultipleSignatures 8 - blst-native | 6.2351 ms/op | 5.2628 ms/op | 1.18 | | BLS verifyMultipleSignatures 32 - blst-native | 22.208 ms/op | 19.308 ms/op | 1.15 | | BLS verifyMultipleSignatures 64 - blst-native | 44.039 ms/op | 38.049 ms/op | 1.16 | | BLS verifyMultipleSignatures 128 - blst-native | 87.135 ms/op | 75.511 ms/op | 1.15 | | BLS deserializing 10000 signatures | 911.62 ms/op | 780.94 ms/op | 1.17 | | BLS deserializing 100000 signatures | 9.5857 s/op | 7.7465 s/op | 1.24 | | BLS verifyMultipleSignatures - same message - 3 - blst-native | 1.3794 ms/op | 1.1855 ms/op | 1.16 | | BLS verifyMultipleSignatures - same message - 8 - blst-native | 1.6373 ms/op | 1.2850 ms/op | 1.27 | | BLS verifyMultipleSignatures - same message - 32 - blst-native | 2.3535 ms/op | 2.0227 ms/op | 1.16 | | BLS verifyMultipleSignatures - same message - 64 - blst-native | 3.6952 ms/op | 3.0008 ms/op | 1.23 | | BLS verifyMultipleSignatures - same message - 128 - blst-native | 5.8867 ms/op | 6.0556 ms/op | 0.97 | | BLS aggregatePubkeys 32 - blst-native | 26.948 us/op | 23.406 us/op | 1.15 | | BLS aggregatePubkeys 128 - blst-native | 105.08 us/op | 89.315 us/op | 1.18 | | notSeenSlots=1 numMissedVotes=1 numBadVotes=10 | 84.553 ms/op | 60.641 ms/op | 1.39 | | notSeenSlots=1 numMissedVotes=0 numBadVotes=4 | 80.980 ms/op | 44.324 ms/op | 1.83 | | notSeenSlots=2 numMissedVotes=1 numBadVotes=10 | 38.255 ms/op | 28.379 ms/op | 1.35 | | getSlashingsAndExits - default max | 125.27 us/op | 67.307 us/op | 1.86 | | getSlashingsAndExits - 2k | 406.39 us/op | 223.49 us/op | 1.82 | | proposeBlockBody type=full, size=empty | 6.3227 ms/op | 4.8199 ms/op | 1.31 | | isKnown best case - 1 super set check | 620.00 ns/op | 455.00 ns/op | 1.36 | | isKnown normal case - 2 super set checks | 561.00 ns/op | 440.00 ns/op | 1.27 | | isKnown worse case - 16 super set checks | 577.00 ns/op | 442.00 ns/op | 1.31 | | InMemoryCheckpointStateCache - add get delete | 6.3830 us/op | 3.7680 us/op | 1.69 | | validate api signedAggregateAndProof - struct | 2.7926 ms/op | 2.2655 ms/op | 1.23 | | validate gossip signedAggregateAndProof - struct | 2.8776 ms/op | 2.3683 ms/op | 1.22 | | validate gossip attestation - vc 640000 | 1.3461 ms/op | 1.1336 ms/op | 1.19 | | batch validate gossip attestation - vc 640000 - chunk 32 | 167.64 us/op | 139.61 us/op | 1.20 | | batch validate gossip attestation - vc 640000 - chunk 64 | 153.31 us/op | 122.89 us/op | 1.25 | | batch validate gossip attestation - vc 640000 - chunk 128 | 140.47 us/op | 115.92 us/op | 1.21 | | batch validate gossip attestation - vc 640000 - chunk 256 | 133.54 us/op | 106.13 us/op | 1.26 | | pickEth1Vote - no votes | 1.1413 ms/op | 830.53 us/op | 1.37 | | pickEth1Vote - max votes | 10.107 ms/op | 7.5803 ms/op | 1.33 | | pickEth1Vote - Eth1Data hashTreeRoot value x2048 | 14.349 ms/op | 11.987 ms/op | 1.20 | | pickEth1Vote - Eth1Data hashTreeRoot tree x2048 | 21.788 ms/op | 18.773 ms/op | 1.16 | | pickEth1Vote - Eth1Data fastSerialize value x2048 | 542.35 us/op | 353.21 us/op | 1.54 | | pickEth1Vote - Eth1Data fastSerialize tree x2048 | 4.9314 ms/op | 4.2056 ms/op | 1.17 | | bytes32 toHexString | 511.00 ns/op | 557.00 ns/op | 0.92 | | bytes32 Buffer.toString(hex) | 271.00 ns/op | 429.00 ns/op | 0.63 | | bytes32 Buffer.toString(hex) from Uint8Array | 408.00 ns/op | 528.00 ns/op | 0.77 | | bytes32 Buffer.toString(hex) + 0x | 264.00 ns/op | 436.00 ns/op | 0.61 | | Object access 1 prop | 0.15400 ns/op | 0.34900 ns/op | 0.44 | | Map access 1 prop | 0.13500 ns/op | 0.32100 ns/op | 0.42 | | Object get x1000 | 6.1890 ns/op | 5.1570 ns/op | 1.20 | | Map get x1000 | 6.6280 ns/op | 5.8560 ns/op | 1.13 | | Object set x1000 | 47.520 ns/op | 28.176 ns/op | 1.69 | | Map set x1000 | 27.657 ns/op | 19.713 ns/op | 1.40 | | Return object 10000 times | 0.31190 ns/op | 0.29570 ns/op | 1.05 | | Throw Error 10000 times | 3.5897 us/op | 2.7479 us/op | 1.31 | | fastMsgIdFn sha256 / 200 bytes | 2.3820 us/op | 2.0700 us/op | 1.15 | | fastMsgIdFn h32 xxhash / 200 bytes | 299.00 ns/op | 413.00 ns/op | 0.72 | | fastMsgIdFn h64 xxhash / 200 bytes | 283.00 ns/op | 460.00 ns/op | 0.62 | | fastMsgIdFn sha256 / 1000 bytes | 7.8490 us/op | 6.1190 us/op | 1.28 | | fastMsgIdFn h32 xxhash / 1000 bytes | 442.00 ns/op | 582.00 ns/op | 0.76 | | fastMsgIdFn h64 xxhash / 1000 bytes | 377.00 ns/op | 521.00 ns/op | 0.72 | | fastMsgIdFn sha256 / 10000 bytes | 67.622 us/op | 50.689 us/op | 1.33 | | fastMsgIdFn h32 xxhash / 10000 bytes | 1.9870 us/op | 1.9550 us/op | 1.02 | | fastMsgIdFn h64 xxhash / 10000 bytes | 1.2720 us/op | 1.3200 us/op | 0.96 | | send data - 1000 256B messages | 14.330 ms/op | 10.705 ms/op | 1.34 | | send data - 1000 512B messages | 18.925 ms/op | 13.161 ms/op | 1.44 | | send data - 1000 1024B messages | 26.279 ms/op | 22.902 ms/op | 1.15 | | send data - 1000 1200B messages | 25.319 ms/op | 22.011 ms/op | 1.15 | | send data - 1000 2048B messages | 33.226 ms/op | 26.837 ms/op | 1.24 | | send data - 1000 4096B messages | 34.707 ms/op | 25.836 ms/op | 1.34 | | send data - 1000 16384B messages | 73.430 ms/op | 66.712 ms/op | 1.10 | | send data - 1000 65536B messages | 237.07 ms/op | 251.94 ms/op | 0.94 | | enrSubnets - fastDeserialize 64 bits | 1.3430 us/op | 1.1500 us/op | 1.17 | | enrSubnets - ssz BitVector 64 bits | 405.00 ns/op | 526.00 ns/op | 0.77 | | enrSubnets - fastDeserialize 4 bits | 175.00 ns/op | 333.00 ns/op | 0.53 | | enrSubnets - ssz BitVector 4 bits | 448.00 ns/op | 525.00 ns/op | 0.85 | | prioritizePeers score -10:0 att 32-0.1 sync 2-0 | 216.81 us/op | 131.57 us/op | 1.65 | | prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 | 198.56 us/op | 145.64 us/op | 1.36 | | prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 | 372.07 us/op | 244.40 us/op | 1.52 | | prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 | 541.88 us/op | 395.98 us/op | 1.37 | | prioritizePeers score 0:0 att 64-1 sync 4-1 | 984.70 us/op | 455.64 us/op | 2.16 | | array of 16000 items push then shift | 1.6834 us/op | 1.3415 us/op | 1.25 | | LinkedList of 16000 items push then shift | 7.8060 ns/op | 6.5150 ns/op | 1.20 | | array of 16000 items push then pop | 150.52 ns/op | 78.599 ns/op | 1.92 | | LinkedList of 16000 items push then pop | 8.1330 ns/op | 6.4140 ns/op | 1.27 | | array of 24000 items push then shift | 2.6319 us/op | 1.9304 us/op | 1.36 | | LinkedList of 24000 items push then shift | 9.5230 ns/op | 6.4300 ns/op | 1.48 | | array of 24000 items push then pop | 207.01 ns/op | 109.27 ns/op | 1.89 | | LinkedList of 24000 items push then pop | 8.2840 ns/op | 6.6040 ns/op | 1.25 | | intersect bitArray bitLen 8 | 7.3590 ns/op | 5.6710 ns/op | 1.30 | | intersect array and set length 8 | 83.748 ns/op | 39.551 ns/op | 2.12 | | intersect bitArray bitLen 128 | 33.247 ns/op | 27.108 ns/op | 1.23 | | intersect array and set length 128 | 1.0261 us/op | 583.29 ns/op | 1.76 | | bitArray.getTrueBitIndexes() bitLen 128 | 2.7740 us/op | 1.5770 us/op | 1.76 | | bitArray.getTrueBitIndexes() bitLen 248 | 4.2100 us/op | 3.2940 us/op | 1.28 | | bitArray.getTrueBitIndexes() bitLen 512 | 9.0710 us/op | 5.9170 us/op | 1.53 | | Buffer.concat 32 items | 1.0630 us/op | 979.00 ns/op | 1.09 | | Uint8Array.set 32 items | 2.1800 us/op | 1.3150 us/op | 1.66 | | Buffer.copy | 2.1570 us/op | 1.4170 us/op | 1.52 | | Uint8Array.set - with subarray | 3.2720 us/op | 1.9010 us/op | 1.72 | | Uint8Array.set - without subarray | 2.1060 us/op | 1.2230 us/op | 1.72 | | Set add up to 64 items then delete first | 3.1942 us/op | 1.8080 us/op | 1.77 | | OrderedSet add up to 64 items then delete first | 5.0093 us/op | 3.3041 us/op | 1.52 | | Set add up to 64 items then delete last | 3.5016 us/op | 2.3039 us/op | 1.52 | | OrderedSet add up to 64 items then delete last | 5.3254 us/op | 3.1445 us/op | 1.69 | | Set add up to 64 items then delete middle | 3.5282 us/op | 2.0927 us/op | 1.69 | | OrderedSet add up to 64 items then delete middle | 7.1521 us/op | 4.5479 us/op | 1.57 | | Set add up to 128 items then delete first | 7.7590 us/op | 4.0777 us/op | 1.90 | | OrderedSet add up to 128 items then delete first | 12.154 us/op | 6.3964 us/op | 1.90 | | Set add up to 128 items then delete last | 7.4227 us/op | 3.9750 us/op | 1.87 | | OrderedSet add up to 128 items then delete last | 11.311 us/op | 6.0760 us/op | 1.86 | | Set add up to 128 items then delete middle | 7.2610 us/op | 4.0576 us/op | 1.79 | | OrderedSet add up to 128 items then delete middle | 18.613 us/op | 12.013 us/op | 1.55 | | Set add up to 256 items then delete first | 15.755 us/op | 7.9733 us/op | 1.98 | | OrderedSet add up to 256 items then delete first | 25.368 us/op | 12.608 us/op | 2.01 | | Set add up to 256 items then delete last | 16.411 us/op | 7.5312 us/op | 2.18 | | OrderedSet add up to 256 items then delete last | 21.503 us/op | 11.982 us/op | 1.79 | | Set add up to 256 items then delete middle | 13.962 us/op | 7.4456 us/op | 1.88 | | OrderedSet add up to 256 items then delete middle | 50.438 us/op | 37.207 us/op | 1.36 | | transfer serialized Status (84 B) | 1.5810 us/op | 1.5720 us/op | 1.01 | | copy serialized Status (84 B) | 1.3740 us/op | 1.4470 us/op | 0.95 | | transfer serialized SignedVoluntaryExit (112 B) | 1.6200 us/op | 1.7180 us/op | 0.94 | | copy serialized SignedVoluntaryExit (112 B) | 1.4590 us/op | 1.5130 us/op | 0.96 | | transfer serialized ProposerSlashing (416 B) | 2.3250 us/op | 2.5500 us/op | 0.91 | | copy serialized ProposerSlashing (416 B) | 2.1240 us/op | 1.5660 us/op | 1.36 | | transfer serialized Attestation (485 B) | 2.3700 us/op | 1.5730 us/op | 1.51 | | copy serialized Attestation (485 B) | 2.3410 us/op | 1.5580 us/op | 1.50 | | transfer serialized AttesterSlashing (33232 B) | 3.3200 us/op | 2.2180 us/op | 1.50 | | copy serialized AttesterSlashing (33232 B) | 10.179 us/op | 4.3950 us/op | 2.32 | | transfer serialized Small SignedBeaconBlock (128000 B) | 3.0180 us/op | 3.3650 us/op | 0.90 | | copy serialized Small SignedBeaconBlock (128000 B) | 16.168 us/op | 11.450 us/op | 1.41 | | transfer serialized Avg SignedBeaconBlock (200000 B) | 3.5980 us/op | 3.6620 us/op | 0.98 | | copy serialized Avg SignedBeaconBlock (200000 B) | 23.291 us/op | 16.119 us/op | 1.44 | | transfer serialized BlobsSidecar (524380 B) | 3.2010 us/op | 3.9290 us/op | 0.81 | | copy serialized BlobsSidecar (524380 B) | 121.93 us/op | 82.602 us/op | 1.48 | | transfer serialized Big SignedBeaconBlock (1000000 B) | 3.5650 us/op | 4.2180 us/op | 0.85 | | copy serialized Big SignedBeaconBlock (1000000 B) | 146.79 us/op | 246.75 us/op | 0.59 | | pass gossip attestations to forkchoice per slot | 3.2784 ms/op | 2.7618 ms/op | 1.19 | | forkChoice updateHead vc 100000 bc 64 eq 0 | 509.10 us/op | 502.70 us/op | 1.01 | | forkChoice updateHead vc 600000 bc 64 eq 0 | 3.2597 ms/op | 2.5829 ms/op | 1.26 | | forkChoice updateHead vc 1000000 bc 64 eq 0 | 5.8341 ms/op | 4.2168 ms/op | 1.38 | | forkChoice updateHead vc 600000 bc 320 eq 0 | 3.3356 ms/op | 2.8014 ms/op | 1.19 | | forkChoice updateHead vc 600000 bc 1200 eq 0 | 3.2774 ms/op | 4.5539 ms/op | 0.72 | | forkChoice updateHead vc 600000 bc 7200 eq 0 | 3.8390 ms/op | 3.0773 ms/op | 1.25 | | forkChoice updateHead vc 600000 bc 64 eq 1000 | 11.138 ms/op | 9.8132 ms/op | 1.14 | | forkChoice updateHead vc 600000 bc 64 eq 10000 | 11.124 ms/op | 9.7575 ms/op | 1.14 | | forkChoice updateHead vc 600000 bc 64 eq 300000 | 15.890 ms/op | 12.702 ms/op | 1.25 | | computeDeltas 500000 validators 300 proto nodes | 3.7701 ms/op | 3.0632 ms/op | 1.23 | | computeDeltas 500000 validators 1200 proto nodes | 3.6655 ms/op | 3.1379 ms/op | 1.17 | | computeDeltas 500000 validators 7200 proto nodes | 3.7596 ms/op | 3.1522 ms/op | 1.19 | | computeDeltas 750000 validators 300 proto nodes | 5.4047 ms/op | 4.7050 ms/op | 1.15 | | computeDeltas 750000 validators 1200 proto nodes | 5.5090 ms/op | 4.4695 ms/op | 1.23 | | computeDeltas 750000 validators 7200 proto nodes | 5.5351 ms/op | 4.5211 ms/op | 1.22 | | computeDeltas 1400000 validators 300 proto nodes | 10.915 ms/op | 8.7023 ms/op | 1.25 | | computeDeltas 1400000 validators 1200 proto nodes | 11.552 ms/op | 8.4303 ms/op | 1.37 | | computeDeltas 1400000 validators 7200 proto nodes | 11.975 ms/op | 8.5217 ms/op | 1.41 | | computeDeltas 2100000 validators 300 proto nodes | 16.474 ms/op | 12.778 ms/op | 1.29 | | computeDeltas 2100000 validators 1200 proto nodes | 16.830 ms/op | 12.778 ms/op | 1.32 | | computeDeltas 2100000 validators 7200 proto nodes | 16.189 ms/op | 12.654 ms/op | 1.28 | | altair processAttestation - 250000 vs - 7PWei normalcase | 1.7541 ms/op | 1.4722 ms/op | 1.19 | | altair processAttestation - 250000 vs - 7PWei worstcase | 2.7117 ms/op | 2.1226 ms/op | 1.28 | | altair processAttestation - setStatus - 1/6 committees join | 95.717 us/op | 66.557 us/op | 1.44 | | altair processAttestation - setStatus - 1/3 committees join | 194.18 us/op | 129.78 us/op | 1.50 | | altair processAttestation - setStatus - 1/2 committees join | 265.49 us/op | 195.56 us/op | 1.36 | | altair processAttestation - setStatus - 2/3 committees join | 365.74 us/op | 258.00 us/op | 1.42 | | altair processAttestation - setStatus - 4/5 committees join | 479.28 us/op | 398.52 us/op | 1.20 | | altair processAttestation - setStatus - 100% committees join | 582.02 us/op | 474.22 us/op | 1.23 | | altair processBlock - 250000 vs - 7PWei normalcase | 5.0786 ms/op | 3.9165 ms/op | 1.30 | | altair processBlock - 250000 vs - 7PWei normalcase hashState | 29.474 ms/op | 18.478 ms/op | 1.60 | | altair processBlock - 250000 vs - 7PWei worstcase | 45.987 ms/op | 41.222 ms/op | 1.12 | | altair processBlock - 250000 vs - 7PWei worstcase hashState | 87.178 ms/op | 61.077 ms/op | 1.43 | | phase0 processBlock - 250000 vs - 7PWei normalcase | 2.5606 ms/op | 1.3207 ms/op | 1.94 | | phase0 processBlock - 250000 vs - 7PWei worstcase | 30.049 ms/op | 23.486 ms/op | 1.28 | | altair processEth1Data - 250000 vs - 7PWei normalcase | 394.05 us/op | 241.09 us/op | 1.63 | | getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 | 7.6040 us/op | 5.0390 us/op | 1.51 | | getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 | 25.407 us/op | 19.097 us/op | 1.33 | | getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 | 9.4550 us/op | 7.6970 us/op | 1.23 | | getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 | 6.3450 us/op | 4.8230 us/op | 1.32 | | getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 | 112.28 us/op | 80.311 us/op | 1.40 | | getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 | 1.2456 ms/op | 758.43 us/op | 1.64 | | getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 | 1.0772 ms/op | 1.0173 ms/op | 1.06 | | getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 | 1.1136 ms/op | 693.88 us/op | 1.60 | | getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 | 2.8001 ms/op | 2.0948 ms/op | 1.34 | | getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 | 1.6322 ms/op | 1.2118 ms/op | 1.35 | | getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 | 4.1064 ms/op | 3.0744 ms/op | 1.34 | | Tree 40 250000 create | 668.62 ms/op | 205.08 ms/op | 3.26 | | Tree 40 250000 get(125000) | 210.07 ns/op | 119.69 ns/op | 1.76 | | Tree 40 250000 set(125000) | 2.3128 us/op | 532.33 ns/op | 4.34 | | Tree 40 250000 toArray() | 30.404 ms/op | 9.7598 ms/op | 3.12 | | Tree 40 250000 iterate all - toArray() + loop | 31.912 ms/op | 9.9720 ms/op | 3.20 | | Tree 40 250000 iterate all - get(i) | 76.844 ms/op | 41.536 ms/op | 1.85 | | MutableVector 250000 create | 15.648 ms/op | 7.7975 ms/op | 2.01 | | MutableVector 250000 get(125000) | 8.7670 ns/op | 5.9410 ns/op | 1.48 | | MutableVector 250000 set(125000) | 797.58 ns/op | 182.45 ns/op | 4.37 | | MutableVector 250000 toArray() | 8.2698 ms/op | 2.7463 ms/op | 3.01 | | MutableVector 250000 iterate all - toArray() + loop | 8.0025 ms/op | 2.8133 ms/op | 2.84 | | MutableVector 250000 iterate all - get(i) | 2.1448 ms/op | 1.5183 ms/op | 1.41 | | Array 250000 create | 6.1710 ms/op | 2.5474 ms/op | 2.42 | | Array 250000 clone - spread | 6.8746 ms/op | 1.4006 ms/op | 4.91 | | Array 250000 get(125000) | 0.58200 ns/op | 0.59000 ns/op | 0.99 | | Array 250000 set(125000) | 0.63200 ns/op | 0.59900 ns/op | 1.06 | | Array 250000 iterate all - loop | 98.413 us/op | 78.780 us/op | 1.25 | | effectiveBalanceIncrements clone Uint8Array 300000 | 67.752 us/op | 15.728 us/op | 4.31 | | effectiveBalanceIncrements clone MutableVector 300000 | 134.00 ns/op | 317.00 ns/op | 0.42 | | effectiveBalanceIncrements rw all Uint8Array 300000 | 205.60 us/op | 170.81 us/op | 1.20 | | effectiveBalanceIncrements rw all MutableVector 300000 | 87.219 ms/op | 59.755 ms/op | 1.46 | | phase0 afterProcessEpoch - 250000 vs - 7PWei | 89.035 ms/op | 77.309 ms/op | 1.15 | | phase0 beforeProcessEpoch - 250000 vs - 7PWei | 36.779 ms/op | 37.608 ms/op | 0.98 | | altair processEpoch - mainnet_e81889 | 417.99 ms/op | 336.70 ms/op | 1.24 | | mainnet_e81889 - altair beforeProcessEpoch | 71.162 ms/op | 61.776 ms/op | 1.15 | | mainnet_e81889 - altair processJustificationAndFinalization | 20.339 us/op | 10.446 us/op | 1.95 | | mainnet_e81889 - altair processInactivityUpdates | 6.0713 ms/op | 6.2344 ms/op | 0.97 | | mainnet_e81889 - altair processRewardsAndPenalties | 58.201 ms/op | 49.223 ms/op | 1.18 | | mainnet_e81889 - altair processRegistryUpdates | 2.9220 us/op | 1.9810 us/op | 1.48 | | mainnet_e81889 - altair processSlashings | 569.00 ns/op | 841.00 ns/op | 0.68 | | mainnet_e81889 - altair processEth1DataReset | 839.00 ns/op | 696.00 ns/op | 1.21 | | mainnet_e81889 - altair processEffectiveBalanceUpdates | 3.0373 ms/op | 1.3284 ms/op | 2.29 | | mainnet_e81889 - altair processSlashingsReset | 8.8250 us/op | 2.6880 us/op | 3.28 | | mainnet_e81889 - altair processRandaoMixesReset | 6.4620 us/op | 3.4490 us/op | 1.87 | | mainnet_e81889 - altair processHistoricalRootsUpdate | 621.00 ns/op | 697.00 ns/op | 0.89 | | mainnet_e81889 - altair processParticipationFlagUpdates | 2.8960 us/op | 3.5210 us/op | 0.82 | | mainnet_e81889 - altair processSyncCommitteeUpdates | 702.00 ns/op | 701.00 ns/op | 1.00 | | mainnet_e81889 - altair afterProcessEpoch | 91.972 ms/op | 87.425 ms/op | 1.05 | | capella processEpoch - mainnet_e217614 | 1.3028 s/op | 1.1887 s/op | 1.10 | | mainnet_e217614 - capella beforeProcessEpoch | 263.86 ms/op | 240.60 ms/op | 1.10 | | mainnet_e217614 - capella processJustificationAndFinalization | 19.626 us/op | 10.469 us/op | 1.87 | | mainnet_e217614 - capella processInactivityUpdates | 18.064 ms/op | 17.157 ms/op | 1.05 | | mainnet_e217614 - capella processRewardsAndPenalties | 279.77 ms/op | 250.23 ms/op | 1.12 | | mainnet_e217614 - capella processRegistryUpdates | 18.665 us/op | 11.650 us/op | 1.60 | | mainnet_e217614 - capella processSlashings | 681.00 ns/op | 777.00 ns/op | 0.88 | | mainnet_e217614 - capella processEth1DataReset | 1.5370 us/op | 678.00 ns/op | 2.27 | | mainnet_e217614 - capella processEffectiveBalanceUpdates | 5.2976 ms/op | 5.0672 ms/op | 1.05 | | mainnet_e217614 - capella processSlashingsReset | 8.5950 us/op | 2.2630 us/op | 3.80 | | mainnet_e217614 - capella processRandaoMixesReset | 6.7590 us/op | 3.3460 us/op | 2.02 | | mainnet_e217614 - capella processHistoricalRootsUpdate | 1.0110 us/op | 774.00 ns/op | 1.31 | | mainnet_e217614 - capella processParticipationFlagUpdates | 2.7470 us/op | 2.9140 us/op | 0.94 | | mainnet_e217614 - capella afterProcessEpoch | 282.57 ms/op | 245.93 ms/op | 1.15 | | phase0 processEpoch - mainnet_e58758 | 392.22 ms/op | 355.56 ms/op | 1.10 | | mainnet_e58758 - phase0 beforeProcessEpoch | 107.38 ms/op | 101.88 ms/op | 1.05 | | mainnet_e58758 - phase0 processJustificationAndFinalization | 18.664 us/op | 13.204 us/op | 1.41 | | mainnet_e58758 - phase0 processRewardsAndPenalties | 32.634 ms/op | 25.305 ms/op | 1.29 | | mainnet_e58758 - phase0 processRegistryUpdates | 11.584 us/op | 6.2620 us/op | 1.85 | | mainnet_e58758 - phase0 processSlashings | 553.00 ns/op | 738.00 ns/op | 0.75 | | mainnet_e58758 - phase0 processEth1DataReset | 670.00 ns/op | 678.00 ns/op | 0.99 | | mainnet_e58758 - phase0 processEffectiveBalanceUpdates | 1.0326 ms/op | 1.1171 ms/op | 0.92 | | mainnet_e58758 - phase0 processSlashingsReset | 4.2730 us/op | 2.9000 us/op | 1.47 | | mainnet_e58758 - phase0 processRandaoMixesReset | 8.4340 us/op | 6.4420 us/op | 1.31 | | mainnet_e58758 - phase0 processHistoricalRootsUpdate | 854.00 ns/op | 924.00 ns/op | 0.92 | | mainnet_e58758 - phase0 processParticipationRecordUpdates | 5.1200 us/op | 2.5340 us/op | 2.02 | | mainnet_e58758 - phase0 afterProcessEpoch | 80.167 ms/op | 68.132 ms/op | 1.18 | | phase0 processEffectiveBalanceUpdates - 250000 normalcase | 1.4761 ms/op | 788.87 us/op | 1.87 | | phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 | 2.0874 ms/op | 1.5093 ms/op | 1.38 | | altair processInactivityUpdates - 250000 normalcase | 21.483 ms/op | 17.602 ms/op | 1.22 | | altair processInactivityUpdates - 250000 worstcase | 22.309 ms/op | 18.054 ms/op | 1.24 | | phase0 processRegistryUpdates - 250000 normalcase | 9.5040 us/op | 4.8610 us/op | 1.96 | | phase0 processRegistryUpdates - 250000 badcase_full_deposits | 405.40 us/op | 296.29 us/op | 1.37 | | phase0 processRegistryUpdates - 250000 worstcase 0.5 | 127.51 ms/op | 113.50 ms/op | 1.12 | | altair processRewardsAndPenalties - 250000 normalcase | 51.945 ms/op | 49.072 ms/op | 1.06 | | altair processRewardsAndPenalties - 250000 worstcase | 41.344 ms/op | 34.329 ms/op | 1.20 | | phase0 getAttestationDeltas - 250000 normalcase | 7.6404 ms/op | 6.1339 ms/op | 1.25 | | phase0 getAttestationDeltas - 250000 worstcase | 7.8594 ms/op | 6.0396 ms/op | 1.30 | | phase0 processSlashings - 250000 worstcase | 125.44 us/op | 83.497 us/op | 1.50 | | altair processSyncCommitteeUpdates - 250000 | 127.63 ms/op | 91.312 ms/op | 1.40 | | BeaconState.hashTreeRoot - No change | 291.00 ns/op | 472.00 ns/op | 0.62 | | BeaconState.hashTreeRoot - 1 full validator | 114.46 us/op | 69.502 us/op | 1.65 | | BeaconState.hashTreeRoot - 32 full validator | 1.4943 ms/op | 705.02 us/op | 2.12 | | BeaconState.hashTreeRoot - 512 full validator | 13.200 ms/op | 7.2376 ms/op | 1.82 | | BeaconState.hashTreeRoot - 1 validator.effectiveBalance | 148.61 us/op | 82.942 us/op | 1.79 | | BeaconState.hashTreeRoot - 32 validator.effectiveBalance | 2.5808 ms/op | 1.1359 ms/op | 2.27 | | BeaconState.hashTreeRoot - 512 validator.effectiveBalance | 30.940 ms/op | 15.311 ms/op | 2.02 | | BeaconState.hashTreeRoot - 1 balances | 118.35 us/op | 64.555 us/op | 1.83 | | BeaconState.hashTreeRoot - 32 balances | 1.5652 ms/op | 611.32 us/op | 2.56 | | BeaconState.hashTreeRoot - 512 balances | 9.4011 ms/op | 5.6422 ms/op | 1.67 | | BeaconState.hashTreeRoot - 250000 balances | 195.77 ms/op | 130.34 ms/op | 1.50 | | aggregationBits - 2048 els - zipIndexesInBitList | 28.193 us/op | 19.163 us/op | 1.47 | | byteArrayEquals 32 | 54.323 ns/op | 48.004 ns/op | 1.13 | | Buffer.compare 32 | 47.479 ns/op | 40.007 ns/op | 1.19 | | byteArrayEquals 1024 | 1.6030 us/op | 1.2624 us/op | 1.27 | | Buffer.compare 1024 | 55.298 ns/op | 48.432 ns/op | 1.14 | | byteArrayEquals 16384 | 26.073 us/op | 20.090 us/op | 1.30 | | Buffer.compare 16384 | 247.83 ns/op | 209.28 ns/op | 1.18 | | byteArrayEquals 123687377 | 192.47 ms/op | 151.24 ms/op | 1.27 | | Buffer.compare 123687377 | 6.5400 ms/op | 4.1529 ms/op | 1.57 | | byteArrayEquals 32 - diff last byte | 54.551 ns/op | 47.485 ns/op | 1.15 | | Buffer.compare 32 - diff last byte | 48.726 ns/op | 39.405 ns/op | 1.24 | | byteArrayEquals 1024 - diff last byte | 1.6523 us/op | 1.2717 us/op | 1.30 | | Buffer.compare 1024 - diff last byte | 57.976 ns/op | 49.151 ns/op | 1.18 | | byteArrayEquals 16384 - diff last byte | 26.130 us/op | 20.167 us/op | 1.30 | | Buffer.compare 16384 - diff last byte | 250.58 ns/op | 228.17 ns/op | 1.10 | | byteArrayEquals 123687377 - diff last byte | 194.46 ms/op | 152.19 ms/op | 1.28 | | Buffer.compare 123687377 - diff last byte | 7.6780 ms/op | 4.0694 ms/op | 1.89 | | byteArrayEquals 32 - random bytes | 5.3730 ns/op | 5.2010 ns/op | 1.03 | | Buffer.compare 32 - random bytes | 49.091 ns/op | 42.820 ns/op | 1.15 | | byteArrayEquals 1024 - random bytes | 5.3440 ns/op | 4.9040 ns/op | 1.09 | | Buffer.compare 1024 - random bytes | 47.142 ns/op | 41.712 ns/op | 1.13 | | byteArrayEquals 16384 - random bytes | 5.3610 ns/op | 4.8960 ns/op | 1.09 | | Buffer.compare 16384 - random bytes | 47.686 ns/op | 39.491 ns/op | 1.21 | | byteArrayEquals 123687377 - random bytes | 6.6400 ns/op | 7.7300 ns/op | 0.86 | | Buffer.compare 123687377 - random bytes | 49.980 ns/op | 44.790 ns/op | 1.12 | | regular array get 100000 times | 34.268 us/op | 31.070 us/op | 1.10 | | wrappedArray get 100000 times | 37.203 us/op | 31.037 us/op | 1.20 | | arrayWithProxy get 100000 times | 13.478 ms/op | 9.3302 ms/op | 1.44 | | ssz.Root.equals | 47.473 ns/op | 39.580 ns/op | 1.20 | | byteArrayEquals | 46.715 ns/op | 39.027 ns/op | 1.20 | | Buffer.compare | 10.805 ns/op | 9.4230 ns/op | 1.15 | | shuffle list - 16384 els | 6.5359 ms/op | 5.5449 ms/op | 1.18 | | shuffle list - 250000 els | 95.995 ms/op | 81.576 ms/op | 1.18 | | processSlot - 1 slots | 15.889 us/op | 15.298 us/op | 1.04 | | processSlot - 32 slots | 2.6125 ms/op | 2.2149 ms/op | 1.18 | | getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei | 38.166 ms/op | 38.074 ms/op | 1.00 | | getCommitteeAssignments - req 1 vs - 250000 vc | 2.2349 ms/op | 1.7557 ms/op | 1.27 | | getCommitteeAssignments - req 100 vs - 250000 vc | 4.3380 ms/op | 3.4473 ms/op | 1.26 | | getCommitteeAssignments - req 1000 vs - 250000 vc | 4.6320 ms/op | 3.6792 ms/op | 1.26 | | findModifiedValidators - 10000 modified validators | 269.47 ms/op | 245.22 ms/op | 1.10 | | findModifiedValidators - 1000 modified validators | 203.81 ms/op | 176.72 ms/op | 1.15 | | findModifiedValidators - 100 modified validators | 189.52 ms/op | 163.04 ms/op | 1.16 | | findModifiedValidators - 10 modified validators | 182.49 ms/op | 170.57 ms/op | 1.07 | | findModifiedValidators - 1 modified validators | 179.45 ms/op | 150.56 ms/op | 1.19 | | findModifiedValidators - no difference | 169.09 ms/op | 150.29 ms/op | 1.13 | | compare ViewDUs | 3.1735 s/op | 2.9634 s/op | 1.07 | | compare each validator Uint8Array | 1.2320 s/op | 968.44 ms/op | 1.27 | | compare ViewDU to Uint8Array | 1.1881 s/op | 724.69 ms/op | 1.64 | | migrate state 1000000 validators, 24 modified, 0 new | 564.46 ms/op | 587.98 ms/op | 0.96 | | migrate state 1000000 validators, 1700 modified, 1000 new | 780.03 ms/op | 884.65 ms/op | 0.88 | | migrate state 1000000 validators, 3400 modified, 2000 new | 1.0583 s/op | 1.1180 s/op | 0.95 | | migrate state 1500000 validators, 24 modified, 0 new | 557.29 ms/op | 490.72 ms/op | 1.14 | | migrate state 1500000 validators, 1700 modified, 1000 new | 810.03 ms/op | 813.71 ms/op | 1.00 | | migrate state 1500000 validators, 3400 modified, 2000 new | 1.0426 s/op | 1.0107 s/op | 1.03 | | RootCache.getBlockRootAtSlot - 250000 vs - 7PWei | 4.8500 ns/op | 6.6100 ns/op | 0.73 | | state getBlockRootAtSlot - 250000 vs - 7PWei | 575.20 ns/op | 944.55 ns/op | 0.61 | | computeProposers - vc 250000 | 7.7186 ms/op | 5.6522 ms/op | 1.37 | | computeEpochShuffling - vc 250000 | 96.631 ms/op | 80.733 ms/op | 1.20 | | getNextSyncCommittee - vc 250000 | 132.93 ms/op | 96.353 ms/op | 1.38 | | computeSigningRoot for AttestationData | 19.410 us/op | 17.533 us/op | 1.11 | | hash AttestationData serialized data then Buffer.toString(base64) | 1.5700 us/op | 1.1041 us/op | 1.42 | | toHexString serialized data | 946.64 ns/op | 717.76 ns/op | 1.32 | | Buffer.toString(base64) | 190.60 ns/op | 128.59 ns/op | 1.48 |

by benchmarkbot/action