Skip to content

Commit

Permalink
CL spec 1.1.6: Rename merge transition fields (#3606)
Browse files Browse the repository at this point in the history
* merge transition renaming

* linter
  • Loading branch information
g11tech authored Jan 12, 2022
1 parent e1fb2fa commit f0f8f0f
Show file tree
Hide file tree
Showing 14 changed files with 31 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import {byteArrayEquals, List, toHexString} from "@chainsafe/ssz";
import {CachedBeaconState} from "../../allForks";
import {getRandaoMix} from "../../util";
import {ExecutionEngine} from "../executionEngine";
import {isMergeComplete} from "../utils";
import {isMergeTransitionComplete} from "../utils";

export function processExecutionPayload(
state: CachedBeaconState<merge.BeaconState>,
Expand All @@ -12,7 +12,7 @@ export function processExecutionPayload(
): void {
// Verify consistency of the parent hash, block number, base fee per gas and gas limit
// with respect to the previous execution payload header
if (isMergeComplete(state)) {
if (isMergeTransitionComplete(state)) {
const {latestExecutionPayloadHeader} = state;
if (!byteArrayEquals(payload.parentHash as Uint8Array, latestExecutionPayloadHeader.blockHash as Uint8Array)) {
throw Error(
Expand Down
8 changes: 4 additions & 4 deletions packages/beacon-state-transition/src/merge/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {allForks, merge, ssz} from "@chainsafe/lodestar-types";
*/
export function isExecutionEnabled(state: merge.BeaconState, body: merge.BeaconBlockBody): boolean {
return (
isMergeComplete(state) ||
isMergeTransitionComplete(state) ||
!ssz.merge.ExecutionPayload.equals(body.executionPayload, ssz.merge.ExecutionPayload.defaultValue())
);
}
Expand All @@ -15,9 +15,9 @@ export function isExecutionEnabled(state: merge.BeaconState, body: merge.BeaconB
* Merge block is the SINGLE block that transitions from POW to POS.
* state has no execution data AND this block has execution data
*/
export function isMergeBlock(state: merge.BeaconState, body: merge.BeaconBlockBody): boolean {
export function isMergeTransitionBlock(state: merge.BeaconState, body: merge.BeaconBlockBody): boolean {
return (
!isMergeComplete(state) &&
!isMergeTransitionComplete(state) &&
!ssz.merge.ExecutionPayload.equals(body.executionPayload, ssz.merge.ExecutionPayload.defaultValue())
);
}
Expand All @@ -26,7 +26,7 @@ export function isMergeBlock(state: merge.BeaconState, body: merge.BeaconBlockBo
* Merge is complete when the state includes execution layer data:
* state.latestExecutionPayloadHeader NOT EMPTY
*/
export function isMergeComplete(state: merge.BeaconState): boolean {
export function isMergeTransitionComplete(state: merge.BeaconState): boolean {
return !ssz.merge.ExecutionPayloadHeader.equals(
state.latestExecutionPayloadHeader,
ssz.merge.ExecutionPayloadHeader.defaultTreeBacked()
Expand Down
6 changes: 4 additions & 2 deletions packages/fork-choice/src/forkChoice/forkChoice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -296,8 +296,10 @@ export class ForkChoice implements IForkChoice {
}

if (
preCachedData?.isMergeBlock ||
(merge.isMergeStateType(state) && merge.isMergeBlockBodyType(block.body) && merge.isMergeBlock(state, block.body))
preCachedData?.isMergeTransitionBlock ||
(merge.isMergeStateType(state) &&
merge.isMergeBlockBodyType(block.body) &&
merge.isMergeTransitionBlock(state, block.body))
)
assertValidTerminalPowBlock(this.config, (block as unknown) as merge.BeaconBlock, preCachedData);

Expand Down
2 changes: 1 addition & 1 deletion packages/fork-choice/src/forkChoice/interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ export type OnBlockPrecachedData = {
/**
* Optimistic sync fields
*/
isMergeBlock?: boolean;
isMergeTransitionBlock?: boolean;
executionStatus?: ExecutionStatus;
};

Expand Down
4 changes: 2 additions & 2 deletions packages/lodestar/src/chain/blocks/importBlock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ export async function importBlock(chain: ImportBlockModules, fullyVerifiedBlock:
if (
merge.isMergeStateType(postState) &&
merge.isMergeBlockBodyType(block.message.body) &&
merge.isMergeBlock(postState, block.message.body)
merge.isMergeTransitionBlock(postState, block.message.body)
) {
// pow_block = get_pow_block(block.body.execution_payload.parent_hash)
const powBlockRootHex = toHexString(block.message.body.executionPayload.parentHash);
Expand All @@ -108,7 +108,7 @@ export async function importBlock(chain: ImportBlockModules, fullyVerifiedBlock:
throw Error(`merge block parent's parent POW block not found ${powBlock.parentHash}`);
onBlockPrecachedData.powBlock = powBlock;
onBlockPrecachedData.powBlockParent = powBlockParent;
onBlockPrecachedData.isMergeBlock = true;
onBlockPrecachedData.isMergeTransitionBlock = true;
}

const prevFinalizedEpoch = chain.forkChoice.getFinalizedCheckpoint().epoch;
Expand Down
2 changes: 1 addition & 1 deletion packages/lodestar/src/chain/factory/block/body.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ async function prepareExecutionPayload(
// Use different POW block hash parent for block production based on merge status.
// Returned value of null == using an empty ExecutionPayload value
let parentHash: Root;
if (!merge.isMergeComplete(state)) {
if (!merge.isMergeTransitionComplete(state)) {
if (
!ssz.Root.equals(chain.config.TERMINAL_BLOCK_HASH, ZERO_HASH) &&
getCurrentEpoch(state) < chain.config.TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH
Expand Down
2 changes: 1 addition & 1 deletion packages/lodestar/src/chain/forkChoice/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ export function initializeForkChoice(
finalizedEpoch: finalizedCheckpoint.epoch,
finalizedRoot: toHexString(finalizedCheckpoint.root),

...(merge.isMergeStateType(state) && merge.isMergeComplete(state)
...(merge.isMergeStateType(state) && merge.isMergeTransitionComplete(state)
? {
executionPayloadBlockHash: toHexString(state.latestExecutionPayloadHeader.blockHash),
executionStatus: blockHeader.slot === GENESIS_SLOT ? ExecutionStatus.Valid : ExecutionStatus.Syncing,
Expand Down
6 changes: 3 additions & 3 deletions packages/lodestar/src/eth1/eth1MergeBlockTracker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export type Eth1MergeBlockTrackerModules = {
logger: ILogger;
signal: AbortSignal;
clockEpoch: Epoch;
isMergeComplete: boolean;
isMergeTransitionComplete: boolean;
};

/**
Expand All @@ -57,15 +57,15 @@ export class Eth1MergeBlockTracker {
private readonly intervals: NodeJS.Timeout[] = [];

constructor(
{config, logger, signal, clockEpoch, isMergeComplete}: Eth1MergeBlockTrackerModules,
{config, logger, signal, clockEpoch, isMergeTransitionComplete}: Eth1MergeBlockTrackerModules,
private readonly eth1Provider: IEth1Provider
) {
this.config = config;
this.logger = logger;
this.signal = signal;

// If merge has already happened, disable
if (isMergeComplete) {
if (isMergeTransitionComplete) {
this.status = StatusCode.POST_MERGE;
return;
}
Expand Down
2 changes: 1 addition & 1 deletion packages/lodestar/src/eth1/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export function initializeEth1ForBlockProduction(
logger: modules.logger,
signal: modules.signal,
clockEpoch: computeEpochAtSlot(getCurrentSlot(modules.config, anchorState.genesisTime)),
isMergeComplete: merge.isMergeStateType(anchorState) && merge.isMergeComplete(anchorState),
isMergeTransitionComplete: merge.isMergeStateType(anchorState) && merge.isMergeTransitionComplete(anchorState),
});
} else {
return new Eth1ForBlockProductionDisabled();
Expand Down
4 changes: 2 additions & 2 deletions packages/lodestar/src/node/notifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ export async function runNodeNotifier({
const peersRow = `peers: ${connectedPeerCount}`;
const finalizedCheckpointRow = `finalized: ${prettyBytes(finalizedRoot)}:${finalizedEpoch}`;
const headRow = `head: ${headInfo.slot} ${prettyBytes(headInfo.blockRoot)}`;
const isMergeComplete = merge.isMergeStateType(headState) && merge.isMergeComplete(headState);
const mergeInfo = isMergeComplete
const isMergeTransitionComplete = merge.isMergeStateType(headState) && merge.isMergeTransitionComplete(headState);
const mergeInfo = isMergeTransitionComplete
? [
`execution: ${headInfo.executionStatus.toLowerCase()}(${prettyBytes(
headInfo.executionPayloadBlockHash ?? "empty"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ describe("eth1 / Eth1Provider", function () {
signal: controller.signal,
eth1Provider,
clockEpoch: 0,
isMergeComplete: false,
isMergeTransitionComplete: false,
});

// Resolves when Eth1ForBlockProduction has fetched both blocks and deposits
Expand Down
6 changes: 3 additions & 3 deletions packages/lodestar/test/e2e/eth1/eth1MergeBlockTracker.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ describe("eth1 / Eth1MergeBlockTracker", function () {
logger,
signal: controller.signal,
clockEpoch: 0,
isMergeComplete: false,
isMergeTransitionComplete: false,
},
eth1Provider as IEth1Provider
);
Expand Down Expand Up @@ -94,7 +94,7 @@ describe("eth1 / Eth1MergeBlockTracker", function () {
logger,
signal: controller.signal,
clockEpoch: 0,
isMergeComplete: false,
isMergeTransitionComplete: false,
},
eth1Provider as IEth1Provider
);
Expand Down Expand Up @@ -131,7 +131,7 @@ describe("eth1 / Eth1MergeBlockTracker", function () {
logger,
signal: controller.signal,
clockEpoch: 0,
isMergeComplete: false,
isMergeTransitionComplete: false,
},
eth1Provider as IEth1Provider
);
Expand Down
5 changes: 3 additions & 2 deletions packages/lodestar/test/sim/merge-interop.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -365,8 +365,9 @@ describe("executionEngine / ExecutionEngineHttp", function () {
// By this slot, ttd should be reached and merge complete
case Number(ttd) + 3: {
const headState = bn.chain.getHeadState();
const isMergeComplete = merge.isMergeStateType(headState) && merge.isMergeComplete(headState);
if (!isMergeComplete) reject("Merge not completed");
const isMergeTransitionComplete =
merge.isMergeStateType(headState) && merge.isMergeTransitionComplete(headState);
if (!isMergeTransitionComplete) reject("Merge not completed");

// Send another tx post-merge, total amount in destination account should be double after this is included in chain
if (TX_SCENARIOS.includes("simple")) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ describe("eth1 / Eth1MergeBlockTracker", () => {
logger,
signal: controller.signal,
clockEpoch: 0,
isMergeComplete: false,
isMergeTransitionComplete: false,
},
eth1Provider as IEth1Provider
);
Expand Down Expand Up @@ -137,7 +137,7 @@ describe("eth1 / Eth1MergeBlockTracker", () => {
logger,
signal: controller.signal,
clockEpoch: 0,
isMergeComplete: false,
isMergeTransitionComplete: false,
},
eth1Provider as IEth1Provider
);
Expand Down Expand Up @@ -210,7 +210,7 @@ describe("eth1 / Eth1MergeBlockTracker", () => {
logger,
signal: controller.signal,
clockEpoch: 0,
isMergeComplete: false,
isMergeTransitionComplete: false,
},
eth1Provider as IEth1Provider
);
Expand Down

1 comment on commit f0f8f0f

@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: f0f8f0f Previous: e1fb2fa Ratio
altair processAttestation - updateEpochParticipants - 2/3 committees join 109.62 ms/op 35.210 ms/op 3.11
Full benchmark results
Benchmark suite Current: f0f8f0f Previous: e1fb2fa Ratio
BeaconState.hashTreeRoot - No change 708.00 ns/op 699.00 ns/op 1.01
BeaconState.hashTreeRoot - 1 full validator 178.73 us/op 176.37 us/op 1.01
BeaconState.hashTreeRoot - 32 full validator 2.6184 ms/op 2.6454 ms/op 0.99
BeaconState.hashTreeRoot - 512 full validator 33.550 ms/op 35.498 ms/op 0.95
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 167.66 us/op 170.40 us/op 0.98
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 2.5637 ms/op 2.6968 ms/op 0.95
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 35.750 ms/op 37.106 ms/op 0.96
BeaconState.hashTreeRoot - 1 balances 112.04 us/op 117.11 us/op 0.96
BeaconState.hashTreeRoot - 32 balances 963.66 us/op 1.0190 ms/op 0.95
BeaconState.hashTreeRoot - 512 balances 8.9776 ms/op 9.0367 ms/op 0.99
BeaconState.hashTreeRoot - 250000 balances 173.26 ms/op 186.17 ms/op 0.93
processSlot - 1 slots 71.107 us/op 72.906 us/op 0.98
processSlot - 32 slots 3.8173 ms/op 3.8086 ms/op 1.00
getCommitteeAssignments - req 1 vs - 250000 vc 5.6053 ms/op 5.6659 ms/op 0.99
getCommitteeAssignments - req 100 vs - 250000 vc 8.1864 ms/op 7.7201 ms/op 1.06
getCommitteeAssignments - req 1000 vs - 250000 vc 8.6104 ms/op 9.2187 ms/op 0.93
computeProposers - vc 250000 25.302 ms/op 27.957 ms/op 0.91
computeEpochShuffling - vc 250000 207.81 ms/op 212.43 ms/op 0.98
getNextSyncCommittee - vc 250000 428.03 ms/op 446.40 ms/op 0.96
altair processAttestation - 250000 vs - 7PWei normalcase 68.499 ms/op 57.138 ms/op 1.20
altair processAttestation - 250000 vs - 7PWei worstcase 54.510 ms/op 56.445 ms/op 0.97
altair processAttestation - setStatus - 1/6 committees join 14.582 ms/op 19.010 ms/op 0.77
altair processAttestation - setStatus - 1/3 committees join 29.277 ms/op 32.976 ms/op 0.89
altair processAttestation - setStatus - 1/2 committees join 45.665 ms/op 49.074 ms/op 0.93
altair processAttestation - setStatus - 2/3 committees join 58.450 ms/op 61.736 ms/op 0.95
altair processAttestation - setStatus - 4/5 committees join 77.067 ms/op 86.483 ms/op 0.89
altair processAttestation - setStatus - 100% committees join 91.798 ms/op 88.749 ms/op 1.03
altair processAttestation - updateEpochParticipants - 1/6 committees join 15.340 ms/op 18.999 ms/op 0.81
altair processAttestation - updateEpochParticipants - 1/3 committees join 32.820 ms/op 29.959 ms/op 1.10
altair processAttestation - updateEpochParticipants - 1/2 committees join 32.697 ms/op 41.188 ms/op 0.79
altair processAttestation - updateEpochParticipants - 2/3 committees join 109.62 ms/op 35.210 ms/op 3.11
altair processAttestation - updateEpochParticipants - 4/5 committees join 33.472 ms/op 36.576 ms/op 0.92
altair processAttestation - updateEpochParticipants - 100% committees join 36.197 ms/op 37.129 ms/op 0.97
altair processAttestation - updateAllStatus 28.547 ms/op 27.250 ms/op 1.05
altair processBlock - 250000 vs - 7PWei normalcase 52.650 ms/op 56.636 ms/op 0.93
altair processBlock - 250000 vs - 7PWei worstcase 147.11 ms/op 177.70 ms/op 0.83
altair processEpoch - mainnet_e81889 1.1940 s/op 1.3092 s/op 0.91
mainnet_e81889 - altair beforeProcessEpoch 321.15 ms/op 361.26 ms/op 0.89
mainnet_e81889 - altair processJustificationAndFinalization 125.10 us/op 126.07 us/op 0.99
mainnet_e81889 - altair processInactivityUpdates 19.502 ms/op 26.149 ms/op 0.75
mainnet_e81889 - altair processRewardsAndPenalties 231.22 ms/op 210.22 ms/op 1.10
mainnet_e81889 - altair processRegistryUpdates 22.254 us/op 21.305 us/op 1.04
mainnet_e81889 - altair processSlashings 6.1220 us/op 5.6600 us/op 1.08
mainnet_e81889 - altair processEth1DataReset 6.5420 us/op 5.9930 us/op 1.09
mainnet_e81889 - altair processEffectiveBalanceUpdates 15.109 ms/op 14.929 ms/op 1.01
mainnet_e81889 - altair processSlashingsReset 35.966 us/op 37.040 us/op 0.97
mainnet_e81889 - altair processRandaoMixesReset 42.289 us/op 43.306 us/op 0.98
mainnet_e81889 - altair processHistoricalRootsUpdate 10.435 us/op 8.8460 us/op 1.18
mainnet_e81889 - altair processParticipationFlagUpdates 124.10 ms/op 130.49 ms/op 0.95
mainnet_e81889 - altair processSyncCommitteeUpdates 5.1400 us/op 5.5440 us/op 0.93
mainnet_e81889 - altair afterProcessEpoch 236.80 ms/op 256.15 ms/op 0.92
altair processInactivityUpdates - 250000 normalcase 85.696 ms/op 97.693 ms/op 0.88
altair processInactivityUpdates - 250000 worstcase 84.626 ms/op 97.360 ms/op 0.87
altair processParticipationFlagUpdates - 250000 anycase 166.87 ms/op 113.28 ms/op 1.47
altair processRewardsAndPenalties - 250000 normalcase 139.66 ms/op 177.74 ms/op 0.79
altair processRewardsAndPenalties - 250000 worstcase 137.27 ms/op 169.13 ms/op 0.81
altair processSyncCommitteeUpdates - 250000 427.54 ms/op 467.13 ms/op 0.92
Tree 40 250000 create 1.0117 s/op 1.2458 s/op 0.81
Tree 40 250000 get(125000) 334.52 ns/op 354.82 ns/op 0.94
Tree 40 250000 set(125000) 2.3935 us/op 2.8529 us/op 0.84
Tree 40 250000 toArray() 52.346 ms/op 104.48 ms/op 0.50
Tree 40 250000 iterate all - toArray() + loop 43.891 ms/op 48.623 ms/op 0.90
Tree 40 250000 iterate all - get(i) 126.18 ms/op 136.35 ms/op 0.93
MutableVector 250000 create 27.144 ms/op 24.208 ms/op 1.12
MutableVector 250000 get(125000) 14.955 ns/op 15.762 ns/op 0.95
MutableVector 250000 set(125000) 738.90 ns/op 746.83 ns/op 0.99
MutableVector 250000 toArray() 9.7376 ms/op 10.226 ms/op 0.95
MutableVector 250000 iterate all - toArray() + loop 9.6618 ms/op 10.419 ms/op 0.93
MutableVector 250000 iterate all - get(i) 3.5863 ms/op 3.8348 ms/op 0.94
Array 250000 create 6.4497 ms/op 6.5439 ms/op 0.99
Array 250000 clone - spread 2.5220 ms/op 2.3198 ms/op 1.09
Array 250000 get(125000) 1.2880 ns/op 1.1090 ns/op 1.16
Array 250000 set(125000) 1.2050 ns/op 1.1970 ns/op 1.01
Array 250000 iterate all - loop 144.26 us/op 153.38 us/op 0.94
aggregationBits - 2048 els - readonlyValues 248.44 us/op 256.38 us/op 0.97
aggregationBits - 2048 els - zipIndexesInBitList 54.580 us/op 43.718 us/op 1.25
regular array get 100000 times 56.732 us/op 61.213 us/op 0.93
wrappedArray get 100000 times 55.646 us/op 61.461 us/op 0.91
arrayWithProxy get 100000 times 34.643 ms/op 42.054 ms/op 0.82
ssz.Root.equals 1.3960 us/op 1.8200 us/op 0.77
ssz.Root.equals with valueOf() 1.8100 us/op 1.7940 us/op 1.01
byteArrayEquals with valueOf() 1.7840 us/op 1.6560 us/op 1.08
phase0 processBlock - 250000 vs - 7PWei normalcase 13.181 ms/op 13.811 ms/op 0.95
phase0 processBlock - 250000 vs - 7PWei worstcase 95.351 ms/op 100.37 ms/op 0.95
phase0 afterProcessEpoch - 250000 vs - 7PWei 222.87 ms/op 225.86 ms/op 0.99
phase0 beforeProcessEpoch - 250000 vs - 7PWei 742.06 ms/op 753.79 ms/op 0.98
phase0 processEpoch - mainnet_e58758 1.0677 s/op 1.0793 s/op 0.99
mainnet_e58758 - phase0 beforeProcessEpoch 540.09 ms/op 629.93 ms/op 0.86
mainnet_e58758 - phase0 processJustificationAndFinalization 112.76 us/op 145.16 us/op 0.78
mainnet_e58758 - phase0 processRewardsAndPenalties 116.18 ms/op 121.89 ms/op 0.95
mainnet_e58758 - phase0 processRegistryUpdates 87.744 us/op 85.221 us/op 1.03
mainnet_e58758 - phase0 processSlashings 7.7070 us/op 6.5610 us/op 1.17
mainnet_e58758 - phase0 processEth1DataReset 6.3170 us/op 5.1740 us/op 1.22
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 12.355 ms/op 12.370 ms/op 1.00
mainnet_e58758 - phase0 processSlashingsReset 32.495 us/op 31.186 us/op 1.04
mainnet_e58758 - phase0 processRandaoMixesReset 40.103 us/op 40.848 us/op 0.98
mainnet_e58758 - phase0 processHistoricalRootsUpdate 8.2190 us/op 7.1180 us/op 1.15
mainnet_e58758 - phase0 processParticipationRecordUpdates 33.633 us/op 28.688 us/op 1.17
mainnet_e58758 - phase0 afterProcessEpoch 194.55 ms/op 204.82 ms/op 0.95
phase0 processEffectiveBalanceUpdates - 250000 normalcase 13.268 ms/op 12.695 ms/op 1.05
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.7591 s/op 1.9621 s/op 0.90
phase0 processRegistryUpdates - 250000 normalcase 99.044 us/op 91.709 us/op 1.08
phase0 processRegistryUpdates - 250000 badcase_full_deposits 3.6771 ms/op 4.4800 ms/op 0.82
phase0 processRegistryUpdates - 250000 worstcase 0.5 2.0054 s/op 2.8298 s/op 0.71
phase0 getAttestationDeltas - 250000 normalcase 35.853 ms/op 39.676 ms/op 0.90
phase0 getAttestationDeltas - 250000 worstcase 33.912 ms/op 38.961 ms/op 0.87
phase0 processSlashings - 250000 worstcase 45.021 ms/op 56.657 ms/op 0.79
shuffle list - 16384 els 12.400 ms/op 14.665 ms/op 0.85
shuffle list - 250000 els 174.64 ms/op 201.91 ms/op 0.86
getEffectiveBalances - 250000 vs - 7PWei 10.910 ms/op 12.771 ms/op 0.85
computeDeltas 3.7194 ms/op 4.4196 ms/op 0.84
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 2.4009 ms/op 2.8055 ms/op 0.86
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 688.58 us/op 784.58 us/op 0.88
BLS verify - blst-native 1.8948 ms/op 2.2850 ms/op 0.83
BLS verifyMultipleSignatures 3 - blst-native 3.9897 ms/op 4.6401 ms/op 0.86
BLS verifyMultipleSignatures 8 - blst-native 9.0073 ms/op 10.105 ms/op 0.89
BLS verifyMultipleSignatures 32 - blst-native 33.988 ms/op 36.765 ms/op 0.92
BLS aggregatePubkeys 32 - blst-native 43.622 us/op 47.533 us/op 0.92
BLS aggregatePubkeys 128 - blst-native 178.26 us/op 187.52 us/op 0.95
getAttestationsForBlock 100.21 ms/op 100.68 ms/op 1.00
CheckpointStateCache - add get delete 17.483 us/op 19.779 us/op 0.88
validate gossip signedAggregateAndProof - struct 4.8713 ms/op 5.4343 ms/op 0.90
validate gossip signedAggregateAndProof - treeBacked 5.3558 ms/op 5.4913 ms/op 0.98
validate gossip attestation - struct 2.4437 ms/op 2.6449 ms/op 0.92
validate gossip attestation - treeBacked 2.6700 ms/op 2.5691 ms/op 1.04
bytes32 toHexString 1.6570 us/op 1.9660 us/op 0.84
bytes32 Buffer.toString(hex) 629.00 ns/op 819.00 ns/op 0.77
bytes32 Buffer.toString(hex) from Uint8Array 899.00 ns/op 1.0630 us/op 0.85
bytes32 Buffer.toString(hex) + 0x 657.00 ns/op 793.00 ns/op 0.83
Object access 1 prop 0.32400 ns/op 0.45100 ns/op 0.72
Map access 1 prop 0.29200 ns/op 0.33700 ns/op 0.87
Object get x1000 15.267 ns/op 17.280 ns/op 0.88
Map get x1000 0.81800 ns/op 0.94900 ns/op 0.86
Object set x1000 92.874 ns/op 122.23 ns/op 0.76
Map set x1000 69.426 ns/op 84.224 ns/op 0.82
Return object 10000 times 0.37520 ns/op 0.43130 ns/op 0.87
Throw Error 10000 times 5.8545 us/op 7.1744 us/op 0.82
enrSubnets - fastDeserialize 64 bits 1.2080 us/op 1.5750 us/op 0.77
enrSubnets - ssz BitVector 64 bits 15.957 us/op 17.788 us/op 0.90
enrSubnets - fastDeserialize 4 bits 481.00 ns/op 544.00 ns/op 0.88
enrSubnets - ssz BitVector 4 bits 2.9520 us/op 3.4690 us/op 0.85
RateTracker 1000000 limit, 1 obj count per request 176.09 ns/op 218.75 ns/op 0.80
RateTracker 1000000 limit, 2 obj count per request 141.02 ns/op 159.47 ns/op 0.88
RateTracker 1000000 limit, 4 obj count per request 110.19 ns/op 129.19 ns/op 0.85
RateTracker 1000000 limit, 8 obj count per request 95.518 ns/op 115.50 ns/op 0.83
RateTracker with prune 3.9880 us/op 5.1220 us/op 0.78

Please sign in to comment.