@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,8 +1,8 @@
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
4
  import { RootDatabase } from 'lmdb';
5
- import { ArchiverDataStore } from './archiver_store.js';
5
+ import { ArchiverDataStore, ArchiverL1SynchPoint } from './archiver_store.js';
6
6
  /**
7
7
  * LMDB implementation of the ArchiverDataStore interface.
8
8
  */
@@ -40,15 +40,17 @@ export declare class LMDBArchiverStore implements ArchiverDataStore {
40
40
  /**
41
41
  * Append new pending L1 to L2 messages to the store.
42
42
  * @param messages - The L1 to L2 messages to be added to the store.
43
+ * @param l1BlockNumber - The L1 block number for which to add the messages.
43
44
  * @returns True if the operation is successful.
44
45
  */
45
- addPendingL1ToL2Messages(messages: PendingL1ToL2Message[]): Promise<boolean>;
46
+ addPendingL1ToL2Messages(messages: L1ToL2Message[], l1BlockNumber: bigint): Promise<boolean>;
46
47
  /**
47
48
  * Remove pending L1 to L2 messages from the store (if they were cancelled).
48
- * @param messages - The message keys to be removed from the store.
49
+ * @param cancelledMessages - The message keys to be removed from the store.
50
+ * @param l1BlockNumber - The L1 block number for which to remove the messages.
49
51
  * @returns True if the operation is successful.
50
52
  */
51
- cancelPendingL1ToL2Messages(messages: CancelledL1ToL2Message[]): Promise<boolean>;
53
+ cancelPendingL1ToL2Messages(cancelledMessages: Fr[], l1BlockNumber: bigint): Promise<boolean>;
52
54
  /**
53
55
  * Messages that have been published in an L2 block are confirmed.
54
56
  * Add them to the confirmed store, also remove them from the pending store.
@@ -120,6 +122,9 @@ export declare class LMDBArchiverStore implements ArchiverDataStore {
120
122
  * @returns The number of the latest L2 block processed.
121
123
  */
122
124
  getBlockNumber(): Promise<number>;
123
- getL1BlockNumber(): Promise<bigint>;
125
+ /**
126
+ * Gets the last L1 block number processed by the archiver
127
+ */
128
+ getL1BlockNumber(): Promise<ArchiverL1SynchPoint>;
124
129
  }
125
130
  //# sourceMappingURL=lmdb_archiver_store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lmdb_archiver_store.d.ts","sourceRoot":"","sources":["../../src/archiver/lmdb_archiver_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAG/D,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,oBAAoB,EAEpB,0BAA0B,EAE1B,aAAa,EACb,OAAO,EACP,aAAa,EACb,IAAI,EACJ,SAAS,EAET,OAAO,EACP,oBAAoB,EACpB,MAAM,EAEP,MAAM,cAAc,CAAC;AAEtB,OAAO,EAA0B,YAAY,EAAE,MAAM,MAAM,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AA8BxD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,iBAAiB;;gBAoB7C,EAAE,EAAE,YAAY,EAAE,eAAe,GAAE,MAAa;IAgC/C,KAAK;IAIlB;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAkC9C;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAyB3D;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAUlD;;;;;;OAMG;IACH,OAAO,CACL,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,eAAe,EAAE,aAAa,GAAG,SAAS,EAC1C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC;IAiBnB;;;;OAIG;IACH,wBAAwB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAyC5E;;;;OAIG;IACH,2BAA2B,CAAC,QAAQ,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BjF;;;;;OAKG;IACH,qBAAqB,CAAC,SAAS,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAWxD;;;;OAIG;IACH,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IA2CzD;;;;OAIG;IACH,yBAAyB,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAajE;;;;;;OAMG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAejF;;;;OAIG;IACH,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAqG1E;;;;;OAKG;IACH,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAczF;;;;OAIG;IACH,uBAAuB,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAsBjG;;;;OAIG;IACH,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IASjF;;;;;OAKG;IACH,eAAe,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAUjF;;;;;OAKG;IACH,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC;IAKhF;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAMjC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;CA0GpC"}
1
+ {"version":3,"file":"lmdb_archiver_store.d.ts","sourceRoot":"","sources":["../../src/archiver/lmdb_archiver_store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,oBAAoB,EAEpB,0BAA0B,EAE1B,aAAa,EACb,OAAO,EACP,aAAa,EACb,IAAI,EACJ,SAAS,EAET,OAAO,EACP,MAAM,EAEP,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAG/D,OAAO,EAA0B,YAAY,EAAE,MAAM,MAAM,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAwB9E;;GAEG;AACH,qBAAa,iBAAkB,YAAW,iBAAiB;;gBAoB7C,EAAE,EAAE,YAAY,EAAE,eAAe,GAAE,MAAa;IAgC/C,KAAK;IAIlB;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAmC9C;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAoB3D;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAUlD;;;;;;OAMG;IACH,OAAO,CACL,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,eAAe,EAAE,aAAa,GAAG,SAAS,EAC1C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC;IAiBnB;;;;;OAKG;IACH,wBAAwB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA+B5F;;;;;OAKG;IACH,2BAA2B,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB7F;;;;;OAKG;IACH,qBAAqB,CAAC,SAAS,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAWxD;;;;OAIG;IACH,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IA2CzD;;;;OAIG;IACH,yBAAyB,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAajE;;;;;;OAMG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAejF;;;;OAIG;IACH,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,0BAA0B,CAAC;IA6F1E;;;;;OAKG;IACH,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAczF;;;;OAIG;IACH,uBAAuB,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAsBjG;;;;OAIG;IACH,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IASjF;;;;;OAKG;IACH,eAAe,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAUjF;;;;;OAKG;IACH,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC;IAKhF;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAMjC;;OAEG;IACH,gBAAgB,IAAI,OAAO,CAAC,oBAAoB,CAAC;CAuHlD"}
@@ -1,12 +1,10 @@
1
- var _LMDBArchiverStore_instances, _LMDBArchiverStore_tables, _LMDBArchiverStore_logsMaxPageSize, _LMDBArchiverStore_log, _LMDBArchiverStore_filterLogsOfTx, _LMDBArchiverStore_filterLogsBetweenBlocks, _LMDBArchiverStore_accumulateLogs, _LMDBArchiverStore_getBlock, _LMDBArchiverStore_computeBlockRange, _LMDBArchiverStore_getL1ToL2Message, _LMDBArchiverStore_updateMessageCountInTx;
1
+ var _LMDBArchiverStore_instances, _LMDBArchiverStore_tables, _LMDBArchiverStore_logsMaxPageSize, _LMDBArchiverStore_log, _LMDBArchiverStore_filterUnencryptedLogsOfTx, _LMDBArchiverStore_filterUnencryptedLogsBetweenBlocks, _LMDBArchiverStore_accumulateLogs, _LMDBArchiverStore_getBlock, _LMDBArchiverStore_getBlockLogs, _LMDBArchiverStore_computeBlockRange, _LMDBArchiverStore_getL1ToL2Message, _LMDBArchiverStore_updateMessageCountInTx;
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
+ import { ExtendedContractData, ExtendedUnencryptedL2Log, INITIAL_L2_BLOCK_NUM, L1ToL2Message, L2Block, L2BlockL2Logs, LogId, LogType, UnencryptedL2Log, } from '@aztec/circuit-types';
3
4
  import { Fr } from '@aztec/circuits.js';
4
- import { toBigIntBE, toBufferBE } from '@aztec/foundation/bigint-buffer';
5
5
  import { createDebugLogger } from '@aztec/foundation/log';
6
- import { ExtendedContractData, ExtendedUnencryptedL2Log, INITIAL_L2_BLOCK_NUM, L1ToL2Message, L2Block, L2BlockL2Logs, LogId, LogType, UnencryptedL2Log, } from '@aztec/types';
7
- function l1ToL2MessageBlockKey(l1BlockNumber, key, indexInBlock) {
8
- return `${toBufferBE(l1BlockNumber, 32).toString('hex')}:${key}:${indexInBlock}`;
9
- }
6
+ const L1_BLOCK_ADDED_PENDING_MESSAGE = 'l1BlockAddedPendingMessage';
7
+ const L1_BLOCK_CANCELLED_MESSAGE = 'l1BlockCancelledMessage';
10
8
  /* eslint-enable */
11
9
  /**
12
10
  * LMDB implementation of the ArchiverDataStore interface.
@@ -36,7 +34,7 @@ export class LMDBArchiverStore {
36
34
  }),
37
35
  l1ToL2MessagesByBlock: db.openDB('l1_to_l2_message_nonces', {
38
36
  keyEncoding: 'ordered-binary',
39
- encoding: 'binary',
37
+ encoding: 'msgpack',
40
38
  }),
41
39
  pendingMessagesByFee: db.openDB('pending_messages_by_fee', {
42
40
  keyEncoding: 'ordered-binary',
@@ -61,7 +59,8 @@ export class LMDBArchiverStore {
61
59
  for (const block of blocks) {
62
60
  const blockCtx = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").blocks.get(block.number) ?? {};
63
61
  blockCtx.block = block.toBuffer();
64
- blockCtx.l1BlockNumber = toBufferBE(block.getL1BlockNumber(), 32);
62
+ blockCtx.l1BlockNumber = block.getL1BlockNumber();
63
+ blockCtx.blockHash = block.getBlockHash();
65
64
  // no need to await, all writes are enqueued in the transaction
66
65
  // awaiting would interrupt the execution flow of this callback and "leak" the transaction to some other part
67
66
  // of the system and any writes would then be part of our transaction here
@@ -94,13 +93,7 @@ export class LMDBArchiverStore {
94
93
  .getRange(__classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_computeBlockRange).call(this, start, limit))
95
94
  .filter(({ value }) => value.block)
96
95
  .map(({ value }) => {
97
- const block = L2Block.fromBuffer(asBuffer(value.block));
98
- if (value.encryptedLogs) {
99
- block.attachLogs(L2BlockL2Logs.fromBuffer(asBuffer(value.encryptedLogs)), LogType.ENCRYPTED);
100
- }
101
- if (value.unencryptedLogs) {
102
- block.attachLogs(L2BlockL2Logs.fromBuffer(asBuffer(value.unencryptedLogs)), LogType.UNENCRYPTED);
103
- }
96
+ const block = L2Block.fromBuffer(asBuffer(value.block), value.blockHash ? asBuffer(value.blockHash) : undefined);
104
97
  return block;
105
98
  }).asArray;
106
99
  return Promise.resolve(blocks);
@@ -120,7 +113,7 @@ export class LMDBArchiverStore {
120
113
  if (typeof blockNumber !== 'number' || typeof txIndex !== 'number') {
121
114
  return Promise.resolve(undefined);
122
115
  }
123
- const block = __classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_getBlock).call(this, blockNumber, true);
116
+ const block = __classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_getBlock).call(this, blockNumber);
124
117
  return Promise.resolve(block?.getTx(txIndex));
125
118
  }
126
119
  /**
@@ -146,34 +139,29 @@ export class LMDBArchiverStore {
146
139
  /**
147
140
  * Append new pending L1 to L2 messages to the store.
148
141
  * @param messages - The L1 to L2 messages to be added to the store.
142
+ * @param l1BlockNumber - The L1 block number for which to add the messages.
149
143
  * @returns True if the operation is successful.
150
144
  */
151
- addPendingL1ToL2Messages(messages) {
145
+ addPendingL1ToL2Messages(messages, l1BlockNumber) {
152
146
  return __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2Messages.transaction(() => {
153
- for (const { message, blockNumber, indexInBlock } of messages) {
147
+ if ((__classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2MessagesByBlock.get(L1_BLOCK_ADDED_PENDING_MESSAGE) ?? 0n) >= l1BlockNumber) {
148
+ return false;
149
+ }
150
+ // ensure we don't add the same messages twice
151
+ void __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2MessagesByBlock.put(L1_BLOCK_ADDED_PENDING_MESSAGE, l1BlockNumber);
152
+ for (const message of messages) {
154
153
  const messageKey = message.entryKey?.toBuffer();
155
154
  if (!messageKey) {
156
155
  throw new Error('Message does not have an entry key');
157
156
  }
158
- const dupeKey = l1ToL2MessageBlockKey(blockNumber, 'newMessage', indexInBlock);
159
- const messageInBlock = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2MessagesByBlock.get(dupeKey);
160
- if (messageInBlock?.equals(messageKey)) {
161
- continue;
162
- }
163
- else {
164
- if (messageInBlock) {
165
- __classPrivateFieldGet(this, _LMDBArchiverStore_log, "f").call(this, `Previously add pending message ${messageInBlock.toString('hex')} at ${dupeKey.toString()}, now got ${messageKey.toString('hex')}`);
166
- }
167
- void __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2MessagesByBlock.put(dupeKey, messageKey);
168
- }
169
- let messageWithCount = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2Messages.get(messageKey);
170
- if (!messageWithCount) {
171
- messageWithCount = {
157
+ let messageCtx = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2Messages.get(messageKey);
158
+ if (!messageCtx) {
159
+ messageCtx = {
172
160
  message: message.toBuffer(),
173
161
  pendingCount: 0,
174
162
  confirmedCount: 0,
175
163
  };
176
- void __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2Messages.put(messageKey, messageWithCount);
164
+ void __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2Messages.put(messageKey, messageCtx);
177
165
  }
178
166
  __classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_updateMessageCountInTx).call(this, messageKey, message, 1, 0);
179
167
  }
@@ -182,26 +170,22 @@ export class LMDBArchiverStore {
182
170
  }
183
171
  /**
184
172
  * Remove pending L1 to L2 messages from the store (if they were cancelled).
185
- * @param messages - The message keys to be removed from the store.
173
+ * @param cancelledMessages - The message keys to be removed from the store.
174
+ * @param l1BlockNumber - The L1 block number for which to remove the messages.
186
175
  * @returns True if the operation is successful.
187
176
  */
188
- cancelPendingL1ToL2Messages(messages) {
177
+ cancelPendingL1ToL2Messages(cancelledMessages, l1BlockNumber) {
189
178
  return __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2Messages.transaction(() => {
190
- for (const { blockNumber, indexInBlock, entryKey } of messages) {
191
- const messageKey = entryKey.toBuffer();
192
- const dupeKey = l1ToL2MessageBlockKey(blockNumber, 'cancelledMessage', indexInBlock);
193
- const messageInBlock = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2MessagesByBlock.get(dupeKey);
194
- if (messageInBlock?.equals(messageKey)) {
179
+ if ((__classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2MessagesByBlock.get(L1_BLOCK_CANCELLED_MESSAGE) ?? 0n) >= l1BlockNumber) {
180
+ return false;
181
+ }
182
+ void __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2MessagesByBlock.put(L1_BLOCK_CANCELLED_MESSAGE, l1BlockNumber);
183
+ for (const messageKey of cancelledMessages) {
184
+ const message = __classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_getL1ToL2Message).call(this, messageKey.toBuffer());
185
+ if (!message) {
195
186
  continue;
196
187
  }
197
- else {
198
- if (messageInBlock) {
199
- __classPrivateFieldGet(this, _LMDBArchiverStore_log, "f").call(this, `Previously add pending message ${messageInBlock.toString('hex')} at ${dupeKey.toString()}, now got ${messageKey.toString('hex')}`);
200
- }
201
- void __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2MessagesByBlock.put(dupeKey, messageKey);
202
- }
203
- const message = __classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_getL1ToL2Message).call(this, messageKey);
204
- __classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_updateMessageCountInTx).call(this, messageKey, message, -1, 0);
188
+ __classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_updateMessageCountInTx).call(this, messageKey.toBuffer(), message, -1, 0);
205
189
  }
206
190
  return true;
207
191
  });
@@ -304,13 +288,13 @@ export class LMDBArchiverStore {
304
288
  getUnencryptedLogs(filter) {
305
289
  try {
306
290
  if (filter.afterLog) {
307
- return Promise.resolve(__classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_filterLogsBetweenBlocks).call(this, filter));
291
+ return Promise.resolve(__classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_filterUnencryptedLogsBetweenBlocks).call(this, filter));
308
292
  }
309
293
  else if (filter.txHash) {
310
- return Promise.resolve(__classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_filterLogsOfTx).call(this, filter));
294
+ return Promise.resolve(__classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_filterUnencryptedLogsOfTx).call(this, filter));
311
295
  }
312
296
  else {
313
- return Promise.resolve(__classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_filterLogsBetweenBlocks).call(this, filter));
297
+ return Promise.resolve(__classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_filterUnencryptedLogsBetweenBlocks).call(this, filter));
314
298
  }
315
299
  }
316
300
  catch (err) {
@@ -402,24 +386,23 @@ export class LMDBArchiverStore {
402
386
  const [lastBlockNumber] = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").blocks.getKeys({ reverse: true, limit: 1 }).asArray;
403
387
  return Promise.resolve(typeof lastBlockNumber === 'number' ? lastBlockNumber : INITIAL_L2_BLOCK_NUM - 1);
404
388
  }
389
+ /**
390
+ * Gets the last L1 block number processed by the archiver
391
+ */
405
392
  getL1BlockNumber() {
406
393
  // inverse range with no start/end will return the last value
407
- const [lastBlock] = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").blocks.getRange({ reverse: true, limit: 1 }).asArray;
408
- if (!lastBlock) {
409
- return Promise.resolve(0n);
410
- }
411
- else {
412
- const blockCtx = lastBlock.value;
413
- if (!blockCtx.l1BlockNumber) {
414
- return Promise.reject(new Error('L1 block number not found'));
415
- }
416
- else {
417
- return Promise.resolve(toBigIntBE(asBuffer(blockCtx.l1BlockNumber)));
418
- }
419
- }
394
+ const [lastL2Block] = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").blocks.getRange({ reverse: true, limit: 1 }).asArray;
395
+ const addedBlock = lastL2Block?.value?.l1BlockNumber ?? 0n;
396
+ const addedMessages = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2MessagesByBlock.get(L1_BLOCK_ADDED_PENDING_MESSAGE) ?? 0n;
397
+ const cancelledMessages = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2MessagesByBlock.get(L1_BLOCK_CANCELLED_MESSAGE) ?? 0n;
398
+ return Promise.resolve({
399
+ addedBlock,
400
+ addedMessages,
401
+ cancelledMessages,
402
+ });
420
403
  }
421
404
  }
422
- _LMDBArchiverStore_tables = new WeakMap(), _LMDBArchiverStore_logsMaxPageSize = new WeakMap(), _LMDBArchiverStore_log = new WeakMap(), _LMDBArchiverStore_instances = new WeakSet(), _LMDBArchiverStore_filterLogsOfTx = function _LMDBArchiverStore_filterLogsOfTx(filter) {
405
+ _LMDBArchiverStore_tables = new WeakMap(), _LMDBArchiverStore_logsMaxPageSize = new WeakMap(), _LMDBArchiverStore_log = new WeakMap(), _LMDBArchiverStore_instances = new WeakSet(), _LMDBArchiverStore_filterUnencryptedLogsOfTx = function _LMDBArchiverStore_filterUnencryptedLogsOfTx(filter) {
423
406
  if (!filter.txHash) {
424
407
  throw new Error('Missing txHash');
425
408
  }
@@ -427,15 +410,12 @@ _LMDBArchiverStore_tables = new WeakMap(), _LMDBArchiverStore_logsMaxPageSize =
427
410
  if (typeof blockNumber !== 'number' || typeof txIndex !== 'number') {
428
411
  return { logs: [], maxLogsHit: false };
429
412
  }
430
- const block = __classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_getBlock).call(this, blockNumber, true);
431
- if (!block || !block.newUnencryptedLogs) {
432
- return { logs: [], maxLogsHit: false };
433
- }
434
- const txLogs = block.newUnencryptedLogs.txLogs[txIndex].unrollLogs().map(log => UnencryptedL2Log.fromBuffer(log));
413
+ const unencryptedLogsInBlock = __classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_getBlockLogs).call(this, blockNumber, LogType.UNENCRYPTED);
414
+ const txLogs = unencryptedLogsInBlock.txLogs[txIndex].unrollLogs().map(log => UnencryptedL2Log.fromBuffer(log));
435
415
  const logs = [];
436
416
  const maxLogsHit = __classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_accumulateLogs).call(this, logs, blockNumber, txIndex, txLogs, filter);
437
417
  return { logs, maxLogsHit };
438
- }, _LMDBArchiverStore_filterLogsBetweenBlocks = function _LMDBArchiverStore_filterLogsBetweenBlocks(filter) {
418
+ }, _LMDBArchiverStore_filterUnencryptedLogsBetweenBlocks = function _LMDBArchiverStore_filterUnencryptedLogsBetweenBlocks(filter) {
439
419
  const start = filter.afterLog?.blockNumber ?? Math.max(filter.fromBlock ?? INITIAL_L2_BLOCK_NUM, INITIAL_L2_BLOCK_NUM);
440
420
  const end = filter.toBlock;
441
421
  if (typeof end === 'number' && end < start) {
@@ -448,11 +428,7 @@ _LMDBArchiverStore_tables = new WeakMap(), _LMDBArchiverStore_logsMaxPageSize =
448
428
  const blockNumbers = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").blocks.getKeys({ start, end, snapshot: false });
449
429
  let maxLogsHit = false;
450
430
  loopOverBlocks: for (const blockNumber of blockNumbers) {
451
- const block = __classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_getBlock).call(this, blockNumber, true);
452
- if (!block || !block.newUnencryptedLogs) {
453
- continue;
454
- }
455
- const unencryptedLogsInBlock = block.newUnencryptedLogs;
431
+ const unencryptedLogsInBlock = __classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_getBlockLogs).call(this, blockNumber, LogType.UNENCRYPTED);
456
432
  for (let txIndex = filter.afterLog?.txIndex ?? 0; txIndex < unencryptedLogsInBlock.txLogs.length; txIndex++) {
457
433
  const txLogs = unencryptedLogsInBlock.txLogs[txIndex].unrollLogs().map(log => UnencryptedL2Log.fromBuffer(log));
458
434
  maxLogsHit = __classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_accumulateLogs).call(this, logs, blockNumber, txIndex, txLogs, filter);
@@ -485,7 +461,7 @@ _LMDBArchiverStore_tables = new WeakMap(), _LMDBArchiverStore_logsMaxPageSize =
485
461
  if (!blockCtx || !blockCtx.block) {
486
462
  return undefined;
487
463
  }
488
- const block = L2Block.fromBuffer(asBuffer(blockCtx.block));
464
+ const block = L2Block.fromBuffer(asBuffer(blockCtx.block), blockCtx.blockHash ? asBuffer(blockCtx.blockHash) : undefined);
489
465
  if (withLogs) {
490
466
  if (blockCtx.encryptedLogs) {
491
467
  block.attachLogs(L2BlockL2Logs.fromBuffer(asBuffer(blockCtx.encryptedLogs)), LogType.ENCRYPTED);
@@ -495,6 +471,13 @@ _LMDBArchiverStore_tables = new WeakMap(), _LMDBArchiverStore_logsMaxPageSize =
495
471
  }
496
472
  }
497
473
  return block;
474
+ }, _LMDBArchiverStore_getBlockLogs = function _LMDBArchiverStore_getBlockLogs(blockNumber, logType) {
475
+ const blockCtx = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").blocks.get(blockNumber);
476
+ const logs = blockCtx?.[logType === LogType.ENCRYPTED ? 'encryptedLogs' : 'unencryptedLogs'];
477
+ if (!logs) {
478
+ return new L2BlockL2Logs([]);
479
+ }
480
+ return L2BlockL2Logs.fromBuffer(asBuffer(logs));
498
481
  }, _LMDBArchiverStore_computeBlockRange = function _LMDBArchiverStore_computeBlockRange(start, limit) {
499
482
  if (limit < 1) {
500
483
  throw new Error(`Invalid limit: ${limit}`);
@@ -542,4 +525,4 @@ _LMDBArchiverStore_tables = new WeakMap(), _LMDBArchiverStore_logsMaxPageSize =
542
525
  function asBuffer(arr) {
543
526
  return Buffer.isBuffer(arr) ? arr : Buffer.from(arr.buffer, arr.byteOffset, arr.length / arr.BYTES_PER_ELEMENT);
544
527
  }
545
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG1kYl9hcmNoaXZlcl9zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcmNoaXZlci9sbWRiX2FyY2hpdmVyX3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUdMLG9CQUFvQixFQUNwQix3QkFBd0IsRUFFeEIsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixPQUFPLEVBQ1AsYUFBYSxFQUdiLEtBQUssRUFDTCxPQUFPLEVBR1AsZ0JBQWdCLEdBQ2pCLE1BQU0sY0FBYyxDQUFDO0FBZXRCLFNBQVMscUJBQXFCLENBQzVCLGFBQXFCLEVBQ3JCLEdBQXNDLEVBQ3RDLFlBQW9CO0lBRXBCLE9BQU8sR0FBRyxVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7QUFDbkYsQ0FBQztBQVdELG1CQUFtQjtBQUVuQjs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFvQjVCLFlBQVksRUFBZ0IsRUFBRSxrQkFBMEIsSUFBSTs7UUFuQjVELDRDQWFFO1FBRUYscURBQXlCO1FBRXpCLGlDQUFPLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLEVBQUM7UUFHOUMsdUJBQUEsSUFBSSw2QkFBVztZQUNiLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDMUIsV0FBVyxFQUFFLFFBQVE7Z0JBQ3JCLFFBQVEsRUFBRSxTQUFTO2FBQ3BCLENBQUM7WUFDRixPQUFPLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7Z0JB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
528
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG1kYl9hcmNoaXZlcl9zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcmNoaXZlci9sbWRiX2FyY2hpdmVyX3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUVMLG9CQUFvQixFQUNwQix3QkFBd0IsRUFFeEIsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixPQUFPLEVBQ1AsYUFBYSxFQUdiLEtBQUssRUFDTCxPQUFPLEVBRVAsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBd0IxRCxNQUFNLDhCQUE4QixHQUFHLDRCQUE0QixDQUFDO0FBQ3BFLE1BQU0sMEJBQTBCLEdBQUcseUJBQXlCLENBQUM7QUFDN0QsbUJBQW1CO0FBRW5COztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQW9CNUIsWUFBWSxFQUFnQixFQUFFLGtCQUEwQixJQUFJOztRQW5CNUQsNENBYUU7UUFFRixxREFBeUI7UUFFekIsaUNBQU8saUJBQWlCLENBQUMscUJBQXFCLENBQUMsRUFBQztRQUc5Qyx1QkFBQSxJQUFJLDZCQUFXO1lBQ2IsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUMxQixXQUFXLEVBQUUsUUFBUTtnQkFDckIsUUFBUSxFQUFFLFNBQVM7YUFDcEIsQ0FBQztZQUNGLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtnQkFDN0IsV0FBVyxFQUFFLFFBQVE7Z0JBQ3JCLFFBQVEsRUFBRSxTQUFTO2FBQ3BCLENBQUM7WUFDRixhQUFhLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDekMsV0FBVyxFQUFFLFFBQVE7Z0JBQ3JCLFFBQVEsRUFBRSxTQUFTO2FB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
@@ -1,5 +1,5 @@
1
+ import { L1ToL2Message } from '@aztec/circuit-types';
1
2
  import { Fr } from '@aztec/foundation/fields';
2
- import { L1ToL2Message } from '@aztec/types';
3
3
  /**
4
4
  * A simple in-memory implementation of an L1 to L2 message store
5
5
  * that handles message duplication.
@@ -10,10 +10,8 @@ export declare class L1ToL2MessageStore {
10
10
  * messages (and the number of times the message has been seen).
11
11
  */
12
12
  protected store: Map<bigint, L1ToL2MessageAndCount>;
13
- private messagesByBlock;
14
13
  constructor();
15
- addMessage(messageKey: Fr, message: L1ToL2Message, l1BlocKNumber: bigint, messageIndex: number): void;
16
- addMessageUnsafe(messageKey: Fr, message: L1ToL2Message): void;
14
+ addMessage(messageKey: Fr, message: L1ToL2Message): void;
17
15
  getMessage(messageKey: Fr): L1ToL2Message | undefined;
18
16
  getMessageAndCount(messageKey: Fr): L1ToL2MessageAndCount | undefined;
19
17
  }
@@ -22,10 +20,8 @@ export declare class L1ToL2MessageStore {
22
20
  * for removing messages or fetching multiple messages.
23
21
  */
24
22
  export declare class PendingL1ToL2MessageStore extends L1ToL2MessageStore {
25
- private cancelledMessagesByBlock;
26
23
  getMessageKeys(limit: number): Fr[];
27
- removeMessage(messageKey: Fr, l1BlockNumber: bigint, messageIndex: number): void;
28
- removeMessageUnsafe(messageKey: Fr): void;
24
+ removeMessage(messageKey: Fr): void;
29
25
  }
30
26
  /**
31
27
  * Useful to keep track of the number of times a message has been seen.
@@ -1 +1 @@
1
- {"version":3,"file":"l1_to_l2_message_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/memory_archiver_store/l1_to_l2_message_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAa;IAChE,OAAO,CAAC,eAAe,CAAqB;;IAI5C,UAAU,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAS9F,gBAAgB,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa;IAUvD,UAAU,CAAC,UAAU,EAAE,EAAE,GAAG,aAAa,GAAG,SAAS;IAIrD,kBAAkB,CAAC,UAAU,EAAE,EAAE,GAAG,qBAAqB,GAAG,SAAS;CAGtE;AAED;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,kBAAkB;IAC/D,OAAO,CAAC,wBAAwB,CAAqB;IACrD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE;IAmBnC,aAAa,CAAC,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAazE,mBAAmB,CAAC,UAAU,EAAE,EAAE;CAYnC;AAED;;GAEG;AACH,KAAK,qBAAqB,GAAG;IAC3B;;OAEG;IACH,OAAO,EAAE,aAAa,CAAC;IACvB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf,CAAC"}
1
+ {"version":3,"file":"l1_to_l2_message_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/memory_archiver_store/l1_to_l2_message_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAa;;IAIhE,UAAU,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa;IAUjD,UAAU,CAAC,UAAU,EAAE,EAAE,GAAG,aAAa,GAAG,SAAS;IAIrD,kBAAkB,CAAC,UAAU,EAAE,EAAE,GAAG,qBAAqB,GAAG,SAAS;CAGtE;AAED;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,kBAAkB;IAC/D,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE;IAmBnC,aAAa,CAAC,UAAU,EAAE,EAAE;CAiB7B;AAED;;GAEG;AACH,KAAK,qBAAqB,GAAG;IAC3B;;OAEG;IACH,OAAO,EAAE,aAAa,CAAC;IACvB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf,CAAC"}
@@ -10,17 +10,9 @@ export class L1ToL2MessageStore {
10
10
  * messages (and the number of times the message has been seen).
11
11
  */
12
12
  this.store = new Map();
13
- this.messagesByBlock = new Set();
14
13
  }
15
- addMessage(messageKey, message, l1BlocKNumber, messageIndex) {
16
- if (this.messagesByBlock.has(`${l1BlocKNumber}-${messageIndex}`)) {
17
- return;
18
- }
19
- this.messagesByBlock.add(`${l1BlocKNumber}-${messageIndex}`);
20
- this.addMessageUnsafe(messageKey, message);
21
- }
22
- addMessageUnsafe(messageKey, message) {
23
- const messageKeyBigInt = messageKey.value;
14
+ addMessage(messageKey, message) {
15
+ const messageKeyBigInt = messageKey.toBigInt();
24
16
  const msgAndCount = this.store.get(messageKeyBigInt);
25
17
  if (msgAndCount) {
26
18
  msgAndCount.count++;
@@ -41,10 +33,6 @@ export class L1ToL2MessageStore {
41
33
  * for removing messages or fetching multiple messages.
42
34
  */
43
35
  export class PendingL1ToL2MessageStore extends L1ToL2MessageStore {
44
- constructor() {
45
- super(...arguments);
46
- this.cancelledMessagesByBlock = new Set();
47
- }
48
36
  getMessageKeys(limit) {
49
37
  if (limit < 1) {
50
38
  return [];
@@ -63,18 +51,11 @@ export class PendingL1ToL2MessageStore extends L1ToL2MessageStore {
63
51
  }
64
52
  return messages;
65
53
  }
66
- removeMessage(messageKey, l1BlockNumber, messageIndex) {
54
+ removeMessage(messageKey) {
67
55
  // ignore 0 - messageKey is a hash, so a 0 can probabilistically never occur. It is best to skip it.
68
56
  if (messageKey.equals(Fr.ZERO)) {
69
57
  return;
70
58
  }
71
- if (this.cancelledMessagesByBlock.has(`${l1BlockNumber}-${messageIndex}`)) {
72
- return;
73
- }
74
- this.cancelledMessagesByBlock.add(`${l1BlockNumber}-${messageIndex}`);
75
- this.removeMessageUnsafe(messageKey);
76
- }
77
- removeMessageUnsafe(messageKey) {
78
59
  const messageKeyBigInt = messageKey.value;
79
60
  const msgAndCount = this.store.get(messageKeyBigInt);
80
61
  if (!msgAndCount) {
@@ -88,4 +69,4 @@ export class PendingL1ToL2MessageStore extends L1ToL2MessageStore {
88
69
  }
89
70
  }
90
71
  }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdG9fbDJfbWVzc2FnZV9zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcmNoaXZlci9tZW1vcnlfYXJjaGl2ZXJfc3RvcmUvbDFfdG9fbDJfbWVzc2FnZV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHOUM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQVE3QjtRQVBBOzs7V0FHRztRQUNPLFVBQUssR0FBdUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN4RCxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFFN0IsQ0FBQztJQUVoQixVQUFVLENBQUMsVUFBYyxFQUFFLE9BQXNCLEVBQUUsYUFBcUIsRUFBRSxZQUFvQjtRQUM1RixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxJQUFJLFlBQVksRUFBRSxDQUFDLEVBQUU7WUFDaEUsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFjLEVBQUUsT0FBc0I7UUFDckQsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQzFDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckQsSUFBSSxXQUFXLEVBQUU7WUFDZixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDckI7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsT0FBTyxFQUFFLEtB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
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdG9fbDJfbWVzc2FnZV9zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcmNoaXZlci9tZW1vcnlfYXJjaGl2ZXJfc3RvcmUvbDFfdG9fbDJfbWVzc2FnZV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQU83QjtRQU5BOzs7V0FHRztRQUNPLFVBQUssR0FBdUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVqRCxDQUFDO0lBRWhCLFVBQVUsQ0FBQyxVQUFjLEVBQUUsT0FBc0I7UUFDL0MsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRCxJQUFJLFdBQVcsRUFBRTtZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNyQjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDekQ7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ25ELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxVQUFjO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDRjtBQUVEOzs7R0FHRztBQUNILE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxrQkFBa0I7SUFDL0QsY0FBYyxDQUFDLEtBQWE7UUFDMUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELHdFQUF3RTtRQUN4RSxvSEFBb0g7UUFDcEgsTUFBTSxRQUFRLEdBQVMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckcsS0FBSyxNQUFNLGVBQWUsSUFBSSxjQUFjLEVBQUU7WUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFTLENBQUMsQ0FBQztnQkFDakQsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtvQkFDN0IsT0FBTyxRQUFRLENBQUM7aUJBQ2pCO2FBQ0Y7U0FDRjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxhQUFhLENBQUMsVUFBYztRQUMxQixvR0FBb0c7UUFDcEcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDMUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELGdCQUFnQixxQkFBcUIsQ0FBQyxDQUFDO1NBQy9HO1FBQ0QsSUFBSSxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRTtZQUN6QixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDckI7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0NBQ0YifQ==
@@ -1,6 +1,6 @@
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
4
  import { ArchiverDataStore } from '../archiver_store.js';
5
5
  /**
6
6
  * Simple, in-memory implementation of an archiver data store.
@@ -43,6 +43,8 @@ export declare class MemoryArchiverStore implements ArchiverDataStore {
43
43
  * Contains all the pending L1 to L2 messages (accounts for duplication of messages)
44
44
  */
45
45
  private pendingL1ToL2Messages;
46
+ private lastL1BlockAddedMessages;
47
+ private lastL1BlockCancelledMessages;
46
48
  constructor(
47
49
  /** The max number of logs that can be obtained in 1 "getUnencryptedLogs" call. */
48
50
  maxLogs: number);
@@ -63,15 +65,17 @@ export declare class MemoryArchiverStore implements ArchiverDataStore {
63
65
  /**
64
66
  * Append new pending L1 to L2 messages to the store.
65
67
  * @param messages - The L1 to L2 messages to be added to the store.
68
+ * @param l1BlockNumber - The L1 block number for which to add the messages.
66
69
  * @returns True if the operation is successful (always in this implementation).
67
70
  */
68
- addPendingL1ToL2Messages(messages: PendingL1ToL2Message[]): Promise<boolean>;
71
+ addPendingL1ToL2Messages(messages: L1ToL2Message[], l1BlockNumber: bigint): Promise<boolean>;
69
72
  /**
70
73
  * Remove pending L1 to L2 messages from the store (if they were cancelled).
71
74
  * @param messages - The message keys to be removed from the store.
75
+ * @param l1BlockNumber - The L1 block number for which to remove the messages.
72
76
  * @returns True if the operation is successful (always in this implementation).
73
77
  */
74
- cancelPendingL1ToL2Messages(messages: CancelledL1ToL2Message[]): Promise<boolean>;
78
+ cancelPendingL1ToL2Messages(messages: Fr[], l1BlockNumber: bigint): Promise<boolean>;
75
79
  /**
76
80
  * Messages that have been published in an L2 block are confirmed.
77
81
  * Add them to the confirmed store, also remove them from the pending store.
@@ -158,6 +162,10 @@ export declare class MemoryArchiverStore implements ArchiverDataStore {
158
162
  * @returns The number of the latest L2 block processed.
159
163
  */
160
164
  getBlockNumber(): Promise<number>;
161
- getL1BlockNumber(): Promise<bigint>;
165
+ getL1BlockNumber(): Promise<{
166
+ addedBlock: bigint;
167
+ addedMessages: bigint;
168
+ cancelledMessages: bigint;
169
+ }>;
162
170
  }
163
171
  //# sourceMappingURL=memory_archiver_store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory_archiver_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/memory_archiver_store/memory_archiver_store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory_archiver_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/memory_archiver_store/memory_archiver_store.ts"],"names":[],"mappings":"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"}