@lodestar/beacon-node 1.19.0 → 1.20.0-dev.0cb3998a2a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/api/impl/api.d.ts +2 -4
- package/lib/api/impl/beacon/blocks/index.d.ts +3 -2
- package/lib/api/impl/beacon/blocks/index.js +82 -77
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/blocks/utils.d.ts +3 -3
- package/lib/api/impl/beacon/blocks/utils.js.map +1 -1
- package/lib/api/impl/beacon/index.d.ts +3 -2
- package/lib/api/impl/beacon/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.d.ts +3 -2
- package/lib/api/impl/beacon/pool/index.js +18 -18
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/beacon/rewards/index.d.ts +3 -2
- package/lib/api/impl/beacon/rewards/index.js +7 -7
- package/lib/api/impl/beacon/rewards/index.js.map +1 -1
- package/lib/api/impl/beacon/state/index.d.ts +3 -2
- package/lib/api/impl/beacon/state/index.js +37 -51
- package/lib/api/impl/beacon/state/index.js.map +1 -1
- package/lib/api/impl/beacon/state/utils.d.ts +1 -2
- package/lib/api/impl/beacon/state/utils.js +2 -2
- package/lib/api/impl/beacon/state/utils.js.map +1 -1
- package/lib/api/impl/config/index.d.ts +3 -2
- package/lib/api/impl/config/index.js.map +1 -1
- package/lib/api/impl/debug/index.d.ts +3 -2
- package/lib/api/impl/debug/index.js +10 -23
- package/lib/api/impl/debug/index.js.map +1 -1
- package/lib/api/impl/errors.d.ts +1 -1
- package/lib/api/impl/errors.js +1 -1
- package/lib/api/impl/errors.js.map +1 -1
- package/lib/api/impl/events/index.d.ts +3 -2
- package/lib/api/impl/events/index.js +2 -2
- package/lib/api/impl/events/index.js.map +1 -1
- package/lib/api/impl/lightclient/index.d.ts +3 -2
- package/lib/api/impl/lightclient/index.js +18 -18
- package/lib/api/impl/lightclient/index.js.map +1 -1
- package/lib/api/impl/lodestar/index.d.ts +3 -2
- package/lib/api/impl/lodestar/index.js +15 -17
- package/lib/api/impl/lodestar/index.js.map +1 -1
- package/lib/api/impl/node/index.d.ts +3 -2
- package/lib/api/impl/node/index.js +8 -12
- package/lib/api/impl/node/index.js.map +1 -1
- package/lib/api/impl/proof/index.d.ts +3 -2
- package/lib/api/impl/proof/index.js +12 -6
- package/lib/api/impl/proof/index.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts +3 -2
- package/lib/api/impl/validator/index.js +115 -111
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/api/rest/base.js +2 -0
- package/lib/api/rest/base.js.map +1 -1
- package/lib/api/rest/index.d.ts +4 -5
- package/lib/api/rest/index.js +1 -2
- package/lib/api/rest/index.js.map +1 -1
- package/lib/chain/beaconProposerCache.d.ts +2 -2
- package/lib/chain/beaconProposerCache.js +2 -2
- package/lib/chain/beaconProposerCache.js.map +1 -1
- package/lib/chain/blocks/importBlock.js +7 -7
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/index.js +1 -2
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +45 -39
- package/lib/chain/blocks/types.js +31 -15
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.d.ts +3 -3
- package/lib/chain/blocks/verifyBlock.js +1 -1
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts +2 -2
- package/lib/chain/blocks/verifyBlocksDataAvailability.js +17 -14
- package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +3 -3
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -2
- package/lib/chain/blocks/verifyBlocksSignatures.js +3 -1
- package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.js +6 -6
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/chain.d.ts +70 -9
- package/lib/chain/chain.js +46 -8
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/errors/blockError.d.ts +3 -3
- package/lib/chain/errors/blockError.js.map +1 -1
- package/lib/chain/forkChoice/index.js +2 -1
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/initState.d.ts +3 -3
- package/lib/chain/initState.js.map +1 -1
- package/lib/chain/interface.d.ts +18 -9
- package/lib/chain/interface.js +6 -0
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/lightClient/index.d.ts +9 -9
- package/lib/chain/lightClient/index.js +3 -3
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/lightClient/proofs.d.ts +2 -2
- package/lib/chain/lightClient/proofs.js.map +1 -1
- package/lib/chain/opPools/opPool.d.ts +2 -2
- package/lib/chain/opPools/opPool.js.map +1 -1
- package/lib/chain/options.js +2 -1
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/prepareNextSlot.d.ts +2 -0
- package/lib/chain/prepareNextSlot.js +49 -27
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.d.ts +2 -2
- package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +4 -4
- package/lib/chain/produceBlock/produceBlockBody.js +3 -3
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts +2 -2
- package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
- package/lib/chain/regen/interface.d.ts +4 -3
- package/lib/chain/regen/interface.js +1 -0
- package/lib/chain/regen/interface.js.map +1 -1
- package/lib/chain/regen/queued.d.ts +3 -3
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/regen/regen.d.ts +2 -2
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/chain/rewards/attestationsRewards.js +3 -4
- package/lib/chain/rewards/attestationsRewards.js.map +1 -1
- package/lib/chain/rewards/blockRewards.d.ts +2 -2
- package/lib/chain/rewards/blockRewards.js.map +1 -1
- package/lib/chain/rewards/syncCommitteeRewards.d.ts +2 -2
- package/lib/chain/rewards/syncCommitteeRewards.js +2 -2
- package/lib/chain/rewards/syncCommitteeRewards.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts +2 -2
- package/lib/chain/seenCache/seenGossipBlockInput.js +34 -18
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/validation/block.d.ts +2 -2
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/chain/validation/lightClientFinalityUpdate.d.ts +2 -2
- package/lib/chain/validation/lightClientFinalityUpdate.js.map +1 -1
- package/lib/chain/validation/lightClientOptimisticUpdate.d.ts +3 -3
- package/lib/chain/validation/lightClientOptimisticUpdate.js.map +1 -1
- package/lib/db/buckets.d.ts +1 -1
- package/lib/db/repositories/block.d.ts +5 -5
- package/lib/db/repositories/block.js.map +1 -1
- package/lib/db/repositories/blockArchive.d.ts +13 -13
- package/lib/db/repositories/blockArchive.js.map +1 -1
- package/lib/db/repositories/blockArchiveIndex.d.ts +4 -3
- package/lib/db/repositories/blockArchiveIndex.js.map +1 -1
- package/lib/db/repositories/lightclientBestUpdate.d.ts +4 -4
- package/lib/db/repositories/lightclientBestUpdate.js.map +1 -1
- package/lib/db/repositories/lightclientCheckpointHeader.d.ts +4 -4
- package/lib/db/repositories/lightclientCheckpointHeader.js.map +1 -1
- package/lib/db/single/preGenesisState.js.map +1 -1
- package/lib/eth1/provider/eth1Provider.js +2 -2
- package/lib/eth1/provider/eth1Provider.js.map +1 -1
- package/lib/execution/builder/http.d.ts +5 -5
- package/lib/execution/builder/http.js +14 -13
- package/lib/execution/builder/http.js.map +1 -1
- package/lib/execution/builder/interface.d.ts +3 -3
- package/lib/execution/engine/disabled.d.ts +1 -1
- package/lib/execution/engine/disabled.js +2 -4
- package/lib/execution/engine/disabled.js.map +1 -1
- package/lib/execution/engine/http.d.ts +4 -5
- package/lib/execution/engine/http.js +0 -3
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +4 -4
- package/lib/execution/engine/types.d.ts +3 -3
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +12 -2
- package/lib/metrics/metrics/beacon.js +11 -0
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +2 -2
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/metrics/options.d.ts +1 -1
- package/lib/metrics/validatorMonitor.d.ts +3 -3
- package/lib/network/gossip/encoding.d.ts +3 -2
- package/lib/network/gossip/encoding.js +2 -2
- package/lib/network/gossip/encoding.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +7 -7
- package/lib/network/gossip/interface.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +731 -43
- package/lib/network/gossip/topic.js +3 -3
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +6 -6
- package/lib/network/network.d.ts +10 -10
- package/lib/network/network.js.map +1 -1
- package/lib/network/peers/peerManager.d.ts +2 -2
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/processor/gossipHandlers.js +2 -2
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts +2 -2
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +2 -2
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +9 -3
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +10 -7
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
- package/lib/network/reqresp/types.d.ts +4 -4
- package/lib/network/reqresp/types.js +5 -5
- package/lib/network/reqresp/types.js.map +1 -1
- package/lib/network/reqresp/utils/collectSequentialBlocksInRange.d.ts +2 -2
- package/lib/network/reqresp/utils/collectSequentialBlocksInRange.js.map +1 -1
- package/lib/node/nodejs.d.ts +3 -7
- package/lib/node/notifier.js +8 -1
- package/lib/node/notifier.js.map +1 -1
- package/lib/node/utils/interop/state.js +2 -2
- package/lib/node/utils/interop/state.js.map +1 -1
- package/lib/sync/backfill/backfill.d.ts +2 -2
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/backfill/verify.d.ts +5 -5
- package/lib/sync/backfill/verify.js.map +1 -1
- package/lib/sync/interface.d.ts +1 -1
- package/lib/sync/range/chain.js +2 -2
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/sync.js +1 -1
- package/lib/sync/sync.js.map +1 -1
- package/lib/sync/unknownBlock.js +2 -2
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/pendingBlocksTree.js +1 -1
- package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
- package/lib/util/blobs.d.ts +3 -3
- package/lib/util/blobs.js.map +1 -1
- package/lib/util/multifork.d.ts +5 -4
- package/lib/util/multifork.js.map +1 -1
- package/package.json +14 -14
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { computeTimeAtSlot
|
|
1
|
+
import { computeTimeAtSlot } from "@lodestar/state-transition";
|
|
2
|
+
import { DataAvailabilityStatus } from "@lodestar/fork-choice";
|
|
2
3
|
import { BlockError, BlockErrorCode } from "../errors/index.js";
|
|
3
4
|
import { validateBlobSidecars } from "../validation/blobSidecar.js";
|
|
4
5
|
import { BlockInputType, BlobSidecarValidation, getBlockInput } from "./types.js";
|
|
@@ -31,8 +32,8 @@ export async function verifyBlocksDataAvailability(chain, blocks, opts) {
|
|
|
31
32
|
dataAvailabilityStatuses.push(dataAvailabilityStatus);
|
|
32
33
|
availableBlockInputs.push(availableBlockInput);
|
|
33
34
|
}
|
|
34
|
-
const availableTime = blocks[blocks.length - 1].type === BlockInputType.
|
|
35
|
-
if (blocks.length === 1 && opts.seenTimestampSec !== undefined && blocks[0].type !== BlockInputType.
|
|
35
|
+
const availableTime = blocks[blocks.length - 1].type === BlockInputType.dataPromise ? Date.now() : seenTime;
|
|
36
|
+
if (blocks.length === 1 && opts.seenTimestampSec !== undefined && blocks[0].type !== BlockInputType.preData) {
|
|
36
37
|
const recvToAvailableTime = availableTime / 1000 - opts.seenTimestampSec;
|
|
37
38
|
const numBlobs = blocks[0].block.message.body.blobKzgCommitments.length;
|
|
38
39
|
chain.metrics?.gossipBlock.receivedToBlobsAvailabilityTime.observe({ numBlobs }, recvToAvailableTime);
|
|
@@ -46,29 +47,31 @@ export async function verifyBlocksDataAvailability(chain, blocks, opts) {
|
|
|
46
47
|
}
|
|
47
48
|
async function maybeValidateBlobs(chain, blockInput, opts) {
|
|
48
49
|
switch (blockInput.type) {
|
|
49
|
-
case BlockInputType.
|
|
50
|
-
return { dataAvailabilityStatus:
|
|
51
|
-
case BlockInputType.
|
|
50
|
+
case BlockInputType.preData:
|
|
51
|
+
return { dataAvailabilityStatus: DataAvailabilityStatus.PreData, availableBlockInput: blockInput };
|
|
52
|
+
case BlockInputType.outOfRangeData:
|
|
53
|
+
return { dataAvailabilityStatus: DataAvailabilityStatus.OutOfRange, availableBlockInput: blockInput };
|
|
54
|
+
case BlockInputType.availableData:
|
|
52
55
|
if (opts.validBlobSidecars === BlobSidecarValidation.Full) {
|
|
53
|
-
return { dataAvailabilityStatus:
|
|
56
|
+
return { dataAvailabilityStatus: DataAvailabilityStatus.Available, availableBlockInput: blockInput };
|
|
54
57
|
}
|
|
55
58
|
// eslint-disable-next-line no-fallthrough
|
|
56
|
-
case BlockInputType.
|
|
59
|
+
case BlockInputType.dataPromise: {
|
|
57
60
|
// run full validation
|
|
58
61
|
const { block } = blockInput;
|
|
59
62
|
const blockSlot = block.message.slot;
|
|
60
|
-
const blobsData = blockInput.type === BlockInputType.
|
|
61
|
-
? blockInput
|
|
62
|
-
: await raceWithCutoff(chain, blockInput, blockInput.availabilityPromise);
|
|
63
|
-
const { blobs
|
|
63
|
+
const blobsData = blockInput.type === BlockInputType.availableData
|
|
64
|
+
? blockInput.blockData
|
|
65
|
+
: await raceWithCutoff(chain, blockInput, blockInput.cachedData.availabilityPromise);
|
|
66
|
+
const { blobs } = blobsData;
|
|
64
67
|
const { blobKzgCommitments } = block.message.body;
|
|
65
68
|
const beaconBlockRoot = chain.config.getForkTypes(blockSlot).BeaconBlock.hashTreeRoot(block.message);
|
|
66
69
|
// if the blob siddecars have been individually verified then we can skip kzg proof check
|
|
67
70
|
// but other checks to match blobs with block data still need to be performed
|
|
68
71
|
const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
|
|
69
72
|
validateBlobSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, blobs, { skipProofsCheck });
|
|
70
|
-
const availableBlockInput = getBlockInput.
|
|
71
|
-
return { dataAvailabilityStatus:
|
|
73
|
+
const availableBlockInput = getBlockInput.availableData(chain.config, blockInput.block, blockInput.source, blockInput.blockBytes, blobsData);
|
|
74
|
+
return { dataAvailabilityStatus: DataAvailabilityStatus.Available, availableBlockInput: availableBlockInput };
|
|
72
75
|
}
|
|
73
76
|
}
|
|
74
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlocksDataAvailability.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksDataAvailability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"verifyBlocksDataAvailability.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksDataAvailability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CachedBeaconStateAllForks } from "@lodestar/state-transition";
|
|
2
|
-
import { bellatrix,
|
|
2
|
+
import { bellatrix, Slot, SignedBeaconBlock } from "@lodestar/types";
|
|
3
3
|
import { IForkChoice, ProtoBlock, ExecutionStatus, MaybeValidExecutionStatus, LVHValidResponse, LVHInvalidResponse } from "@lodestar/fork-choice";
|
|
4
4
|
import { ChainForkConfig } from "@lodestar/config";
|
|
5
5
|
import { Logger } from "@lodestar/utils";
|
|
@@ -60,10 +60,10 @@ type VerifyBlockExecutionResponse = VerifyExecutionErrorResponse | {
|
|
|
60
60
|
*
|
|
61
61
|
* Since the EL client must be aware of each parent, all payloads must be submitted in sequence.
|
|
62
62
|
*/
|
|
63
|
-
export declare function verifyBlocksExecutionPayload(chain: VerifyBlockExecutionPayloadModules, parentBlock: ProtoBlock, blocks:
|
|
63
|
+
export declare function verifyBlocksExecutionPayload(chain: VerifyBlockExecutionPayloadModules, parentBlock: ProtoBlock, blocks: SignedBeaconBlock[], preState0: CachedBeaconStateAllForks, signal: AbortSignal, opts: BlockProcessOpts & ImportBlockOpts): Promise<SegmentExecStatus>;
|
|
64
64
|
/**
|
|
65
65
|
* Verifies a single block execution payload by sending it to the EL client (via HTTP).
|
|
66
66
|
*/
|
|
67
|
-
export declare function verifyBlockExecutionPayload(chain: VerifyBlockExecutionPayloadModules, block:
|
|
67
|
+
export declare function verifyBlockExecutionPayload(chain: VerifyBlockExecutionPayloadModules, block: SignedBeaconBlock, preState0: CachedBeaconStateAllForks, opts: BlockProcessOpts, isOptimisticallySafe: boolean, currentSlot: Slot): Promise<VerifyBlockExecutionResponse>;
|
|
68
68
|
export {};
|
|
69
69
|
//# sourceMappingURL=verifyBlocksExecutionPayloads.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlocksExecutionPayloads.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksExecutionPayloads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAEL,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,IAAI,wBAAwB,EAClD,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAEL,2BAA2B,EAE3B,eAAe,GAIhB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAC,YAAY,EAAS,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAC,OAAO,EAAE,mCAAmC,EAAC,MAAM,kBAAkB,CAAC;AAG9E,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAC,4BAA4B,EAAC,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAmC3E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,KAAyC,EACzC,WAAuB,EACvB,
|
|
1
|
+
{"version":3,"file":"verifyBlocksExecutionPayloads.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksExecutionPayloads.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CachedBeaconStateAllForks } from "@lodestar/state-transition";
|
|
2
|
-
import { allForks } from "@lodestar/types";
|
|
3
2
|
import { Logger } from "@lodestar/utils";
|
|
3
|
+
import { SignedBeaconBlock } from "@lodestar/types";
|
|
4
4
|
import { Metrics } from "../../metrics/metrics.js";
|
|
5
5
|
import { IBlsVerifier } from "../bls/index.js";
|
|
6
6
|
import { ImportBlockOpts } from "./types.js";
|
|
@@ -11,7 +11,7 @@ import { ImportBlockOpts } from "./types.js";
|
|
|
11
11
|
*
|
|
12
12
|
* Since all data is known in advance all signatures are verified at once in parallel.
|
|
13
13
|
*/
|
|
14
|
-
export declare function verifyBlocksSignatures(bls: IBlsVerifier, logger: Logger, metrics: Metrics | null, preState0: CachedBeaconStateAllForks, blocks:
|
|
14
|
+
export declare function verifyBlocksSignatures(bls: IBlsVerifier, logger: Logger, metrics: Metrics | null, preState0: CachedBeaconStateAllForks, blocks: SignedBeaconBlock[], opts: ImportBlockOpts): Promise<{
|
|
15
15
|
verifySignaturesTime: number;
|
|
16
16
|
}>;
|
|
17
17
|
type AllValidRes = {
|
|
@@ -22,7 +22,9 @@ export async function verifyBlocksSignatures(bls, logger, metrics, preState0, bl
|
|
|
22
22
|
Promise.resolve(true)
|
|
23
23
|
: //
|
|
24
24
|
// Verify signatures per block to track which block is invalid
|
|
25
|
-
bls.verifySignatureSets(getBlockSignatureSets(preState0, block, {
|
|
25
|
+
bls.verifySignatureSets(getBlockSignatureSets(preState0, block, {
|
|
26
|
+
skipProposerSignature: opts.validProposerSignature,
|
|
27
|
+
}));
|
|
26
28
|
// getBlockSignatureSets() takes 45ms in benchmarks for 2022Q2 mainnet blocks (100 sigs). When syncing a 32 blocks
|
|
27
29
|
// segments it will block the event loop for 1400 ms, which is too much. This call will allow the event loop to
|
|
28
30
|
// yield, which will cause one block's state transition to run. However, the tradeoff is okay and doesn't slow sync
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlocksSignatures.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksSignatures.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AAK5F,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAC,aAAa,EAAC,MAAM,yBAAyB,CAAC;AAGtD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,GAAiB,EACjB,MAAc,EACd,OAAuB,EACvB,SAAoC,EACpC,
|
|
1
|
+
{"version":3,"file":"verifyBlocksSignatures.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksSignatures.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,11 +26,11 @@ export async function writeBlockInputToDb(blocksInput) {
|
|
|
26
26
|
slot: block.message.slot,
|
|
27
27
|
root: blockRootHex,
|
|
28
28
|
});
|
|
29
|
-
if (blockInput.type === BlockInputType.
|
|
30
|
-
const blobSidecars = blockInput.type == BlockInputType.
|
|
31
|
-
? blockInput.blobs
|
|
29
|
+
if (blockInput.type === BlockInputType.availableData || blockInput.type === BlockInputType.dataPromise) {
|
|
30
|
+
const blobSidecars = blockInput.type == BlockInputType.availableData
|
|
31
|
+
? blockInput.blockData.blobs
|
|
32
32
|
: // At this point of import blobs are available and can be safely awaited
|
|
33
|
-
(await blockInput.availabilityPromise).blobs;
|
|
33
|
+
(await blockInput.cachedData.availabilityPromise).blobs;
|
|
34
34
|
// NOTE: Old blobs are pruned on archive
|
|
35
35
|
fnPromises.push(this.db.blobSidecars.add({ blockRoot, slot: block.message.slot, blobSidecars }));
|
|
36
36
|
this.logger.debug("Persisted blobSidecars to hot DB", {
|
|
@@ -54,8 +54,8 @@ export async function removeEagerlyPersistedBlockInputs(blockInputs) {
|
|
|
54
54
|
const blockRootHex = toHex(blockRoot);
|
|
55
55
|
if (!this.forkChoice.hasBlockHex(blockRootHex)) {
|
|
56
56
|
blockToRemove.push(block);
|
|
57
|
-
if (type === BlockInputType.
|
|
58
|
-
const blobSidecars = blockInput.blobs;
|
|
57
|
+
if (type === BlockInputType.availableData) {
|
|
58
|
+
const blobSidecars = blockInput.blockData.blobs;
|
|
59
59
|
blobsToRemove.push({ blockRoot, slot: block.message.slot, blobSidecars });
|
|
60
60
|
}
|
|
61
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeBlockInputToDb.js","sourceRoot":"","sources":["../../../src/chain/blocks/writeBlockInputToDb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAa,cAAc,EAAC,MAAM,YAAY,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAoB,WAAyB;IACpF,MAAM,UAAU,GAAoB,EAAE,CAAC;IAEvC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,EAAC,KAAK,EAAE,UAAU,EAAC,GAAG,UAAU,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvG,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,UAAU,EAAE,CAAC;YACf,8CAA8C;YAC9C,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,mCAAmC,CAAC,GAAG,EAAE,CAAC;YACpE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,iCAAiC,CAAC,GAAG,EAAE,CAAC;YAClE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;YAC3C,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;YACxB,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;QAEH,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"writeBlockInputToDb.js","sourceRoot":"","sources":["../../../src/chain/blocks/writeBlockInputToDb.ts"],"names":[],"mappings":"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"}
|
package/lib/chain/chain.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CompositeTypeAny, TreeView, Type } from "@chainsafe/ssz";
|
|
2
2
|
import { BeaconStateAllForks, CachedBeaconStateAllForks, Index2PubkeyCache, PubkeyIndexMap, EpochShuffling } from "@lodestar/state-transition";
|
|
3
3
|
import { BeaconConfig } from "@lodestar/config";
|
|
4
|
-
import {
|
|
4
|
+
import { UintNum64, Root, phase0, Slot, RootHex, Epoch, ValidatorIndex, deneb, Wei, BeaconBlock, SignedBeaconBlock, BlindedBeaconBlock } from "@lodestar/types";
|
|
5
5
|
import { CheckpointWithHex, IForkChoice, ProtoBlock } from "@lodestar/fork-choice";
|
|
6
6
|
import { ProcessShutdownCallback } from "@lodestar/validator";
|
|
7
7
|
import { Logger } from "@lodestar/utils";
|
|
@@ -71,7 +71,66 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
71
71
|
readonly shufflingCache: ShufflingCache;
|
|
72
72
|
/** Map keyed by executionPayload.blockHash of the block for those blobs */
|
|
73
73
|
readonly producedContentsCache: Map<string, deneb.Contents>;
|
|
74
|
-
readonly producedBlockRoot: Map<string,
|
|
74
|
+
readonly producedBlockRoot: Map<string, import("@chainsafe/ssz").ValueOfFields<{
|
|
75
|
+
transactions: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteListType>;
|
|
76
|
+
parentHash: import("@chainsafe/ssz").ByteVectorType;
|
|
77
|
+
feeRecipient: import("@lodestar/types/lib/utils/executionAddress.js").ExecutionAddressType;
|
|
78
|
+
stateRoot: import("@chainsafe/ssz").ByteVectorType;
|
|
79
|
+
receiptsRoot: import("@chainsafe/ssz").ByteVectorType;
|
|
80
|
+
logsBloom: import("@chainsafe/ssz").ByteVectorType;
|
|
81
|
+
prevRandao: import("@chainsafe/ssz").ByteVectorType;
|
|
82
|
+
blockNumber: import("@chainsafe/ssz").UintNumberType;
|
|
83
|
+
gasLimit: import("@chainsafe/ssz").UintNumberType;
|
|
84
|
+
gasUsed: import("@chainsafe/ssz").UintNumberType;
|
|
85
|
+
timestamp: import("@chainsafe/ssz").UintNumberType;
|
|
86
|
+
extraData: import("@chainsafe/ssz").ByteListType;
|
|
87
|
+
baseFeePerGas: import("@chainsafe/ssz").UintBigintType;
|
|
88
|
+
blockHash: import("@chainsafe/ssz").ByteVectorType;
|
|
89
|
+
}> | import("@chainsafe/ssz").ValueOfFields<{
|
|
90
|
+
withdrawals: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ContainerType<{
|
|
91
|
+
index: import("@chainsafe/ssz").UintNumberType;
|
|
92
|
+
validatorIndex: import("@chainsafe/ssz").UintNumberType;
|
|
93
|
+
address: import("@lodestar/types/lib/utils/executionAddress.js").ExecutionAddressType;
|
|
94
|
+
amount: import("@chainsafe/ssz").UintBigintType;
|
|
95
|
+
}>>;
|
|
96
|
+
transactions: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteListType>;
|
|
97
|
+
parentHash: import("@chainsafe/ssz").ByteVectorType;
|
|
98
|
+
feeRecipient: import("@lodestar/types/lib/utils/executionAddress.js").ExecutionAddressType;
|
|
99
|
+
stateRoot: import("@chainsafe/ssz").ByteVectorType;
|
|
100
|
+
receiptsRoot: import("@chainsafe/ssz").ByteVectorType;
|
|
101
|
+
logsBloom: import("@chainsafe/ssz").ByteVectorType;
|
|
102
|
+
prevRandao: import("@chainsafe/ssz").ByteVectorType;
|
|
103
|
+
blockNumber: import("@chainsafe/ssz").UintNumberType;
|
|
104
|
+
gasLimit: import("@chainsafe/ssz").UintNumberType;
|
|
105
|
+
gasUsed: import("@chainsafe/ssz").UintNumberType;
|
|
106
|
+
timestamp: import("@chainsafe/ssz").UintNumberType;
|
|
107
|
+
extraData: import("@chainsafe/ssz").ByteListType;
|
|
108
|
+
baseFeePerGas: import("@chainsafe/ssz").UintBigintType;
|
|
109
|
+
blockHash: import("@chainsafe/ssz").ByteVectorType;
|
|
110
|
+
}> | import("@chainsafe/ssz").ValueOfFields<{
|
|
111
|
+
blobGasUsed: import("@chainsafe/ssz").UintBigintType;
|
|
112
|
+
excessBlobGas: import("@chainsafe/ssz").UintBigintType;
|
|
113
|
+
withdrawals: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ContainerType<{
|
|
114
|
+
index: import("@chainsafe/ssz").UintNumberType;
|
|
115
|
+
validatorIndex: import("@chainsafe/ssz").UintNumberType;
|
|
116
|
+
address: import("@lodestar/types/lib/utils/executionAddress.js").ExecutionAddressType;
|
|
117
|
+
amount: import("@chainsafe/ssz").UintBigintType;
|
|
118
|
+
}>>;
|
|
119
|
+
transactions: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteListType>;
|
|
120
|
+
parentHash: import("@chainsafe/ssz").ByteVectorType;
|
|
121
|
+
feeRecipient: import("@lodestar/types/lib/utils/executionAddress.js").ExecutionAddressType;
|
|
122
|
+
stateRoot: import("@chainsafe/ssz").ByteVectorType;
|
|
123
|
+
receiptsRoot: import("@chainsafe/ssz").ByteVectorType;
|
|
124
|
+
logsBloom: import("@chainsafe/ssz").ByteVectorType;
|
|
125
|
+
prevRandao: import("@chainsafe/ssz").ByteVectorType;
|
|
126
|
+
blockNumber: import("@chainsafe/ssz").UintNumberType;
|
|
127
|
+
gasLimit: import("@chainsafe/ssz").UintNumberType;
|
|
128
|
+
gasUsed: import("@chainsafe/ssz").UintNumberType;
|
|
129
|
+
timestamp: import("@chainsafe/ssz").UintNumberType;
|
|
130
|
+
extraData: import("@chainsafe/ssz").ByteListType;
|
|
131
|
+
baseFeePerGas: import("@chainsafe/ssz").UintBigintType;
|
|
132
|
+
blockHash: import("@chainsafe/ssz").ByteVectorType;
|
|
133
|
+
}> | null>;
|
|
75
134
|
readonly producedBlindedBlockRoot: Set<string>;
|
|
76
135
|
readonly opts: IChainOptions;
|
|
77
136
|
protected readonly blockProcessor: BlockProcessor;
|
|
@@ -120,12 +179,12 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
120
179
|
finalized: boolean;
|
|
121
180
|
} | null;
|
|
122
181
|
getCanonicalBlockAtSlot(slot: Slot): Promise<{
|
|
123
|
-
block:
|
|
182
|
+
block: SignedBeaconBlock;
|
|
124
183
|
executionOptimistic: boolean;
|
|
125
184
|
finalized: boolean;
|
|
126
185
|
} | null>;
|
|
127
186
|
getBlockByRoot(root: string): Promise<{
|
|
128
|
-
block:
|
|
187
|
+
block: SignedBeaconBlock;
|
|
129
188
|
executionOptimistic: boolean;
|
|
130
189
|
finalized: boolean;
|
|
131
190
|
} | null>;
|
|
@@ -133,7 +192,7 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
133
192
|
produceBlock(blockAttributes: BlockAttributes & {
|
|
134
193
|
commonBlockBody?: CommonBlockBody;
|
|
135
194
|
}): Promise<{
|
|
136
|
-
block:
|
|
195
|
+
block: BeaconBlock;
|
|
137
196
|
executionPayloadValue: Wei;
|
|
138
197
|
consensusBlockValue: Wei;
|
|
139
198
|
shouldOverrideBuilder?: boolean;
|
|
@@ -141,7 +200,7 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
141
200
|
produceBlindedBlock(blockAttributes: BlockAttributes & {
|
|
142
201
|
commonBlockBody?: CommonBlockBody;
|
|
143
202
|
}): Promise<{
|
|
144
|
-
block:
|
|
203
|
+
block: BlindedBeaconBlock;
|
|
145
204
|
executionPayloadValue: Wei;
|
|
146
205
|
consensusBlockValue: Wei;
|
|
147
206
|
}>;
|
|
@@ -168,13 +227,15 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
168
227
|
processChainSegment(blocks: BlockInput[], opts?: ImportBlockOpts): Promise<void>;
|
|
169
228
|
getStatus(): phase0.Status;
|
|
170
229
|
recomputeForkChoiceHead(): ProtoBlock;
|
|
230
|
+
predictProposerHead(slot: Slot): ProtoBlock;
|
|
231
|
+
getProposerHead(slot: Slot): ProtoBlock;
|
|
171
232
|
/**
|
|
172
233
|
* Returns Promise that resolves either on block found or once 1 slot passes.
|
|
173
234
|
* Used to handle unknown block root for both unaggregated and aggregated attestations.
|
|
174
235
|
* @returns true if blockFound
|
|
175
236
|
*/
|
|
176
237
|
waitForBlock(slot: Slot, root: RootHex): Promise<boolean>;
|
|
177
|
-
persistBlock(data:
|
|
238
|
+
persistBlock(data: BeaconBlock | BlindedBeaconBlock, suffix?: string): void;
|
|
178
239
|
persistInvalidSszValue<T>(type: Type<T>, sszObject: T, suffix?: string): void;
|
|
179
240
|
persistInvalidSszBytes(typeName: string, sszBytes: Uint8Array, suffix?: string): void;
|
|
180
241
|
persistInvalidSszView(view: TreeView<CompositeTypeAny>, suffix?: string): void;
|
|
@@ -208,12 +269,12 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
208
269
|
private onForkChoiceFinalized;
|
|
209
270
|
updateBeaconProposerData(epoch: Epoch, proposers: ProposerPreparationData[]): Promise<void>;
|
|
210
271
|
updateBuilderStatus(clockSlot: Slot): void;
|
|
211
|
-
getBlockRewards(block:
|
|
272
|
+
getBlockRewards(block: BeaconBlock | BlindedBeaconBlock): Promise<BlockRewards>;
|
|
212
273
|
getAttestationsRewards(epoch: Epoch, validatorIds?: (ValidatorIndex | string)[]): Promise<{
|
|
213
274
|
rewards: AttestationsRewards;
|
|
214
275
|
executionOptimistic: boolean;
|
|
215
276
|
finalized: boolean;
|
|
216
277
|
}>;
|
|
217
|
-
getSyncCommitteeRewards(block:
|
|
278
|
+
getSyncCommitteeRewards(block: BeaconBlock | BlindedBeaconBlock, validatorIds?: (ValidatorIndex | string)[]): Promise<SyncCommitteeRewards>;
|
|
218
279
|
}
|
|
219
280
|
//# sourceMappingURL=chain.d.ts.map
|
package/lib/chain/chain.js
CHANGED
|
@@ -2,7 +2,7 @@ import path from "node:path";
|
|
|
2
2
|
import { fromHexString, toHexString } from "@chainsafe/ssz";
|
|
3
3
|
import { computeEpochAtSlot, computeStartSlotAtEpoch, createCachedBeaconState, getEffectiveBalanceIncrementsZeroInactive, isCachedBeaconState, PubkeyIndexMap, computeEndSlotAtEpoch, } from "@lodestar/state-transition";
|
|
4
4
|
import { isBlindedBeaconBlock, } from "@lodestar/types";
|
|
5
|
-
import { ExecutionStatus } from "@lodestar/fork-choice";
|
|
5
|
+
import { ExecutionStatus, UpdateHeadOpt } from "@lodestar/fork-choice";
|
|
6
6
|
import { gweiToWei, isErrorAborted, pruneSetToMax, sleep, toHex } from "@lodestar/utils";
|
|
7
7
|
import { ForkSeq, SLOTS_PER_EPOCH } from "@lodestar/params";
|
|
8
8
|
import { GENESIS_EPOCH, ZERO_HASH } from "../constants/index.js";
|
|
@@ -12,6 +12,7 @@ import { isOptimisticBlock } from "../util/forkChoice.js";
|
|
|
12
12
|
import { BufferPool } from "../util/bufferPool.js";
|
|
13
13
|
import { BlockProcessor } from "./blocks/index.js";
|
|
14
14
|
import { ChainEventEmitter, ChainEvent } from "./emitter.js";
|
|
15
|
+
import { FindHeadFnName, } from "./interface.js";
|
|
15
16
|
import { QueuedStateRegenerator, RegenCaller } from "./regen/index.js";
|
|
16
17
|
import { initializeForkChoice } from "./forkChoice/index.js";
|
|
17
18
|
import { computeAnchorCheckpoint } from "./initState.js";
|
|
@@ -138,7 +139,7 @@ export class BeaconChain {
|
|
|
138
139
|
blockStateCache.add(cachedState);
|
|
139
140
|
blockStateCache.setHeadState(cachedState);
|
|
140
141
|
checkpointStateCache.add(checkpoint, cachedState);
|
|
141
|
-
const forkChoice = initializeForkChoice(config, emitter, clock.currentSlot, cachedState, opts, this.justifiedBalancesGetter.bind(this));
|
|
142
|
+
const forkChoice = initializeForkChoice(config, emitter, clock.currentSlot, cachedState, opts, this.justifiedBalancesGetter.bind(this), logger);
|
|
142
143
|
const regen = new QueuedStateRegenerator({
|
|
143
144
|
config,
|
|
144
145
|
forkChoice,
|
|
@@ -369,7 +370,7 @@ export class BeaconChain {
|
|
|
369
370
|
// The hashtree root computed here for debug log will get cached and hence won't introduce additional delays
|
|
370
371
|
const bodyRoot = blockType === BlockType.Full
|
|
371
372
|
? this.config.getForkTypes(slot).BeaconBlockBody.hashTreeRoot(body)
|
|
372
|
-
: this.config.
|
|
373
|
+
: this.config.getExecutionForkTypes(slot).BlindedBeaconBlockBody.hashTreeRoot(body);
|
|
373
374
|
this.logger.debug("Computing block post state from the produced body", {
|
|
374
375
|
slot,
|
|
375
376
|
bodyRoot: toHexString(bodyRoot),
|
|
@@ -386,7 +387,7 @@ export class BeaconChain {
|
|
|
386
387
|
block.stateRoot = newStateRoot;
|
|
387
388
|
const blockRoot = blockType === BlockType.Full
|
|
388
389
|
? this.config.getForkTypes(slot).BeaconBlock.hashTreeRoot(block)
|
|
389
|
-
: this.config.
|
|
390
|
+
: this.config.getExecutionForkTypes(slot).BlindedBeaconBlock.hashTreeRoot(block);
|
|
390
391
|
const blockRootHex = toHex(blockRoot);
|
|
391
392
|
// track the produced block for consensus broadcast validations
|
|
392
393
|
if (blockType === BlockType.Full) {
|
|
@@ -453,12 +454,49 @@ export class BeaconChain {
|
|
|
453
454
|
}
|
|
454
455
|
recomputeForkChoiceHead() {
|
|
455
456
|
this.metrics?.forkChoice.requests.inc();
|
|
456
|
-
const timer = this.metrics?.forkChoice.findHead.startTimer();
|
|
457
|
+
const timer = this.metrics?.forkChoice.findHead.startTimer({ entrypoint: FindHeadFnName.recomputeForkChoiceHead });
|
|
457
458
|
try {
|
|
458
|
-
return this.forkChoice.
|
|
459
|
+
return this.forkChoice.updateAndGetHead({ mode: UpdateHeadOpt.GetCanonicialHead }).head;
|
|
459
460
|
}
|
|
460
461
|
catch (e) {
|
|
461
|
-
this.metrics?.forkChoice.errors.inc();
|
|
462
|
+
this.metrics?.forkChoice.errors.inc({ entrypoint: UpdateHeadOpt.GetCanonicialHead });
|
|
463
|
+
throw e;
|
|
464
|
+
}
|
|
465
|
+
finally {
|
|
466
|
+
timer?.();
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
predictProposerHead(slot) {
|
|
470
|
+
this.metrics?.forkChoice.requests.inc();
|
|
471
|
+
const timer = this.metrics?.forkChoice.findHead.startTimer({ entrypoint: FindHeadFnName.predictProposerHead });
|
|
472
|
+
try {
|
|
473
|
+
return this.forkChoice.updateAndGetHead({ mode: UpdateHeadOpt.GetPredictedProposerHead, slot }).head;
|
|
474
|
+
}
|
|
475
|
+
catch (e) {
|
|
476
|
+
this.metrics?.forkChoice.errors.inc({ entrypoint: UpdateHeadOpt.GetPredictedProposerHead });
|
|
477
|
+
throw e;
|
|
478
|
+
}
|
|
479
|
+
finally {
|
|
480
|
+
timer?.();
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
getProposerHead(slot) {
|
|
484
|
+
this.metrics?.forkChoice.requests.inc();
|
|
485
|
+
const timer = this.metrics?.forkChoice.findHead.startTimer({ entrypoint: FindHeadFnName.getProposerHead });
|
|
486
|
+
const secFromSlot = this.clock.secFromSlot(slot);
|
|
487
|
+
try {
|
|
488
|
+
const { head, isHeadTimely, notReorgedReason } = this.forkChoice.updateAndGetHead({
|
|
489
|
+
mode: UpdateHeadOpt.GetProposerHead,
|
|
490
|
+
secFromSlot,
|
|
491
|
+
slot,
|
|
492
|
+
});
|
|
493
|
+
if (isHeadTimely && notReorgedReason !== undefined) {
|
|
494
|
+
this.metrics?.forkChoice.notReorgedReason.inc({ reason: notReorgedReason });
|
|
495
|
+
}
|
|
496
|
+
return head;
|
|
497
|
+
}
|
|
498
|
+
catch (e) {
|
|
499
|
+
this.metrics?.forkChoice.errors.inc({ entrypoint: UpdateHeadOpt.GetProposerHead });
|
|
462
500
|
throw e;
|
|
463
501
|
}
|
|
464
502
|
finally {
|
|
@@ -476,7 +514,7 @@ export class BeaconChain {
|
|
|
476
514
|
persistBlock(data, suffix) {
|
|
477
515
|
const slot = data.slot;
|
|
478
516
|
if (isBlindedBeaconBlock(data)) {
|
|
479
|
-
const sszType = this.config.
|
|
517
|
+
const sszType = this.config.getExecutionForkTypes(slot).BlindedBeaconBlock;
|
|
480
518
|
void this.persistSszObject("BlindedBeaconBlock", sszType.serialize(data), sszType.hashTreeRoot(data), suffix);
|
|
481
519
|
}
|
|
482
520
|
else {
|