@aztec/archiver 0.17.0 → 0.19.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.
@@ -1,9 +1,9 @@
1
+ import { ContractData, ContractDataSource, EncodedContractFunction, ExtendedContractData, GetUnencryptedLogsResponse, L1ToL2Message, L1ToL2MessageSource, L2Block, L2BlockL2Logs, L2BlockSource, L2LogsSource, L2Tx, LogFilter, LogType, TxHash } from '@aztec/circuit-types';
1
2
  import { FunctionSelector } from '@aztec/circuits.js';
2
3
  import { AztecAddress } from '@aztec/foundation/aztec-address';
3
4
  import { EthAddress } from '@aztec/foundation/eth-address';
4
5
  import { Fr } from '@aztec/foundation/fields';
5
6
  import { DebugLogger } from '@aztec/foundation/log';
6
- import { ContractData, ContractDataSource, EncodedContractFunction, ExtendedContractData, GetUnencryptedLogsResponse, L1ToL2Message, L1ToL2MessageSource, L2Block, L2BlockL2Logs, L2BlockSource, L2LogsSource, L2Tx, LogFilter, LogType, TxHash } from '@aztec/types';
7
7
  import { Chain, HttpTransport, PublicClient } from 'viem';
8
8
  import { ArchiverDataStore } from './archiver_store.js';
9
9
  import { ArchiverConfig } from './config.js';
@@ -36,7 +36,6 @@ export declare class Archiver implements L2BlockSource, L2LogsSource, ContractDa
36
36
  * @param inboxAddress - Ethereum address of the inbox contract.
37
37
  * @param registryAddress - Ethereum address of the registry contract.
38
38
  * @param contractDeploymentEmitterAddress - Ethereum address of the contractDeploymentEmitter contract.
39
- * @param searchStartBlock - The L1 block from which to start searching for new blocks.
40
39
  * @param pollingIntervalMs - The interval for polling for L1 logs (in milliseconds).
41
40
  * @param store - An archiver data store for storage & retrieval of blocks, encrypted logs & contract data.
42
41
  * @param log - A logger.
@@ -1 +1 @@
1
- {"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAC1B,aAAa,EACb,mBAAmB,EACnB,OAAO,EACP,aAAa,EACb,aAAa,EACb,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,OAAO,EACP,MAAM,EACP,MAAM,sBAAsB,CAAC;AAC9B,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;AAIvE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAA4B,MAAM,MAAM,CAAC;AAEpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQ7C;;;;GAIG;AACH,qBAAa,QAAS,YAAW,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB;IAuBjG,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,gCAAgC;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG;IA7BtB;;OAEG;IACH,OAAO,CAAC,cAAc,CAAC,CAAiB;IAExC;;OAEG;IACH,OAAO,CAAC,uBAAuB,CAAM;IAErC;;;;;;;;;;OAUG;gBAEgB,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,EAChD,aAAa,EAAE,UAAU,EACzB,YAAY,EAAE,UAAU,EACxB,eAAe,EAAE,UAAU,EAC3B,gCAAgC,EAAE,UAAU,EAC5C,KAAK,EAAE,iBAAiB,EACxB,iBAAiB,SAAS,EAC1B,GAAG,GAAE,WAAiD;IAGzE;;;;;;OAMG;WACiB,aAAa,CAC/B,MAAM,EAAE,cAAc,EACtB,aAAa,EAAE,iBAAiB,EAChC,gBAAgB,UAAO,GACtB,OAAO,CAAC,QAAQ,CAAC;IAqBpB;;;OAGG;IACU,KAAK,CAAC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5D;;;OAGG;YACW,IAAI;IAsKlB;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIvC,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIhD;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAIjE;;;;OAIG;IACU,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAS5D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAIzD;;;;OAIG;IACH,uBAAuB,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAIjG;;;;OAIG;IACI,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAIxF;;;;;OAKG;IACI,eAAe,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAIxF;;;;;OAKG;IACI,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC;IAItF;;;;;OAKG;IACU,iBAAiB,CAC5B,eAAe,EAAE,YAAY,EAC7B,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAK/C;;;;;;OAMG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAIvF;;;;OAIG;IACH,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAI1E;;;OAGG;IACI,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAIxC;;;;OAIG;IACH,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAItD;;;;OAIG;IACH,yBAAyB,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;CAGlE"}
@@ -1,10 +1,10 @@
1
+ import { L2Block, } from '@aztec/circuit-types';
1
2
  import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/circuits.js';
2
3
  import { createEthereumChain } from '@aztec/ethereum';
3
4
  import { padArrayEnd } from '@aztec/foundation/collection';
4
5
  import { Fr } from '@aztec/foundation/fields';
5
6
  import { createDebugLogger } from '@aztec/foundation/log';
6
7
  import { RunningPromise } from '@aztec/foundation/running-promise';
7
- import { L2Block, } from '@aztec/types';
8
8
  import omit from 'lodash.omit';
9
9
  import { createPublicClient, http } from 'viem';
10
10
  import { retrieveBlocks, retrieveNewCancelledL1ToL2Messages, retrieveNewContractData, retrieveNewPendingL1ToL2Messages, } from './data_retrieval.js';
@@ -21,7 +21,6 @@ export class Archiver {
21
21
  * @param inboxAddress - Ethereum address of the inbox contract.
22
22
  * @param registryAddress - Ethereum address of the registry contract.
23
23
  * @param contractDeploymentEmitterAddress - Ethereum address of the contractDeploymentEmitter contract.
24
- * @param searchStartBlock - The L1 block from which to start searching for new blocks.
25
24
  * @param pollingIntervalMs - The interval for polling for L1 logs (in milliseconds).
26
25
  * @param store - An archiver data store for storage & retrieval of blocks, encrypted logs & contract data.
27
26
  * @param log - A logger.
@@ -78,18 +77,25 @@ export class Archiver {
78
77
  * @param blockUntilSynced - If true, blocks until the archiver has fully synced.
79
78
  */
80
79
  async sync(blockUntilSynced) {
80
+ /**
81
+ * We keep track of three "pointers" to L1 blocks:
82
+ * 1. the last L1 block that published an L2 block
83
+ * 2. the last L1 block that added L1 to L2 messages
84
+ * 3. the last L1 block that cancelled L1 to L2 messages
85
+ *
86
+ * We do this to deal with L1 data providers that are eventually consistent (e.g. Infura).
87
+ * We guard against seeing block X with no data at one point, and later, the provider processes the block and it has data.
88
+ * The archiver will stay back, until there's data on L1 that will move the pointers forward.
89
+ *
90
+ * This code does not handle reorgs.
91
+ */
92
+ const lastL1Blocks = await this.store.getL1BlockNumber();
81
93
  const currentL1BlockNumber = await this.publicClient.getBlockNumber();
82
- // this makes the archiver more resilient to eventually-consistent eth providers like Infura
83
- // it _will_ process the same L1 blocks over and over again until the L2 chain advances
84
- // one thing to handle now is that we will process the same L1 to L2 messages over and over again
85
- // so the store needs to account for that.
86
- const lastProcessedL1BlockNumber = await this.store.getL1BlockNumber();
87
- if (currentL1BlockNumber <= lastProcessedL1BlockNumber) {
88
- // reducing logs, otherwise this gets triggered on every loop (1s)
89
- if (currentL1BlockNumber !== this.lastLoggedL1BlockNumber) {
90
- this.log(`No new blocks to process, current block number: ${currentL1BlockNumber}`);
91
- this.lastLoggedL1BlockNumber = currentL1BlockNumber;
92
- }
94
+ if (currentL1BlockNumber <= lastL1Blocks.addedBlock &&
95
+ currentL1BlockNumber <= lastL1Blocks.addedMessages &&
96
+ currentL1BlockNumber <= lastL1Blocks.cancelledMessages) {
97
+ // chain hasn't moved forward
98
+ // or it's been rolled back
93
99
  return;
94
100
  }
95
101
  // ********** Ensuring Consistency of data pulled from L1 **********
@@ -99,57 +105,56 @@ export class Archiver {
99
105
  * to ensure that data is read exactly once.
100
106
  *
101
107
  * The first is the problem of eventually consistent ETH service providers like Infura.
102
- * We currently read from the last L1 block that we saw emit an L2 block. This could mean
103
- * that the archiver ends up looking at the same L1 block multiple times (e.g. if we last saw
104
- * an L2 block emitted at L1 block 10, we'd constantly ask for L1 blocks from 11 onwards until
105
- * we see another L2 block). For this to work message and block processing need to be idempotent.
106
- * We should re-visit this before mainnet launch.
108
+ * Each L1 read operation will query data from the last L1 block that it saw emit its kind of data.
109
+ * (so pending L1 to L2 messages will read from the last L1 block that emitted a message and so on)
110
+ * This will mean the archiver will lag behind L1 and will only advance when there's L2-relevant activity on the chain.
107
111
  *
108
112
  * The second is that in between the various calls to L1, the block number can move meaning some
109
113
  * of the following calls will return data for blocks that were not present during earlier calls.
110
- * It's possible that we actually received messages in block currentBlockNumber + 1 meaning the next time
111
- * we do this sync we get the same message again. Additionally, the call to get cancelled L1 to L2 messages
112
- * could read from a block not present when retrieving pending messages. If a message was added and cancelled
113
- * in the same eth block then we could try and cancel a non-existent pending message.
114
- *
115
114
  * To combat this for the time being we simply ensure that all data retrieval methods only retrieve
116
115
  * data up to the currentBlockNumber captured at the top of this function. We might want to improve on this
117
116
  * in future but for the time being it should give us the guarantees that we need
118
- *
119
117
  */
120
- // ********** Events that are processed in between blocks **********
118
+ // ********** Events that are processed per L1 block **********
121
119
  // Process l1ToL2Messages, these are consumed as time passes, not each block
122
- const retrievedPendingL1ToL2Messages = await retrieveNewPendingL1ToL2Messages(this.publicClient, this.inboxAddress, blockUntilSynced, lastProcessedL1BlockNumber + 1n, // + 1 to prevent re-including messages from the last processed block
123
- currentL1BlockNumber);
124
- const retrievedCancelledL1ToL2Messages = await retrieveNewCancelledL1ToL2Messages(this.publicClient, this.inboxAddress, blockUntilSynced, lastProcessedL1BlockNumber + 1n, currentL1BlockNumber);
125
- // TODO (#717): optimize this - there could be messages in confirmed that are also in pending.
126
- // Or messages in pending that are also cancelled in the same block. No need to modify storage for them.
127
- if (retrievedPendingL1ToL2Messages.retrievedData.length) {
128
- // Store l1 to l2 messages
129
- this.log(`Adding ${retrievedPendingL1ToL2Messages.retrievedData.length} pending l1 to l2 messages to store`);
130
- await this.store.addPendingL1ToL2Messages(retrievedPendingL1ToL2Messages.retrievedData);
120
+ const retrievedPendingL1ToL2Messages = await retrieveNewPendingL1ToL2Messages(this.publicClient, this.inboxAddress, blockUntilSynced, lastL1Blocks.addedMessages + 1n, currentL1BlockNumber);
121
+ const retrievedCancelledL1ToL2Messages = await retrieveNewCancelledL1ToL2Messages(this.publicClient, this.inboxAddress, blockUntilSynced, lastL1Blocks.cancelledMessages + 1n, currentL1BlockNumber);
122
+ // group pending messages and cancelled messages by their L1 block number
123
+ const messagesByBlock = new Map();
124
+ for (const [message, blockNumber] of retrievedPendingL1ToL2Messages.retrievedData) {
125
+ const messages = messagesByBlock.get(blockNumber) || [[], []];
126
+ messages[0].push(message);
127
+ messagesByBlock.set(blockNumber, messages);
131
128
  }
132
- if (retrievedCancelledL1ToL2Messages.retrievedData.length) {
133
- // remove cancelled messages from the pending message store:
134
- this.log(`Removing ${retrievedCancelledL1ToL2Messages.retrievedData.length} pending l1 to l2 messages from store where messages were cancelled`);
135
- await this.store.cancelPendingL1ToL2Messages(retrievedCancelledL1ToL2Messages.retrievedData);
129
+ for (const [messageKey, blockNumber] of retrievedCancelledL1ToL2Messages.retrievedData) {
130
+ const messages = messagesByBlock.get(blockNumber) || [[], []];
131
+ messages[1].push(messageKey);
132
+ messagesByBlock.set(blockNumber, messages);
136
133
  }
137
- // ********** Events that are processed per block **********
134
+ // process messages from each L1 block in sequence
135
+ const l1BlocksWithMessages = Array.from(messagesByBlock.keys()).sort((a, b) => (a < b ? -1 : a === b ? 0 : 1));
136
+ for (const l1Block of l1BlocksWithMessages) {
137
+ const [newMessages, cancelledMessages] = messagesByBlock.get(l1Block);
138
+ this.log(`Adding ${newMessages.length} new messages and ${cancelledMessages.length} cancelled messages in L1 block ${l1Block}`);
139
+ await this.store.addPendingL1ToL2Messages(newMessages, l1Block);
140
+ await this.store.cancelPendingL1ToL2Messages(cancelledMessages, l1Block);
141
+ }
142
+ // ********** Events that are processed per L2 block **********
138
143
  // Read all data from chain and then write to our stores at the end
139
144
  const nextExpectedL2BlockNum = BigInt((await this.store.getBlockNumber()) + 1);
140
- const retrievedBlocks = await retrieveBlocks(this.publicClient, this.rollupAddress, blockUntilSynced, lastProcessedL1BlockNumber + 1n, currentL1BlockNumber, nextExpectedL2BlockNum);
145
+ const retrievedBlocks = await retrieveBlocks(this.publicClient, this.rollupAddress, blockUntilSynced, lastL1Blocks.addedBlock + 1n, currentL1BlockNumber, nextExpectedL2BlockNum);
141
146
  if (retrievedBlocks.retrievedData.length === 0) {
142
147
  return;
143
148
  }
144
149
  else {
145
- this.log(`Retrieved ${retrievedBlocks.retrievedData.length} new L2 blocks between L1 blocks ${lastProcessedL1BlockNumber + 1n} and ${currentL1BlockNumber}.`);
150
+ this.log(`Retrieved ${retrievedBlocks.retrievedData.length} new L2 blocks between L1 blocks ${lastL1Blocks.addedBlock + 1n} and ${currentL1BlockNumber}.`);
146
151
  }
147
152
  // create the block number -> block hash mapping to ensure we retrieve the appropriate events
148
153
  const blockHashMapping = {};
149
154
  retrievedBlocks.retrievedData.forEach((block) => {
150
155
  blockHashMapping[block.number] = block.getCalldataHash();
151
156
  });
152
- const retrievedContracts = await retrieveNewContractData(this.publicClient, this.contractDeploymentEmitterAddress, blockUntilSynced, lastProcessedL1BlockNumber + 1n, currentL1BlockNumber, blockHashMapping);
157
+ const retrievedContracts = await retrieveNewContractData(this.publicClient, this.contractDeploymentEmitterAddress, blockUntilSynced, lastL1Blocks.addedBlock + 1n, currentL1BlockNumber, blockHashMapping);
153
158
  this.log(`Retrieved ${retrievedBlocks.retrievedData.length} block(s) from chain`);
154
159
  await Promise.all(retrievedBlocks.retrievedData.map(block => this.store.addLogs(block.newEncryptedLogs, block.newUnencryptedLogs, block.number)));
155
160
  // store contracts for which we have retrieved L2 blocks
@@ -162,9 +167,10 @@ export class Archiver {
162
167
  }));
163
168
  // from retrieved L2Blocks, confirm L1 to L2 messages that have been published
164
169
  // from each l2block fetch all messageKeys in a flattened array:
165
- const messageKeysToRemove = retrievedBlocks.retrievedData.map(l2block => l2block.newL1ToL2Messages).flat();
166
170
  this.log(`Confirming l1 to l2 messages in store`);
167
- await this.store.confirmL1ToL2Messages(messageKeysToRemove);
171
+ for (const block of retrievedBlocks.retrievedData) {
172
+ await this.store.confirmL1ToL2Messages(block.newL1ToL2Messages);
173
+ }
168
174
  // store retrieved L2 blocks after removing new logs information.
169
175
  // remove logs to serve "lightweight" block information. Logs can be fetched separately if needed.
170
176
  await this.store.addBlocks(retrievedBlocks.retrievedData.map(block => {
@@ -300,4 +306,4 @@ export class Archiver {
300
306
  return this.store.getConfirmedL1ToL2Message(messageKey);
301
307
  }
302
308
  }
303
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl2ZXIvYXJjaGl2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixtQ0FBbUMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFRTCxPQUFPLEdBUVIsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBc0Msa0JBQWtCLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXBGLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsa0NBQWtDLEVBQ2xDLHVCQUF1QixFQUN2QixnQ0FBZ0MsR0FDakMsTUFBTSxxQkFBcUIsQ0FBQztBQUU3Qjs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFXbkI7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxZQUNtQixZQUFnRCxFQUNoRCxhQUF5QixFQUN6QixZQUF3QixFQUN4QixlQUEyQixFQUMzQixnQ0FBNEMsRUFDNUMsS0FBd0IsRUFDeEIsb0JBQW9CLEtBQU0sRUFDMUIsTUFBbUIsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUM7UUFQdEQsaUJBQVksR0FBWixZQUFZLENBQW9DO1FBQ2hELGtCQUFhLEdBQWIsYUFBYSxDQUFZO1FBQ3pCLGlCQUFZLEdBQVosWUFBWSxDQUFZO1FBQ3hCLG9CQUFlLEdBQWYsZUFBZSxDQUFZO1FBQzNCLHFDQUFnQyxH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
309
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl2ZXIvYXJjaGl2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQVFMLE9BQU8sR0FRUixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBb0IsbUNBQW1DLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFM0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBZSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVuRSxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFzQyxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJcEYsT0FBTyxFQUNMLGNBQWMsRUFDZCxrQ0FBa0MsRUFDbEMsdUJBQXVCLEVBQ3ZCLGdDQUFnQyxHQUNqQyxNQUFNLHFCQUFxQixDQUFDO0FBRTdCOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQVduQjs7Ozs7Ozs7OztPQVVHO0lBQ0gsWUFDbUIsWUFBZ0QsRUFDaEQsYUFBeUIsRUFDekIsWUFBd0IsRUFDeEIsZUFBMkIsRUFDM0IsZ0NBQTRDLEVBQzVDLEtBQXdCLEVBQ3hCLG9CQUFvQixLQUFNLEVBQzFCLE1BQW1CLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDO1FBUHRELGlCQUFZLEdBQVosWUFBWSxDQUFvQztRQUNoRCxrQkFBYSxHQUFiLGFBQWEsQ0FBWTtRQUN6QixpQkFBWSxHQUFaLFlBQVksQ0FBWTtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBWTtRQUMzQixxQ0FBZ0Ms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
@@ -1,6 +1,17 @@
1
+ import { ContractData, ExtendedContractData, GetUnencryptedLogsResponse, L1ToL2Message, L2Block, L2BlockL2Logs, L2Tx, LogFilter, LogType, TxHash } from '@aztec/circuit-types';
1
2
  import { Fr } from '@aztec/circuits.js';
2
3
  import { AztecAddress } from '@aztec/foundation/aztec-address';
3
- import { CancelledL1ToL2Message, ContractData, ExtendedContractData, GetUnencryptedLogsResponse, L1ToL2Message, L2Block, L2BlockL2Logs, L2Tx, LogFilter, LogType, PendingL1ToL2Message, TxHash } from '@aztec/types';
4
+ /**
5
+ * Represents the latest L1 block processed by the archiver for various objects in L2.
6
+ */
7
+ export type ArchiverL1SynchPoint = {
8
+ /** The last L1 block that added a new L2 block. */
9
+ addedBlock: bigint;
10
+ /** The last L1 block that added pending messages */
11
+ addedMessages: bigint;
12
+ /** The last L1 block that cancelled messages */
13
+ cancelledMessages: bigint;
14
+ };
4
15
  /**
5
16
  * Interface describing a data store to be used by the archiver to store all its relevant data
6
17
  * (blocks, encrypted logs, aztec contract data extended contract data).
@@ -36,15 +47,17 @@ export interface ArchiverDataStore {
36
47
  /**
37
48
  * Append new pending L1 to L2 messages to the store.
38
49
  * @param messages - The L1 to L2 messages to be added to the store.
50
+ * @param l1BlockNumber - The block number of the L1 block that added the messages.
39
51
  * @returns True if the operation is successful.
40
52
  */
41
- addPendingL1ToL2Messages(messages: PendingL1ToL2Message[]): Promise<boolean>;
53
+ addPendingL1ToL2Messages(messages: L1ToL2Message[], l1BlockNumber: bigint): Promise<boolean>;
42
54
  /**
43
55
  * Remove pending L1 to L2 messages from the store (if they were cancelled).
44
56
  * @param message - The message keys to be removed from the store.
57
+ * @param l1BlockNumber - The block number of the L1 block that cancelled the messages.
45
58
  * @returns True if the operation is successful.
46
59
  */
47
- cancelPendingL1ToL2Messages(message: CancelledL1ToL2Message[]): Promise<boolean>;
60
+ cancelPendingL1ToL2Messages(message: Fr[], l1BlockNumber: bigint): Promise<boolean>;
48
61
  /**
49
62
  * Messages that have been published in an L2 block are confirmed.
50
63
  * Add them to the confirmed store, also remove them from the pending store.
@@ -117,8 +130,8 @@ export interface ArchiverDataStore {
117
130
  */
118
131
  getBlockNumber(): Promise<number>;
119
132
  /**
120
- * Gets the number of the latest L1 block processed.
133
+ * Gets the last L1 block number processed by the archiver
121
134
  */
122
- getL1BlockNumber(): Promise<bigint>;
135
+ getL1BlockNumber(): Promise<ArchiverL1SynchPoint>;
123
136
  }
124
137
  //# 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,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"}
1
+ {"version":3,"file":"archiver_store.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import '@aztec/types/jest';
1
+ import '@aztec/circuit-types/jest';
2
2
  import { ArchiverDataStore } from './archiver_store.js';
3
3
  /**
4
4
  * @param testName - The name of the test suite.
@@ -1 +1 @@
1
- {"version":3,"file":"archiver_store_test_suite.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store_test_suite.ts"],"names":[],"mappings":"AAeA,OAAO,mBAAmB,CAAC;AAE3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,QAsmB5F"}
1
+ {"version":3,"file":"archiver_store_test_suite.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store_test_suite.ts"],"names":[],"mappings":"AAWA,OAAO,2BAA2B,CAAC;AAInC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,QAylB5F"}