@lodestar/beacon-node 1.49.0-dev.fbb58f7280 → 1.49.0-rc.0
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.d.ts.map +1 -1
- package/lib/api/impl/beacon/blocks/index.js +13 -4
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +4 -2
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.d.ts +1 -2
- package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
- package/lib/chain/archiveStore/archiveStore.js +5 -8
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +1 -1
- package/lib/chain/archiveStore/historicalState/metrics.js +5 -6
- package/lib/chain/archiveStore/historicalState/metrics.js.map +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +11 -2
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.js +46 -28
- package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
- package/lib/chain/archiveStore/utils/pruneHistory.d.ts +2 -2
- package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +1 -1
- package/lib/chain/archiveStore/utils/pruneHistory.js +1 -0
- package/lib/chain/archiveStore/utils/pruneHistory.js.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.js +13 -0
- package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
- package/lib/chain/chain.d.ts +10 -0
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +85 -16
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/errors/envelopeReconstructionError.d.ts +23 -0
- package/lib/chain/errors/envelopeReconstructionError.d.ts.map +1 -0
- package/lib/chain/errors/envelopeReconstructionError.js +13 -0
- package/lib/chain/errors/envelopeReconstructionError.js.map +1 -0
- package/lib/chain/errors/index.d.ts +1 -0
- package/lib/chain/errors/index.d.ts.map +1 -1
- package/lib/chain/errors/index.js +1 -0
- package/lib/chain/errors/index.js.map +1 -1
- package/lib/chain/errors/payloadAttestation.d.ts +4 -0
- package/lib/chain/errors/payloadAttestation.d.ts.map +1 -1
- package/lib/chain/errors/payloadAttestation.js +1 -0
- package/lib/chain/errors/payloadAttestation.js.map +1 -1
- package/lib/chain/interface.d.ts +6 -1
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/options.d.ts +2 -4
- package/lib/chain/options.d.ts.map +1 -1
- package/lib/chain/options.js +1 -1
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.js +4 -2
- package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.js +8 -1
- package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
- package/lib/db/beacon.d.ts +1 -2
- package/lib/db/beacon.d.ts.map +1 -1
- package/lib/db/beacon.js +1 -3
- package/lib/db/beacon.js.map +1 -1
- package/lib/db/buckets.d.ts +0 -1
- package/lib/db/buckets.d.ts.map +1 -1
- package/lib/db/buckets.js +1 -1
- package/lib/db/buckets.js.map +1 -1
- package/lib/db/interface.d.ts +1 -2
- package/lib/db/interface.d.ts.map +1 -1
- package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
- package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
- package/lib/db/repositories/executionPayloadEnvelopeArchive.d.ts +21 -9
- package/lib/db/repositories/executionPayloadEnvelopeArchive.d.ts.map +1 -1
- package/lib/db/repositories/executionPayloadEnvelopeArchive.js +32 -12
- package/lib/db/repositories/executionPayloadEnvelopeArchive.js.map +1 -1
- package/lib/db/repositories/index.d.ts +1 -2
- package/lib/db/repositories/index.d.ts.map +1 -1
- package/lib/db/repositories/index.js +1 -2
- package/lib/db/repositories/index.js.map +1 -1
- package/lib/execution/engine/disabled.d.ts +1 -0
- package/lib/execution/engine/disabled.d.ts.map +1 -1
- package/lib/execution/engine/disabled.js +3 -0
- package/lib/execution/engine/disabled.js.map +1 -1
- package/lib/execution/engine/http.d.ts +2 -1
- package/lib/execution/engine/http.d.ts.map +1 -1
- package/lib/execution/engine/http.js +7 -1
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +3 -1
- package/lib/execution/engine/interface.d.ts.map +1 -1
- package/lib/execution/engine/mock.d.ts +1 -0
- package/lib/execution/engine/mock.d.ts.map +1 -1
- package/lib/execution/engine/mock.js +14 -2
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/types.d.ts +11 -0
- package/lib/execution/engine/types.d.ts.map +1 -1
- package/lib/execution/engine/types.js +10 -0
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +9 -0
- package/lib/metrics/metrics/beacon.d.ts.map +1 -1
- package/lib/metrics/metrics/beacon.js +16 -0
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +21 -11
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +48 -23
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/metrics/metrics.d.ts +3 -1
- package/lib/metrics/metrics.d.ts.map +1 -1
- package/lib/metrics/metrics.js +2 -2
- package/lib/metrics/metrics.js.map +1 -1
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +47 -34
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +23 -4
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/index.js +20 -4
- package/lib/network/reqresp/handlers/index.js.map +1 -1
- package/lib/node/nodejs.d.ts +2 -7
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +2 -22
- package/lib/node/nodejs.js.map +1 -1
- package/lib/sync/interface.d.ts +1 -2
- package/lib/sync/interface.d.ts.map +1 -1
- package/lib/sync/options.d.ts +0 -6
- package/lib/sync/options.d.ts.map +1 -1
- package/lib/sync/options.js +0 -2
- package/lib/sync/options.js.map +1 -1
- package/lib/sync/types.d.ts +18 -3
- package/lib/sync/types.d.ts.map +1 -1
- package/lib/sync/types.js +19 -3
- package/lib/sync/types.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts +19 -0
- package/lib/sync/unknownBlock.d.ts.map +1 -1
- package/lib/sync/unknownBlock.js +184 -15
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/util/execution.d.ts +42 -0
- package/lib/util/execution.d.ts.map +1 -1
- package/lib/util/execution.js +123 -2
- package/lib/util/execution.js.map +1 -1
- package/lib/util/headerEnvelope.d.ts +17 -0
- package/lib/util/headerEnvelope.d.ts.map +1 -0
- package/lib/util/headerEnvelope.js +43 -0
- package/lib/util/headerEnvelope.js.map +1 -0
- package/lib/util/shuffle.d.ts +0 -4
- package/lib/util/shuffle.d.ts.map +1 -1
- package/lib/util/shuffle.js +0 -8
- package/lib/util/shuffle.js.map +1 -1
- package/package.json +16 -16
- package/src/api/impl/beacon/blocks/index.ts +16 -3
- package/src/api/impl/beacon/pool/index.ts +6 -2
- package/src/chain/archiveStore/archiveStore.ts +6 -9
- package/src/chain/archiveStore/historicalState/metrics.ts +5 -7
- package/src/chain/archiveStore/utils/archiveBlocks.ts +54 -32
- package/src/chain/archiveStore/utils/pruneHistory.ts +4 -2
- package/src/chain/blocks/importExecutionPayload.ts +14 -0
- package/src/chain/chain.ts +96 -20
- package/src/chain/errors/envelopeReconstructionError.ts +22 -0
- package/src/chain/errors/index.ts +1 -0
- package/src/chain/errors/payloadAttestation.ts +2 -0
- package/src/chain/interface.ts +6 -1
- package/src/chain/options.ts +3 -5
- package/src/chain/produceBlock/computeNewStateRoot.ts +9 -2
- package/src/chain/validation/payloadAttestationMessage.ts +9 -0
- package/src/db/beacon.ts +0 -5
- package/src/db/buckets.ts +2 -2
- package/src/db/interface.ts +0 -3
- package/src/db/repositories/executionPayloadEnvelopeArchive.ts +43 -13
- package/src/db/repositories/index.ts +6 -2
- package/src/execution/engine/disabled.ts +4 -0
- package/src/execution/engine/http.ts +12 -0
- package/src/execution/engine/interface.ts +4 -1
- package/src/execution/engine/mock.ts +22 -2
- package/src/execution/engine/types.ts +25 -0
- package/src/metrics/metrics/beacon.ts +16 -0
- package/src/metrics/metrics/lodestar.ts +58 -26
- package/src/metrics/metrics.ts +7 -2
- package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +57 -39
- package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +27 -5
- package/src/network/reqresp/handlers/index.ts +49 -5
- package/src/node/nodejs.ts +0 -27
- package/src/sync/interface.ts +1 -2
- package/src/sync/options.ts +0 -8
- package/src/sync/types.ts +19 -3
- package/src/sync/unknownBlock.ts +192 -14
- package/src/util/execution.ts +175 -2
- package/src/util/headerEnvelope.ts +76 -0
- package/src/util/shuffle.ts +0 -9
- package/lib/chain/archiveStore/utils/updateBackfillRange.d.ts +0 -20
- package/lib/chain/archiveStore/utils/updateBackfillRange.d.ts.map +0 -1
- package/lib/chain/archiveStore/utils/updateBackfillRange.js +0 -40
- package/lib/chain/archiveStore/utils/updateBackfillRange.js.map +0 -1
- package/lib/db/repositories/backfilledRanges.d.ts +0 -18
- package/lib/db/repositories/backfilledRanges.d.ts.map +0 -1
- package/lib/db/repositories/backfilledRanges.js +0 -26
- package/lib/db/repositories/backfilledRanges.js.map +0 -1
- package/lib/sync/backfill/backfill.d.ts +0 -169
- package/lib/sync/backfill/backfill.d.ts.map +0 -1
- package/lib/sync/backfill/backfill.js +0 -686
- package/lib/sync/backfill/backfill.js.map +0 -1
- package/lib/sync/backfill/errors.d.ts +0 -30
- package/lib/sync/backfill/errors.d.ts.map +0 -1
- package/lib/sync/backfill/errors.js +0 -15
- package/lib/sync/backfill/errors.js.map +0 -1
- package/lib/sync/backfill/index.d.ts +0 -2
- package/lib/sync/backfill/index.d.ts.map +0 -1
- package/lib/sync/backfill/index.js +0 -2
- package/lib/sync/backfill/index.js.map +0 -1
- package/lib/sync/backfill/verify.d.ts +0 -18
- package/lib/sync/backfill/verify.d.ts.map +0 -1
- package/lib/sync/backfill/verify.js +0 -36
- package/lib/sync/backfill/verify.js.map +0 -1
- package/src/chain/archiveStore/utils/updateBackfillRange.ts +0 -50
- package/src/db/repositories/backfilledRanges.ts +0 -29
- package/src/sync/backfill/backfill.ts +0 -916
- package/src/sync/backfill/errors.ts +0 -23
- package/src/sync/backfill/index.ts +0 -1
- package/src/sync/backfill/verify.ts +0 -58
package/lib/util/execution.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
+
import { Slot, gloas } from "@lodestar/types";
|
|
3
|
+
import { Logger } from "@lodestar/utils";
|
|
2
4
|
import { IBlockInput } from "../chain/blocks/blockInput/types.js";
|
|
3
5
|
import { PayloadEnvelopeInput } from "../chain/blocks/payloadEnvelopeInput/index.js";
|
|
4
6
|
import { ChainEventEmitter } from "../chain/emitter.js";
|
|
7
|
+
import { EnvelopeReconstructionError } from "../chain/errors/envelopeReconstructionError.js";
|
|
8
|
+
import { IBeaconDb } from "../db/index.js";
|
|
5
9
|
import { IExecutionEngine } from "../execution/index.js";
|
|
6
10
|
import { Metrics } from "../metrics/index.js";
|
|
7
11
|
export declare enum DataColumnEngineResult {
|
|
@@ -21,4 +25,42 @@ export declare function getBlobSidecarsFromExecution(config: ChainForkConfig, ex
|
|
|
21
25
|
* Post gloas, immediately when beacon block is successfully imported and PayloadEnvelopeInput is created.
|
|
22
26
|
*/
|
|
23
27
|
export declare function getDataColumnSidecarsFromExecution(config: ChainForkConfig, executionEngine: IExecutionEngine, emitter: ChainEventEmitter, input: IBlockInput | PayloadEnvelopeInput, metrics: Metrics | null, blobAndProofBuffers?: Uint8Array[]): Promise<DataColumnEngineResult>;
|
|
28
|
+
type SlotEnvelopeBytes = {
|
|
29
|
+
slot: Slot;
|
|
30
|
+
envelopeBytes: Uint8Array;
|
|
31
|
+
};
|
|
32
|
+
/** What a body root mismatch means on a given serving path */
|
|
33
|
+
export type ReconstructMismatchPolicy = "throw" | "omit";
|
|
34
|
+
export type RebuildMiss =
|
|
35
|
+
/** EL does not have the block, or has pruned its block access list */
|
|
36
|
+
{
|
|
37
|
+
slot: Slot;
|
|
38
|
+
reason: "unavailable";
|
|
39
|
+
}
|
|
40
|
+
/** An EL body does not hash to its stored root (local inconsistency) */
|
|
41
|
+
| {
|
|
42
|
+
slot: Slot;
|
|
43
|
+
reason: "mismatch";
|
|
44
|
+
error: EnvelopeReconstructionError;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Stream finalized envelopes over [startSlot, endSlot) as serialized bytes, rebuilding header
|
|
48
|
+
* entries from EL bodies 32 per round-trip.
|
|
49
|
+
*
|
|
50
|
+
* Ends at the first entry that cannot be served by throwing RANGE_UNSERVABLE with that slot: the
|
|
51
|
+
* by-range spec inherits BeaconBlocksByRange v2 semantics (consecutive, MAY be short), and a hole
|
|
52
|
+
* looks like a lying peer to one that already holds the blocks. Entries are attempted regardless of
|
|
53
|
+
* age; the EL's block access list retention is the floor, not MIN_EPOCHS_FOR_BLOCK_REQUESTS.
|
|
54
|
+
*
|
|
55
|
+
* Throws ENGINE_UNAVAILABLE if the EL call fails. Either may surface after envelopes were yielded.
|
|
56
|
+
*/
|
|
57
|
+
export declare function reconstructExecutionPayloadEnvelopesByRange(db: IBeaconDb, executionEngine: IExecutionEngine, logger: Logger, metrics: Metrics | null, startSlot: Slot, endSlot: Slot): AsyncIterable<SlotEnvelopeBytes>;
|
|
58
|
+
/**
|
|
59
|
+
* Rebuild header envelopes from EL bodies, 32 per round-trip. Aligned with the input, with a
|
|
60
|
+
* {@link RebuildMiss} where the envelope could not be rebuilt; the caller decides what a miss means
|
|
61
|
+
* on its path. Throws ENGINE_UNAVAILABLE only.
|
|
62
|
+
*/
|
|
63
|
+
export declare function reconstructExecutionPayloadEnvelopes(executionEngine: IExecutionEngine, metrics: Metrics | null, headerEnvelopes: gloas.SignedExecutionPayloadHeaderEnvelope[]): Promise<(gloas.SignedExecutionPayloadEnvelope | RebuildMiss)[]>;
|
|
64
|
+
export declare function isRebuildMiss(result: gloas.SignedExecutionPayloadEnvelope | RebuildMiss): result is RebuildMiss;
|
|
65
|
+
export {};
|
|
24
66
|
//# sourceMappingURL=execution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/util/execution.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/util/execution.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAuC,IAAI,EAAS,KAAK,EAAgC,MAAM,iBAAiB,CAAC;AACxH,OAAO,EAAC,MAAM,EAA4B,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAmB,WAAW,EAAC,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAC,oBAAoB,EAA6B,MAAM,+CAA+C,CAAC;AAC/G,OAAO,EAAa,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,2BAA2B,EAE5B,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAU5C,oBAAY,sBAAsB;IAChC,OAAO,aAAa;IAEpB,gBAAgB,uBAAuB;IAEvC,mBAAmB,2BAA2B;IAE9C,YAAY,kBAAkB;IAE9B,eAAe,qBAAqB;IAEpC,WAAW,iBAAiB;IAC5B,MAAM,WAAW;CAClB;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,eAAe,EACvB,eAAe,EAAE,gBAAgB,EACjC,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,WAAW,iBAqFxB;AAED;;;;;GAKG;AACH,wBAAsB,kCAAkC,CACtD,MAAM,EAAE,eAAe,EACvB,eAAe,EAAE,gBAAgB,EACjC,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,WAAW,GAAG,oBAAoB,EACzC,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,mBAAmB,CAAC,EAAE,UAAU,EAAE,GACjC,OAAO,CAAC,sBAAsB,CAAC,CAgHjC;AAKD,KAAK,iBAAiB,GAAG;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,UAAU,CAAA;CAAC,CAAC;AAIjE,8DAA8D;AAC9D,MAAM,MAAM,yBAAyB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzD,MAAM,MAAM,WAAW;AACrB,sEAAsE;AACpE;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAC;AACrC,wEAAwE;GACtE;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,2BAA2B,CAAA;CAAC,CAAC;AAEzE;;;;;;;;;;GAUG;AACH,wBAAuB,2CAA2C,CAChE,EAAE,EAAE,SAAS,EACb,eAAe,EAAE,gBAAgB,EACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,IAAI,GACZ,aAAa,CAAC,iBAAiB,CAAC,CAclC;AAyCD;;;;GAIG;AACH,wBAAsB,oCAAoC,CACxD,eAAe,EAAE,gBAAgB,EACjC,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,eAAe,EAAE,KAAK,CAAC,oCAAoC,EAAE,GAC5D,OAAO,CAAC,CAAC,KAAK,CAAC,8BAA8B,GAAG,WAAW,CAAC,EAAE,CAAC,CAQjE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,8BAA8B,GAAG,WAAW,GAAG,MAAM,IAAI,WAAW,CAE/G"}
|
package/lib/util/execution.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { routes } from "@lodestar/api";
|
|
2
2
|
import { signedBlockToSignedHeader } from "@lodestar/state-transition";
|
|
3
|
-
import { isGloasDataColumnSidecar } from "@lodestar/types";
|
|
4
|
-
import { fromHex, toHex } from "@lodestar/utils";
|
|
3
|
+
import { isGloasDataColumnSidecar, ssz } from "@lodestar/types";
|
|
4
|
+
import { fromHex, toHex, toRootHex } from "@lodestar/utils";
|
|
5
5
|
import { isBlockInputBlobs, isBlockInputColumns } from "../chain/blocks/blockInput/blockInput.js";
|
|
6
6
|
import { BlockInputSource } from "../chain/blocks/blockInput/types.js";
|
|
7
7
|
import { PayloadEnvelopeInput, PayloadEnvelopeInputSource } from "../chain/blocks/payloadEnvelopeInput/index.js";
|
|
8
8
|
import { ChainEvent } from "../chain/emitter.js";
|
|
9
|
+
import { EnvelopeReconstructionError, EnvelopeReconstructionErrorCode, } from "../chain/errors/envelopeReconstructionError.js";
|
|
10
|
+
import { decodeArchivedEnvelope } from "../db/repositories/index.js";
|
|
9
11
|
import { computePreFuluKzgCommitmentsInclusionProof } from "./blobs.js";
|
|
10
12
|
import { getCellsAndProofs, getDataColumnSidecarsFromBlock, getDataColumnSidecarsFromColumnSidecar, getGloasDataColumnSidecars, } from "./dataColumns.js";
|
|
13
|
+
import { signedHeaderEnvelopeToFull } from "./headerEnvelope.js";
|
|
11
14
|
export var DataColumnEngineResult;
|
|
12
15
|
(function (DataColumnEngineResult) {
|
|
13
16
|
DataColumnEngineResult["PreFulu"] = "pre_fulu";
|
|
@@ -195,4 +198,122 @@ export async function getDataColumnSidecarsFromExecution(config, executionEngine
|
|
|
195
198
|
metrics?.dataColumns.bySource.inc({ source: BlockInputSource.engine }, previouslyMissingColumns.length - alreadyAddedColumnsCount);
|
|
196
199
|
return DataColumnEngineResult.SuccessResolved;
|
|
197
200
|
}
|
|
201
|
+
/** engine_getPayloadBodiesByHashV2: ELs MUST support at least 32 hashes per request. */
|
|
202
|
+
const MAX_BODIES_REQUEST = 32;
|
|
203
|
+
/**
|
|
204
|
+
* Stream finalized envelopes over [startSlot, endSlot) as serialized bytes, rebuilding header
|
|
205
|
+
* entries from EL bodies 32 per round-trip.
|
|
206
|
+
*
|
|
207
|
+
* Ends at the first entry that cannot be served by throwing RANGE_UNSERVABLE with that slot: the
|
|
208
|
+
* by-range spec inherits BeaconBlocksByRange v2 semantics (consecutive, MAY be short), and a hole
|
|
209
|
+
* looks like a lying peer to one that already holds the blocks. Entries are attempted regardless of
|
|
210
|
+
* age; the EL's block access list retention is the floor, not MIN_EPOCHS_FOR_BLOCK_REQUESTS.
|
|
211
|
+
*
|
|
212
|
+
* Throws ENGINE_UNAVAILABLE if the EL call fails. Either may surface after envelopes were yielded.
|
|
213
|
+
*/
|
|
214
|
+
export async function* reconstructExecutionPayloadEnvelopesByRange(db, executionEngine, logger, metrics, startSlot, endSlot) {
|
|
215
|
+
const archive = db.executionPayloadEnvelopeArchive;
|
|
216
|
+
let batch = [];
|
|
217
|
+
for await (const { key, value: bytes } of archive.binaryEntriesStream({ gte: startSlot, lt: endSlot })) {
|
|
218
|
+
batch.push({ slot: archive.decodeKey(key), ...decodeArchivedEnvelope(bytes) });
|
|
219
|
+
if (batch.length === MAX_BODIES_REQUEST) {
|
|
220
|
+
yield* reconstructBatch(executionEngine, logger, metrics, batch);
|
|
221
|
+
batch = [];
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (batch.length > 0) {
|
|
225
|
+
yield* reconstructBatch(executionEngine, logger, metrics, batch);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Rebuild a range batch, yielding what precedes the first unservable entry before throwing
|
|
230
|
+
* RANGE_UNSERVABLE for it
|
|
231
|
+
*/
|
|
232
|
+
async function* reconstructBatch(executionEngine, logger, metrics, batch) {
|
|
233
|
+
const headerEnvelopes = [];
|
|
234
|
+
for (const entry of batch) {
|
|
235
|
+
if (entry.headerEnvelope !== undefined)
|
|
236
|
+
headerEnvelopes.push(entry.headerEnvelope);
|
|
237
|
+
}
|
|
238
|
+
const rebuilt = await reconstructEnvelopesBatch(executionEngine, metrics, headerEnvelopes);
|
|
239
|
+
let rebuiltIdx = 0;
|
|
240
|
+
for (const entry of batch) {
|
|
241
|
+
if (entry.envelopeBytes !== undefined) {
|
|
242
|
+
yield { slot: entry.slot, envelopeBytes: entry.envelopeBytes };
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
const result = rebuilt[rebuiltIdx++];
|
|
246
|
+
if (isRebuildMiss(result)) {
|
|
247
|
+
// Peer-triggered, so debug: a persistent local mismatch would otherwise log on every request
|
|
248
|
+
if (result.reason === "mismatch") {
|
|
249
|
+
logger.debug("Archived envelope failed body root check against EL bodies", { slot: entry.slot }, result.error);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
logger.debug("EL cannot serve bodies for archived envelope, ending range", { slot: entry.slot });
|
|
253
|
+
}
|
|
254
|
+
throw new EnvelopeReconstructionError({ code: EnvelopeReconstructionErrorCode.RANGE_UNSERVABLE, slot: entry.slot }, `archived envelope range unservable from slot=${entry.slot}`);
|
|
255
|
+
}
|
|
256
|
+
yield { slot: entry.slot, envelopeBytes: ssz.gloas.SignedExecutionPayloadEnvelope.serialize(result) };
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Rebuild header envelopes from EL bodies, 32 per round-trip. Aligned with the input, with a
|
|
261
|
+
* {@link RebuildMiss} where the envelope could not be rebuilt; the caller decides what a miss means
|
|
262
|
+
* on its path. Throws ENGINE_UNAVAILABLE only.
|
|
263
|
+
*/
|
|
264
|
+
export async function reconstructExecutionPayloadEnvelopes(executionEngine, metrics, headerEnvelopes) {
|
|
265
|
+
const out = [];
|
|
266
|
+
for (let i = 0; i < headerEnvelopes.length; i += MAX_BODIES_REQUEST) {
|
|
267
|
+
out.push(...(await reconstructEnvelopesBatch(executionEngine, metrics, headerEnvelopes.slice(i, i + MAX_BODIES_REQUEST))));
|
|
268
|
+
}
|
|
269
|
+
return out;
|
|
270
|
+
}
|
|
271
|
+
export function isRebuildMiss(result) {
|
|
272
|
+
return "reason" in result;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* One EL round-trip. Aligned with the input; never throws per envelope, only ENGINE_UNAVAILABLE.
|
|
276
|
+
* Every serving path (by-range, by-root, REST) comes through here, so the outcome metrics are
|
|
277
|
+
* incremented once, in this function.
|
|
278
|
+
*/
|
|
279
|
+
async function reconstructEnvelopesBatch(executionEngine, metrics, headerEnvelopes) {
|
|
280
|
+
if (headerEnvelopes.length === 0)
|
|
281
|
+
return [];
|
|
282
|
+
const hashes = headerEnvelopes.map((headerEnvelope) => toRootHex(headerEnvelope.message.payloadHeader.blockHash));
|
|
283
|
+
let bodies;
|
|
284
|
+
try {
|
|
285
|
+
bodies = await executionEngine.getPayloadBodiesByHashV2(hashes);
|
|
286
|
+
}
|
|
287
|
+
catch (e) {
|
|
288
|
+
metrics?.payloadEnvelopeReconstruction.engineErrors.inc();
|
|
289
|
+
throw new EnvelopeReconstructionError({ code: EnvelopeReconstructionErrorCode.ENGINE_UNAVAILABLE }, `engine_getPayloadBodiesByHashV2 failed: ${e.message}`);
|
|
290
|
+
}
|
|
291
|
+
return headerEnvelopes.map((headerEnvelope, i) => {
|
|
292
|
+
const slot = headerEnvelope.message.payloadHeader.slotNumber;
|
|
293
|
+
const body = bodies[i];
|
|
294
|
+
// A zero-length block access list cannot be valid, RLP encodes an empty list as 0xc0
|
|
295
|
+
if (body == null || body.withdrawals == null || body.blockAccessList == null || body.blockAccessList.length === 0) {
|
|
296
|
+
metrics?.payloadEnvelopeReconstruction.envelopes.inc({ result: "unavailable" });
|
|
297
|
+
return { slot, reason: "unavailable" };
|
|
298
|
+
}
|
|
299
|
+
try {
|
|
300
|
+
const envelope = signedHeaderEnvelopeToFull(headerEnvelope, {
|
|
301
|
+
transactions: body.transactions,
|
|
302
|
+
withdrawals: body.withdrawals,
|
|
303
|
+
blockAccessList: body.blockAccessList,
|
|
304
|
+
});
|
|
305
|
+
metrics?.payloadEnvelopeReconstruction.envelopes.inc({ result: "ok" });
|
|
306
|
+
return envelope;
|
|
307
|
+
}
|
|
308
|
+
catch (e) {
|
|
309
|
+
if (e instanceof EnvelopeReconstructionError &&
|
|
310
|
+
e.type.code === EnvelopeReconstructionErrorCode.BODY_ROOT_MISMATCH) {
|
|
311
|
+
metrics?.payloadEnvelopeReconstruction.envelopes.inc({ result: "mismatch" });
|
|
312
|
+
metrics?.payloadEnvelopeReconstruction.mismatchByField.inc({ field: e.type.field });
|
|
313
|
+
return { slot, reason: "mismatch", error: e };
|
|
314
|
+
}
|
|
315
|
+
throw e;
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
}
|
|
198
319
|
//# sourceMappingURL=execution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/util/execution.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/util/execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BlockAccessList, ExecutionPayloadEnvelope, ExecutionPayloadHeaderEnvelope, SignedExecutionPayloadEnvelope, SignedExecutionPayloadHeaderEnvelope, Transactions, Withdrawals } from "@lodestar/types/gloas";
|
|
2
|
+
/** The parts of an execution payload the EL serves back via engine_getPayloadBodiesByHashV2 */
|
|
3
|
+
export type ExecutionPayloadBodies = {
|
|
4
|
+
transactions: Transactions;
|
|
5
|
+
withdrawals: Withdrawals;
|
|
6
|
+
blockAccessList: BlockAccessList;
|
|
7
|
+
};
|
|
8
|
+
export type ExecutionPayloadBodyField = keyof ExecutionPayloadBodies;
|
|
9
|
+
/** Replace the three body lists by their roots; hashes to the same root as the full envelope */
|
|
10
|
+
export declare function toHeaderEnvelope(envelope: ExecutionPayloadEnvelope): ExecutionPayloadHeaderEnvelope;
|
|
11
|
+
export declare function toSignedHeaderEnvelope(envelope: SignedExecutionPayloadEnvelope): SignedExecutionPayloadHeaderEnvelope;
|
|
12
|
+
/**
|
|
13
|
+
* Rebuild the full signed envelope from header envelope + EL bodies, each body verified against its stored
|
|
14
|
+
* root. Throws {@link EnvelopeReconstructionError} BODY_ROOT_MISMATCH naming the first body that differs.
|
|
15
|
+
*/
|
|
16
|
+
export declare function signedHeaderEnvelopeToFull(headerEnvelope: SignedExecutionPayloadHeaderEnvelope, bodies: ExecutionPayloadBodies): SignedExecutionPayloadEnvelope;
|
|
17
|
+
//# sourceMappingURL=headerEnvelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headerEnvelope.d.ts","sourceRoot":"","sources":["../../src/util/headerEnvelope.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,8BAA8B,EAC9B,8BAA8B,EAC9B,oCAAoC,EACpC,YAAY,EACZ,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAO/B,+FAA+F;AAC/F,MAAM,MAAM,sBAAsB,GAAG;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,MAAM,sBAAsB,CAAC;AAIrE,gGAAgG;AAChG,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,8BAA8B,CAYnG;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,8BAA8B,GAAG,oCAAoC,CAErH;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,oCAAoC,EACpD,MAAM,EAAE,sBAAsB,GAC7B,8BAA8B,CAahC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ssz } from "@lodestar/types";
|
|
2
|
+
import { toRootHex } from "@lodestar/utils";
|
|
3
|
+
import { EnvelopeReconstructionError, EnvelopeReconstructionErrorCode, } from "../chain/errors/envelopeReconstructionError.js";
|
|
4
|
+
const { transactions, withdrawals, blockAccessList } = ssz.gloas.ExecutionPayload.fields;
|
|
5
|
+
/** Replace the three body lists by their roots; hashes to the same root as the full envelope */
|
|
6
|
+
export function toHeaderEnvelope(envelope) {
|
|
7
|
+
const { payload, ...envelopeFields } = envelope;
|
|
8
|
+
const { transactions: txs, withdrawals: wds, blockAccessList: bal, ...scalars } = payload;
|
|
9
|
+
return {
|
|
10
|
+
...envelopeFields,
|
|
11
|
+
payloadHeader: {
|
|
12
|
+
...scalars,
|
|
13
|
+
transactionsRoot: transactions.hashTreeRoot(txs),
|
|
14
|
+
withdrawalsRoot: withdrawals.hashTreeRoot(wds),
|
|
15
|
+
blockAccessListRoot: blockAccessList.hashTreeRoot(bal),
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function toSignedHeaderEnvelope(envelope) {
|
|
20
|
+
return { message: toHeaderEnvelope(envelope.message), signature: envelope.signature };
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Rebuild the full signed envelope from header envelope + EL bodies, each body verified against its stored
|
|
24
|
+
* root. Throws {@link EnvelopeReconstructionError} BODY_ROOT_MISMATCH naming the first body that differs.
|
|
25
|
+
*/
|
|
26
|
+
export function signedHeaderEnvelopeToFull(headerEnvelope, bodies) {
|
|
27
|
+
const { payloadHeader, ...envelopeFields } = headerEnvelope.message;
|
|
28
|
+
const { transactionsRoot, withdrawalsRoot, blockAccessListRoot, ...scalars } = payloadHeader;
|
|
29
|
+
const slot = scalars.slotNumber;
|
|
30
|
+
assertBodyRoot("transactions", slot, transactionsRoot, transactions.hashTreeRoot(bodies.transactions));
|
|
31
|
+
assertBodyRoot("withdrawals", slot, withdrawalsRoot, withdrawals.hashTreeRoot(bodies.withdrawals));
|
|
32
|
+
assertBodyRoot("blockAccessList", slot, blockAccessListRoot, blockAccessList.hashTreeRoot(bodies.blockAccessList));
|
|
33
|
+
return {
|
|
34
|
+
message: { ...envelopeFields, payload: { ...scalars, ...bodies } },
|
|
35
|
+
signature: headerEnvelope.signature,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function assertBodyRoot(field, slot, stored, rebuilt) {
|
|
39
|
+
if (!ssz.Root.equals(stored, rebuilt)) {
|
|
40
|
+
throw new EnvelopeReconstructionError({ code: EnvelopeReconstructionErrorCode.BODY_ROOT_MISMATCH, slot, field }, `reconstructed ${field} root mismatch slot=${slot} stored=${toRootHex(stored)} rebuilt=${toRootHex(rebuilt)}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=headerEnvelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headerEnvelope.js","sourceRoot":"","sources":["../../src/util/headerEnvelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAUpC,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,gDAAgD,CAAC;AAWxD,MAAM,EAAC,YAAY,EAAE,WAAW,EAAE,eAAe,EAAC,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAEvF,gGAAgG;AAChG,MAAM,UAAU,gBAAgB,CAAC,QAAkC;IACjE,MAAM,EAAC,OAAO,EAAE,GAAG,cAAc,EAAC,GAAG,QAAQ,CAAC;IAC9C,MAAM,EAAC,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,OAAO,EAAC,GAAG,OAAO,CAAC;IACxF,OAAO;QACL,GAAG,cAAc;QACjB,aAAa,EAAE;YACb,GAAG,OAAO;YACV,gBAAgB,EAAE,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC;YAChD,eAAe,EAAE,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC;YAC9C,mBAAmB,EAAE,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC;SACvD;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAwC;IAC7E,OAAO,EAAC,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAC,CAAC;AACtF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,cAAoD,EACpD,MAA8B;IAE9B,MAAM,EAAC,aAAa,EAAE,GAAG,cAAc,EAAC,GAAG,cAAc,CAAC,OAAO,CAAC;IAClE,MAAM,EAAC,gBAAgB,EAAE,eAAe,EAAE,mBAAmB,EAAE,GAAG,OAAO,EAAC,GAAG,aAAa,CAAC;IAC3F,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;IAEhC,cAAc,CAAC,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACvG,cAAc,CAAC,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACnG,cAAc,CAAC,iBAAiB,EAAE,IAAI,EAAE,mBAAmB,EAAE,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;IAEnH,OAAO;QACL,OAAO,EAAE,EAAC,GAAG,cAAc,EAAE,OAAO,EAAE,EAAC,GAAG,OAAO,EAAE,GAAG,MAAM,EAAC,EAAC;QAC9D,SAAS,EAAE,cAAc,CAAC,SAAS;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAgC,EAAE,IAAY,EAAE,MAAkB,EAAE,OAAmB;IAC7G,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,2BAA2B,CACnC,EAAC,IAAI,EAAE,+BAA+B,CAAC,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAC,EACvE,iBAAiB,KAAK,uBAAuB,IAAI,WAAW,SAAS,CAAC,MAAM,CAAC,YAAY,SAAS,CAAC,OAAO,CAAC,EAAE,CAC9G,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/lib/util/shuffle.d.ts
CHANGED
|
@@ -3,8 +3,4 @@
|
|
|
3
3
|
* Note: Uses Math.random() as entropy source, use for non-critical stuff
|
|
4
4
|
*/
|
|
5
5
|
export declare function shuffle<T>(arr: T[]): T[];
|
|
6
|
-
/**
|
|
7
|
-
* Return one random item from array
|
|
8
|
-
*/
|
|
9
|
-
export declare function shuffleOne<T>(arr: T[]): T | undefined;
|
|
10
6
|
//# sourceMappingURL=shuffle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shuffle.d.ts","sourceRoot":"","sources":["../../src/util/shuffle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAOxC
|
|
1
|
+
{"version":3,"file":"shuffle.d.ts","sourceRoot":"","sources":["../../src/util/shuffle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAOxC"}
|
package/lib/util/shuffle.js
CHANGED
|
@@ -10,12 +10,4 @@ export function shuffle(arr) {
|
|
|
10
10
|
}
|
|
11
11
|
return _arr;
|
|
12
12
|
}
|
|
13
|
-
/**
|
|
14
|
-
* Return one random item from array
|
|
15
|
-
*/
|
|
16
|
-
export function shuffleOne(arr) {
|
|
17
|
-
if (arr.length === 0)
|
|
18
|
-
return undefined;
|
|
19
|
-
return arr[Math.floor(Math.random() * arr.length)];
|
|
20
|
-
}
|
|
21
13
|
//# sourceMappingURL=shuffle.js.map
|
package/lib/util/shuffle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shuffle.js","sourceRoot":"","sources":["../../src/util/shuffle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAI,GAAQ;IACjC,MAAM,IAAI,GAAQ,CAAC,GAAG,GAAG,CAAC,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC
|
|
1
|
+
{"version":3,"file":"shuffle.js","sourceRoot":"","sources":["../../src/util/shuffle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAI,GAAQ;IACjC,MAAM,IAAI,GAAQ,CAAC,GAAG,GAAG,CAAC,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/ChainSafe/lodestar/issues"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.49.0-
|
|
14
|
+
"version": "1.49.0-rc.0",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
"@fastify/swagger-ui": "^5.0.1",
|
|
119
119
|
"@libp2p/bootstrap": "^12.0.30",
|
|
120
120
|
"@libp2p/crypto": "^5.1.23",
|
|
121
|
-
"@libp2p/gossipsub": "^17.1.
|
|
121
|
+
"@libp2p/gossipsub": "^17.1.2",
|
|
122
122
|
"@libp2p/identify": "^4.1.13",
|
|
123
123
|
"@libp2p/interface": "^3.3.0",
|
|
124
124
|
"@libp2p/mdns": "^12.0.30",
|
|
@@ -127,17 +127,17 @@
|
|
|
127
127
|
"@libp2p/prometheus-metrics": "^5.0.28",
|
|
128
128
|
"@libp2p/tcp": "^11.0.27",
|
|
129
129
|
"@libp2p/utils": "^7.4.0",
|
|
130
|
-
"@lodestar/api": "^1.49.0-
|
|
131
|
-
"@lodestar/config": "^1.49.0-
|
|
132
|
-
"@lodestar/db": "^1.49.0-
|
|
133
|
-
"@lodestar/fork-choice": "^1.49.0-
|
|
134
|
-
"@lodestar/logger": "^1.49.0-
|
|
135
|
-
"@lodestar/params": "^1.49.0-
|
|
136
|
-
"@lodestar/reqresp": "^1.49.0-
|
|
137
|
-
"@lodestar/state-transition": "^1.49.0-
|
|
138
|
-
"@lodestar/types": "^1.49.0-
|
|
139
|
-
"@lodestar/utils": "^1.49.0-
|
|
140
|
-
"@lodestar/validator": "^1.49.0-
|
|
130
|
+
"@lodestar/api": "^1.49.0-rc.0",
|
|
131
|
+
"@lodestar/config": "^1.49.0-rc.0",
|
|
132
|
+
"@lodestar/db": "^1.49.0-rc.0",
|
|
133
|
+
"@lodestar/fork-choice": "^1.49.0-rc.0",
|
|
134
|
+
"@lodestar/logger": "^1.49.0-rc.0",
|
|
135
|
+
"@lodestar/params": "^1.49.0-rc.0",
|
|
136
|
+
"@lodestar/reqresp": "^1.49.0-rc.0",
|
|
137
|
+
"@lodestar/state-transition": "^1.49.0-rc.0",
|
|
138
|
+
"@lodestar/types": "^1.49.0-rc.0",
|
|
139
|
+
"@lodestar/utils": "^1.49.0-rc.0",
|
|
140
|
+
"@lodestar/validator": "^1.49.0-rc.0",
|
|
141
141
|
"@multiformats/multiaddr": "^13.0.1",
|
|
142
142
|
"datastore-core": "^12.0.1",
|
|
143
143
|
"datastore-level": "^13.0.1",
|
|
@@ -156,10 +156,10 @@
|
|
|
156
156
|
"xxhash-wasm": "1.0.2"
|
|
157
157
|
},
|
|
158
158
|
"devDependencies": {
|
|
159
|
-
"@chainsafe/swap-or-not-shuffle": "^1.2.1",
|
|
160
159
|
"@libp2p/interface-internal": "^3.1.12",
|
|
161
160
|
"@libp2p/logger": "^6.2.13",
|
|
162
|
-
"@lodestar/spec-test-util": "^1.49.0-
|
|
161
|
+
"@lodestar/spec-test-util": "^1.49.0-rc.0",
|
|
162
|
+
"@lodestar/test-utils": "^1.49.0-rc.0",
|
|
163
163
|
"@types/js-yaml": "^4.0.5",
|
|
164
164
|
"@types/qs": "^6.9.7",
|
|
165
165
|
"@types/tmp": "^0.2.3",
|
|
@@ -174,5 +174,5 @@
|
|
|
174
174
|
"beacon",
|
|
175
175
|
"blockchain"
|
|
176
176
|
],
|
|
177
|
-
"gitHead": "
|
|
177
|
+
"gitHead": "72d434162a8e245786d7ff64b86289a29e2a4769"
|
|
178
178
|
}
|
|
@@ -47,6 +47,8 @@ import {
|
|
|
47
47
|
BlockError,
|
|
48
48
|
BlockErrorCode,
|
|
49
49
|
BlockGossipError,
|
|
50
|
+
EnvelopeReconstructionError,
|
|
51
|
+
EnvelopeReconstructionErrorCode,
|
|
50
52
|
ExecutionPayloadEnvelopeError,
|
|
51
53
|
ExecutionPayloadEnvelopeErrorCode,
|
|
52
54
|
} from "../../../../chain/errors/index.js";
|
|
@@ -1109,9 +1111,20 @@ export function getBeaconBlockApi({
|
|
|
1109
1111
|
const blockRoot = config.getForkTypes(slot).BeaconBlock.hashTreeRoot(block.message);
|
|
1110
1112
|
const blockRootHex = toRootHex(blockRoot);
|
|
1111
1113
|
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1114
|
+
let data: Uint8Array | gloas.SignedExecutionPayloadEnvelope | null;
|
|
1115
|
+
try {
|
|
1116
|
+
data = context?.returnBytes
|
|
1117
|
+
? await chain.getSerializedExecutionPayloadEnvelope(slot, blockRootHex)
|
|
1118
|
+
: await chain.getExecutionPayloadEnvelope(slot, blockRootHex);
|
|
1119
|
+
} catch (e) {
|
|
1120
|
+
if (e instanceof EnvelopeReconstructionError) {
|
|
1121
|
+
throw new ApiError(
|
|
1122
|
+
e.type.code === EnvelopeReconstructionErrorCode.ENGINE_UNAVAILABLE ? 503 : 500,
|
|
1123
|
+
`Failed to reconstruct execution payload envelope: ${e.message}`
|
|
1124
|
+
);
|
|
1125
|
+
}
|
|
1126
|
+
throw e;
|
|
1127
|
+
}
|
|
1115
1128
|
|
|
1116
1129
|
if (!data) {
|
|
1117
1130
|
throw new ApiError(404, `Execution payload envelope not found for slot=${slot}, blockRoot=${blockRootHex}`);
|
|
@@ -39,7 +39,7 @@ export function getBeaconPoolApi({
|
|
|
39
39
|
return {
|
|
40
40
|
async getPoolAttestationsV2({slot, committeeIndex}) {
|
|
41
41
|
// Already filtered by slot
|
|
42
|
-
let attestations = chain.aggregatedAttestationPool.getAll(slot);
|
|
42
|
+
let attestations = [...chain.aggregatedAttestationPool.getAll(slot), ...chain.attestationPool.getAll(slot)];
|
|
43
43
|
const fork = chain.config.getForkName(slot ?? attestations[0]?.data.slot ?? chain.clock.currentSlot);
|
|
44
44
|
const isPostElectra = isForkPostElectra(fork);
|
|
45
45
|
|
|
@@ -48,7 +48,11 @@ export function getBeaconPoolApi({
|
|
|
48
48
|
);
|
|
49
49
|
|
|
50
50
|
if (committeeIndex !== undefined) {
|
|
51
|
-
attestations = attestations.filter((attestation) =>
|
|
51
|
+
attestations = attestations.filter((attestation) =>
|
|
52
|
+
isElectraAttestation(attestation)
|
|
53
|
+
? attestation.committeeBits.get(committeeIndex)
|
|
54
|
+
: committeeIndex === attestation.data.index
|
|
55
|
+
);
|
|
52
56
|
}
|
|
53
57
|
|
|
54
58
|
return {data: attestations, meta: {version: fork}};
|
|
@@ -16,7 +16,6 @@ import {ArchiveMode, ArchiveStoreOpts, StateArchiveStrategy} from "./interface.j
|
|
|
16
16
|
import {FrequencyStateArchiveStrategy} from "./strategies/frequencyStateArchiveStrategy.js";
|
|
17
17
|
import {archiveBlocks} from "./utils/archiveBlocks.js";
|
|
18
18
|
import {pruneHistory} from "./utils/pruneHistory.js";
|
|
19
|
-
import {updateBackfillRange} from "./utils/updateBackfillRange.js";
|
|
20
19
|
|
|
21
20
|
type ArchiveStoreModules = {
|
|
22
21
|
chain: IBeaconChain;
|
|
@@ -37,7 +36,6 @@ export enum ArchiveStoreTask {
|
|
|
37
36
|
OnFinalizedCheckpoint = "on_finalized_checkpoint",
|
|
38
37
|
MaybeArchiveState = "maybe_archive_state",
|
|
39
38
|
ForkchoicePrune = "forkchoice_prune",
|
|
40
|
-
UpdateBackfillRange = "update_backfill_range",
|
|
41
39
|
}
|
|
42
40
|
|
|
43
41
|
/**
|
|
@@ -105,7 +103,7 @@ export class ArchiveStore {
|
|
|
105
103
|
if (this.opts.pruneHistory) {
|
|
106
104
|
// prune ALL stale data before starting
|
|
107
105
|
this.logger.info("Pruning historical data");
|
|
108
|
-
await callFnWhenAwait(
|
|
106
|
+
const blockCutoffSlot = await callFnWhenAwait(
|
|
109
107
|
pruneHistory(
|
|
110
108
|
this.chain.config,
|
|
111
109
|
this.db,
|
|
@@ -118,6 +116,7 @@ export class ArchiveStore {
|
|
|
118
116
|
30_000,
|
|
119
117
|
this.signal
|
|
120
118
|
);
|
|
119
|
+
this.chain.earliestAvailableSlot = Math.max(this.chain.earliestAvailableSlot, blockCutoffSlot);
|
|
121
120
|
}
|
|
122
121
|
|
|
123
122
|
if (this.opts.serveHistoricalState) {
|
|
@@ -230,13 +229,14 @@ export class ArchiveStore {
|
|
|
230
229
|
isNodeSynced,
|
|
231
230
|
this.archiveDataEpochs,
|
|
232
231
|
this.chain.opts.persistOrphanedBlocks,
|
|
233
|
-
this.chain.opts.persistOrphanedBlocksDir
|
|
232
|
+
this.chain.opts.persistOrphanedBlocksDir,
|
|
233
|
+
this.chain.opts.dedupePayloads
|
|
234
234
|
);
|
|
235
235
|
timer?.({source: ArchiveStoreTask.ArchiveBlocks});
|
|
236
236
|
|
|
237
237
|
if (this.opts.pruneHistory) {
|
|
238
238
|
timer = this.metrics?.processFinalizedCheckpoint.durationByTask.startTimer();
|
|
239
|
-
await pruneHistory(
|
|
239
|
+
const blockCutoffSlot = await pruneHistory(
|
|
240
240
|
this.chain.config,
|
|
241
241
|
this.db,
|
|
242
242
|
this.logger,
|
|
@@ -244,6 +244,7 @@ export class ArchiveStore {
|
|
|
244
244
|
finalizedEpoch,
|
|
245
245
|
this.chain.clock.currentEpoch
|
|
246
246
|
);
|
|
247
|
+
this.chain.earliestAvailableSlot = Math.max(this.chain.earliestAvailableSlot, blockCutoffSlot);
|
|
247
248
|
timer?.({source: ArchiveStoreTask.PruneHistory});
|
|
248
249
|
}
|
|
249
250
|
|
|
@@ -261,10 +262,6 @@ export class ArchiveStore {
|
|
|
261
262
|
const prunedBlocks = this.chain.forkChoice.prune(finalized.rootHex);
|
|
262
263
|
timer?.({source: ArchiveStoreTask.ForkchoicePrune});
|
|
263
264
|
|
|
264
|
-
timer = this.metrics?.processFinalizedCheckpoint.durationByTask.startTimer();
|
|
265
|
-
await updateBackfillRange({chain: this.chain, db: this.db, logger: this.logger}, finalized);
|
|
266
|
-
timer?.({source: ArchiveStoreTask.UpdateBackfillRange});
|
|
267
|
-
|
|
268
265
|
this.logger.verbose("Finish processing finalized checkpoint", {
|
|
269
266
|
epoch: finalizedEpoch,
|
|
270
267
|
rootHex: finalized.rootHex,
|
|
@@ -6,7 +6,6 @@ import {
|
|
|
6
6
|
ProcessOperationsStep,
|
|
7
7
|
ProposerRewardType,
|
|
8
8
|
StateCloneSource,
|
|
9
|
-
StateHashTreeRootSource,
|
|
10
9
|
} from "@lodestar/state-transition";
|
|
11
10
|
import {Gauge, Histogram} from "@lodestar/utils";
|
|
12
11
|
import {RegistryMetricCreator} from "../../../metrics/index.js";
|
|
@@ -92,12 +91,6 @@ export function createHistoricalStateTransitionMetrics(
|
|
|
92
91
|
help: "Time to call commit after process a single block in seconds",
|
|
93
92
|
buckets: [0.005, 0.01, 0.02, 0.05, 0.1, 1],
|
|
94
93
|
}),
|
|
95
|
-
stateHashTreeRootTime: metricsRegister.histogram<{source: StateHashTreeRootSource}>({
|
|
96
|
-
name: "lodestar_historical_state_stfn_hash_tree_root_seconds",
|
|
97
|
-
help: "Time to compute the hash tree root of a post state in seconds",
|
|
98
|
-
buckets: [0.05, 0.1, 0.2, 0.5, 1, 1.5],
|
|
99
|
-
labelNames: ["source"],
|
|
100
|
-
}),
|
|
101
94
|
numEffectiveBalanceUpdates: metricsRegister.gauge({
|
|
102
95
|
name: "lodestar_historical_state_stfn_num_effective_balance_updates_count",
|
|
103
96
|
help: "Count of effective balance updates in epoch transition",
|
|
@@ -163,6 +156,11 @@ export function createHistoricalStateTransitionMetrics(
|
|
|
163
156
|
name: "lodestar_historical_state_stfn_attestations_per_block_total",
|
|
164
157
|
help: "Count of attestations per block",
|
|
165
158
|
}),
|
|
159
|
+
progressiveBalancesMismatches: metricsRegister.counter<{target: "current" | "previous"}>({
|
|
160
|
+
name: "lodestar_historical_state_stfn_progressive_balances_mismatches_total",
|
|
161
|
+
help: "Total count of progressive balance cache mismatches by target balance",
|
|
162
|
+
labelNames: ["target"],
|
|
163
|
+
}),
|
|
166
164
|
proposerRewards: metricsRegister.gauge<{type: ProposerRewardType}>({
|
|
167
165
|
name: "lodestar_historical_state_stfn_proposer_rewards_total",
|
|
168
166
|
help: "Proposer reward by type per block",
|