Skip to content

Commit

Permalink
feat: introduce proposer boost reorg to fork choice (#6581)
Browse files Browse the repository at this point in the history
* Init

* Remove unnecessary code

* isBlockTimely

* getProposerHead returns info for metrics

* Fix compile issue

* Fix type check

* Lint

* Add secFromSlot

* lint

* address comment

* Remove comment
  • Loading branch information
ensi321 committed Apr 3, 2024
1 parent 2f8fbb0 commit b284962
Show file tree
Hide file tree
Showing 20 changed files with 528 additions and 16 deletions.
1 change: 1 addition & 0 deletions packages/api/src/beacon/routes/debug.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ const protoNodeSszType = new ContainerType(
parentRoot: stringType,
stateRoot: stringType,
targetRoot: stringType,
timeliness: ssz.Boolean,
justifiedEpoch: ssz.Epoch,
justifiedRoot: stringType,
finalizedEpoch: ssz.Epoch,
Expand Down
1 change: 1 addition & 0 deletions packages/api/test/unit/beacon/testData/debug.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ export const testData: GenericServerTestCases<Api> = {
weight: 1,
bestChild: "1",
bestDescendant: "1",
timeliness: false,
},
],
},
Expand Down
9 changes: 6 additions & 3 deletions packages/beacon-node/src/chain/forkChoice/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
isMergeTransitionComplete,
} from "@lodestar/state-transition";

import {Logger} from "@lodestar/utils";
import {computeAnchorCheckpoint} from "../initState.js";
import {ChainEventEmitter} from "../emitter.js";
import {ChainEvent} from "../emitter.js";
Expand All @@ -35,7 +36,8 @@ export function initializeForkChoice(
currentSlot: Slot,
state: CachedBeaconStateAllForks,
opts: ForkChoiceOpts,
justifiedBalancesGetter: JustifiedBalancesGetter
justifiedBalancesGetter: JustifiedBalancesGetter,
logger?: Logger
): ForkChoice {
const {blockHeader, checkpoint} = computeAnchorCheckpoint(config, state);
const finalizedCheckpoint = {...checkpoint};
Expand Down Expand Up @@ -75,6 +77,7 @@ export function initializeForkChoice(
parentRoot: toHexString(blockHeader.parentRoot),
stateRoot: toHexString(blockHeader.stateRoot),
blockRoot: toHexString(checkpoint.root),
timeliness: true, // Optimisitcally assume is timely

justifiedEpoch: justifiedCheckpoint.epoch,
justifiedRoot: toHexString(justifiedCheckpoint.root),
Expand All @@ -95,7 +98,7 @@ export function initializeForkChoice(
},
currentSlot
),

opts
opts,
logger
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ describe(`getAttestationsForBlock vc=${vc}`, () => {
unrealizedFinalizedRoot: toHexString(finalizedCheckpoint.root),
executionPayloadBlockHash: null,
executionStatus: ExecutionStatus.PreMerge,

timeliness: false,
},
originalState.slot
);
Expand All @@ -87,6 +89,7 @@ describe(`getAttestationsForBlock vc=${vc}`, () => {
unrealizedFinalizedRoot: toHexString(finalizedCheckpoint.root),
executionPayloadBlockHash: null,
executionStatus: ExecutionStatus.PreMerge,
timeliness: false,
},
slot
);
Expand Down
2 changes: 2 additions & 0 deletions packages/beacon-node/test/utils/state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,5 +153,7 @@ export const zeroProtoBlock: ProtoBlock = {
unrealizedFinalizedEpoch: 0,
unrealizedFinalizedRoot: ZERO_HASH_HEX,

timeliness: false,

...{executionPayloadBlockHash: null, executionStatus: ExecutionStatus.PreMerge},
};
2 changes: 2 additions & 0 deletions packages/beacon-node/test/utils/typeGenerator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ export function generateProtoBlock(overrides: Partial<ProtoBlock> = {}): ProtoBl
unrealizedFinalizedEpoch: 0,
unrealizedFinalizedRoot: ZERO_HASH_HEX,

timeliness: false,

...{executionPayloadBlockHash: null, executionStatus: ExecutionStatus.PreMerge},

...overrides,
Expand Down
2 changes: 2 additions & 0 deletions packages/beacon-node/test/utils/validationData/attestation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ export function getAttestationValidData(opts: AttestationValidDataOpts): {
unrealizedFinalizedEpoch: 0,
unrealizedFinalizedRoot: ZERO_HASH_HEX,

timeliness: false,

...{executionPayloadBlockHash: null, executionStatus: ExecutionStatus.PreMerge},
};

Expand Down
3 changes: 3 additions & 0 deletions packages/config/src/chainConfig/configs/mainnet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,9 @@ export const chainConfig: ChainConfig = {
// ---------------------------------------------------------------
// 40%
PROPOSER_SCORE_BOOST: 40,
REORG_HEAD_WEIGHT_THRESHOLD: 20,
REORG_PARENT_WEIGHT_THRESHOLD: 160,
REORG_MAX_EPOCHS_SINCE_FINALIZATION: 2,

// Deposit contract
// ---------------------------------------------------------------
Expand Down
3 changes: 3 additions & 0 deletions packages/config/src/chainConfig/configs/minimal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,9 @@ export const chainConfig: ChainConfig = {
// ---------------------------------------------------------------
// 40%
PROPOSER_SCORE_BOOST: 40,
REORG_HEAD_WEIGHT_THRESHOLD: 20,
REORG_PARENT_WEIGHT_THRESHOLD: 160,
REORG_MAX_EPOCHS_SINCE_FINALIZATION: 2,

// Deposit contract
// ---------------------------------------------------------------
Expand Down
6 changes: 6 additions & 0 deletions packages/config/src/chainConfig/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ export type ChainConfig = {

// Fork choice
PROPOSER_SCORE_BOOST: number;
REORG_HEAD_WEIGHT_THRESHOLD: number;
REORG_PARENT_WEIGHT_THRESHOLD: number;
REORG_MAX_EPOCHS_SINCE_FINALIZATION: number;

// Deposit contract
DEPOSIT_CHAIN_ID: number;
Expand Down Expand Up @@ -114,6 +117,9 @@ export const chainConfigTypes: SpecTypes<ChainConfig> = {

// Fork choice
PROPOSER_SCORE_BOOST: "number",
REORG_HEAD_WEIGHT_THRESHOLD: "number",
REORG_PARENT_WEIGHT_THRESHOLD: "number",
REORG_MAX_EPOCHS_SINCE_FINALIZATION: "number",

// Deposit contract
DEPOSIT_CHAIN_ID: "number",
Expand Down
Loading

1 comment on commit b284962

@github-actions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for some benchmarks.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold.

Benchmark suite Current: b284962 Previous: 2f8fbb0 Ratio
Set add up to 128 items then delete last 11.256 us/op 3.7499 us/op 3.00
Set add up to 256 items then delete first 22.855 us/op 7.5093 us/op 3.04
Set add up to 256 items then delete last 21.919 us/op 7.2728 us/op 3.01
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 201.65 us/op 58.861 us/op 3.43
Full benchmark results
Benchmark suite Current: b284962 Previous: 2f8fbb0 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 784.17 us/op 426.28 us/op 1.84
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 138.44 us/op 57.076 us/op 2.43
BLS verify - blst-native 1.4049 ms/op 1.1282 ms/op 1.25
BLS verifyMultipleSignatures 3 - blst-native 2.9396 ms/op 2.3932 ms/op 1.23
BLS verifyMultipleSignatures 8 - blst-native 6.3221 ms/op 5.3079 ms/op 1.19
BLS verifyMultipleSignatures 32 - blst-native 24.328 ms/op 19.658 ms/op 1.24
BLS verifyMultipleSignatures 64 - blst-native 48.555 ms/op 38.212 ms/op 1.27
BLS verifyMultipleSignatures 128 - blst-native 94.784 ms/op 75.800 ms/op 1.25
BLS deserializing 10000 signatures 966.63 ms/op 796.92 ms/op 1.21
BLS deserializing 100000 signatures 9.8012 s/op 8.2795 s/op 1.18
BLS verifyMultipleSignatures - same message - 3 - blst-native 1.5466 ms/op 1.0984 ms/op 1.41
BLS verifyMultipleSignatures - same message - 8 - blst-native 1.6268 ms/op 1.2509 ms/op 1.30
BLS verifyMultipleSignatures - same message - 32 - blst-native 2.6123 ms/op 1.9590 ms/op 1.33
BLS verifyMultipleSignatures - same message - 64 - blst-native 3.9292 ms/op 3.6841 ms/op 1.07
BLS verifyMultipleSignatures - same message - 128 - blst-native 6.4399 ms/op 4.8977 ms/op 1.31
BLS aggregatePubkeys 32 - blst-native 29.952 us/op 22.314 us/op 1.34
BLS aggregatePubkeys 128 - blst-native 113.81 us/op 87.340 us/op 1.30
notSeenSlots=1 numMissedVotes=1 numBadVotes=10 78.573 ms/op 49.325 ms/op 1.59
notSeenSlots=1 numMissedVotes=0 numBadVotes=4 76.255 ms/op 47.024 ms/op 1.62
notSeenSlots=2 numMissedVotes=1 numBadVotes=10 54.092 ms/op 26.387 ms/op 2.05
getSlashingsAndExits - default max 194.66 us/op 167.87 us/op 1.16
getSlashingsAndExits - 2k 502.90 us/op 366.30 us/op 1.37
proposeBlockBody type=full, size=empty 6.9001 ms/op 4.1898 ms/op 1.65
isKnown best case - 1 super set check 598.00 ns/op 322.00 ns/op 1.86
isKnown normal case - 2 super set checks 499.00 ns/op 322.00 ns/op 1.55
isKnown worse case - 16 super set checks 484.00 ns/op 327.00 ns/op 1.48
InMemoryCheckpointStateCache - add get delete 7.3380 us/op 5.1510 us/op 1.42
validate api signedAggregateAndProof - struct 2.8738 ms/op 2.3475 ms/op 1.22
validate gossip signedAggregateAndProof - struct 2.9061 ms/op 2.3690 ms/op 1.23
validate gossip attestation - vc 640000 1.4355 ms/op 1.1463 ms/op 1.25
batch validate gossip attestation - vc 640000 - chunk 32 182.40 us/op 136.90 us/op 1.33
batch validate gossip attestation - vc 640000 - chunk 64 155.53 us/op 121.17 us/op 1.28
batch validate gossip attestation - vc 640000 - chunk 128 148.31 us/op 115.84 us/op 1.28
batch validate gossip attestation - vc 640000 - chunk 256 140.20 us/op 110.12 us/op 1.27
pickEth1Vote - no votes 1.3797 ms/op 890.14 us/op 1.55
pickEth1Vote - max votes 12.227 ms/op 5.5672 ms/op 2.20
pickEth1Vote - Eth1Data hashTreeRoot value x2048 24.321 ms/op 12.193 ms/op 1.99
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 30.938 ms/op 20.642 ms/op 1.50
pickEth1Vote - Eth1Data fastSerialize value x2048 796.47 us/op 451.98 us/op 1.76
pickEth1Vote - Eth1Data fastSerialize tree x2048 5.5373 ms/op 3.2757 ms/op 1.69
bytes32 toHexString 681.00 ns/op 445.00 ns/op 1.53
bytes32 Buffer.toString(hex) 344.00 ns/op 334.00 ns/op 1.03
bytes32 Buffer.toString(hex) from Uint8Array 527.00 ns/op 452.00 ns/op 1.17
bytes32 Buffer.toString(hex) + 0x 317.00 ns/op 314.00 ns/op 1.01
Object access 1 prop 0.23200 ns/op 0.19200 ns/op 1.21
Map access 1 prop 0.16200 ns/op 0.19400 ns/op 0.84
Object get x1000 7.5480 ns/op 5.5240 ns/op 1.37
Map get x1000 0.86700 ns/op 0.73600 ns/op 1.18
Object set x1000 66.153 ns/op 24.537 ns/op 2.70
Map set x1000 51.198 ns/op 17.635 ns/op 2.90
Return object 10000 times 0.25850 ns/op 0.23670 ns/op 1.09
Throw Error 10000 times 4.1722 us/op 2.7952 us/op 1.49
fastMsgIdFn sha256 / 200 bytes 3.5840 us/op 1.9970 us/op 1.79
fastMsgIdFn h32 xxhash / 200 bytes 365.00 ns/op 313.00 ns/op 1.17
fastMsgIdFn h64 xxhash / 200 bytes 394.00 ns/op 369.00 ns/op 1.07
fastMsgIdFn sha256 / 1000 bytes 11.870 us/op 6.2570 us/op 1.90
fastMsgIdFn h32 xxhash / 1000 bytes 481.00 ns/op 470.00 ns/op 1.02
fastMsgIdFn h64 xxhash / 1000 bytes 492.00 ns/op 424.00 ns/op 1.16
fastMsgIdFn sha256 / 10000 bytes 109.22 us/op 51.197 us/op 2.13
fastMsgIdFn h32 xxhash / 10000 bytes 2.1520 us/op 1.8320 us/op 1.17
fastMsgIdFn h64 xxhash / 10000 bytes 1.4890 us/op 1.2740 us/op 1.17
send data - 1000 256B messages 23.432 ms/op 12.285 ms/op 1.91
send data - 1000 512B messages 31.166 ms/op 15.645 ms/op 1.99
send data - 1000 1024B messages 48.701 ms/op 21.460 ms/op 2.27
send data - 1000 1200B messages 44.139 ms/op 28.722 ms/op 1.54
send data - 1000 2048B messages 55.769 ms/op 35.427 ms/op 1.57
send data - 1000 4096B messages 51.399 ms/op 33.604 ms/op 1.53
send data - 1000 16384B messages 131.20 ms/op 93.915 ms/op 1.40
send data - 1000 65536B messages 516.85 ms/op 377.75 ms/op 1.37
enrSubnets - fastDeserialize 64 bits 1.4650 us/op 1.2430 us/op 1.18
enrSubnets - ssz BitVector 64 bits 506.00 ns/op 583.00 ns/op 0.87
enrSubnets - fastDeserialize 4 bits 190.00 ns/op 286.00 ns/op 0.66
enrSubnets - ssz BitVector 4 bits 462.00 ns/op 599.00 ns/op 0.77
prioritizePeers score -10:0 att 32-0.1 sync 2-0 103.25 us/op 81.477 us/op 1.27
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 132.18 us/op 102.48 us/op 1.29
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 196.70 us/op 182.73 us/op 1.08
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 313.90 us/op 180.42 us/op 1.74
prioritizePeers score 0:0 att 64-1 sync 4-1 372.57 us/op 233.24 us/op 1.60
array of 16000 items push then shift 1.7076 us/op 1.3542 us/op 1.26
LinkedList of 16000 items push then shift 9.3810 ns/op 6.1970 ns/op 1.51
array of 16000 items push then pop 113.18 ns/op 71.795 ns/op 1.58
LinkedList of 16000 items push then pop 9.2810 ns/op 5.7960 ns/op 1.60
array of 24000 items push then shift 2.7522 us/op 1.8983 us/op 1.45
LinkedList of 24000 items push then shift 9.6600 ns/op 5.9120 ns/op 1.63
array of 24000 items push then pop 171.35 ns/op 87.713 ns/op 1.95
LinkedList of 24000 items push then pop 9.8790 ns/op 5.6990 ns/op 1.73
intersect bitArray bitLen 8 6.0540 ns/op 4.8820 ns/op 1.24
intersect array and set length 8 77.036 ns/op 49.081 ns/op 1.57
intersect bitArray bitLen 128 36.342 ns/op 29.673 ns/op 1.22
intersect array and set length 128 1.0361 us/op 687.47 ns/op 1.51
bitArray.getTrueBitIndexes() bitLen 128 1.8780 us/op 1.1620 us/op 1.62
bitArray.getTrueBitIndexes() bitLen 248 2.8510 us/op 1.9710 us/op 1.45
bitArray.getTrueBitIndexes() bitLen 512 6.3410 us/op 3.7000 us/op 1.71
Buffer.concat 32 items 1.1510 us/op 860.00 ns/op 1.34
Uint8Array.set 32 items 2.0570 us/op 1.6730 us/op 1.23
Set add up to 64 items then delete first 5.1416 us/op 1.7438 us/op 2.95
OrderedSet add up to 64 items then delete first 6.5540 us/op 2.6771 us/op 2.45
Set add up to 64 items then delete last 5.3761 us/op 2.0089 us/op 2.68
OrderedSet add up to 64 items then delete last 7.4390 us/op 3.0002 us/op 2.48
Set add up to 64 items then delete middle 5.3895 us/op 2.0320 us/op 2.65
OrderedSet add up to 64 items then delete middle 8.4007 us/op 4.2374 us/op 1.98
Set add up to 128 items then delete first 11.403 us/op 3.9300 us/op 2.90
OrderedSet add up to 128 items then delete first 16.005 us/op 6.6266 us/op 2.42
Set add up to 128 items then delete last 11.256 us/op 3.7499 us/op 3.00
OrderedSet add up to 128 items then delete last 14.390 us/op 5.6615 us/op 2.54
Set add up to 128 items then delete middle 10.968 us/op 3.8915 us/op 2.82
OrderedSet add up to 128 items then delete middle 19.399 us/op 10.646 us/op 1.82
Set add up to 256 items then delete first 22.855 us/op 7.5093 us/op 3.04
OrderedSet add up to 256 items then delete first 30.722 us/op 12.069 us/op 2.55
Set add up to 256 items then delete last 21.919 us/op 7.2728 us/op 3.01
OrderedSet add up to 256 items then delete last 28.598 us/op 11.171 us/op 2.56
Set add up to 256 items then delete middle 22.168 us/op 7.6461 us/op 2.90
OrderedSet add up to 256 items then delete middle 53.729 us/op 30.741 us/op 1.75
transfer serialized Status (84 B) 2.0670 us/op 1.3200 us/op 1.57
copy serialized Status (84 B) 1.5100 us/op 1.0570 us/op 1.43
transfer serialized SignedVoluntaryExit (112 B) 2.2980 us/op 1.4060 us/op 1.63
copy serialized SignedVoluntaryExit (112 B) 1.6170 us/op 1.0940 us/op 1.48
transfer serialized ProposerSlashing (416 B) 3.3030 us/op 1.5610 us/op 2.12
copy serialized ProposerSlashing (416 B) 3.2300 us/op 1.3550 us/op 2.38
transfer serialized Attestation (485 B) 3.7650 us/op 1.6030 us/op 2.35
copy serialized Attestation (485 B) 3.3860 us/op 1.3740 us/op 2.46
transfer serialized AttesterSlashing (33232 B) 3.2330 us/op 1.6610 us/op 1.95
copy serialized AttesterSlashing (33232 B) 10.644 us/op 3.5220 us/op 3.02
transfer serialized Small SignedBeaconBlock (128000 B) 3.2990 us/op 1.8690 us/op 1.77
copy serialized Small SignedBeaconBlock (128000 B) 26.827 us/op 24.255 us/op 1.11
transfer serialized Avg SignedBeaconBlock (200000 B) 3.6240 us/op 2.8990 us/op 1.25
copy serialized Avg SignedBeaconBlock (200000 B) 30.652 us/op 29.255 us/op 1.05
transfer serialized BlobsSidecar (524380 B) 3.5230 us/op 3.2090 us/op 1.10
copy serialized BlobsSidecar (524380 B) 158.33 us/op 84.926 us/op 1.86
transfer serialized Big SignedBeaconBlock (1000000 B) 3.2690 us/op 3.7260 us/op 0.88
copy serialized Big SignedBeaconBlock (1000000 B) 209.77 us/op 134.23 us/op 1.56
pass gossip attestations to forkchoice per slot 3.9802 ms/op 2.6707 ms/op 1.49
forkChoice updateHead vc 100000 bc 64 eq 0 737.01 us/op 474.11 us/op 1.55
forkChoice updateHead vc 600000 bc 64 eq 0 5.4381 ms/op 2.7735 ms/op 1.96
forkChoice updateHead vc 1000000 bc 64 eq 0 7.3549 ms/op 4.3029 ms/op 1.71
forkChoice updateHead vc 600000 bc 320 eq 0 4.5746 ms/op 2.6003 ms/op 1.76
forkChoice updateHead vc 600000 bc 1200 eq 0 4.9177 ms/op 2.8474 ms/op 1.73
forkChoice updateHead vc 600000 bc 7200 eq 0 5.6636 ms/op 4.0334 ms/op 1.40
forkChoice updateHead vc 600000 bc 64 eq 1000 12.865 ms/op 9.7837 ms/op 1.31
forkChoice updateHead vc 600000 bc 64 eq 10000 12.577 ms/op 9.4892 ms/op 1.33
forkChoice updateHead vc 600000 bc 64 eq 300000 17.277 ms/op 12.527 ms/op 1.38
computeDeltas 500000 validators 300 proto nodes 7.3381 ms/op 3.1009 ms/op 2.37
computeDeltas 500000 validators 1200 proto nodes 7.2155 ms/op 3.1489 ms/op 2.29
computeDeltas 500000 validators 7200 proto nodes 7.0524 ms/op 3.0896 ms/op 2.28
computeDeltas 750000 validators 300 proto nodes 10.575 ms/op 4.6363 ms/op 2.28
computeDeltas 750000 validators 1200 proto nodes 10.639 ms/op 4.8353 ms/op 2.20
computeDeltas 750000 validators 7200 proto nodes 11.069 ms/op 4.5789 ms/op 2.42
computeDeltas 1400000 validators 300 proto nodes 20.056 ms/op 8.9848 ms/op 2.23
computeDeltas 1400000 validators 1200 proto nodes 20.268 ms/op 8.8491 ms/op 2.29
computeDeltas 1400000 validators 7200 proto nodes 19.482 ms/op 8.8049 ms/op 2.21
computeDeltas 2100000 validators 300 proto nodes 27.548 ms/op 13.392 ms/op 2.06
computeDeltas 2100000 validators 1200 proto nodes 27.451 ms/op 13.673 ms/op 2.01
computeDeltas 2100000 validators 7200 proto nodes 27.946 ms/op 13.667 ms/op 2.04
altair processAttestation - 250000 vs - 7PWei normalcase 2.1978 ms/op 1.7006 ms/op 1.29
altair processAttestation - 250000 vs - 7PWei worstcase 3.3188 ms/op 4.0208 ms/op 0.83
altair processAttestation - setStatus - 1/6 committees join 187.56 us/op 105.42 us/op 1.78
altair processAttestation - setStatus - 1/3 committees join 359.26 us/op 225.30 us/op 1.59
altair processAttestation - setStatus - 1/2 committees join 490.78 us/op 339.19 us/op 1.45
altair processAttestation - setStatus - 2/3 committees join 614.58 us/op 397.33 us/op 1.55
altair processAttestation - setStatus - 4/5 committees join 857.57 us/op 525.54 us/op 1.63
altair processAttestation - setStatus - 100% committees join 981.75 us/op 603.36 us/op 1.63
altair processBlock - 250000 vs - 7PWei normalcase 8.6944 ms/op 7.0197 ms/op 1.24
altair processBlock - 250000 vs - 7PWei normalcase hashState 41.773 ms/op 31.265 ms/op 1.34
altair processBlock - 250000 vs - 7PWei worstcase 40.831 ms/op 34.596 ms/op 1.18
altair processBlock - 250000 vs - 7PWei worstcase hashState 105.46 ms/op 83.621 ms/op 1.26
phase0 processBlock - 250000 vs - 7PWei normalcase 2.3437 ms/op 2.0301 ms/op 1.15
phase0 processBlock - 250000 vs - 7PWei worstcase 30.822 ms/op 25.291 ms/op 1.22
altair processEth1Data - 250000 vs - 7PWei normalcase 459.70 us/op 337.12 us/op 1.36
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 8.3530 us/op 9.4000 us/op 0.89
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 79.656 us/op 60.004 us/op 1.33
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 21.117 us/op 16.664 us/op 1.27
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 11.429 us/op 10.187 us/op 1.12
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 201.65 us/op 58.861 us/op 3.43
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 1.4811 ms/op 1.0566 ms/op 1.40
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.5601 ms/op 1.3836 ms/op 1.13
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.5437 ms/op 1.6821 ms/op 0.92
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.6661 ms/op 2.6680 ms/op 1.37
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.4729 ms/op 1.7072 ms/op 1.45
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 5.0820 ms/op 3.9768 ms/op 1.28
Tree 40 250000 create 381.63 ms/op 258.26 ms/op 1.48
Tree 40 250000 get(125000) 196.13 ns/op 113.23 ns/op 1.73
Tree 40 250000 set(125000) 1.0153 us/op 755.69 ns/op 1.34
Tree 40 250000 toArray() 20.590 ms/op 9.5149 ms/op 2.16
Tree 40 250000 iterate all - toArray() + loop 20.282 ms/op 10.478 ms/op 1.94
Tree 40 250000 iterate all - get(i) 72.847 ms/op 41.000 ms/op 1.78
MutableVector 250000 create 15.138 ms/op 11.839 ms/op 1.28
MutableVector 250000 get(125000) 6.7740 ns/op 5.6930 ns/op 1.19
MutableVector 250000 set(125000) 294.21 ns/op 209.63 ns/op 1.40
MutableVector 250000 toArray() 3.5671 ms/op 2.1968 ms/op 1.62
MutableVector 250000 iterate all - toArray() + loop 3.5428 ms/op 2.3584 ms/op 1.50
MutableVector 250000 iterate all - get(i) 1.5747 ms/op 1.3498 ms/op 1.17
Array 250000 create 3.2416 ms/op 2.7345 ms/op 1.19
Array 250000 clone - spread 1.3608 ms/op 1.1494 ms/op 1.18
Array 250000 get(125000) 1.1390 ns/op 1.0120 ns/op 1.13
Array 250000 set(125000) 4.4930 ns/op 1.2100 ns/op 3.71
Array 250000 iterate all - loop 169.59 us/op 149.39 us/op 1.14
effectiveBalanceIncrements clone Uint8Array 300000 35.601 us/op 21.538 us/op 1.65
effectiveBalanceIncrements clone MutableVector 300000 429.00 ns/op 404.00 ns/op 1.06
effectiveBalanceIncrements rw all Uint8Array 300000 210.01 us/op 180.62 us/op 1.16
effectiveBalanceIncrements rw all MutableVector 300000 91.717 ms/op 69.594 ms/op 1.32
phase0 afterProcessEpoch - 250000 vs - 7PWei 117.75 ms/op 75.916 ms/op 1.55
phase0 beforeProcessEpoch - 250000 vs - 7PWei 54.523 ms/op 33.383 ms/op 1.63
altair processEpoch - mainnet_e81889 483.28 ms/op 444.03 ms/op 1.09
mainnet_e81889 - altair beforeProcessEpoch 82.198 ms/op 81.306 ms/op 1.01
mainnet_e81889 - altair processJustificationAndFinalization 13.935 us/op 11.832 us/op 1.18
mainnet_e81889 - altair processInactivityUpdates 5.7477 ms/op 5.4678 ms/op 1.05
mainnet_e81889 - altair processRewardsAndPenalties 49.855 ms/op 65.157 ms/op 0.77
mainnet_e81889 - altair processRegistryUpdates 2.2890 us/op 1.1620 us/op 1.97
mainnet_e81889 - altair processSlashings 574.00 ns/op 605.00 ns/op 0.95
mainnet_e81889 - altair processEth1DataReset 595.00 ns/op 675.00 ns/op 0.88
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.4005 ms/op 1.7341 ms/op 0.81
mainnet_e81889 - altair processSlashingsReset 2.8870 us/op 2.7850 us/op 1.04
mainnet_e81889 - altair processRandaoMixesReset 4.5970 us/op 2.8960 us/op 1.59
mainnet_e81889 - altair processHistoricalRootsUpdate 851.00 ns/op 788.00 ns/op 1.08
mainnet_e81889 - altair processParticipationFlagUpdates 2.5340 us/op 1.5250 us/op 1.66
mainnet_e81889 - altair processSyncCommitteeUpdates 645.00 ns/op 660.00 ns/op 0.98
mainnet_e81889 - altair afterProcessEpoch 119.04 ms/op 78.764 ms/op 1.51
capella processEpoch - mainnet_e217614 2.0562 s/op 1.6305 s/op 1.26
mainnet_e217614 - capella beforeProcessEpoch 516.81 ms/op 389.85 ms/op 1.33
mainnet_e217614 - capella processJustificationAndFinalization 14.755 us/op 11.643 us/op 1.27
mainnet_e217614 - capella processInactivityUpdates 18.531 ms/op 15.080 ms/op 1.23
mainnet_e217614 - capella processRewardsAndPenalties 579.40 ms/op 435.04 ms/op 1.33
mainnet_e217614 - capella processRegistryUpdates 19.972 us/op 24.702 us/op 0.81
mainnet_e217614 - capella processSlashings 800.00 ns/op 606.00 ns/op 1.32
mainnet_e217614 - capella processEth1DataReset 485.00 ns/op 566.00 ns/op 0.86
mainnet_e217614 - capella processEffectiveBalanceUpdates 15.729 ms/op 3.4400 ms/op 4.57
mainnet_e217614 - capella processSlashingsReset 3.0950 us/op 3.0600 us/op 1.01
mainnet_e217614 - capella processRandaoMixesReset 5.0810 us/op 3.3140 us/op 1.53
mainnet_e217614 - capella processHistoricalRootsUpdate 1.4580 us/op 1.0860 us/op 1.34
mainnet_e217614 - capella processParticipationFlagUpdates 1.7620 us/op 2.7440 us/op 0.64
mainnet_e217614 - capella afterProcessEpoch 355.63 ms/op 212.08 ms/op 1.68
phase0 processEpoch - mainnet_e58758 516.20 ms/op 367.55 ms/op 1.40
mainnet_e58758 - phase0 beforeProcessEpoch 140.14 ms/op 121.69 ms/op 1.15
mainnet_e58758 - phase0 processJustificationAndFinalization 17.455 us/op 13.711 us/op 1.27
mainnet_e58758 - phase0 processRewardsAndPenalties 65.115 ms/op 58.642 ms/op 1.11
mainnet_e58758 - phase0 processRegistryUpdates 10.103 us/op 13.033 us/op 0.78
mainnet_e58758 - phase0 processSlashings 616.00 ns/op 823.00 ns/op 0.75
mainnet_e58758 - phase0 processEth1DataReset 466.00 ns/op 553.00 ns/op 0.84
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.1386 ms/op 1.4444 ms/op 0.79
mainnet_e58758 - phase0 processSlashingsReset 2.6210 us/op 2.2400 us/op 1.17
mainnet_e58758 - phase0 processRandaoMixesReset 4.3270 us/op 4.3670 us/op 0.99
mainnet_e58758 - phase0 processHistoricalRootsUpdate 492.00 ns/op 525.00 ns/op 0.94
mainnet_e58758 - phase0 processParticipationRecordUpdates 3.4670 us/op 2.9520 us/op 1.17
mainnet_e58758 - phase0 afterProcessEpoch 101.02 ms/op 71.151 ms/op 1.42
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.3407 ms/op 1.0537 ms/op 1.27
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.5616 ms/op 1.1316 ms/op 1.38
altair processInactivityUpdates - 250000 normalcase 31.742 ms/op 24.257 ms/op 1.31
altair processInactivityUpdates - 250000 worstcase 29.985 ms/op 22.292 ms/op 1.35
phase0 processRegistryUpdates - 250000 normalcase 8.9690 us/op 7.7460 us/op 1.16
phase0 processRegistryUpdates - 250000 badcase_full_deposits 364.97 us/op 502.58 us/op 0.73
phase0 processRegistryUpdates - 250000 worstcase 0.5 156.05 ms/op 110.77 ms/op 1.41
altair processRewardsAndPenalties - 250000 normalcase 74.398 ms/op 59.967 ms/op 1.24
altair processRewardsAndPenalties - 250000 worstcase 73.096 ms/op 62.489 ms/op 1.17
phase0 getAttestationDeltas - 250000 normalcase 9.5847 ms/op 5.8636 ms/op 1.63
phase0 getAttestationDeltas - 250000 worstcase 8.7891 ms/op 8.2341 ms/op 1.07
phase0 processSlashings - 250000 worstcase 81.688 us/op 87.849 us/op 0.93
altair processSyncCommitteeUpdates - 250000 149.10 ms/op 114.95 ms/op 1.30
BeaconState.hashTreeRoot - No change 375.00 ns/op 555.00 ns/op 0.68
BeaconState.hashTreeRoot - 1 full validator 119.37 us/op 137.41 us/op 0.87
BeaconState.hashTreeRoot - 32 full validator 1.5064 ms/op 1.5640 ms/op 0.96
BeaconState.hashTreeRoot - 512 full validator 16.609 ms/op 14.490 ms/op 1.15
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 187.02 us/op 134.55 us/op 1.39
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 2.4504 ms/op 1.6032 ms/op 1.53
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 28.796 ms/op 22.904 ms/op 1.26
BeaconState.hashTreeRoot - 1 balances 135.99 us/op 100.71 us/op 1.35
BeaconState.hashTreeRoot - 32 balances 1.2008 ms/op 1.0548 ms/op 1.14
BeaconState.hashTreeRoot - 512 balances 13.436 ms/op 11.728 ms/op 1.15
BeaconState.hashTreeRoot - 250000 balances 201.45 ms/op 165.89 ms/op 1.21
aggregationBits - 2048 els - zipIndexesInBitList 26.228 us/op 19.525 us/op 1.34
byteArrayEquals 32 74.455 ns/op 65.500 ns/op 1.14
Buffer.compare 32 56.310 ns/op 37.905 ns/op 1.49
byteArrayEquals 1024 2.0318 us/op 1.7964 us/op 1.13
Buffer.compare 1024 71.148 ns/op 45.583 ns/op 1.56
byteArrayEquals 16384 32.353 us/op 28.422 us/op 1.14
Buffer.compare 16384 258.65 ns/op 239.37 ns/op 1.08
byteArrayEquals 123687377 246.15 ms/op 209.24 ms/op 1.18
Buffer.compare 123687377 6.4066 ms/op 4.3331 ms/op 1.48
byteArrayEquals 32 - diff last byte 71.949 ns/op 62.463 ns/op 1.15
Buffer.compare 32 - diff last byte 56.669 ns/op 39.258 ns/op 1.44
byteArrayEquals 1024 - diff last byte 2.0199 us/op 1.7441 us/op 1.16
Buffer.compare 1024 - diff last byte 71.563 ns/op 47.305 ns/op 1.51
byteArrayEquals 16384 - diff last byte 32.181 us/op 30.270 us/op 1.06
Buffer.compare 16384 - diff last byte 277.40 ns/op 228.81 ns/op 1.21
byteArrayEquals 123687377 - diff last byte 250.28 ms/op 209.68 ms/op 1.19
Buffer.compare 123687377 - diff last byte 6.5057 ms/op 6.6109 ms/op 0.98
byteArrayEquals 32 - random bytes 5.6490 ns/op 4.9860 ns/op 1.13
Buffer.compare 32 - random bytes 62.309 ns/op 41.211 ns/op 1.51
byteArrayEquals 1024 - random bytes 5.3340 ns/op 4.8620 ns/op 1.10
Buffer.compare 1024 - random bytes 63.820 ns/op 38.535 ns/op 1.66
byteArrayEquals 16384 - random bytes 5.3790 ns/op 4.8310 ns/op 1.11
Buffer.compare 16384 - random bytes 61.402 ns/op 38.847 ns/op 1.58
byteArrayEquals 123687377 - random bytes 8.7700 ns/op 8.2900 ns/op 1.06
Buffer.compare 123687377 - random bytes 71.350 ns/op 42.390 ns/op 1.68
regular array get 100000 times 47.323 us/op 43.188 us/op 1.10
wrappedArray get 100000 times 46.669 us/op 43.176 us/op 1.08
arrayWithProxy get 100000 times 14.617 ms/op 10.638 ms/op 1.37
ssz.Root.equals 56.407 ns/op 60.845 ns/op 0.93
byteArrayEquals 54.462 ns/op 56.766 ns/op 0.96
Buffer.compare 11.369 ns/op 10.582 ns/op 1.07
shuffle list - 16384 els 8.9583 ms/op 6.0549 ms/op 1.48
shuffle list - 250000 els 131.17 ms/op 89.901 ms/op 1.46
processSlot - 1 slots 18.433 us/op 12.579 us/op 1.47
processSlot - 32 slots 3.4291 ms/op 2.4883 ms/op 1.38
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 63.756 ms/op 50.564 ms/op 1.26
getCommitteeAssignments - req 1 vs - 250000 vc 2.8136 ms/op 2.4423 ms/op 1.15
getCommitteeAssignments - req 100 vs - 250000 vc 4.0557 ms/op 3.6424 ms/op 1.11
getCommitteeAssignments - req 1000 vs - 250000 vc 4.4322 ms/op 3.9876 ms/op 1.11
findModifiedValidators - 10000 modified validators 462.76 ms/op 304.56 ms/op 1.52
findModifiedValidators - 1000 modified validators 276.16 ms/op 189.26 ms/op 1.46
findModifiedValidators - 100 modified validators 267.24 ms/op 160.67 ms/op 1.66
findModifiedValidators - 10 modified validators 238.67 ms/op 150.90 ms/op 1.58
findModifiedValidators - 1 modified validators 263.82 ms/op 140.15 ms/op 1.88
findModifiedValidators - no difference 274.23 ms/op 177.82 ms/op 1.54
compare ViewDUs 5.4264 s/op 3.9642 s/op 1.37
compare each validator Uint8Array 1.8231 s/op 1.3048 s/op 1.40
compare ViewDU to Uint8Array 1.5279 s/op 910.68 ms/op 1.68
migrate state 1000000 validators, 24 modified, 0 new 882.80 ms/op 634.85 ms/op 1.39
migrate state 1000000 validators, 1700 modified, 1000 new 1.2092 s/op 921.38 ms/op 1.31
migrate state 1000000 validators, 3400 modified, 2000 new 1.5659 s/op 1.2006 s/op 1.30
migrate state 1500000 validators, 24 modified, 0 new 878.61 ms/op 711.83 ms/op 1.23
migrate state 1500000 validators, 1700 modified, 1000 new 1.1020 s/op 881.37 ms/op 1.25
migrate state 1500000 validators, 3400 modified, 2000 new 1.3534 s/op 1.2545 s/op 1.08
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.2700 ns/op 5.0000 ns/op 0.85
state getBlockRootAtSlot - 250000 vs - 7PWei 826.17 ns/op 1.1247 us/op 0.73
computeProposers - vc 250000 9.3272 ms/op 7.0857 ms/op 1.32
computeEpochShuffling - vc 250000 122.28 ms/op 91.020 ms/op 1.34
getNextSyncCommittee - vc 250000 158.15 ms/op 114.73 ms/op 1.38
computeSigningRoot for AttestationData 27.229 us/op 29.881 us/op 0.91
hash AttestationData serialized data then Buffer.toString(base64) 2.2777 us/op 1.3303 us/op 1.71
toHexString serialized data 1.0462 us/op 899.13 ns/op 1.16
Buffer.toString(base64) 223.26 ns/op 231.69 ns/op 0.96

Please sign in to comment.