@lodestar/beacon-node 1.32.0-dev.ea8c82564a → 1.32.0-peerDAS.223a48c40a
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/lib/api/impl/beacon/blocks/index.js +72 -16
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/debug/index.d.ts +1 -1
- package/lib/api/impl/debug/index.js +24 -1
- package/lib/api/impl/debug/index.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.d.ts +1 -1
- package/lib/chain/archiveStore/archiveStore.js +2 -2
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/metrics.js +8 -0
- package/lib/chain/archiveStore/historicalState/metrics.js.map +1 -1
- package/lib/chain/archiveStore/interface.d.ts +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.js +116 -23
- package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
- package/lib/chain/beaconProposerCache.d.ts +1 -0
- package/lib/chain/beaconProposerCache.js +3 -0
- package/lib/chain/beaconProposerCache.js.map +1 -1
- package/lib/chain/blocks/importBlock.js +9 -19
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +66 -24
- package/lib/chain/blocks/types.js +39 -6
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.js +21 -10
- package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.js +89 -15
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/chain.d.ts +16 -5
- package/lib/chain/chain.js +50 -5
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +23 -2
- package/lib/chain/emitter.js +17 -0
- package/lib/chain/emitter.js.map +1 -1
- package/lib/chain/errors/dataColumnSidecarError.d.ts +69 -0
- package/lib/chain/errors/dataColumnSidecarError.js +21 -0
- package/lib/chain/errors/dataColumnSidecarError.js.map +1 -0
- package/lib/chain/errors/index.d.ts +1 -0
- package/lib/chain/errors/index.js +1 -0
- package/lib/chain/errors/index.js.map +1 -1
- package/lib/chain/interface.d.ts +10 -4
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/options.d.ts +6 -3
- package/lib/chain/options.js +4 -0
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +4 -2
- package/lib/chain/produceBlock/produceBlockBody.js +7 -2
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts +3 -2
- package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js +25 -2
- package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts +64 -18
- package/lib/chain/seenCache/seenGossipBlockInput.js +320 -53
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/validation/blobSidecar.d.ts +1 -1
- package/lib/chain/validation/blobSidecar.js +6 -6
- package/lib/chain/validation/blobSidecar.js.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts +28 -0
- package/lib/chain/validation/dataColumnSidecar.js +248 -0
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -0
- package/lib/db/beacon.d.ts +3 -1
- package/lib/db/beacon.js +3 -1
- package/lib/db/beacon.js.map +1 -1
- package/lib/db/buckets.d.ts +3 -1
- package/lib/db/buckets.js +2 -0
- package/lib/db/buckets.js.map +1 -1
- package/lib/db/interface.d.ts +3 -1
- package/lib/db/repositories/dataColumnSidecars.d.ts +47 -0
- package/lib/db/repositories/dataColumnSidecars.js +40 -0
- package/lib/db/repositories/dataColumnSidecars.js.map +1 -0
- package/lib/db/repositories/dataColumnSidecarsArchive.d.ts +15 -0
- package/lib/db/repositories/dataColumnSidecarsArchive.js +23 -0
- package/lib/db/repositories/dataColumnSidecarsArchive.js.map +1 -0
- package/lib/db/repositories/index.d.ts +2 -0
- package/lib/db/repositories/index.js +2 -0
- package/lib/db/repositories/index.js.map +1 -1
- package/lib/execution/engine/http.d.ts +5 -3
- package/lib/execution/engine/http.js +70 -31
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +4 -2
- package/lib/execution/engine/interface.js +1 -1
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +1 -0
- package/lib/execution/engine/mock.js +8 -3
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/types.d.ts +10 -0
- package/lib/execution/engine/types.js +6 -0
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +15 -0
- package/lib/metrics/metrics/beacon.js +59 -0
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +15 -0
- package/lib/metrics/metrics/lodestar.js +32 -0
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/core/metrics.d.ts +10 -3
- package/lib/network/core/metrics.js +22 -4
- package/lib/network/core/metrics.js.map +1 -1
- package/lib/network/core/networkCore.d.ts +9 -3
- package/lib/network/core/networkCore.js +24 -12
- package/lib/network/core/networkCore.js.map +1 -1
- package/lib/network/core/networkCoreWorker.js +2 -0
- package/lib/network/core/networkCoreWorker.js.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.d.ts +5 -3
- package/lib/network/core/networkCoreWorkerHandler.js +7 -0
- package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
- package/lib/network/core/types.d.ts +8 -4
- package/lib/network/events.d.ts +4 -2
- package/lib/network/events.js.map +1 -1
- package/lib/network/gossip/encoding.js +1 -1
- package/lib/network/gossip/encoding.js.map +1 -1
- package/lib/network/gossip/gossipsub.js +6 -4
- package/lib/network/gossip/gossipsub.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +10 -3
- package/lib/network/gossip/interface.js +1 -0
- package/lib/network/gossip/interface.js.map +1 -1
- package/lib/network/gossip/scoringParameters.js +7 -8
- package/lib/network/gossip/scoringParameters.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +1047 -1031
- package/lib/network/gossip/topic.js +33 -13
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +13 -1
- package/lib/network/metadata.d.ts +10 -6
- package/lib/network/metadata.js +23 -4
- package/lib/network/metadata.js.map +1 -1
- package/lib/network/network.d.ts +13 -2
- package/lib/network/network.js +100 -33
- package/lib/network/network.js.map +1 -1
- package/lib/network/networkConfig.d.ts +23 -0
- package/lib/network/networkConfig.js +32 -0
- package/lib/network/networkConfig.js.map +1 -0
- package/lib/network/options.js +5 -0
- package/lib/network/options.js.map +1 -1
- package/lib/network/peers/discover.d.ts +8 -3
- package/lib/network/peers/discover.js +106 -13
- package/lib/network/peers/discover.js.map +1 -1
- package/lib/network/peers/peerManager.d.ts +10 -4
- package/lib/network/peers/peerManager.js +93 -11
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/peers/peersData.d.ts +17 -3
- package/lib/network/peers/peersData.js.map +1 -1
- package/lib/network/peers/score/interface.d.ts +1 -1
- package/lib/network/peers/score/score.d.ts +2 -2
- package/lib/network/peers/score/score.js +4 -1
- package/lib/network/peers/score/score.js.map +1 -1
- package/lib/network/peers/score/store.d.ts +3 -1
- package/lib/network/peers/score/store.js +6 -2
- package/lib/network/peers/score/store.js.map +1 -1
- package/lib/network/peers/utils/assertPeerRelevance.d.ts +7 -3
- package/lib/network/peers/utils/assertPeerRelevance.js +10 -1
- package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
- package/lib/network/peers/utils/prioritizePeers.d.ts +18 -7
- package/lib/network/peers/utils/prioritizePeers.js +43 -7
- package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
- package/lib/network/processor/extractSlotRootFns.js +8 -1
- package/lib/network/processor/extractSlotRootFns.js.map +1 -1
- package/lib/network/processor/gossipHandlers.js +175 -18
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/index.js +6 -1
- package/lib/network/processor/gossipQueues/index.js.map +1 -1
- package/lib/network/processor/index.js +3 -2
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts +2 -2
- package/lib/network/reqresp/ReqRespBeaconNode.js +32 -10
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +15 -5
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +203 -14
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +33 -5
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +302 -28
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +8 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +106 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts +6 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +57 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -0
- package/lib/network/reqresp/handlers/index.js +10 -0
- package/lib/network/reqresp/handlers/index.js.map +1 -1
- package/lib/network/reqresp/handlers/status.js +3 -2
- package/lib/network/reqresp/handlers/status.js.map +1 -1
- package/lib/network/reqresp/protocols.d.ts +4 -0
- package/lib/network/reqresp/protocols.js +20 -0
- package/lib/network/reqresp/protocols.js.map +1 -1
- package/lib/network/reqresp/rateLimit.js +11 -1
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/types.d.ts +15 -8
- package/lib/network/reqresp/types.js +10 -3
- package/lib/network/reqresp/types.js.map +1 -1
- package/lib/network/statusCache.d.ts +5 -5
- package/lib/network/statusCache.js.map +1 -1
- package/lib/network/subnets/attnetsService.js +6 -6
- package/lib/network/subnets/attnetsService.js.map +1 -1
- package/lib/network/subnets/interface.d.ts +3 -0
- package/lib/network/subnets/interface.js +14 -1
- package/lib/network/subnets/interface.js.map +1 -1
- package/lib/network/subnets/syncnetsService.js +4 -5
- package/lib/network/subnets/syncnetsService.js.map +1 -1
- package/lib/network/subscribeBoundary.d.ts +5 -0
- package/lib/network/subscribeBoundary.js +4 -0
- package/lib/network/subscribeBoundary.js.map +1 -0
- package/lib/node/nodejs.js +1 -6
- package/lib/node/nodejs.js.map +1 -1
- package/lib/sync/interface.d.ts +2 -2
- package/lib/sync/interface.js +1 -1
- package/lib/sync/interface.js.map +1 -1
- package/lib/sync/range/batch.d.ts +9 -2
- package/lib/sync/range/batch.js +23 -7
- package/lib/sync/range/batch.js.map +1 -1
- package/lib/sync/range/chain.d.ts +16 -1
- package/lib/sync/range/chain.js +105 -29
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/range/range.d.ts +3 -2
- package/lib/sync/range/range.js +9 -3
- package/lib/sync/range/range.js.map +1 -1
- package/lib/sync/range/utils/chainTarget.d.ts +5 -1
- package/lib/sync/range/utils/chainTarget.js +26 -1
- package/lib/sync/range/utils/chainTarget.js.map +1 -1
- package/lib/sync/range/utils/peerBalancer.d.ts +12 -5
- package/lib/sync/range/utils/peerBalancer.js +69 -10
- package/lib/sync/range/utils/peerBalancer.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts +8 -1
- package/lib/sync/unknownBlock.js +226 -68
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/remoteSyncType.d.ts +4 -4
- package/lib/sync/utils/remoteSyncType.js.map +1 -1
- package/lib/util/blobs.d.ts +18 -1
- package/lib/util/blobs.js +104 -1
- package/lib/util/blobs.js.map +1 -1
- package/lib/util/dataColumns.d.ts +137 -0
- package/lib/util/dataColumns.js +353 -0
- package/lib/util/dataColumns.js.map +1 -0
- package/lib/util/kzg.d.ts +2 -34
- package/lib/util/kzg.js +2 -123
- package/lib/util/kzg.js.map +1 -1
- package/lib/util/metadata.d.ts +4 -0
- package/lib/util/metadata.js +7 -0
- package/lib/util/metadata.js.map +1 -1
- package/lib/util/sszBytes.d.ts +1 -0
- package/lib/util/sszBytes.js +17 -0
- package/lib/util/sszBytes.js.map +1 -1
- package/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/chain/blocks/types.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/chain/blocks/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { ForkName } from "@lodestar/params";
|
|
1
2
|
import { DataAvailabilityStatus, computeTimeAtSlot } from "@lodestar/state-transition";
|
|
2
3
|
import { ErrorAborted } from "@lodestar/utils";
|
|
3
4
|
import { BlockError, BlockErrorCode } from "../errors/index.js";
|
|
4
5
|
import { validateBlobSidecars } from "../validation/blobSidecar.js";
|
|
5
|
-
import {
|
|
6
|
+
import { validateDataColumnsSidecars } from "../validation/dataColumnSidecar.js";
|
|
7
|
+
import { BlobSidecarValidation, BlockInputType, getBlockInput, } from "./types.js";
|
|
6
8
|
// we can now wait for full 12 seconds because unavailable block sync will try pulling
|
|
7
9
|
// the blobs from the network anyway after 500ms of seeing the block
|
|
8
10
|
const BLOB_AVAILABILITY_TIMEOUT = 12_000;
|
|
@@ -64,17 +66,26 @@ async function maybeValidateBlobs(chain, blockInput, signal, opts) {
|
|
|
64
66
|
// run full validation
|
|
65
67
|
const { block } = blockInput;
|
|
66
68
|
const blockSlot = block.message.slot;
|
|
67
|
-
const blobsData = blockInput.type === BlockInputType.availableData
|
|
68
|
-
? blockInput.blockData
|
|
69
|
-
: await raceWithCutoff(chain, blockInput, blockInput.cachedData.availabilityPromise, signal);
|
|
70
|
-
const { blobs } = blobsData;
|
|
71
69
|
const { blobKzgCommitments } = block.message.body;
|
|
72
70
|
const beaconBlockRoot = chain.config.getForkTypes(blockSlot).BeaconBlock.hashTreeRoot(block.message);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
71
|
+
const blockData = blockInput.type === BlockInputType.availableData
|
|
72
|
+
? blockInput.blockData
|
|
73
|
+
: await raceWithCutoff(chain, blockInput, blockInput.cachedData.availabilityPromise, signal);
|
|
74
|
+
if (blockData.fork === ForkName.deneb || blockData.fork === ForkName.electra) {
|
|
75
|
+
const { blobs } = blockData;
|
|
76
|
+
// if the blob sidecars have been individually verified then we can skip kzg proof check
|
|
77
|
+
// but other checks to match blobs with block data still need to be performed
|
|
78
|
+
const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
|
|
79
|
+
await validateBlobSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, blobs, { skipProofsCheck });
|
|
80
|
+
}
|
|
81
|
+
else if (blockData.fork === ForkName.fulu) {
|
|
82
|
+
const { dataColumns } = blockData;
|
|
83
|
+
const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
|
|
84
|
+
await validateDataColumnsSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, dataColumns, chain.metrics, {
|
|
85
|
+
skipProofsCheck,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
const availableBlockInput = getBlockInput.availableData(chain.config, blockInput.block, blockInput.source, blockData);
|
|
78
89
|
return { dataAvailabilityStatus: DataAvailabilityStatus.Available, availableBlockInput: availableBlockInput };
|
|
79
90
|
}
|
|
80
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlocksDataAvailability.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksDataAvailability.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,sBAAsB,EAAE,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAErF,OAAO,EAAC,YAAY,EAAS,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAC,oBAAoB,EAAC,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAC,qBAAqB,
|
|
1
|
+
{"version":3,"file":"verifyBlocksDataAvailability.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksDataAvailability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { ForkName, NUMBER_OF_COLUMNS } from "@lodestar/params";
|
|
2
|
+
import { ssz } from "@lodestar/types";
|
|
1
3
|
import { toRootHex } from "@lodestar/utils";
|
|
4
|
+
import { toHex } from "@lodestar/utils";
|
|
2
5
|
import { BlockInputType } from "./types.js";
|
|
3
6
|
/**
|
|
4
7
|
* Persists block input data to DB. This operation must be eventually completed if a block is imported to the fork-choice.
|
|
@@ -26,22 +29,68 @@ export async function writeBlockInputToDb(blocksInput) {
|
|
|
26
29
|
this.logger.debug("Persist block to hot DB", {
|
|
27
30
|
slot: block.message.slot,
|
|
28
31
|
root: blockRootHex,
|
|
32
|
+
inputType: blockInput.type,
|
|
29
33
|
});
|
|
30
34
|
if (blockInput.type === BlockInputType.availableData || blockInput.type === BlockInputType.dataPromise) {
|
|
31
|
-
const
|
|
32
|
-
? blockInput.blockData
|
|
33
|
-
:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
const blockData = blockInput.type === BlockInputType.availableData
|
|
36
|
+
? blockInput.blockData
|
|
37
|
+
: await blockInput.cachedData.availabilityPromise;
|
|
38
|
+
// NOTE: Old data is pruned on archive
|
|
39
|
+
if (blockData.fork === ForkName.deneb || blockData.fork === ForkName.electra) {
|
|
40
|
+
const blobSidecars = blockData.blobs;
|
|
41
|
+
fnPromises.push(this.db.blobSidecars.add({ blockRoot, slot: block.message.slot, blobSidecars }));
|
|
42
|
+
this.logger.debug("Persisted blobSidecars to hot DB", {
|
|
43
|
+
blobsLen: blobSidecars.length,
|
|
44
|
+
slot: block.message.slot,
|
|
45
|
+
root: blockRootHex,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const { custodyConfig } = this;
|
|
50
|
+
const { custodyColumnsIndex, custodyColumns } = custodyConfig;
|
|
51
|
+
const blobsLen = block.message.body.blobKzgCommitments.length;
|
|
52
|
+
let dataColumnsLen;
|
|
53
|
+
let dataColumnsIndex;
|
|
54
|
+
if (blobsLen === 0) {
|
|
55
|
+
dataColumnsLen = 0;
|
|
56
|
+
dataColumnsIndex = new Uint8Array(NUMBER_OF_COLUMNS);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
dataColumnsLen = custodyColumns.length;
|
|
60
|
+
dataColumnsIndex = custodyColumnsIndex;
|
|
61
|
+
}
|
|
62
|
+
const blockDataColumns = blockData.dataColumns;
|
|
63
|
+
const dataColumnSidecars = blockDataColumns.filter((dataColumnSidecar) => custodyColumns.includes(dataColumnSidecar.index));
|
|
64
|
+
if (dataColumnSidecars.length !== dataColumnsLen) {
|
|
65
|
+
throw Error(`Invalid dataColumnSidecars=${dataColumnSidecars.length} for custody expected custodyColumnsLen=${dataColumnsLen}`);
|
|
66
|
+
}
|
|
67
|
+
const dataColumnsSize = ssz.fulu.DataColumnSidecar.minSize +
|
|
68
|
+
blobsLen * (ssz.fulu.Cell.fixedSize + ssz.deneb.KZGCommitment.fixedSize + ssz.deneb.KZGProof.fixedSize);
|
|
69
|
+
const slot = block.message.slot;
|
|
70
|
+
const writeData = {
|
|
71
|
+
blockRoot,
|
|
72
|
+
slot,
|
|
73
|
+
dataColumnsLen,
|
|
74
|
+
dataColumnsSize,
|
|
75
|
+
dataColumnsIndex,
|
|
76
|
+
dataColumnSidecars,
|
|
77
|
+
};
|
|
78
|
+
fnPromises.push(this.db.dataColumnSidecars.add(writeData));
|
|
79
|
+
this.logger.debug("Persisted dataColumnSidecars to hot DB", {
|
|
80
|
+
dataColumnsSize,
|
|
81
|
+
dataColumnsLen,
|
|
82
|
+
dataColumnSidecars: dataColumnSidecars.length,
|
|
83
|
+
slot: block.message.slot,
|
|
84
|
+
root: blockRootHex,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
42
87
|
}
|
|
43
88
|
}
|
|
44
89
|
await Promise.all(fnPromises);
|
|
90
|
+
this.logger.debug("Persisted blocksInput to db", {
|
|
91
|
+
blocksInput: blocksInput.length,
|
|
92
|
+
slots: blocksInput.map((blockInput) => blockInput.block.message.slot).join(" "),
|
|
93
|
+
});
|
|
45
94
|
}
|
|
46
95
|
/**
|
|
47
96
|
* Prunes eagerly persisted block inputs only if not known to the fork-choice
|
|
@@ -49,15 +98,39 @@ export async function writeBlockInputToDb(blocksInput) {
|
|
|
49
98
|
export async function removeEagerlyPersistedBlockInputs(blockInputs) {
|
|
50
99
|
const blockToRemove = [];
|
|
51
100
|
const blobsToRemove = [];
|
|
101
|
+
const dataColumnsToRemove = [];
|
|
52
102
|
for (const blockInput of blockInputs) {
|
|
53
103
|
const { block, type } = blockInput;
|
|
54
|
-
const
|
|
55
|
-
const
|
|
104
|
+
const slot = block.message.slot;
|
|
105
|
+
const blockRoot = this.config.getForkTypes(slot).BeaconBlock.hashTreeRoot(block.message);
|
|
106
|
+
const blockRootHex = toHex(blockRoot);
|
|
56
107
|
if (!this.forkChoice.hasBlockHex(blockRootHex)) {
|
|
57
108
|
blockToRemove.push(block);
|
|
58
109
|
if (type === BlockInputType.availableData) {
|
|
59
|
-
const
|
|
60
|
-
|
|
110
|
+
const { blockData } = blockInput;
|
|
111
|
+
if (blockData.fork === ForkName.deneb || blockData.fork === ForkName.electra) {
|
|
112
|
+
const blobSidecars = blockData.blobs;
|
|
113
|
+
blobsToRemove.push({ blockRoot, slot, blobSidecars });
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
const { custodyConfig } = this;
|
|
117
|
+
const { custodyColumnsIndex: dataColumnsIndex, custodyColumns } = custodyConfig;
|
|
118
|
+
const dataColumnsLen = custodyColumns.length;
|
|
119
|
+
const dataColumnSidecars = blockData.dataColumns.filter((dataColumnSidecar) => custodyColumns.includes(dataColumnSidecar.index));
|
|
120
|
+
if (dataColumnSidecars.length !== dataColumnsLen) {
|
|
121
|
+
throw Error(`Invalid dataColumnSidecars=${dataColumnSidecars.length} for custody expected custodyColumnsLen=${dataColumnsLen}`);
|
|
122
|
+
}
|
|
123
|
+
const blobsLen = block.message.body.blobKzgCommitments.length;
|
|
124
|
+
const dataColumnsSize = ssz.fulu.Cell.fixedSize * blobsLen;
|
|
125
|
+
dataColumnsToRemove.push({
|
|
126
|
+
blockRoot,
|
|
127
|
+
slot,
|
|
128
|
+
dataColumnsLen,
|
|
129
|
+
dataColumnsSize,
|
|
130
|
+
dataColumnsIndex,
|
|
131
|
+
dataColumnSidecars,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
61
134
|
}
|
|
62
135
|
}
|
|
63
136
|
}
|
|
@@ -65,6 +138,7 @@ export async function removeEagerlyPersistedBlockInputs(blockInputs) {
|
|
|
65
138
|
// TODO: Batch DB operations not with Promise.all but with level db ops
|
|
66
139
|
this.db.block.batchRemove(blockToRemove),
|
|
67
140
|
this.db.blobSidecars.batchRemove(blobsToRemove),
|
|
141
|
+
this.db.dataColumnSidecars.batchRemove(dataColumnsToRemove),
|
|
68
142
|
]);
|
|
69
143
|
}
|
|
70
144
|
//# sourceMappingURL=writeBlockInputToDb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeBlockInputToDb.js","sourceRoot":"","sources":["../../../src/chain/blocks/writeBlockInputToDb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"writeBlockInputToDb.js","sourceRoot":"","sources":["../../../src/chain/blocks/writeBlockInputToDb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAO,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAoC,cAAc,EAAC,MAAM,YAAY,CAAC;AAE7E;;;;;;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,EAAC,GAAG,UAAU,CAAC;QAC3B,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,SAAS,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnD,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;YAClB,SAAS,EAAE,UAAU,CAAC,IAAI;SAC3B,CAAC,CAAC;QAEH,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,aAAa,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,WAAW,EAAE,CAAC;YACvG,MAAM,SAAS,GACb,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,aAAa;gBAC9C,CAAC,CAAC,UAAU,CAAC,SAAS;gBACtB,CAAC,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,mBAAmB,CAAC;YAEtD,sCAAsC;YACtC,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAC7E,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;gBACrC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,EAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,EAAC,CAAC,CAAC,CAAC;gBAC/F,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE;oBACpD,QAAQ,EAAE,YAAY,CAAC,MAAM;oBAC7B,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;oBACxB,IAAI,EAAE,YAAY;iBACnB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAC,aAAa,EAAC,GAAG,IAAI,CAAC;gBAC7B,MAAM,EAAC,mBAAmB,EAAE,cAAc,EAAC,GAAG,aAAa,CAAC;gBAC5D,MAAM,QAAQ,GAAI,KAAK,CAAC,OAA4B,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;gBACpF,IAAI,cAAsB,CAAC;gBAC3B,IAAI,gBAA4B,CAAC;gBACjC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACnB,cAAc,GAAG,CAAC,CAAC;oBACnB,gBAAgB,GAAG,IAAI,UAAU,CAAC,iBAAiB,CAAC,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACN,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC;oBACvC,gBAAgB,GAAG,mBAAmB,CAAC;gBACzC,CAAC;gBAED,MAAM,gBAAgB,GAAI,SAAmC,CAAC,WAAW,CAAC;gBAC1E,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,EAAE,CACvE,cAAc,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CACjD,CAAC;gBACF,IAAI,kBAAkB,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;oBACjD,MAAM,KAAK,CACT,8BAA8B,kBAAkB,CAAC,MAAM,2CAA2C,cAAc,EAAE,CACnH,CAAC;gBACJ,CAAC;gBAED,MAAM,eAAe,GACnB,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO;oBAClC,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC1G,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChC,MAAM,SAAS,GAAG;oBAChB,SAAS;oBACT,IAAI;oBACJ,cAAc;oBACd,eAAe;oBACf,gBAAgB;oBAChB,kBAAkB;iBACnB,CAAC;gBACF,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;gBAE3D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE;oBAC1D,eAAe;oBACf,cAAc;oBACd,kBAAkB,EAAE,kBAAkB,CAAC,MAAM;oBAC7C,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;oBACxB,IAAI,EAAE,YAAY;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;QAC/C,WAAW,EAAE,WAAW,CAAC,MAAM;QAC/B,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KAChF,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CAAoB,WAAyB;IAClG,MAAM,aAAa,GAAG,EAAE,CAAC;IACzB,MAAM,aAAa,GAAG,EAAE,CAAC;IACzB,MAAM,mBAAmB,GAAG,EAAE,CAAC;IAE/B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,EAAC,KAAK,EAAE,IAAI,EAAC,GAAG,UAAU,CAAC;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACzF,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/C,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE1B,IAAI,IAAI,KAAK,cAAc,CAAC,aAAa,EAAE,CAAC;gBAC1C,MAAM,EAAC,SAAS,EAAC,GAAG,UAAU,CAAC;gBAC/B,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;oBAC7E,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;oBACrC,aAAa,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,IAAI,EAAE,YAAY,EAAC,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACN,MAAM,EAAC,aAAa,EAAC,GAAG,IAAI,CAAC;oBAC7B,MAAM,EAAC,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAC,GAAG,aAAa,CAAC;oBAC9E,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC;oBAC7C,MAAM,kBAAkB,GAAI,SAAmC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,EAAE,CACvG,cAAc,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CACjD,CAAC;oBACF,IAAI,kBAAkB,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;wBACjD,MAAM,KAAK,CACT,8BAA8B,kBAAkB,CAAC,MAAM,2CAA2C,cAAc,EAAE,CACnH,CAAC;oBACJ,CAAC;oBAED,MAAM,QAAQ,GAAI,KAAK,CAAC,OAA4B,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;oBACpF,MAAM,eAAe,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;oBAE3D,mBAAmB,CAAC,IAAI,CAAC;wBACvB,SAAS;wBACT,IAAI;wBACJ,cAAc;wBACd,eAAe;wBACf,gBAAgB;wBAChB,kBAAkB;qBACnB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,uEAAuE;QACvE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,aAAa,CAAC;QAC/C,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAAC,mBAAmB,CAAC;KAC5D,CAAC,CAAC;AACL,CAAC"}
|
package/lib/chain/chain.d.ts
CHANGED
|
@@ -3,15 +3,17 @@ import { CompositeTypeAny, TreeView, Type } from "@chainsafe/ssz";
|
|
|
3
3
|
import { BeaconConfig } from "@lodestar/config";
|
|
4
4
|
import { CheckpointWithHex, IForkChoice, ProtoBlock } from "@lodestar/fork-choice";
|
|
5
5
|
import { BeaconStateAllForks, CachedBeaconStateAllForks, EpochShuffling, Index2PubkeyCache } from "@lodestar/state-transition";
|
|
6
|
-
import { BeaconBlock, BlindedBeaconBlock, Epoch, Root, RootHex, SignedBeaconBlock, Slot, UintNum64, ValidatorIndex, Wei, deneb,
|
|
6
|
+
import { BeaconBlock, BlindedBeaconBlock, Epoch, Root, RootHex, SignedBeaconBlock, Slot, Status, UintNum64, ValidatorIndex, Wei, deneb, fulu } from "@lodestar/types";
|
|
7
7
|
import { Logger } from "@lodestar/utils";
|
|
8
8
|
import { ProcessShutdownCallback } from "@lodestar/validator";
|
|
9
|
+
import { PrivateKey } from "@libp2p/interface";
|
|
9
10
|
import { IBeaconDb } from "../db/index.js";
|
|
10
11
|
import { IEth1ForBlockProduction } from "../eth1/index.js";
|
|
11
12
|
import { IExecutionBuilder, IExecutionEngine } from "../execution/index.js";
|
|
12
13
|
import { Metrics } from "../metrics/index.js";
|
|
13
14
|
import { BufferPool } from "../util/bufferPool.js";
|
|
14
15
|
import { IClock } from "../util/clock.js";
|
|
16
|
+
import { CustodyConfig } from "../util/dataColumns.js";
|
|
15
17
|
import { SerializedCache } from "../util/serializedCache.js";
|
|
16
18
|
import { ArchiveStore } from "./archiveStore/archiveStore.js";
|
|
17
19
|
import { CheckpointBalancesCache } from "./balancesCache.js";
|
|
@@ -47,6 +49,7 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
47
49
|
readonly executionEngine: IExecutionEngine;
|
|
48
50
|
readonly executionBuilder?: IExecutionBuilder;
|
|
49
51
|
readonly config: BeaconConfig;
|
|
52
|
+
readonly custodyConfig: CustodyConfig;
|
|
50
53
|
readonly logger: Logger;
|
|
51
54
|
readonly metrics: Metrics | null;
|
|
52
55
|
readonly validatorMonitor: ValidatorMonitor | null;
|
|
@@ -81,7 +84,9 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
81
84
|
readonly checkpointBalancesCache: CheckpointBalancesCache;
|
|
82
85
|
readonly shufflingCache: ShufflingCache;
|
|
83
86
|
/** Map keyed by executionPayload.blockHash of the block for those blobs */
|
|
84
|
-
readonly producedContentsCache: Map<string, deneb.Contents
|
|
87
|
+
readonly producedContentsCache: Map<string, deneb.Contents & {
|
|
88
|
+
cells?: fulu.Cell[][];
|
|
89
|
+
}>;
|
|
85
90
|
readonly producedBlockRoot: Map<string, import("@chainsafe/ssz").ValueOfFields<{
|
|
86
91
|
transactions: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteListType>;
|
|
87
92
|
parentHash: import("@chainsafe/ssz").ByteVectorType;
|
|
@@ -173,7 +178,11 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
173
178
|
protected readonly db: IBeaconDb;
|
|
174
179
|
private abortController;
|
|
175
180
|
private processShutdownCallback;
|
|
176
|
-
|
|
181
|
+
private _earliestSlotAvailable;
|
|
182
|
+
get earliestSlotAvailable(): Slot;
|
|
183
|
+
set earliestSlotAvailable(slot: Slot);
|
|
184
|
+
constructor(opts: IChainOptions, { privateKey, config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, validatorMonitor, anchorState, eth1, executionEngine, executionBuilder, }: {
|
|
185
|
+
privateKey: PrivateKey;
|
|
177
186
|
config: BeaconConfig;
|
|
178
187
|
db: IBeaconDb;
|
|
179
188
|
dbName: string;
|
|
@@ -271,10 +280,12 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
271
280
|
* kzg_aggregated_proof=compute_proof_from_blobs(blobs),
|
|
272
281
|
* )
|
|
273
282
|
*/
|
|
274
|
-
getContents(beaconBlock: deneb.BeaconBlock): deneb.Contents
|
|
283
|
+
getContents(beaconBlock: deneb.BeaconBlock): deneb.Contents & {
|
|
284
|
+
cells?: fulu.Cell[][];
|
|
285
|
+
};
|
|
275
286
|
processBlock(block: BlockInput, opts?: ImportBlockOpts): Promise<void>;
|
|
276
287
|
processChainSegment(blocks: BlockInput[], opts?: ImportBlockOpts): Promise<void>;
|
|
277
|
-
getStatus():
|
|
288
|
+
getStatus(): Status;
|
|
278
289
|
recomputeForkChoiceHead(caller: ForkchoiceCaller): ProtoBlock;
|
|
279
290
|
predictProposerHead(slot: Slot): ProtoBlock;
|
|
280
291
|
getProposerHead(slot: Slot): ProtoBlock;
|
package/lib/chain/chain.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { PubkeyIndexMap } from "@chainsafe/pubkey-index-map";
|
|
3
3
|
import { ExecutionStatus, UpdateHeadOpt } from "@lodestar/fork-choice";
|
|
4
|
-
import { ForkSeq, GENESIS_SLOT, SLOTS_PER_EPOCH, isForkPostElectra } from "@lodestar/params";
|
|
4
|
+
import { ForkSeq, GENESIS_SLOT, SLOTS_PER_EPOCH, isForkPostElectra, isForkPostFulu } from "@lodestar/params";
|
|
5
5
|
import { computeAnchorCheckpoint, computeEndSlotAtEpoch, computeEpochAtSlot, computeStartSlotAtEpoch, createCachedBeaconState, getEffectiveBalanceIncrementsZeroInactive, isCachedBeaconState, processSlots, } from "@lodestar/state-transition";
|
|
6
6
|
import { isBlindedBeaconBlock, } from "@lodestar/types";
|
|
7
7
|
import { fromHex, gweiToWei, isErrorAborted, pruneSetToMax, sleep, toRootHex } from "@lodestar/utils";
|
|
8
8
|
import { GENESIS_EPOCH, ZERO_HASH } from "../constants/index.js";
|
|
9
|
+
import { computeNodeIdFromPrivateKey } from "../network/subnets/interface.js";
|
|
9
10
|
import { BufferPool } from "../util/bufferPool.js";
|
|
10
11
|
import { Clock, ClockEvent } from "../util/clock.js";
|
|
12
|
+
import { CustodyConfig, getValidatorsCustodyRequirement } from "../util/dataColumns.js";
|
|
11
13
|
import { ensureDir, writeIfNotExist } from "../util/file.js";
|
|
12
14
|
import { isOptimisticBlock } from "../util/forkChoice.js";
|
|
13
15
|
import { SerializedCache } from "../util/serializedCache.js";
|
|
@@ -50,14 +52,22 @@ import { PersistentCheckpointStateCache } from "./stateCache/persistentCheckpoin
|
|
|
50
52
|
*/
|
|
51
53
|
const DEFAULT_MAX_CACHED_PRODUCED_ROOTS = 4;
|
|
52
54
|
export class BeaconChain {
|
|
53
|
-
|
|
55
|
+
get earliestSlotAvailable() {
|
|
56
|
+
return this._earliestSlotAvailable;
|
|
57
|
+
}
|
|
58
|
+
set earliestSlotAvailable(slot) {
|
|
59
|
+
if (this._earliestSlotAvailable !== slot) {
|
|
60
|
+
this._earliestSlotAvailable = slot;
|
|
61
|
+
this.emitter.emit(ChainEvent.updateStatus);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
constructor(opts, { privateKey, config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, validatorMonitor, anchorState, eth1, executionEngine, executionBuilder, }) {
|
|
54
65
|
this.opPool = new OpPool();
|
|
55
66
|
// Gossip seen cache
|
|
56
67
|
this.seenAttesters = new SeenAttesters();
|
|
57
68
|
this.seenAggregators = new SeenAggregators();
|
|
58
69
|
this.seenBlockProposers = new SeenBlockProposers();
|
|
59
70
|
this.seenSyncCommitteeMessages = new SeenSyncCommitteeMessages();
|
|
60
|
-
this.seenGossipBlockInput = new SeenGossipBlockInput();
|
|
61
71
|
// Seen cache for liveness checks
|
|
62
72
|
this.seenBlockAttesters = new SeenBlockAttesters();
|
|
63
73
|
/** Map keyed by executionPayload.blockHash of the block for those blobs */
|
|
@@ -98,6 +108,9 @@ export class BeaconChain {
|
|
|
98
108
|
this.seenAggregatedAttestations = new SeenAggregatedAttestations(metrics);
|
|
99
109
|
this.seenContributionAndProof = new SeenContributionAndProof(metrics);
|
|
100
110
|
this.seenAttestationDatas = new SeenAttestationDatas(metrics, this.opts?.attDataCacheSlotDistance);
|
|
111
|
+
const nodeId = computeNodeIdFromPrivateKey(privateKey);
|
|
112
|
+
this.custodyConfig = new CustodyConfig(nodeId, config, metrics);
|
|
113
|
+
this.seenGossipBlockInput = new SeenGossipBlockInput(this.custodyConfig, this.executionEngine, emitter, clock, logger);
|
|
101
114
|
this.beaconProposerCache = new BeaconProposerCache(opts);
|
|
102
115
|
this.checkpointBalancesCache = new CheckpointBalancesCache();
|
|
103
116
|
this.seenBlockInputCache = new SeenBlockInputCache({
|
|
@@ -120,6 +133,7 @@ export class BeaconChain {
|
|
|
120
133
|
pubkey2index: new PubkeyIndexMap(),
|
|
121
134
|
index2pubkey: [],
|
|
122
135
|
});
|
|
136
|
+
this._earliestSlotAvailable = cachedState.slot;
|
|
123
137
|
this.shufflingCache = cachedState.epochCtx.shufflingCache = new ShufflingCache(metrics, logger, this.opts, [
|
|
124
138
|
{
|
|
125
139
|
shuffling: cachedState.epochCtx.previousShuffling,
|
|
@@ -501,11 +515,12 @@ export class BeaconChain {
|
|
|
501
515
|
getStatus() {
|
|
502
516
|
const head = this.forkChoice.getHead();
|
|
503
517
|
const finalizedCheckpoint = this.forkChoice.getFinalizedCheckpoint();
|
|
504
|
-
|
|
518
|
+
const forkName = this.config.getForkName(this.clock.currentSlot);
|
|
519
|
+
const status = {
|
|
505
520
|
// fork_digest: The node's ForkDigest (compute_fork_digest(current_fork_version, genesis_validators_root)) where
|
|
506
521
|
// - current_fork_version is the fork version at the node's current epoch defined by the wall-clock time (not necessarily the epoch to which the node is sync)
|
|
507
522
|
// - genesis_validators_root is the static Root found in state.genesis_validators_root
|
|
508
|
-
forkDigest: this.config.forkName2ForkDigest(
|
|
523
|
+
forkDigest: this.config.forkName2ForkDigest(forkName),
|
|
509
524
|
// finalized_root: state.finalized_checkpoint.root for the state corresponding to the head block (Note this defaults to Root(b'\x00' * 32) for the genesis finalized checkpoint).
|
|
510
525
|
finalizedRoot: finalizedCheckpoint.epoch === GENESIS_EPOCH ? ZERO_HASH : finalizedCheckpoint.root,
|
|
511
526
|
finalizedEpoch: finalizedCheckpoint.epoch,
|
|
@@ -513,6 +528,10 @@ export class BeaconChain {
|
|
|
513
528
|
headRoot: fromHex(head.blockRoot),
|
|
514
529
|
headSlot: head.slot,
|
|
515
530
|
};
|
|
531
|
+
if (isForkPostFulu(forkName)) {
|
|
532
|
+
status.earliestAvailableSlot = this._earliestSlotAvailable;
|
|
533
|
+
}
|
|
534
|
+
return status;
|
|
516
535
|
}
|
|
517
536
|
recomputeForkChoiceHead(caller) {
|
|
518
537
|
this.metrics?.forkChoice.requests.inc();
|
|
@@ -748,6 +767,13 @@ export class BeaconChain {
|
|
|
748
767
|
metrics.forkChoice.balancesLength.set(forkChoiceMetrics.balancesLength);
|
|
749
768
|
metrics.forkChoice.nodes.set(forkChoiceMetrics.nodes);
|
|
750
769
|
metrics.forkChoice.indices.set(forkChoiceMetrics.indices);
|
|
770
|
+
const fork = this.config.getForkName(this.clock.currentSlot);
|
|
771
|
+
if (isForkPostElectra(fork)) {
|
|
772
|
+
const headStateElectra = this.getHeadState();
|
|
773
|
+
metrics.pendingDeposits.set(headStateElectra.pendingDeposits.length);
|
|
774
|
+
metrics.pendingPartialWithdrawals.set(headStateElectra.pendingPartialWithdrawals.length);
|
|
775
|
+
metrics.pendingConsolidations.set(headStateElectra.pendingConsolidations.length);
|
|
776
|
+
}
|
|
751
777
|
}
|
|
752
778
|
onClockSlot(slot) {
|
|
753
779
|
this.logger.verbose("Clock slot", { slot });
|
|
@@ -820,6 +846,25 @@ export class BeaconChain {
|
|
|
820
846
|
}
|
|
821
847
|
if (headState) {
|
|
822
848
|
this.opPool.pruneAll(headBlock, headState);
|
|
849
|
+
if (!this.opts.noValidatorCustody) {
|
|
850
|
+
// Update custody requirement based on finalized state
|
|
851
|
+
const validatorIndices = this.beaconProposerCache.getValidatorIndices();
|
|
852
|
+
const targetCustodyGroupCount = getValidatorsCustodyRequirement(headState, validatorIndices, this.config);
|
|
853
|
+
if (targetCustodyGroupCount !== this.custodyConfig.targetCustodyGroupCount) {
|
|
854
|
+
this.custodyConfig.updateTargetCustodyGroupCount(targetCustodyGroupCount);
|
|
855
|
+
this.logger.verbose(`Updated targetCustodyGroupCount=${this.custodyConfig.targetCustodyGroupCount}`);
|
|
856
|
+
this.emitter.emit(ChainEvent.updateTargetGroupCount, this.custodyConfig.targetCustodyGroupCount);
|
|
857
|
+
// Need to update advertised custody prior to fulu transition so that we can serve columns we have for
|
|
858
|
+
// validators that are attached prior to the fork transition.
|
|
859
|
+
//
|
|
860
|
+
// TODO(fulu): If target group count increases, we should wait to update the advertised group until we've
|
|
861
|
+
// backfilled the new groups.
|
|
862
|
+
if (this.config.FULU_FORK_EPOCH !== Infinity && this.config.getForkSeq(slot) < ForkSeq.fulu) {
|
|
863
|
+
this.custodyConfig.updateAdvertisedCustodyGroupCount(targetCustodyGroupCount);
|
|
864
|
+
this.emitter.emit(ChainEvent.updateAdvertisedGroupCount, this.custodyConfig.advertisedCustodyGroupCount);
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
}
|
|
823
868
|
}
|
|
824
869
|
if (headState === null) {
|
|
825
870
|
this.logger.verbose("Head state is null");
|