@lodestar/beacon-node 1.50.0-dev.d99080f29a → 1.50.0-dev.e8dec5f2fe
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/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/index.js +13 -0
- package/lib/api/impl/beacon/index.js.map +1 -1
- package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/state/index.js +23 -3
- package/lib/api/impl/beacon/state/index.js.map +1 -1
- package/lib/api/impl/debug/index.d.ts.map +1 -1
- package/lib/api/impl/debug/index.js +26 -18
- package/lib/api/impl/debug/index.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts +1 -0
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js +23 -1
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.d.ts +5 -0
- package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
- package/lib/chain/archiveStore/archiveStore.js +14 -24
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +2 -2
- package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
- package/lib/chain/archiveStore/historicalState/getHistoricalState.js +5 -7
- package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -1
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/types.d.ts +2 -2
- package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -1
- package/lib/chain/archiveStore/historicalState/worker.js +1 -1
- package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
- package/lib/chain/archiveStore/interface.d.ts +1 -1
- package/lib/chain/archiveStore/interface.d.ts.map +1 -1
- package/lib/chain/archiveStore/utils/pruneHistory.d.ts +1 -1
- package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +1 -1
- package/lib/chain/archiveStore/utils/pruneHistory.js +2 -1
- package/lib/chain/archiveStore/utils/pruneHistory.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +7 -3
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +1 -1
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +2 -1
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +5 -4
- package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
- package/lib/chain/chain.d.ts +4 -1
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +42 -5
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +7 -1
- package/lib/chain/emitter.d.ts.map +1 -1
- package/lib/chain/emitter.js +5 -0
- package/lib/chain/emitter.js.map +1 -1
- package/lib/chain/forkChoice/index.d.ts.map +1 -1
- package/lib/chain/forkChoice/index.js +2 -0
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/interface.d.ts +1 -0
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts +4 -2
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +30 -8
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/proposerPreferencesPool.d.ts +4 -4
- package/lib/chain/opPools/proposerPreferencesPool.d.ts.map +1 -1
- package/lib/chain/opPools/proposerPreferencesPool.js +14 -11
- package/lib/chain/opPools/proposerPreferencesPool.js.map +1 -1
- package/lib/chain/options.d.ts +2 -1
- 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.js +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
- package/lib/chain/regen/regen.d.ts +2 -0
- package/lib/chain/regen/regen.d.ts.map +1 -1
- package/lib/chain/regen/regen.js +10 -4
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -0
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js +21 -0
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/shufflingCache.d.ts +1 -0
- package/lib/chain/shufflingCache.d.ts.map +1 -1
- package/lib/chain/shufflingCache.js +4 -0
- package/lib/chain/shufflingCache.js.map +1 -1
- package/lib/chain/validatorMonitor.d.ts +5 -1
- package/lib/chain/validatorMonitor.d.ts.map +1 -1
- package/lib/chain/validatorMonitor.js +64 -54
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/db/beacon.d.ts +2 -0
- package/lib/db/beacon.d.ts.map +1 -1
- package/lib/db/beacon.js +3 -0
- package/lib/db/beacon.js.map +1 -1
- package/lib/db/buckets.d.ts +2 -1
- package/lib/db/buckets.d.ts.map +1 -1
- package/lib/db/buckets.js +1 -0
- package/lib/db/buckets.js.map +1 -1
- package/lib/db/interface.d.ts +2 -0
- 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/earliestAvailableSlot.d.ts +11 -0
- package/lib/db/repositories/earliestAvailableSlot.d.ts.map +1 -0
- package/lib/db/repositories/earliestAvailableSlot.js +19 -0
- package/lib/db/repositories/earliestAvailableSlot.js.map +1 -0
- package/lib/execution/engine/disabled.d.ts +0 -2
- package/lib/execution/engine/disabled.d.ts.map +1 -1
- package/lib/execution/engine/disabled.js +0 -6
- package/lib/execution/engine/disabled.js.map +1 -1
- package/lib/execution/engine/http.d.ts +1 -3
- package/lib/execution/engine/http.d.ts.map +1 -1
- package/lib/execution/engine/http.js +2 -17
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +2 -4
- package/lib/execution/engine/interface.d.ts.map +1 -1
- package/lib/execution/engine/mock.d.ts +0 -2
- package/lib/execution/engine/mock.d.ts.map +1 -1
- package/lib/execution/engine/mock.js +0 -8
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/types.d.ts +0 -8
- package/lib/execution/engine/types.d.ts.map +1 -1
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +1 -0
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +4 -0
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/metrics/metrics.d.ts +7 -3
- package/lib/metrics/metrics.d.ts.map +1 -1
- package/lib/metrics/metrics.js +4 -4
- package/lib/metrics/metrics.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +59 -63
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/node/nodejs.d.ts +3 -1
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +27 -4
- package/lib/node/nodejs.js.map +1 -1
- package/lib/sync/range/batch.d.ts +6 -0
- package/lib/sync/range/batch.d.ts.map +1 -1
- package/lib/sync/range/batch.js +11 -0
- package/lib/sync/range/batch.js.map +1 -1
- package/lib/sync/range/chain.d.ts.map +1 -1
- package/lib/sync/range/chain.js +6 -1
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts +5 -2
- package/lib/sync/unknownBlock.d.ts.map +1 -1
- package/lib/sync/unknownBlock.js +44 -20
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/downloadByRange.d.ts +8 -0
- package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRange.js +32 -9
- package/lib/sync/utils/downloadByRange.js.map +1 -1
- package/package.json +17 -17
- package/src/api/impl/beacon/index.ts +15 -0
- package/src/api/impl/beacon/state/index.ts +31 -3
- package/src/api/impl/debug/index.ts +28 -19
- package/src/api/impl/validator/index.ts +24 -2
- package/src/chain/archiveStore/archiveStore.ts +19 -25
- package/src/chain/archiveStore/historicalState/getHistoricalState.ts +5 -7
- package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +1 -1
- package/src/chain/archiveStore/historicalState/types.ts +2 -2
- package/src/chain/archiveStore/historicalState/worker.ts +1 -2
- package/src/chain/archiveStore/interface.ts +1 -1
- package/src/chain/archiveStore/utils/pruneHistory.ts +4 -1
- package/src/chain/blocks/importBlock.ts +9 -3
- package/src/chain/blocks/verifyBlock.ts +1 -0
- package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -3
- package/src/chain/chain.ts +59 -4
- package/src/chain/emitter.ts +7 -1
- package/src/chain/forkChoice/index.ts +2 -0
- package/src/chain/interface.ts +1 -0
- package/src/chain/opPools/aggregatedAttestationPool.ts +34 -10
- package/src/chain/opPools/proposerPreferencesPool.ts +14 -10
- package/src/chain/options.ts +3 -3
- package/src/chain/produceBlock/computeNewStateRoot.ts +1 -1
- package/src/chain/regen/regen.ts +12 -4
- package/src/chain/seenCache/seenGossipBlockInput.ts +23 -0
- package/src/chain/shufflingCache.ts +5 -0
- package/src/chain/validatorMonitor.ts +75 -57
- package/src/db/beacon.ts +3 -0
- package/src/db/buckets.ts +1 -0
- package/src/db/interface.ts +2 -0
- package/src/db/repositories/earliestAvailableSlot.ts +19 -0
- package/src/execution/engine/disabled.ts +0 -8
- package/src/execution/engine/http.ts +1 -30
- package/src/execution/engine/interface.ts +2 -6
- package/src/execution/engine/mock.ts +1 -19
- package/src/execution/engine/types.ts +0 -10
- package/src/metrics/metrics/lodestar.ts +4 -0
- package/src/metrics/metrics.ts +21 -6
- package/src/network/processor/gossipHandlers.ts +90 -76
- package/src/node/nodejs.ts +35 -3
- package/src/sync/range/batch.ts +12 -0
- package/src/sync/range/chain.ts +7 -1
- package/src/sync/unknownBlock.ts +57 -21
- package/src/sync/utils/downloadByRange.ts +47 -8
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
deneb,
|
|
17
17
|
fulu,
|
|
18
18
|
gloas,
|
|
19
|
+
isGloasBeaconBlock,
|
|
19
20
|
isGloasDataColumnSidecar,
|
|
20
21
|
phase0,
|
|
21
22
|
} from "@lodestar/types";
|
|
@@ -62,6 +63,7 @@ export type DownloadByRangeRequests = {
|
|
|
62
63
|
export type ParentPayloadCommitments = {
|
|
63
64
|
blockRoot: Uint8Array;
|
|
64
65
|
blockRootHex: RootHex;
|
|
66
|
+
blockHash: Uint8Array;
|
|
65
67
|
kzgCommitments: deneb.BlobKzgCommitments;
|
|
66
68
|
};
|
|
67
69
|
|
|
@@ -1171,6 +1173,8 @@ export enum DownloadByRangeErrorCode {
|
|
|
1171
1173
|
|
|
1172
1174
|
/** Envelope beaconBlockRoot does not match the block's root */
|
|
1173
1175
|
INVALID_ENVELOPE_BEACON_BLOCK_ROOT = "DOWNLOAD_BY_RANGE_ERROR_INVALID_ENVELOPE_BEACON_BLOCK_ROOT",
|
|
1176
|
+
/** Envelope payload.blockHash does not match the block's bid */
|
|
1177
|
+
INVALID_ENVELOPE_BLOCK_HASH = "DOWNLOAD_BY_RANGE_ERROR_INVALID_ENVELOPE_BLOCK_HASH",
|
|
1174
1178
|
|
|
1175
1179
|
/** Block segment + envelopes failed chain-segment linearity / FULL-chain checks */
|
|
1176
1180
|
INVALID_CHAIN_SEGMENT = "DOWNLOAD_BY_RANGE_ERROR_INVALID_CHAIN_SEGMENT",
|
|
@@ -1272,6 +1276,12 @@ export type DownloadByRangeErrorType =
|
|
|
1272
1276
|
expected: string;
|
|
1273
1277
|
actual: string;
|
|
1274
1278
|
}
|
|
1279
|
+
| {
|
|
1280
|
+
code: DownloadByRangeErrorCode.INVALID_ENVELOPE_BLOCK_HASH;
|
|
1281
|
+
slot: Slot;
|
|
1282
|
+
expected: string;
|
|
1283
|
+
actual: string;
|
|
1284
|
+
}
|
|
1275
1285
|
| {
|
|
1276
1286
|
code: DownloadByRangeErrorCode.INVALID_CHAIN_SEGMENT;
|
|
1277
1287
|
slot: Slot;
|
|
@@ -1295,47 +1305,76 @@ export function validateEnvelopesByRangeResponse(
|
|
|
1295
1305
|
payloadEnvelopes: gloas.SignedExecutionPayloadEnvelope[],
|
|
1296
1306
|
parentPayloadCommitments?: ParentPayloadCommitments
|
|
1297
1307
|
): Map<Slot, gloas.SignedExecutionPayloadEnvelope> {
|
|
1298
|
-
// Build a map of slot ->
|
|
1299
|
-
const
|
|
1308
|
+
// Build a map of slot -> block root and bid block hash for all blocks in the batch
|
|
1309
|
+
const batchBlocksBySlot = new Map<Slot, {blockRoot: Uint8Array; block: SignedBeaconBlock | null}>();
|
|
1300
1310
|
if (batchBlocks) {
|
|
1301
1311
|
for (const blockInput of batchBlocks) {
|
|
1302
|
-
|
|
1312
|
+
batchBlocksBySlot.set(blockInput.slot, {
|
|
1313
|
+
blockRoot: fromHex(blockInput.blockRootHex),
|
|
1314
|
+
block: blockInput.hasBlock() ? blockInput.getBlock() : null,
|
|
1315
|
+
});
|
|
1303
1316
|
}
|
|
1304
1317
|
}
|
|
1305
1318
|
for (const {block, blockRoot} of validatedBlocks) {
|
|
1306
|
-
|
|
1319
|
+
batchBlocksBySlot.set(block.message.slot, {blockRoot, block});
|
|
1307
1320
|
}
|
|
1308
1321
|
|
|
1309
1322
|
const payloadEnvelopeMap = new Map<Slot, gloas.SignedExecutionPayloadEnvelope>();
|
|
1310
1323
|
|
|
1311
1324
|
for (const payloadEnvelope of payloadEnvelopes) {
|
|
1312
1325
|
const slot = payloadEnvelope.message.payload.slotNumber;
|
|
1313
|
-
const
|
|
1326
|
+
const batchBlock = batchBlocksBySlot.get(slot);
|
|
1314
1327
|
|
|
1315
|
-
if (
|
|
1328
|
+
if (batchBlock === undefined) {
|
|
1316
1329
|
// Keep the requested dangling-parent envelope only when its beaconBlockRoot matches
|
|
1317
1330
|
// exactly. All other unrelated envelopes are dropped.
|
|
1318
1331
|
if (
|
|
1319
1332
|
parentPayloadCommitments !== undefined &&
|
|
1320
1333
|
byteArrayEquals(payloadEnvelope.message.beaconBlockRoot, parentPayloadCommitments.blockRoot)
|
|
1321
1334
|
) {
|
|
1335
|
+
assertEnvelopeBlockHash(payloadEnvelope, parentPayloadCommitments.blockHash);
|
|
1322
1336
|
payloadEnvelopeMap.set(slot, payloadEnvelope);
|
|
1323
1337
|
}
|
|
1324
1338
|
continue;
|
|
1325
1339
|
}
|
|
1326
1340
|
|
|
1327
1341
|
// Verify beaconBlockRoot matches the block's root
|
|
1328
|
-
if (!byteArrayEquals(payloadEnvelope.message.beaconBlockRoot,
|
|
1342
|
+
if (!byteArrayEquals(payloadEnvelope.message.beaconBlockRoot, batchBlock.blockRoot)) {
|
|
1329
1343
|
throw new DownloadByRangeError({
|
|
1330
1344
|
code: DownloadByRangeErrorCode.INVALID_ENVELOPE_BEACON_BLOCK_ROOT,
|
|
1331
1345
|
slot,
|
|
1332
|
-
expected: toRootHex(
|
|
1346
|
+
expected: toRootHex(batchBlock.blockRoot),
|
|
1333
1347
|
actual: toRootHex(payloadEnvelope.message.beaconBlockRoot),
|
|
1334
1348
|
});
|
|
1335
1349
|
}
|
|
1336
1350
|
|
|
1351
|
+
if (batchBlock.block !== null && isGloasBeaconBlock(batchBlock.block.message)) {
|
|
1352
|
+
assertEnvelopeBlockHash(
|
|
1353
|
+
payloadEnvelope,
|
|
1354
|
+
batchBlock.block.message.body.signedExecutionPayloadBid.message.blockHash
|
|
1355
|
+
);
|
|
1356
|
+
}
|
|
1357
|
+
|
|
1337
1358
|
payloadEnvelopeMap.set(slot, payloadEnvelope);
|
|
1338
1359
|
}
|
|
1339
1360
|
|
|
1340
1361
|
return payloadEnvelopeMap;
|
|
1341
1362
|
}
|
|
1363
|
+
|
|
1364
|
+
/**
|
|
1365
|
+
* Rejected before it is cached. In-batch, `assertLinearChainSegment` fails on a wrong hash without evicting the
|
|
1366
|
+
* envelope. For the dangling parent, the import evicts the parent's entry and range sync cannot recreate it.
|
|
1367
|
+
*/
|
|
1368
|
+
function assertEnvelopeBlockHash(
|
|
1369
|
+
payloadEnvelope: gloas.SignedExecutionPayloadEnvelope,
|
|
1370
|
+
bidBlockHash: Uint8Array
|
|
1371
|
+
): void {
|
|
1372
|
+
if (!byteArrayEquals(payloadEnvelope.message.payload.blockHash, bidBlockHash)) {
|
|
1373
|
+
throw new DownloadByRangeError({
|
|
1374
|
+
code: DownloadByRangeErrorCode.INVALID_ENVELOPE_BLOCK_HASH,
|
|
1375
|
+
slot: payloadEnvelope.message.payload.slotNumber,
|
|
1376
|
+
expected: toRootHex(bidBlockHash),
|
|
1377
|
+
actual: toRootHex(payloadEnvelope.message.payload.blockHash),
|
|
1378
|
+
});
|
|
1379
|
+
}
|
|
1380
|
+
}
|