@aztec/archiver 0.16.0 → 0.16.2
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/dest/archiver/archiver.d.ts +3 -6
- package/dest/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +25 -46
- package/dest/archiver/archiver_store.d.ts +10 -161
- package/dest/archiver/archiver_store.d.ts.map +1 -1
- package/dest/archiver/archiver_store.js +2 -328
- package/dest/archiver/archiver_store_test_suite.d.ts +8 -0
- package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -0
- package/dest/archiver/archiver_store_test_suite.js +478 -0
- package/dest/archiver/data_retrieval.d.ts +3 -4
- package/dest/archiver/data_retrieval.d.ts.map +1 -1
- package/dest/archiver/data_retrieval.js +1 -1
- package/dest/archiver/eth_log_handlers.d.ts +3 -4
- package/dest/archiver/eth_log_handlers.d.ts.map +1 -1
- package/dest/archiver/eth_log_handlers.js +7 -6
- package/dest/archiver/index.d.ts +3 -0
- package/dest/archiver/index.d.ts.map +1 -1
- package/dest/archiver/index.js +3 -1
- package/dest/archiver/lmdb_archiver_store.d.ts +125 -0
- package/dest/archiver/lmdb_archiver_store.d.ts.map +1 -0
- package/dest/archiver/lmdb_archiver_store.js +545 -0
- package/dest/archiver/{l1_to_l2_message_store.d.ts → memory_archiver_store/l1_to_l2_message_store.d.ts} +6 -2
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts.map +1 -0
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.js +91 -0
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts +163 -0
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts.map +1 -0
- package/dest/archiver/memory_archiver_store/memory_archiver_store.js +338 -0
- package/dest/index.js +3 -4
- package/package.json +7 -6
- package/src/archiver/archiver.ts +40 -53
- package/src/archiver/archiver_store.ts +16 -373
- package/src/archiver/archiver_store_test_suite.ts +638 -0
- package/src/archiver/data_retrieval.ts +5 -6
- package/src/archiver/eth_log_handlers.ts +23 -16
- package/src/archiver/index.ts +3 -0
- package/src/archiver/lmdb_archiver_store.ts +728 -0
- package/src/archiver/{l1_to_l2_message_store.ts → memory_archiver_store/l1_to_l2_message_store.ts} +23 -3
- package/src/archiver/memory_archiver_store/memory_archiver_store.ts +399 -0
- package/src/index.ts +1 -2
- package/dest/archiver/l1_to_l2_message_store.d.ts.map +0 -1
- package/dest/archiver/l1_to_l2_message_store.js +0 -72
|
@@ -29,10 +29,6 @@ export declare class Archiver implements L2BlockSource, L2LogsSource, ContractDa
|
|
|
29
29
|
* Next L1 block number to fetch `L2BlockProcessed` logs from (i.e. `fromBlock` in eth_getLogs).
|
|
30
30
|
*/
|
|
31
31
|
private nextL2BlockFromL1Block;
|
|
32
|
-
/**
|
|
33
|
-
* Last Processed Block Number
|
|
34
|
-
*/
|
|
35
|
-
private lastProcessedL1BlockNumber;
|
|
36
32
|
/**
|
|
37
33
|
* Use this to track logged block in order to avoid repeating the same message.
|
|
38
34
|
*/
|
|
@@ -49,14 +45,15 @@ export declare class Archiver implements L2BlockSource, L2LogsSource, ContractDa
|
|
|
49
45
|
* @param store - An archiver data store for storage & retrieval of blocks, encrypted logs & contract data.
|
|
50
46
|
* @param log - A logger.
|
|
51
47
|
*/
|
|
52
|
-
constructor(publicClient: PublicClient<HttpTransport, Chain>, rollupAddress: EthAddress, inboxAddress: EthAddress, registryAddress: EthAddress, contractDeploymentEmitterAddress: EthAddress,
|
|
48
|
+
constructor(publicClient: PublicClient<HttpTransport, Chain>, rollupAddress: EthAddress, inboxAddress: EthAddress, registryAddress: EthAddress, contractDeploymentEmitterAddress: EthAddress, store: ArchiverDataStore, pollingIntervalMs?: number, log?: DebugLogger);
|
|
53
49
|
/**
|
|
54
50
|
* Creates a new instance of the Archiver and blocks until it syncs from chain.
|
|
55
51
|
* @param config - The archiver's desired configuration.
|
|
52
|
+
* @param archiverStore - The backing store for the archiver.
|
|
56
53
|
* @param blockUntilSynced - If true, blocks until the archiver has fully synced.
|
|
57
54
|
* @returns - An instance of the archiver.
|
|
58
55
|
*/
|
|
59
|
-
static createAndSync(config: ArchiverConfig, blockUntilSynced?: boolean): Promise<Archiver>;
|
|
56
|
+
static createAndSync(config: ArchiverConfig, archiverStore: ArchiverDataStore, blockUntilSynced?: boolean): Promise<Archiver>;
|
|
60
57
|
/**
|
|
61
58
|
* Starts sync process.
|
|
62
59
|
* @param blockUntilSynced - If true, blocks until the archiver has fully synced.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAuC,MAAM,oBAAoB,CAAC;AAE3F,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAqB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,9 @@ import { padArrayEnd } from '@aztec/foundation/collection';
|
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
5
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
7
|
-
import {
|
|
8
|
-
import { L2Block, LogType, } from '@aztec/types';
|
|
7
|
+
import { L2Block, } from '@aztec/types';
|
|
9
8
|
import omit from 'lodash.omit';
|
|
10
|
-
import { createPublicClient,
|
|
11
|
-
import { MemoryArchiverStore } from './archiver_store.js';
|
|
9
|
+
import { createPublicClient, http } from 'viem';
|
|
12
10
|
import { retrieveBlocks, retrieveNewCancelledL1ToL2Messages, retrieveNewContractData, retrieveNewPendingL1ToL2Messages, } from './data_retrieval.js';
|
|
13
11
|
/**
|
|
14
12
|
* Pulls L2 blocks in a non-blocking manner and provides interface for their retrieval.
|
|
@@ -28,7 +26,7 @@ export class Archiver {
|
|
|
28
26
|
* @param store - An archiver data store for storage & retrieval of blocks, encrypted logs & contract data.
|
|
29
27
|
* @param log - A logger.
|
|
30
28
|
*/
|
|
31
|
-
constructor(publicClient, rollupAddress, inboxAddress, registryAddress, contractDeploymentEmitterAddress,
|
|
29
|
+
constructor(publicClient, rollupAddress, inboxAddress, registryAddress, contractDeploymentEmitterAddress, store, pollingIntervalMs = 10000, log = createDebugLogger('aztec:archiver')) {
|
|
32
30
|
this.publicClient = publicClient;
|
|
33
31
|
this.rollupAddress = rollupAddress;
|
|
34
32
|
this.inboxAddress = inboxAddress;
|
|
@@ -41,40 +39,26 @@ export class Archiver {
|
|
|
41
39
|
* Next L1 block number to fetch `L2BlockProcessed` logs from (i.e. `fromBlock` in eth_getLogs).
|
|
42
40
|
*/
|
|
43
41
|
this.nextL2BlockFromL1Block = 0n;
|
|
44
|
-
/**
|
|
45
|
-
* Last Processed Block Number
|
|
46
|
-
*/
|
|
47
|
-
this.lastProcessedL1BlockNumber = 0n;
|
|
48
42
|
/**
|
|
49
43
|
* Use this to track logged block in order to avoid repeating the same message.
|
|
50
44
|
*/
|
|
51
45
|
this.lastLoggedL1BlockNumber = 0n;
|
|
52
|
-
this.nextL2BlockFromL1Block = BigInt(searchStartBlock);
|
|
53
|
-
this.lastProcessedL1BlockNumber = BigInt(searchStartBlock);
|
|
54
46
|
}
|
|
55
47
|
/**
|
|
56
48
|
* Creates a new instance of the Archiver and blocks until it syncs from chain.
|
|
57
49
|
* @param config - The archiver's desired configuration.
|
|
50
|
+
* @param archiverStore - The backing store for the archiver.
|
|
58
51
|
* @param blockUntilSynced - If true, blocks until the archiver has fully synced.
|
|
59
52
|
* @returns - An instance of the archiver.
|
|
60
53
|
*/
|
|
61
|
-
static async createAndSync(config, blockUntilSynced = true) {
|
|
54
|
+
static async createAndSync(config, archiverStore, blockUntilSynced = true) {
|
|
62
55
|
const chain = createEthereumChain(config.rpcUrl, config.apiKey);
|
|
63
56
|
const publicClient = createPublicClient({
|
|
64
57
|
chain: chain.chainInfo,
|
|
65
58
|
transport: http(chain.rpcUrl),
|
|
66
59
|
pollingInterval: config.viemPollingIntervalMS,
|
|
67
60
|
});
|
|
68
|
-
|
|
69
|
-
// this is the block from which archiver has to search from
|
|
70
|
-
const registryContract = getContract({
|
|
71
|
-
address: config.l1Contracts.registryAddress.toString(),
|
|
72
|
-
abi: RegistryAbi,
|
|
73
|
-
publicClient,
|
|
74
|
-
});
|
|
75
|
-
const searchStartBlock = Number((await registryContract.read.getCurrentSnapshot()).blockNumber);
|
|
76
|
-
const archiverStore = new MemoryArchiverStore(config.maxLogs ?? 1000);
|
|
77
|
-
const archiver = new Archiver(publicClient, config.l1Contracts.rollupAddress, config.l1Contracts.inboxAddress, config.l1Contracts.registryAddress, config.l1Contracts.contractDeploymentEmitterAddress, searchStartBlock, archiverStore, config.archiverPollingIntervalMS);
|
|
61
|
+
const archiver = new Archiver(publicClient, config.l1Contracts.rollupAddress, config.l1Contracts.inboxAddress, config.l1Contracts.registryAddress, config.l1Contracts.contractDeploymentEmitterAddress, archiverStore, config.archiverPollingIntervalMS);
|
|
78
62
|
await archiver.start(blockUntilSynced);
|
|
79
63
|
return archiver;
|
|
80
64
|
}
|
|
@@ -99,7 +83,12 @@ export class Archiver {
|
|
|
99
83
|
*/
|
|
100
84
|
async sync(blockUntilSynced) {
|
|
101
85
|
const currentL1BlockNumber = await this.publicClient.getBlockNumber();
|
|
102
|
-
|
|
86
|
+
// this makes the archiver more resilient to eventually-consistent eth providers like Infura
|
|
87
|
+
// it _will_ process the same L1 blocks over and over again until the L2 chain advances
|
|
88
|
+
// one thing to handle now is that we will process the same L1 to L2 messages over and over again
|
|
89
|
+
// so the store needs to account for that.
|
|
90
|
+
const lastProcessedL1BlockNumber = await this.store.getL1BlockNumber();
|
|
91
|
+
if (currentL1BlockNumber <= lastProcessedL1BlockNumber) {
|
|
103
92
|
// reducing logs, otherwise this gets triggered on every loop (1s)
|
|
104
93
|
if (currentL1BlockNumber !== this.lastLoggedL1BlockNumber) {
|
|
105
94
|
this.log(`No new blocks to process, current block number: ${currentL1BlockNumber}`);
|
|
@@ -114,14 +103,14 @@ export class Archiver {
|
|
|
114
103
|
* to ensure that data is read exactly once.
|
|
115
104
|
*
|
|
116
105
|
* The first is the problem of eventually consistent ETH service providers like Infura.
|
|
117
|
-
* We
|
|
118
|
-
*
|
|
119
|
-
*
|
|
106
|
+
* We currently read from the last L1 block that we saw emit an L2 block. This could mean
|
|
107
|
+
* that the archiver ends up looking at the same L1 block multiple times (e.g. if we last saw
|
|
108
|
+
* an L2 block emitted at L1 block 10, we'd constantly ask for L1 blocks from 11 onwards until
|
|
109
|
+
* we see another L2 block). For this to work message and block processing need to be idempotent.
|
|
110
|
+
* We should re-visit this before mainnet launch.
|
|
120
111
|
*
|
|
121
112
|
* The second is that in between the various calls to L1, the block number can move meaning some
|
|
122
113
|
* of the following calls will return data for blocks that were not present during earlier calls.
|
|
123
|
-
* This is a problem for example when setting the last block number marker for L1 to L2 messages -
|
|
124
|
-
* this.lastProcessedBlockNumber = currentBlockNumber;
|
|
125
114
|
* It's possible that we actually received messages in block currentBlockNumber + 1 meaning the next time
|
|
126
115
|
* we do this sync we get the same message again. Additionally, the call to get cancelled L1 to L2 messages
|
|
127
116
|
* could read from a block not present when retrieving pending messages. If a message was added and cancelled
|
|
@@ -134,9 +123,9 @@ export class Archiver {
|
|
|
134
123
|
*/
|
|
135
124
|
// ********** Events that are processed in between blocks **********
|
|
136
125
|
// Process l1ToL2Messages, these are consumed as time passes, not each block
|
|
137
|
-
const retrievedPendingL1ToL2Messages = await retrieveNewPendingL1ToL2Messages(this.publicClient, this.inboxAddress, blockUntilSynced,
|
|
126
|
+
const retrievedPendingL1ToL2Messages = await retrieveNewPendingL1ToL2Messages(this.publicClient, this.inboxAddress, blockUntilSynced, lastProcessedL1BlockNumber + 1n, // + 1 to prevent re-including messages from the last processed block
|
|
138
127
|
currentL1BlockNumber);
|
|
139
|
-
const retrievedCancelledL1ToL2Messages = await retrieveNewCancelledL1ToL2Messages(this.publicClient, this.inboxAddress, blockUntilSynced,
|
|
128
|
+
const retrievedCancelledL1ToL2Messages = await retrieveNewCancelledL1ToL2Messages(this.publicClient, this.inboxAddress, blockUntilSynced, lastProcessedL1BlockNumber + 1n, currentL1BlockNumber);
|
|
140
129
|
// TODO (#717): optimize this - there could be messages in confirmed that are also in pending.
|
|
141
130
|
// Or messages in pending that are also cancelled in the same block. No need to modify storage for them.
|
|
142
131
|
// Store l1 to l2 messages
|
|
@@ -145,7 +134,6 @@ export class Archiver {
|
|
|
145
134
|
// remove cancelled messages from the pending message store:
|
|
146
135
|
this.log('Removing pending l1 to l2 messages from store where messages were cancelled');
|
|
147
136
|
await this.store.cancelPendingL1ToL2Messages(retrievedCancelledL1ToL2Messages.retrievedData);
|
|
148
|
-
this.lastProcessedL1BlockNumber = currentL1BlockNumber;
|
|
149
137
|
// ********** Events that are processed per block **********
|
|
150
138
|
// Read all data from chain and then write to our stores at the end
|
|
151
139
|
const nextExpectedL2BlockNum = BigInt((await this.store.getBlockNumber()) + 1);
|
|
@@ -161,24 +149,15 @@ export class Archiver {
|
|
|
161
149
|
return;
|
|
162
150
|
}
|
|
163
151
|
this.log(`Retrieved ${retrievedBlocks.retrievedData.length} block(s) from chain`);
|
|
164
|
-
|
|
165
|
-
const encryptedLogs = retrievedBlocks.retrievedData.map(block => {
|
|
166
|
-
return block.newEncryptedLogs;
|
|
167
|
-
});
|
|
168
|
-
await this.store.addLogs(encryptedLogs, LogType.ENCRYPTED);
|
|
169
|
-
// store unencrypted logs from L2 Blocks that we have retrieved
|
|
170
|
-
const unencryptedLogs = retrievedBlocks.retrievedData.map(block => {
|
|
171
|
-
return block.newUnencryptedLogs;
|
|
172
|
-
});
|
|
173
|
-
await this.store.addLogs(unencryptedLogs, LogType.UNENCRYPTED);
|
|
152
|
+
await Promise.all(retrievedBlocks.retrievedData.map(block => this.store.addLogs(block.newEncryptedLogs, block.newUnencryptedLogs, block.number)));
|
|
174
153
|
// store contracts for which we have retrieved L2 blocks
|
|
175
154
|
const lastKnownL2BlockNum = retrievedBlocks.retrievedData[retrievedBlocks.retrievedData.length - 1].number;
|
|
176
|
-
retrievedContracts.retrievedData.
|
|
177
|
-
this.log(`Retrieved extended contract data for l2 block number: ${
|
|
155
|
+
await Promise.all(retrievedContracts.retrievedData.map(async ([contracts, l2BlockNum]) => {
|
|
156
|
+
this.log(`Retrieved extended contract data for l2 block number: ${l2BlockNum}`);
|
|
178
157
|
if (l2BlockNum <= lastKnownL2BlockNum) {
|
|
179
158
|
await this.store.addExtendedContractData(contracts, l2BlockNum);
|
|
180
159
|
}
|
|
181
|
-
});
|
|
160
|
+
}));
|
|
182
161
|
// from retrieved L2Blocks, confirm L1 to L2 messages that have been published
|
|
183
162
|
// from each l2block fetch all messageKeys in a flattened array:
|
|
184
163
|
const messageKeysToRemove = retrievedBlocks.retrievedData.map(l2block => l2block.newL1ToL2Messages).flat();
|
|
@@ -189,7 +168,7 @@ export class Archiver {
|
|
|
189
168
|
await this.store.addBlocks(retrievedBlocks.retrievedData.map(block => {
|
|
190
169
|
// Ensure we pad the L1 to L2 message array to the full size before storing.
|
|
191
170
|
block.newL1ToL2Messages = padArrayEnd(block.newL1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
192
|
-
return L2Block.fromFields(omit(block, ['newEncryptedLogs', 'newUnencryptedLogs']), block.getBlockHash());
|
|
171
|
+
return L2Block.fromFields(omit(block, ['newEncryptedLogs', 'newUnencryptedLogs']), block.getBlockHash(), block.getL1BlockNumber());
|
|
193
172
|
}));
|
|
194
173
|
// set the L1 block for the next search
|
|
195
174
|
this.nextL2BlockFromL1Block = retrievedBlocks.nextEthBlockNumber;
|
|
@@ -321,4 +300,4 @@ export class Archiver {
|
|
|
321
300
|
return this.store.getConfirmedL1ToL2Message(messageKey);
|
|
322
301
|
}
|
|
323
302
|
}
|
|
324
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl2ZXIvYXJjaGl2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixtQ0FBbUMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBUUwsT0FBTyxFQU1QLE9BQU8sR0FFUixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFzQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpHLE9BQU8sRUFBcUIsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RSxPQUFPLEVBQ0wsY0FBYyxFQUNkLGtDQUFrQyxFQUNsQyx1QkFBdUIsRUFDdkIsZ0NBQWdDLEdBQ2pDLE1BQU0scUJBQXFCLENBQUM7QUFFN0I7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBcUJuQjs7Ozs7Ozs7Ozs7T0FXRztJQUNILFlBQ21CLFlBQWdELEVBQ2hELGFBQXlCLEVBQ3pCLFlBQXdCLEVBQ3hCLGVBQTJCLEVBQzNCLGdDQUE0QyxFQUM3RCxnQkFBd0IsRUFDUCxLQUF3QixFQUN4QixvQkFBb0IsS0FBTSxFQUMxQixNQUFtQixpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQztR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
|
|
303
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl2ZXIvYXJjaGl2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixtQ0FBbUMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFRTCxPQUFPLEdBUVIsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBc0Msa0JBQWtCLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXBGLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsa0NBQWtDLEVBQ2xDLHVCQUF1QixFQUN2QixnQ0FBZ0MsR0FDakMsTUFBTSxxQkFBcUIsQ0FBQztBQUU3Qjs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFnQm5COzs7Ozs7Ozs7OztPQVdHO0lBQ0gsWUFDbUIsWUFBZ0QsRUFDaEQsYUFBeUIsRUFDekIsWUFBd0IsRUFDeEIsZUFBMkIsRUFDM0IsZ0NBQTRDLEVBQzVDLEtBQXdCLEVBQ3hCLG9CQUFvQixLQUFNLEVBQzFCLE1BQW1CLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDO1FBUHRELGlCQUFZLEdBQVosWUFBWSxDQUFvQztRQUNoRCxrQkFBYSxHQUFiLGFBQWEsQ0FBWTtRQUN6QixpQkFBWSxHQUFaLFlBQVksQ0FBWTtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBWTtRQUMzQixxQ0FBZ0Ms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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Fr } from '@aztec/circuits.js';
|
|
2
2
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
3
|
-
import { ContractData, ExtendedContractData, GetUnencryptedLogsResponse, L1ToL2Message, L2Block, L2BlockL2Logs, L2Tx, LogFilter, LogType, TxHash } from '@aztec/types';
|
|
3
|
+
import { CancelledL1ToL2Message, ContractData, ExtendedContractData, GetUnencryptedLogsResponse, L1ToL2Message, L2Block, L2BlockL2Logs, L2Tx, LogFilter, LogType, PendingL1ToL2Message, TxHash } from '@aztec/types';
|
|
4
4
|
/**
|
|
5
5
|
* Interface describing a data store to be used by the archiver to store all its relevant data
|
|
6
6
|
* (blocks, encrypted logs, aztec contract data extended contract data).
|
|
@@ -27,23 +27,24 @@ export interface ArchiverDataStore {
|
|
|
27
27
|
getL2Tx(txHash: TxHash): Promise<L2Tx | undefined>;
|
|
28
28
|
/**
|
|
29
29
|
* Append new logs to the store's list.
|
|
30
|
-
* @param
|
|
31
|
-
* @param
|
|
30
|
+
* @param encryptedLogs - The encrypted logs to be added to the store.
|
|
31
|
+
* @param unencryptedLogs - The unencrypted logs to be added to the store.
|
|
32
|
+
* @param blockNumber - The block for which to add the logs.
|
|
32
33
|
* @returns True if the operation is successful.
|
|
33
34
|
*/
|
|
34
|
-
addLogs(
|
|
35
|
+
addLogs(encryptedLogs: L2BlockL2Logs | undefined, unencryptedLogs: L2BlockL2Logs | undefined, blockNumber: number): Promise<boolean>;
|
|
35
36
|
/**
|
|
36
37
|
* Append new pending L1 to L2 messages to the store.
|
|
37
38
|
* @param messages - The L1 to L2 messages to be added to the store.
|
|
38
39
|
* @returns True if the operation is successful.
|
|
39
40
|
*/
|
|
40
|
-
addPendingL1ToL2Messages(messages:
|
|
41
|
+
addPendingL1ToL2Messages(messages: PendingL1ToL2Message[]): Promise<boolean>;
|
|
41
42
|
/**
|
|
42
43
|
* Remove pending L1 to L2 messages from the store (if they were cancelled).
|
|
43
|
-
* @param
|
|
44
|
+
* @param message - The message keys to be removed from the store.
|
|
44
45
|
* @returns True if the operation is successful.
|
|
45
46
|
*/
|
|
46
|
-
cancelPendingL1ToL2Messages(
|
|
47
|
+
cancelPendingL1ToL2Messages(message: CancelledL1ToL2Message[]): Promise<boolean>;
|
|
47
48
|
/**
|
|
48
49
|
* Messages that have been published in an L2 block are confirmed.
|
|
49
50
|
* Add them to the confirmed store, also remove them from the pending store.
|
|
@@ -115,161 +116,9 @@ export interface ArchiverDataStore {
|
|
|
115
116
|
* @returns The number of the latest L2 block processed.
|
|
116
117
|
*/
|
|
117
118
|
getBlockNumber(): Promise<number>;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Simple, in-memory implementation of an archiver data store.
|
|
121
|
-
*/
|
|
122
|
-
export declare class MemoryArchiverStore implements ArchiverDataStore {
|
|
123
|
-
/** The max number of logs that can be obtained in 1 "getUnencryptedLogs" call. */
|
|
124
|
-
readonly maxLogs: number;
|
|
125
|
-
/**
|
|
126
|
-
* An array containing all the L2 blocks that have been fetched so far.
|
|
127
|
-
*/
|
|
128
|
-
private l2BlockContexts;
|
|
129
|
-
/**
|
|
130
|
-
* An array containing all the L2 Txs in the L2 blocks that have been fetched so far.
|
|
131
|
-
*/
|
|
132
|
-
private l2Txs;
|
|
133
|
-
/**
|
|
134
|
-
* An array containing all the encrypted logs that have been fetched so far.
|
|
135
|
-
* Note: Index in the "outer" array equals to (corresponding L2 block's number - INITIAL_L2_BLOCK_NUM).
|
|
136
|
-
*/
|
|
137
|
-
private encryptedLogsPerBlock;
|
|
138
|
-
/**
|
|
139
|
-
* An array containing all the unencrypted logs that have been fetched so far.
|
|
140
|
-
* Note: Index in the "outer" array equals to (corresponding L2 block's number - INITIAL_L2_BLOCK_NUM).
|
|
141
|
-
*/
|
|
142
|
-
private unencryptedLogsPerBlock;
|
|
143
|
-
/**
|
|
144
|
-
* A sparse array containing all the extended contract data that have been fetched so far.
|
|
145
|
-
*/
|
|
146
|
-
private extendedContractDataByBlock;
|
|
147
|
-
/**
|
|
148
|
-
* A mapping of contract address to extended contract data.
|
|
149
|
-
*/
|
|
150
|
-
private extendedContractData;
|
|
151
|
-
/**
|
|
152
|
-
* Contains all the confirmed L1 to L2 messages (i.e. messages that were consumed in an L2 block)
|
|
153
|
-
* It is a map of entryKey to the corresponding L1 to L2 message and the number of times it has appeared
|
|
154
|
-
*/
|
|
155
|
-
private confirmedL1ToL2Messages;
|
|
156
|
-
/**
|
|
157
|
-
* Contains all the pending L1 to L2 messages (accounts for duplication of messages)
|
|
158
|
-
*/
|
|
159
|
-
private pendingL1ToL2Messages;
|
|
160
|
-
constructor(
|
|
161
|
-
/** The max number of logs that can be obtained in 1 "getUnencryptedLogs" call. */
|
|
162
|
-
maxLogs: number);
|
|
163
|
-
/**
|
|
164
|
-
* Append new blocks to the store's list.
|
|
165
|
-
* @param blocks - The L2 blocks to be added to the store.
|
|
166
|
-
* @returns True if the operation is successful (always in this implementation).
|
|
167
|
-
*/
|
|
168
|
-
addBlocks(blocks: L2Block[]): Promise<boolean>;
|
|
169
|
-
/**
|
|
170
|
-
* Append new logs to the store's list.
|
|
171
|
-
* @param data - The logs to be added to the store.
|
|
172
|
-
* @param logType - The type of the logs to be added to the store.
|
|
173
|
-
* @returns True if the operation is successful.
|
|
174
|
-
*/
|
|
175
|
-
addLogs(data: L2BlockL2Logs[], logType: LogType): Promise<boolean>;
|
|
176
|
-
/**
|
|
177
|
-
* Append new pending L1 to L2 messages to the store.
|
|
178
|
-
* @param messages - The L1 to L2 messages to be added to the store.
|
|
179
|
-
* @returns True if the operation is successful (always in this implementation).
|
|
180
|
-
*/
|
|
181
|
-
addPendingL1ToL2Messages(messages: L1ToL2Message[]): Promise<boolean>;
|
|
182
|
-
/**
|
|
183
|
-
* Remove pending L1 to L2 messages from the store (if they were cancelled).
|
|
184
|
-
* @param messageKeys - The message keys to be removed from the store.
|
|
185
|
-
* @returns True if the operation is successful (always in this implementation).
|
|
186
|
-
*/
|
|
187
|
-
cancelPendingL1ToL2Messages(messageKeys: Fr[]): Promise<boolean>;
|
|
188
|
-
/**
|
|
189
|
-
* Messages that have been published in an L2 block are confirmed.
|
|
190
|
-
* Add them to the confirmed store, also remove them from the pending store.
|
|
191
|
-
* @param messageKeys - The message keys to be removed from the store.
|
|
192
|
-
* @returns True if the operation is successful (always in this implementation).
|
|
193
|
-
*/
|
|
194
|
-
confirmL1ToL2Messages(messageKeys: Fr[]): Promise<boolean>;
|
|
195
|
-
/**
|
|
196
|
-
* Store new extended contract data from an L2 block to the store's list.
|
|
197
|
-
* @param data - List of contracts' data to be added.
|
|
198
|
-
* @param blockNum - Number of the L2 block the contract data was deployed in.
|
|
199
|
-
* @returns True if the operation is successful (always in this implementation).
|
|
200
|
-
*/
|
|
201
|
-
addExtendedContractData(data: ExtendedContractData[], blockNum: number): Promise<boolean>;
|
|
202
|
-
/**
|
|
203
|
-
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
204
|
-
* @param from - Number of the first block to return (inclusive).
|
|
205
|
-
* @param limit - The number of blocks to return.
|
|
206
|
-
* @returns The requested L2 blocks.
|
|
207
|
-
* @remarks When "from" is smaller than genesis block number, blocks from the beginning are returned.
|
|
208
|
-
*/
|
|
209
|
-
getBlocks(from: number, limit: number): Promise<L2Block[]>;
|
|
210
|
-
/**
|
|
211
|
-
* Gets an l2 tx.
|
|
212
|
-
* @param txHash - The txHash of the l2 tx.
|
|
213
|
-
* @returns The requested L2 tx.
|
|
214
|
-
*/
|
|
215
|
-
getL2Tx(txHash: TxHash): Promise<L2Tx | undefined>;
|
|
216
119
|
/**
|
|
217
|
-
* Gets
|
|
218
|
-
* @param limit - The number of messages to return (by default NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).
|
|
219
|
-
* @returns The requested L1 to L2 message keys.
|
|
120
|
+
* Gets the number of the latest L1 block processed.
|
|
220
121
|
*/
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* Gets the confirmed L1 to L2 message corresponding to the given message key.
|
|
224
|
-
* @param messageKey - The message key to look up.
|
|
225
|
-
* @returns The requested L1 to L2 message or throws if not found.
|
|
226
|
-
*/
|
|
227
|
-
getConfirmedL1ToL2Message(messageKey: Fr): Promise<L1ToL2Message>;
|
|
228
|
-
/**
|
|
229
|
-
* Gets up to `limit` amount of logs starting from `from`.
|
|
230
|
-
* @param from - Number of the L2 block to which corresponds the first logs to be returned.
|
|
231
|
-
* @param limit - The number of logs to return.
|
|
232
|
-
* @param logType - Specifies whether to return encrypted or unencrypted logs.
|
|
233
|
-
* @returns The requested logs.
|
|
234
|
-
*/
|
|
235
|
-
getLogs(from: number, limit: number, logType: LogType): Promise<L2BlockL2Logs[]>;
|
|
236
|
-
/**
|
|
237
|
-
* Gets unencrypted logs based on the provided filter.
|
|
238
|
-
* @param filter - The filter to apply to the logs.
|
|
239
|
-
* @returns The requested logs.
|
|
240
|
-
* @remarks Works by doing an intersection of all params in the filter.
|
|
241
|
-
*/
|
|
242
|
-
getUnencryptedLogs(filter: LogFilter): Promise<GetUnencryptedLogsResponse>;
|
|
243
|
-
/**
|
|
244
|
-
* Get the extended contract data for this contract.
|
|
245
|
-
* @param contractAddress - The contract data address.
|
|
246
|
-
* @returns The extended contract data or undefined if not found.
|
|
247
|
-
*/
|
|
248
|
-
getExtendedContractData(contractAddress: AztecAddress): Promise<ExtendedContractData | undefined>;
|
|
249
|
-
/**
|
|
250
|
-
* Lookup all contract data in an L2 block.
|
|
251
|
-
* @param blockNum - The block number to get all contract data from.
|
|
252
|
-
* @returns All extended contract data in the block (if found).
|
|
253
|
-
*/
|
|
254
|
-
getExtendedContractDataInBlock(blockNum: number): Promise<ExtendedContractData[]>;
|
|
255
|
-
/**
|
|
256
|
-
* Get basic info for an L2 contract.
|
|
257
|
-
* Contains contract address & the ethereum portal address.
|
|
258
|
-
* @param contractAddress - The contract data address.
|
|
259
|
-
* @returns ContractData with the portal address (if we didn't throw an error).
|
|
260
|
-
*/
|
|
261
|
-
getContractData(contractAddress: AztecAddress): Promise<ContractData | undefined>;
|
|
262
|
-
/**
|
|
263
|
-
* Get basic info for an all L2 contracts deployed in a block.
|
|
264
|
-
* Contains contract address & the ethereum portal address.
|
|
265
|
-
* @param l2BlockNum - Number of the L2 block where contracts were deployed.
|
|
266
|
-
* @returns ContractData with the portal address (if we didn't throw an error).
|
|
267
|
-
*/
|
|
268
|
-
getContractDataInBlock(l2BlockNum: number): Promise<ContractData[] | undefined>;
|
|
269
|
-
/**
|
|
270
|
-
* Gets the number of the latest L2 block processed.
|
|
271
|
-
* @returns The number of the latest L2 block processed.
|
|
272
|
-
*/
|
|
273
|
-
getBlockNumber(): Promise<number>;
|
|
122
|
+
getL1BlockNumber(): Promise<bigint>;
|
|
274
123
|
}
|
|
275
124
|
//# sourceMappingURL=archiver_store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver_store.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"archiver_store.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,oBAAoB,EACpB,0BAA0B,EAC1B,aAAa,EACb,OAAO,EACP,aAAa,EACb,IAAI,EACJ,SAAS,EACT,OAAO,EACP,oBAAoB,EACpB,MAAM,EACP,MAAM,cAAc,CAAC;AAEtB;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/C;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAE3D;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;IAEnD;;;;;;OAMG;IACH,OAAO,CACL,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,eAAe,EAAE,aAAa,GAAG,SAAS,EAC1C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB;;;;OAIG;IACH,wBAAwB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7E;;;;OAIG;IACH,2BAA2B,CAAC,OAAO,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjF;;;;;OAKG;IACH,qBAAqB,CAAC,WAAW,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D;;;;OAIG;IACH,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAE1D;;;;OAIG;IACH,yBAAyB,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAElE;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAEjF;;;;OAIG;IACH,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAE3E;;;;;OAKG;IACH,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1F;;;;OAIG;IACH,uBAAuB,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAC;IAElG;;;;OAIG;IACH,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAElF;;;;;OAKG;IACH,eAAe,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;IAElF;;;;;OAKG;IACH,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,CAAC;IAEhF;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAElC;;OAEG;IACH,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACrC"}
|