@aztec/archiver 0.0.1-commit.d431d1c → 0.0.1-commit.d6f2b3f94
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/dest/archiver.d.ts +6 -5
- package/dest/archiver.d.ts.map +1 -1
- package/dest/archiver.js +34 -22
- package/dest/errors.d.ts +6 -1
- package/dest/errors.d.ts.map +1 -1
- package/dest/errors.js +8 -0
- package/dest/factory.d.ts +5 -2
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +11 -8
- package/dest/l1/bin/retrieve-calldata.js +17 -18
- package/dest/l1/data_retrieval.d.ts +1 -1
- package/dest/l1/data_retrieval.d.ts.map +1 -1
- package/dest/l1/data_retrieval.js +3 -3
- package/dest/l1/validate_trace.d.ts +6 -3
- package/dest/l1/validate_trace.d.ts.map +1 -1
- package/dest/l1/validate_trace.js +13 -9
- package/dest/modules/data_source_base.d.ts +17 -18
- package/dest/modules/data_source_base.d.ts.map +1 -1
- package/dest/modules/data_source_base.js +21 -52
- package/dest/modules/data_store_updater.d.ts +23 -19
- package/dest/modules/data_store_updater.d.ts.map +1 -1
- package/dest/modules/data_store_updater.js +47 -49
- package/dest/modules/instrumentation.d.ts +3 -3
- package/dest/modules/instrumentation.d.ts.map +1 -1
- package/dest/modules/instrumentation.js +17 -10
- package/dest/modules/l1_synchronizer.d.ts +1 -1
- package/dest/modules/l1_synchronizer.d.ts.map +1 -1
- package/dest/modules/l1_synchronizer.js +9 -10
- package/dest/store/block_store.d.ts +35 -21
- package/dest/store/block_store.d.ts.map +1 -1
- package/dest/store/block_store.js +81 -40
- package/dest/store/contract_class_store.d.ts +1 -1
- package/dest/store/contract_class_store.d.ts.map +1 -1
- package/dest/store/contract_class_store.js +11 -7
- package/dest/store/kv_archiver_store.d.ts +28 -24
- package/dest/store/kv_archiver_store.d.ts.map +1 -1
- package/dest/store/kv_archiver_store.js +20 -17
- package/dest/store/log_store.d.ts +4 -4
- package/dest/store/log_store.d.ts.map +1 -1
- package/dest/store/log_store.js +57 -37
- package/dest/test/fake_l1_state.d.ts +4 -4
- package/dest/test/fake_l1_state.d.ts.map +1 -1
- package/dest/test/index.js +3 -1
- package/dest/test/mock_archiver.js +1 -1
- package/dest/test/mock_l2_block_source.d.ts +20 -20
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +40 -41
- package/dest/test/mock_structs.d.ts +3 -2
- package/dest/test/mock_structs.d.ts.map +1 -1
- package/dest/test/mock_structs.js +11 -9
- package/dest/test/noop_l1_archiver.d.ts +23 -0
- package/dest/test/noop_l1_archiver.d.ts.map +1 -0
- package/dest/test/noop_l1_archiver.js +68 -0
- package/package.json +14 -13
- package/src/archiver.ts +46 -28
- package/src/errors.ts +12 -0
- package/src/factory.ts +23 -13
- package/src/l1/bin/retrieve-calldata.ts +16 -17
- package/src/l1/data_retrieval.ts +4 -4
- package/src/l1/validate_trace.ts +24 -6
- package/src/modules/data_source_base.ts +26 -77
- package/src/modules/data_store_updater.ts +59 -55
- package/src/modules/instrumentation.ts +17 -12
- package/src/modules/l1_synchronizer.ts +11 -12
- package/src/store/block_store.ts +107 -60
- package/src/store/contract_class_store.ts +11 -7
- package/src/store/kv_archiver_store.ts +36 -28
- package/src/store/log_store.ts +105 -43
- package/src/test/fake_l1_state.ts +2 -2
- package/src/test/index.ts +3 -0
- package/src/test/mock_archiver.ts +1 -1
- package/src/test/mock_l2_block_source.ts +54 -64
- package/src/test/mock_structs.ts +26 -10
- package/src/test/noop_l1_archiver.ts +109 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
2
|
import { callTraceSchema } from './debug_tx.js';
|
|
3
3
|
import { traceTransactionResponseSchema } from './trace_tx.js';
|
|
4
|
-
const logger = createLogger('aztec:archiver:validate_trace');
|
|
5
4
|
/**
|
|
6
5
|
* Helper function to test a trace method with validation
|
|
7
6
|
*
|
|
@@ -10,8 +9,9 @@ const logger = createLogger('aztec:archiver:validate_trace');
|
|
|
10
9
|
* @param schema - Zod schema to validate the response
|
|
11
10
|
* @param method - Name of the RPC method ('debug_traceTransaction' or 'trace_transaction')
|
|
12
11
|
* @param blockType - Type of block being tested ('recent' or 'old')
|
|
12
|
+
* @param logger - Logger instance
|
|
13
13
|
* @returns true if the method works and validation passes, false otherwise
|
|
14
|
-
*/ async function testTraceMethod(client, txHash, schema, method, blockType) {
|
|
14
|
+
*/ async function testTraceMethod(client, txHash, schema, method, blockType, logger) {
|
|
15
15
|
try {
|
|
16
16
|
// Make request with appropriate params based on method name
|
|
17
17
|
const result = await client.request(method === 'debug_traceTransaction' ? {
|
|
@@ -40,8 +40,10 @@ const logger = createLogger('aztec:archiver:validate_trace');
|
|
|
40
40
|
* Validates the availability of debug/trace methods on the Ethereum client.
|
|
41
41
|
*
|
|
42
42
|
* @param client - The Viem public debug client
|
|
43
|
+
* @param bindings - Optional logger bindings for context
|
|
43
44
|
* @returns Object indicating which trace methods are available for recent and old blocks
|
|
44
|
-
*/ export async function validateTraceAvailability(client) {
|
|
45
|
+
*/ export async function validateTraceAvailability(client, bindings) {
|
|
46
|
+
const logger = createLogger('archiver:validate_trace', bindings);
|
|
45
47
|
const result = {
|
|
46
48
|
debugTraceRecent: false,
|
|
47
49
|
traceTransactionRecent: false,
|
|
@@ -68,9 +70,9 @@ const logger = createLogger('aztec:archiver:validate_trace');
|
|
|
68
70
|
// Get a transaction from the found block
|
|
69
71
|
const recentTxHash = latestBlock.transactions[0];
|
|
70
72
|
// Test debug_traceTransaction with recent block
|
|
71
|
-
result.debugTraceRecent = await testTraceMethod(client, recentTxHash, callTraceSchema, 'debug_traceTransaction', 'recent');
|
|
73
|
+
result.debugTraceRecent = await testTraceMethod(client, recentTxHash, callTraceSchema, 'debug_traceTransaction', 'recent', logger);
|
|
72
74
|
// Test trace_transaction with recent block
|
|
73
|
-
result.traceTransactionRecent = await testTraceMethod(client, recentTxHash, traceTransactionResponseSchema, 'trace_transaction', 'recent');
|
|
75
|
+
result.traceTransactionRecent = await testTraceMethod(client, recentTxHash, traceTransactionResponseSchema, 'trace_transaction', 'recent', logger);
|
|
74
76
|
// Get a block from 512 blocks ago
|
|
75
77
|
const oldBlockNumber = latestBlock.number ? latestBlock.number - 512n : null;
|
|
76
78
|
if (!oldBlockNumber || oldBlockNumber < 0n) {
|
|
@@ -94,9 +96,9 @@ const logger = createLogger('aztec:archiver:validate_trace');
|
|
|
94
96
|
}
|
|
95
97
|
const oldTxHash = oldBlock.transactions[0];
|
|
96
98
|
// Test debug_traceTransaction with old block
|
|
97
|
-
result.debugTraceOld = await testTraceMethod(client, oldTxHash, callTraceSchema, 'debug_traceTransaction', 'old');
|
|
99
|
+
result.debugTraceOld = await testTraceMethod(client, oldTxHash, callTraceSchema, 'debug_traceTransaction', 'old', logger);
|
|
98
100
|
// Test trace_transaction with old block
|
|
99
|
-
result.traceTransactionOld = await testTraceMethod(client, oldTxHash, traceTransactionResponseSchema, 'trace_transaction', 'old');
|
|
101
|
+
result.traceTransactionOld = await testTraceMethod(client, oldTxHash, traceTransactionResponseSchema, 'trace_transaction', 'old', logger);
|
|
100
102
|
} catch (error) {
|
|
101
103
|
logger.warn(`Error validating debug_traceTransaction and trace_transaction availability: ${error}`);
|
|
102
104
|
}
|
|
@@ -111,10 +113,12 @@ function hasTxs(block) {
|
|
|
111
113
|
*
|
|
112
114
|
* @param client - The Viem public debug client
|
|
113
115
|
* @param ethereumAllowNoDebugHosts - If false, throws an error when no trace methods are available
|
|
116
|
+
* @param bindings - Optional logger bindings for context
|
|
114
117
|
* @throws Error if ethereumAllowNoDebugHosts is false and no trace methods are available
|
|
115
|
-
*/ export async function validateAndLogTraceAvailability(client, ethereumAllowNoDebugHosts) {
|
|
118
|
+
*/ export async function validateAndLogTraceAvailability(client, ethereumAllowNoDebugHosts, bindings) {
|
|
119
|
+
const logger = createLogger('archiver:validate_trace', bindings);
|
|
116
120
|
logger.debug('Validating trace/debug method availability...');
|
|
117
|
-
const availability = await validateTraceAvailability(client);
|
|
121
|
+
const availability = await validateTraceAvailability(client, bindings);
|
|
118
122
|
// Check if we have support for old blocks (either debug or trace)
|
|
119
123
|
const hasOldBlockSupport = availability.debugTraceOld || availability.traceTransactionOld;
|
|
120
124
|
if (hasOldBlockSupport) {
|
|
@@ -3,7 +3,7 @@ import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
3
3
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
4
|
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
5
5
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
|
-
import { CheckpointedL2Block,
|
|
6
|
+
import { type BlockHash, CheckpointedL2Block, L2Block, type L2Tips } from '@aztec/stdlib/block';
|
|
7
7
|
import { Checkpoint, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
8
8
|
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
9
9
|
import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
@@ -45,18 +45,18 @@ export declare abstract class ArchiverDataSourceBase implements ArchiverDataSour
|
|
|
45
45
|
getProvenBlockNumber(): Promise<BlockNumber>;
|
|
46
46
|
getBlockHeader(number: BlockNumber | 'latest'): Promise<BlockHeader | undefined>;
|
|
47
47
|
getCheckpointedBlock(number: BlockNumber): Promise<CheckpointedL2Block | undefined>;
|
|
48
|
-
|
|
48
|
+
getCheckpointedL2BlockNumber(): Promise<BlockNumber>;
|
|
49
|
+
getFinalizedL2BlockNumber(): Promise<BlockNumber>;
|
|
49
50
|
getCheckpointHeader(number: CheckpointNumber | 'latest'): Promise<CheckpointHeader | undefined>;
|
|
50
51
|
getLastBlockNumberInCheckpoint(checkpointNumber: CheckpointNumber): Promise<BlockNumber | undefined>;
|
|
51
|
-
getCheckpointedBlocks(from: BlockNumber, limit: number
|
|
52
|
-
getBlockHeaderByHash(blockHash:
|
|
52
|
+
getCheckpointedBlocks(from: BlockNumber, limit: number): Promise<CheckpointedL2Block[]>;
|
|
53
|
+
getBlockHeaderByHash(blockHash: BlockHash): Promise<BlockHeader | undefined>;
|
|
53
54
|
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
|
|
54
|
-
|
|
55
|
+
getL2Block(number: BlockNumber): Promise<L2Block | undefined>;
|
|
55
56
|
getTxEffect(txHash: TxHash): Promise<IndexedTxEffect | undefined>;
|
|
56
57
|
getSettledTxReceipt(txHash: TxHash): Promise<TxReceipt | undefined>;
|
|
57
58
|
isPendingChainInvalid(): Promise<boolean>;
|
|
58
59
|
getPendingChainValidationStatus(): Promise<ValidateCheckpointResult>;
|
|
59
|
-
getL2BlocksNew(from: BlockNumber, limit: number, proven?: boolean): Promise<L2BlockNew[]>;
|
|
60
60
|
getPrivateLogsByTags(tags: SiloedTag[], page?: number): Promise<TxScopedL2Log[][]>;
|
|
61
61
|
getPublicLogsByTagsFromContract(contractAddress: AztecAddress, tags: Tag[], page?: number): Promise<TxScopedL2Log[][]>;
|
|
62
62
|
getPublicLogs(filter: LogFilter): Promise<GetPublicLogsResponse>;
|
|
@@ -69,17 +69,16 @@ export declare abstract class ArchiverDataSourceBase implements ArchiverDataSour
|
|
|
69
69
|
registerContractFunctionSignatures(signatures: string[]): Promise<void>;
|
|
70
70
|
getL1ToL2Messages(checkpointNumber: CheckpointNumber): Promise<Fr[]>;
|
|
71
71
|
getL1ToL2MessageIndex(l1ToL2Message: Fr): Promise<bigint | undefined>;
|
|
72
|
-
|
|
73
|
-
getBlocksForSlot(slotNumber: SlotNumber): Promise<
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
getCheckpoints(checkpointNumber: CheckpointNumber, limit: number): Promise<PublishedCheckpoint[]>;
|
|
73
|
+
getBlocksForSlot(slotNumber: SlotNumber): Promise<L2Block[]>;
|
|
74
|
+
getCheckpointedBlocksForEpoch(epochNumber: EpochNumber): Promise<CheckpointedL2Block[]>;
|
|
75
|
+
getCheckpointedBlockHeadersForEpoch(epochNumber: EpochNumber): Promise<BlockHeader[]>;
|
|
76
76
|
getCheckpointsForEpoch(epochNumber: EpochNumber): Promise<Checkpoint[]>;
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
getL2BlockNewByArchive(archive: Fr): Promise<L2BlockNew | undefined>;
|
|
77
|
+
getBlock(number: BlockNumber): Promise<L2Block | undefined>;
|
|
78
|
+
getBlocks(from: BlockNumber, limit: number): Promise<L2Block[]>;
|
|
79
|
+
getCheckpointedBlockByHash(blockHash: BlockHash): Promise<CheckpointedL2Block | undefined>;
|
|
80
|
+
getCheckpointedBlockByArchive(archive: Fr): Promise<CheckpointedL2Block | undefined>;
|
|
81
|
+
getL2BlockByHash(blockHash: BlockHash): Promise<L2Block | undefined>;
|
|
82
|
+
getL2BlockByArchive(archive: Fr): Promise<L2Block | undefined>;
|
|
84
83
|
}
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9zb3VyY2VfYmFzZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZXMvZGF0YV9zb3VyY2VfYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEtBQUssV0FBVyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkgsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFaEUsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsS0FBSyxTQUFTLEVBQUUsbUJBQW1CLEVBQXdCLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RILE9BQU8sRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ILE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUF3QixNQUFNLDZCQUE2QixDQUFDO0FBQzNGLE9BQU8sS0FBSyxFQUFFLDRCQUE0QixFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0csT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkYsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_source_base.d.ts","sourceRoot":"","sources":["../../src/modules/data_source_base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAwB,
|
|
1
|
+
{"version":3,"file":"data_source_base.d.ts","sourceRoot":"","sources":["../../src/modules/data_source_base.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import { isDefined } from '@aztec/foundation/types';
|
|
3
|
-
import {
|
|
3
|
+
import { CommitteeAttestation } from '@aztec/stdlib/block';
|
|
4
4
|
import { Checkpoint, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
5
5
|
import { getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
6
6
|
/**
|
|
@@ -40,9 +40,12 @@ import { getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
|
40
40
|
getCheckpointedBlock(number) {
|
|
41
41
|
return this.store.getCheckpointedBlock(number);
|
|
42
42
|
}
|
|
43
|
-
|
|
43
|
+
getCheckpointedL2BlockNumber() {
|
|
44
44
|
return this.store.getCheckpointedL2BlockNumber();
|
|
45
45
|
}
|
|
46
|
+
getFinalizedL2BlockNumber() {
|
|
47
|
+
return this.store.getFinalizedL2BlockNumber();
|
|
48
|
+
}
|
|
46
49
|
async getCheckpointHeader(number) {
|
|
47
50
|
if (number === 'latest') {
|
|
48
51
|
number = await this.store.getSynchedCheckpointNumber();
|
|
@@ -63,13 +66,8 @@ import { getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
|
63
66
|
}
|
|
64
67
|
return BlockNumber(checkpointData.startBlock + checkpointData.numBlocks - 1);
|
|
65
68
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (proven === true) {
|
|
69
|
-
const provenBlockNumber = await this.store.getProvenBlockNumber();
|
|
70
|
-
return blocks.filter((b)=>b.block.number <= provenBlockNumber);
|
|
71
|
-
}
|
|
72
|
-
return blocks;
|
|
69
|
+
getCheckpointedBlocks(from, limit) {
|
|
70
|
+
return this.store.getCheckpointedBlocks(from, limit);
|
|
73
71
|
}
|
|
74
72
|
getBlockHeaderByHash(blockHash) {
|
|
75
73
|
return this.store.getBlockHeaderByHash(blockHash);
|
|
@@ -77,7 +75,7 @@ import { getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
|
77
75
|
getBlockHeaderByArchive(archive) {
|
|
78
76
|
return this.store.getBlockHeaderByArchive(archive);
|
|
79
77
|
}
|
|
80
|
-
async
|
|
78
|
+
async getL2Block(number) {
|
|
81
79
|
// If the number provided is -ve, then return the latest block.
|
|
82
80
|
if (number < 0) {
|
|
83
81
|
number = await this.store.getLatestBlockNumber();
|
|
@@ -102,14 +100,6 @@ import { getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
|
102
100
|
valid: true
|
|
103
101
|
};
|
|
104
102
|
}
|
|
105
|
-
async getL2BlocksNew(from, limit, proven) {
|
|
106
|
-
const blocks = await this.store.getBlocks(from, limit);
|
|
107
|
-
if (proven === true) {
|
|
108
|
-
const provenBlockNumber = await this.store.getProvenBlockNumber();
|
|
109
|
-
return blocks.filter((b)=>b.number <= provenBlockNumber);
|
|
110
|
-
}
|
|
111
|
-
return blocks;
|
|
112
|
-
}
|
|
113
103
|
getPrivateLogsByTags(tags, page) {
|
|
114
104
|
return this.store.getPrivateLogsByTags(tags, page);
|
|
115
105
|
}
|
|
@@ -154,7 +144,7 @@ import { getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
|
154
144
|
getL1ToL2MessageIndex(l1ToL2Message) {
|
|
155
145
|
return this.store.getL1ToL2MessageIndex(l1ToL2Message);
|
|
156
146
|
}
|
|
157
|
-
async
|
|
147
|
+
async getCheckpoints(checkpointNumber, limit) {
|
|
158
148
|
const checkpoints = await this.store.getRangeOfCheckpoints(checkpointNumber, limit);
|
|
159
149
|
const blocks = (await Promise.all(checkpoints.map((ch)=>this.store.getBlocksForCheckpoint(ch.checkpointNumber)))).filter(isDefined);
|
|
160
150
|
const fullCheckpoints = [];
|
|
@@ -170,7 +160,7 @@ import { getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
|
170
160
|
getBlocksForSlot(slotNumber) {
|
|
171
161
|
return this.store.getBlocksForSlot(slotNumber);
|
|
172
162
|
}
|
|
173
|
-
async
|
|
163
|
+
async getCheckpointedBlocksForEpoch(epochNumber) {
|
|
174
164
|
if (!this.l1Constants) {
|
|
175
165
|
throw new Error('L1 constants not set');
|
|
176
166
|
}
|
|
@@ -185,9 +175,9 @@ import { getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
|
185
175
|
// push the blocks on backwards
|
|
186
176
|
const endBlock = checkpoint.startBlock + checkpoint.numBlocks - 1;
|
|
187
177
|
for(let i = endBlock; i >= checkpoint.startBlock; i--){
|
|
188
|
-
const
|
|
189
|
-
if (
|
|
190
|
-
blocks.push(
|
|
178
|
+
const checkpointedBlock = await this.getCheckpointedBlock(BlockNumber(i));
|
|
179
|
+
if (checkpointedBlock) {
|
|
180
|
+
blocks.push(checkpointedBlock);
|
|
191
181
|
}
|
|
192
182
|
}
|
|
193
183
|
}
|
|
@@ -195,7 +185,7 @@ import { getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
|
195
185
|
}
|
|
196
186
|
return blocks.reverse();
|
|
197
187
|
}
|
|
198
|
-
async
|
|
188
|
+
async getCheckpointedBlockHeadersForEpoch(epochNumber) {
|
|
199
189
|
if (!this.l1Constants) {
|
|
200
190
|
throw new Error('L1 constants not set');
|
|
201
191
|
}
|
|
@@ -233,29 +223,13 @@ import { getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
|
233
223
|
while(checkpointData && slot(checkpointData) >= start){
|
|
234
224
|
if (slot(checkpointData) <= end) {
|
|
235
225
|
// push the checkpoints on backwards
|
|
236
|
-
const [checkpoint] = await this.
|
|
226
|
+
const [checkpoint] = await this.getCheckpoints(checkpointData.checkpointNumber, 1);
|
|
237
227
|
checkpoints.push(checkpoint.checkpoint);
|
|
238
228
|
}
|
|
239
229
|
checkpointData = await this.store.getCheckpointData(CheckpointNumber(checkpointData.checkpointNumber - 1));
|
|
240
230
|
}
|
|
241
231
|
return checkpoints.reverse();
|
|
242
232
|
}
|
|
243
|
-
async getPublishedBlocks(from, limit, proven) {
|
|
244
|
-
const checkpoints = await this.store.getRangeOfCheckpoints(CheckpointNumber(from), limit);
|
|
245
|
-
const provenCheckpointNumber = await this.store.getProvenCheckpointNumber();
|
|
246
|
-
const blocks = (await Promise.all(checkpoints.map((ch)=>this.store.getBlocksForCheckpoint(ch.checkpointNumber)))).filter(isDefined);
|
|
247
|
-
const publishedBlocks = [];
|
|
248
|
-
for(let i = 0; i < checkpoints.length; i++){
|
|
249
|
-
const blockForCheckpoint = blocks[i][0];
|
|
250
|
-
const checkpoint = checkpoints[i];
|
|
251
|
-
if (checkpoint.checkpointNumber > provenCheckpointNumber && proven === true) {
|
|
252
|
-
continue;
|
|
253
|
-
}
|
|
254
|
-
const publishedBlock = new CheckpointedL2Block(checkpoint.checkpointNumber, blockForCheckpoint, checkpoint.l1, checkpoint.attestations.map((x)=>CommitteeAttestation.fromBuffer(x)));
|
|
255
|
-
publishedBlocks.push(publishedBlock);
|
|
256
|
-
}
|
|
257
|
-
return publishedBlocks;
|
|
258
|
-
}
|
|
259
233
|
async getBlock(number) {
|
|
260
234
|
// If the number provided is -ve, then return the latest block.
|
|
261
235
|
if (number < 0) {
|
|
@@ -266,25 +240,20 @@ import { getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
|
266
240
|
}
|
|
267
241
|
return this.store.getBlock(number);
|
|
268
242
|
}
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
if (proven === true) {
|
|
272
|
-
const provenBlockNumber = await this.store.getProvenBlockNumber();
|
|
273
|
-
return blocks.filter((b)=>b.number <= provenBlockNumber);
|
|
274
|
-
}
|
|
275
|
-
return blocks;
|
|
243
|
+
getBlocks(from, limit) {
|
|
244
|
+
return this.store.getBlocks(from, limit);
|
|
276
245
|
}
|
|
277
|
-
|
|
246
|
+
getCheckpointedBlockByHash(blockHash) {
|
|
278
247
|
return this.store.getCheckpointedBlockByHash(blockHash);
|
|
279
248
|
}
|
|
280
|
-
|
|
249
|
+
getCheckpointedBlockByArchive(archive) {
|
|
281
250
|
return this.store.getCheckpointedBlockByArchive(archive);
|
|
282
251
|
}
|
|
283
|
-
async
|
|
252
|
+
async getL2BlockByHash(blockHash) {
|
|
284
253
|
const checkpointedBlock = await this.store.getCheckpointedBlockByHash(blockHash);
|
|
285
254
|
return checkpointedBlock?.block;
|
|
286
255
|
}
|
|
287
|
-
async
|
|
256
|
+
async getL2BlockByArchive(archive) {
|
|
288
257
|
const checkpointedBlock = await this.store.getCheckpointedBlockByArchive(archive);
|
|
289
258
|
return checkpointedBlock?.block;
|
|
290
259
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { BlockNumber,
|
|
2
|
-
import type {
|
|
1
|
+
import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import type { L2Block, ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
3
3
|
import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
4
4
|
import type { KVArchiverDataStore } from '../store/kv_archiver_store.js';
|
|
5
5
|
/** Result of adding checkpoints with information about any pruned blocks. */
|
|
6
6
|
type ReconcileCheckpointsResult = {
|
|
7
7
|
/** Blocks that were pruned due to conflict with L1 checkpoints. */
|
|
8
|
-
prunedBlocks:
|
|
8
|
+
prunedBlocks: L2Block[] | undefined;
|
|
9
9
|
/** Last block number that was already inserted locally, or undefined if none. */
|
|
10
10
|
lastAlreadyInsertedBlockNumber: BlockNumber | undefined;
|
|
11
11
|
};
|
|
@@ -15,18 +15,19 @@ export declare class ArchiverDataStoreUpdater {
|
|
|
15
15
|
private readonly log;
|
|
16
16
|
constructor(store: KVArchiverDataStore);
|
|
17
17
|
/**
|
|
18
|
-
* Adds blocks to the store with contract class/instance extraction from logs.
|
|
18
|
+
* Adds proposed blocks to the store with contract class/instance extraction from logs.
|
|
19
|
+
* These are uncheckpointed blocks that have been proposed by the sequencer but not yet included in a checkpoint on L1.
|
|
19
20
|
* Extracts ContractClassPublished, ContractInstancePublished, ContractInstanceUpdated events,
|
|
20
21
|
* and individually broadcasted functions from the block logs.
|
|
21
22
|
*
|
|
22
|
-
* @param blocks - The L2 blocks to add.
|
|
23
|
+
* @param blocks - The proposed L2 blocks to add.
|
|
23
24
|
* @param pendingChainValidationStatus - Optional validation status to set.
|
|
24
25
|
* @returns True if the operation is successful.
|
|
25
26
|
*/
|
|
26
|
-
|
|
27
|
+
addProposedBlocks(blocks: L2Block[], pendingChainValidationStatus?: ValidateCheckpointResult): Promise<boolean>;
|
|
27
28
|
/**
|
|
28
29
|
* Reconciles local blocks with incoming checkpoints from L1.
|
|
29
|
-
* Adds checkpoints to the store with contract class/instance extraction from logs.
|
|
30
|
+
* Adds new checkpoints to the store with contract class/instance extraction from logs.
|
|
30
31
|
* Prunes any local blocks that conflict with checkpoint data (by comparing archive roots).
|
|
31
32
|
* Extracts ContractClassPublished, ContractInstancePublished, ContractInstanceUpdated events,
|
|
32
33
|
* and individually broadcasted functions from the checkpoint block logs.
|
|
@@ -35,35 +36,38 @@ export declare class ArchiverDataStoreUpdater {
|
|
|
35
36
|
* @param pendingChainValidationStatus - Optional validation status to set.
|
|
36
37
|
* @returns Result with information about any pruned blocks.
|
|
37
38
|
*/
|
|
38
|
-
|
|
39
|
+
addCheckpoints(checkpoints: PublishedCheckpoint[], pendingChainValidationStatus?: ValidateCheckpointResult): Promise<ReconcileCheckpointsResult>;
|
|
39
40
|
private pruneMismatchingLocalBlocks;
|
|
40
41
|
/**
|
|
41
|
-
* Removes all blocks strictly after the specified block number and cleans up associated contract data.
|
|
42
|
+
* Removes all uncheckpointed blocks strictly after the specified block number and cleans up associated contract data.
|
|
42
43
|
* This handles removal of provisionally added blocks along with their contract classes/instances.
|
|
44
|
+
* Verifies that each block being removed is not part of a stored checkpoint.
|
|
43
45
|
*
|
|
44
46
|
* @param blockNumber - Remove all blocks with number greater than this.
|
|
45
47
|
* @returns The removed blocks.
|
|
48
|
+
* @throws Error if any block to be removed is checkpointed.
|
|
46
49
|
*/
|
|
47
|
-
|
|
50
|
+
removeUncheckpointedBlocksAfter(blockNumber: BlockNumber): Promise<L2Block[]>;
|
|
51
|
+
private removeBlocksAfter;
|
|
48
52
|
/**
|
|
49
|
-
*
|
|
53
|
+
* Removes all checkpoints after the given checkpoint number.
|
|
50
54
|
* Deletes ContractClassPublished, ContractInstancePublished, ContractInstanceUpdated data
|
|
51
|
-
* that was stored for the
|
|
55
|
+
* that was stored for the removed checkpoints. Also removes ALL blocks (both checkpointed
|
|
56
|
+
* and uncheckpointed) after the last block of the given checkpoint.
|
|
52
57
|
*
|
|
53
|
-
* @param
|
|
54
|
-
* @param checkpointsToUnwind - The number of checkpoints to unwind.
|
|
58
|
+
* @param checkpointNumber - Remove all checkpoints strictly after this one.
|
|
55
59
|
* @returns True if the operation is successful.
|
|
56
60
|
*/
|
|
57
|
-
|
|
61
|
+
removeCheckpointsAfter(checkpointNumber: CheckpointNumber): Promise<boolean>;
|
|
58
62
|
/** Extracts and stores contract data from a single block. */
|
|
59
|
-
private
|
|
63
|
+
private addContractDataToDb;
|
|
60
64
|
/** Removes contract data associated with a block. */
|
|
61
|
-
private
|
|
62
|
-
private
|
|
65
|
+
private removeContractDataFromDb;
|
|
66
|
+
private updateContractDataOnDb;
|
|
63
67
|
private updatePublishedContractClasses;
|
|
64
68
|
private updateDeployedContractInstances;
|
|
65
69
|
private updateUpdatedContractInstances;
|
|
66
70
|
private storeBroadcastedIndividualFunctions;
|
|
67
71
|
}
|
|
68
72
|
export {};
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9zdG9yZV91cGRhdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlcy9kYXRhX3N0b3JlX3VwZGF0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBWWhGLE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdFLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFhcEUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQVF6RSw2RUFBNkU7QUFDN0UsS0FBSywwQkFBMEIsR0FBRztJQUNoQyxtRUFBbUU7SUFDbkUsWUFBWSxFQUFFLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQztJQUNwQyxpRkFBaUY7SUFDakYsOEJBQThCLEVBQUUsV0FBVyxHQUFHLFNBQVMsQ0FBQztDQUN6RCxDQUFDO0FBRUYsa0VBQWtFO0FBQ2xFLHFCQUFhLHdCQUF3QjtJQUd2QixPQUFPLENBQUMsS0FBSztJQUZ6QixPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBMEM7SUFFOUQsWUFBb0IsS0FBSyxFQUFFLG1CQUFtQixFQUFJO0lBRWxEOzs7Ozs7Ozs7T0FTRztJQUNJLGlCQUFpQixDQUN0QixNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQ2pCLDRCQUE0QixDQUFDLEVBQUUsd0JBQXdCLEdBQ3RELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FlbEI7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksY0FBYyxDQUNuQixXQUFXLEVBQUUsbUJBQW1CLEVBQUUsRUFDbEMsNEJBQTRCLENBQUMsRUFBRSx3QkFBd0IsR0FDdEQsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBdUJyQztZQVFhLDJCQUEyQjtJQW1FekM7Ozs7Ozs7O09BUUc7SUFDSSwrQkFBK0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQVluRjtZQU1hLGlCQUFpQjtJQWEvQjs7Ozs7Ozs7T0FRRztJQUNVLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FZeEY7SUFFRCw2REFBNkQ7SUFDN0QsT0FBTyxDQUFDLG1CQUFtQjtJQUkzQixxREFBcUQ7SUFDckQsT0FBTyxDQUFDLHdCQUF3QjtZQUtsQixzQkFBc0I7WUFvQnRCLDhCQUE4QjtZQTRCOUIsK0JBQStCO1lBeUIvQiw4QkFBOEI7WUE2QjlCLG1DQUFtQztDQXdEbEQifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_store_updater.d.ts","sourceRoot":"","sources":["../../src/modules/data_store_updater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"data_store_updater.d.ts","sourceRoot":"","sources":["../../src/modules/data_store_updater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAYhF,OAAO,KAAK,EAAE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAapE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAQzE,6EAA6E;AAC7E,KAAK,0BAA0B,GAAG;IAChC,mEAAmE;IACnE,YAAY,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IACpC,iFAAiF;IACjF,8BAA8B,EAAE,WAAW,GAAG,SAAS,CAAC;CACzD,CAAC;AAEF,kEAAkE;AAClE,qBAAa,wBAAwB;IAGvB,OAAO,CAAC,KAAK;IAFzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA0C;IAE9D,YAAoB,KAAK,EAAE,mBAAmB,EAAI;IAElD;;;;;;;;;OASG;IACI,iBAAiB,CACtB,MAAM,EAAE,OAAO,EAAE,EACjB,4BAA4B,CAAC,EAAE,wBAAwB,GACtD,OAAO,CAAC,OAAO,CAAC,CAelB;IAED;;;;;;;;;;OAUG;IACI,cAAc,CACnB,WAAW,EAAE,mBAAmB,EAAE,EAClC,4BAA4B,CAAC,EAAE,wBAAwB,GACtD,OAAO,CAAC,0BAA0B,CAAC,CAuBrC;YAQa,2BAA2B;IAmEzC;;;;;;;;OAQG;IACI,+BAA+B,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAYnF;YAMa,iBAAiB;IAa/B;;;;;;;;OAQG;IACU,sBAAsB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAYxF;IAED,6DAA6D;IAC7D,OAAO,CAAC,mBAAmB;IAI3B,qDAAqD;IACrD,OAAO,CAAC,wBAAwB;YAKlB,sBAAsB;YAoBtB,8BAA8B;YA4B9B,+BAA+B;YAyB/B,8BAA8B;YA6B9B,mCAAmC;CAwDlD"}
|
|
@@ -18,30 +18,31 @@ import groupBy from 'lodash.groupby';
|
|
|
18
18
|
this.log = createLogger('archiver:store_updater');
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* Adds blocks to the store with contract class/instance extraction from logs.
|
|
21
|
+
* Adds proposed blocks to the store with contract class/instance extraction from logs.
|
|
22
|
+
* These are uncheckpointed blocks that have been proposed by the sequencer but not yet included in a checkpoint on L1.
|
|
22
23
|
* Extracts ContractClassPublished, ContractInstancePublished, ContractInstanceUpdated events,
|
|
23
24
|
* and individually broadcasted functions from the block logs.
|
|
24
25
|
*
|
|
25
|
-
* @param blocks - The L2 blocks to add.
|
|
26
|
+
* @param blocks - The proposed L2 blocks to add.
|
|
26
27
|
* @param pendingChainValidationStatus - Optional validation status to set.
|
|
27
28
|
* @returns True if the operation is successful.
|
|
28
|
-
*/
|
|
29
|
+
*/ addProposedBlocks(blocks, pendingChainValidationStatus) {
|
|
29
30
|
return this.store.transactionAsync(async ()=>{
|
|
30
|
-
await this.store.
|
|
31
|
+
await this.store.addProposedBlocks(blocks);
|
|
31
32
|
const opResults = await Promise.all([
|
|
32
33
|
// Update the pending chain validation status if provided
|
|
33
34
|
pendingChainValidationStatus && this.store.setPendingChainValidationStatus(pendingChainValidationStatus),
|
|
34
35
|
// Add any logs emitted during the retrieved blocks
|
|
35
36
|
this.store.addLogs(blocks),
|
|
36
37
|
// Unroll all logs emitted during the retrieved blocks and extract any contract classes and instances from them
|
|
37
|
-
...blocks.map((block)=>this.
|
|
38
|
+
...blocks.map((block)=>this.addContractDataToDb(block))
|
|
38
39
|
]);
|
|
39
40
|
return opResults.every(Boolean);
|
|
40
41
|
});
|
|
41
42
|
}
|
|
42
43
|
/**
|
|
43
44
|
* Reconciles local blocks with incoming checkpoints from L1.
|
|
44
|
-
* Adds checkpoints to the store with contract class/instance extraction from logs.
|
|
45
|
+
* Adds new checkpoints to the store with contract class/instance extraction from logs.
|
|
45
46
|
* Prunes any local blocks that conflict with checkpoint data (by comparing archive roots).
|
|
46
47
|
* Extracts ContractClassPublished, ContractInstancePublished, ContractInstanceUpdated events,
|
|
47
48
|
* and individually broadcasted functions from the checkpoint block logs.
|
|
@@ -49,12 +50,12 @@ import groupBy from 'lodash.groupby';
|
|
|
49
50
|
* @param checkpoints - The published checkpoints to add.
|
|
50
51
|
* @param pendingChainValidationStatus - Optional validation status to set.
|
|
51
52
|
* @returns Result with information about any pruned blocks.
|
|
52
|
-
*/
|
|
53
|
+
*/ addCheckpoints(checkpoints, pendingChainValidationStatus) {
|
|
53
54
|
return this.store.transactionAsync(async ()=>{
|
|
54
55
|
// Before adding checkpoints, check for conflicts with local blocks if any
|
|
55
56
|
const { prunedBlocks, lastAlreadyInsertedBlockNumber } = await this.pruneMismatchingLocalBlocks(checkpoints);
|
|
56
57
|
await this.store.addCheckpoints(checkpoints);
|
|
57
|
-
// Filter out blocks that were already inserted via
|
|
58
|
+
// Filter out blocks that were already inserted via addProposedBlocks() to avoid duplicating logs/contract data
|
|
58
59
|
const newBlocks = checkpoints.flatMap((ch)=>ch.checkpoint.blocks).filter((b)=>lastAlreadyInsertedBlockNumber === undefined || b.number > lastAlreadyInsertedBlockNumber);
|
|
59
60
|
await Promise.all([
|
|
60
61
|
// Update the pending chain validation status if provided
|
|
@@ -62,7 +63,7 @@ import groupBy from 'lodash.groupby';
|
|
|
62
63
|
// Add any logs emitted during the retrieved blocks
|
|
63
64
|
this.store.addLogs(newBlocks),
|
|
64
65
|
// Unroll all logs emitted during the retrieved blocks and extract any contract classes and instances from them
|
|
65
|
-
...newBlocks.map((block)=>this.
|
|
66
|
+
...newBlocks.map((block)=>this.addContractDataToDb(block))
|
|
66
67
|
]);
|
|
67
68
|
return {
|
|
68
69
|
prunedBlocks,
|
|
@@ -139,67 +140,64 @@ import groupBy from 'lodash.groupby';
|
|
|
139
140
|
};
|
|
140
141
|
}
|
|
141
142
|
/**
|
|
142
|
-
* Removes all blocks strictly after the specified block number and cleans up associated contract data.
|
|
143
|
+
* Removes all uncheckpointed blocks strictly after the specified block number and cleans up associated contract data.
|
|
143
144
|
* This handles removal of provisionally added blocks along with their contract classes/instances.
|
|
145
|
+
* Verifies that each block being removed is not part of a stored checkpoint.
|
|
144
146
|
*
|
|
145
147
|
* @param blockNumber - Remove all blocks with number greater than this.
|
|
146
148
|
* @returns The removed blocks.
|
|
147
|
-
|
|
149
|
+
* @throws Error if any block to be removed is checkpointed.
|
|
150
|
+
*/ removeUncheckpointedBlocksAfter(blockNumber) {
|
|
148
151
|
return this.store.transactionAsync(async ()=>{
|
|
149
|
-
//
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
]);
|
|
156
|
-
return removedBlocks;
|
|
152
|
+
// Verify we're only removing uncheckpointed blocks
|
|
153
|
+
const lastCheckpointedBlockNumber = await this.store.getCheckpointedL2BlockNumber();
|
|
154
|
+
if (blockNumber < lastCheckpointedBlockNumber) {
|
|
155
|
+
throw new Error(`Cannot remove blocks after ${blockNumber} because checkpointed blocks exist up to ${lastCheckpointedBlockNumber}`);
|
|
156
|
+
}
|
|
157
|
+
return await this.removeBlocksAfter(blockNumber);
|
|
157
158
|
});
|
|
158
159
|
}
|
|
159
160
|
/**
|
|
160
|
-
*
|
|
161
|
+
* Removes all blocks strictly after the given block number along with any logs and contract data.
|
|
162
|
+
* Does not remove their checkpoints.
|
|
163
|
+
*/ async removeBlocksAfter(blockNumber) {
|
|
164
|
+
// First get the blocks to be removed so we can clean up contract data
|
|
165
|
+
const removedBlocks = await this.store.removeBlocksAfter(blockNumber);
|
|
166
|
+
// Clean up contract data and logs for the removed blocks
|
|
167
|
+
await Promise.all([
|
|
168
|
+
this.store.deleteLogs(removedBlocks),
|
|
169
|
+
...removedBlocks.map((block)=>this.removeContractDataFromDb(block))
|
|
170
|
+
]);
|
|
171
|
+
return removedBlocks;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Removes all checkpoints after the given checkpoint number.
|
|
161
175
|
* Deletes ContractClassPublished, ContractInstancePublished, ContractInstanceUpdated data
|
|
162
|
-
* that was stored for the
|
|
176
|
+
* that was stored for the removed checkpoints. Also removes ALL blocks (both checkpointed
|
|
177
|
+
* and uncheckpointed) after the last block of the given checkpoint.
|
|
163
178
|
*
|
|
164
|
-
* @param
|
|
165
|
-
* @param checkpointsToUnwind - The number of checkpoints to unwind.
|
|
179
|
+
* @param checkpointNumber - Remove all checkpoints strictly after this one.
|
|
166
180
|
* @returns True if the operation is successful.
|
|
167
|
-
*/ async
|
|
168
|
-
|
|
169
|
-
throw new Error(`Cannot unwind ${checkpointsToUnwind} blocks`);
|
|
170
|
-
}
|
|
171
|
-
const last = await this.store.getSynchedCheckpointNumber();
|
|
172
|
-
if (from != last) {
|
|
173
|
-
throw new Error(`Cannot unwind checkpoints from checkpoint ${from} when the last checkpoint is ${last}`);
|
|
174
|
-
}
|
|
175
|
-
const blocks = [];
|
|
176
|
-
const lastCheckpointNumber = from + checkpointsToUnwind - 1;
|
|
177
|
-
for(let checkpointNumber = from; checkpointNumber <= lastCheckpointNumber; checkpointNumber++){
|
|
178
|
-
const blocksForCheckpoint = await this.store.getBlocksForCheckpoint(checkpointNumber);
|
|
179
|
-
if (!blocksForCheckpoint) {
|
|
180
|
-
continue;
|
|
181
|
-
}
|
|
182
|
-
blocks.push(...blocksForCheckpoint);
|
|
183
|
-
}
|
|
181
|
+
*/ async removeCheckpointsAfter(checkpointNumber) {
|
|
182
|
+
const { blocksRemoved = [] } = await this.store.removeCheckpointsAfter(checkpointNumber);
|
|
184
183
|
const opResults = await Promise.all([
|
|
185
184
|
// Prune rolls back to the last proven block, which is by definition valid
|
|
186
185
|
this.store.setPendingChainValidationStatus({
|
|
187
186
|
valid: true
|
|
188
187
|
}),
|
|
189
|
-
// Remove contract data for all blocks being
|
|
190
|
-
...
|
|
191
|
-
this.store.deleteLogs(
|
|
192
|
-
this.store.unwindCheckpoints(from, checkpointsToUnwind)
|
|
188
|
+
// Remove contract data for all blocks being removed
|
|
189
|
+
...blocksRemoved.map((block)=>this.removeContractDataFromDb(block)),
|
|
190
|
+
this.store.deleteLogs(blocksRemoved)
|
|
193
191
|
]);
|
|
194
192
|
return opResults.every(Boolean);
|
|
195
193
|
}
|
|
196
|
-
/** Extracts and stores contract data from a single block. */
|
|
197
|
-
return this.
|
|
194
|
+
/** Extracts and stores contract data from a single block. */ addContractDataToDb(block) {
|
|
195
|
+
return this.updateContractDataOnDb(block, 0);
|
|
198
196
|
}
|
|
199
|
-
/** Removes contract data associated with a block. */
|
|
200
|
-
return this.
|
|
197
|
+
/** Removes contract data associated with a block. */ removeContractDataFromDb(block) {
|
|
198
|
+
return this.updateContractDataOnDb(block, 1);
|
|
201
199
|
}
|
|
202
|
-
/** Adds or remove contract data associated with a block. */ async
|
|
200
|
+
/** Adds or remove contract data associated with a block. */ async updateContractDataOnDb(block, operation) {
|
|
203
201
|
const contractClassLogs = block.body.txEffects.flatMap((txEffect)=>txEffect.contractClassLogs);
|
|
204
202
|
const privateLogs = block.body.txEffects.flatMap((txEffect)=>txEffect.privateLogs);
|
|
205
203
|
const publicLogs = block.body.txEffects.flatMap((txEffect)=>txEffect.publicLogs);
|