@aztec/archiver 0.18.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 { CancelledL1ToL2Message, ContractData, ExtendedContractData, GetUnencryptedLogsResponse, L1ToL2Message, L2Block, L2BlockL2Logs, L2Tx, LogFilter, LogType, PendingL1ToL2Message, TxHash } from '@aztec/circuit-types';
1
+ import { ContractData, ExtendedContractData, GetUnencryptedLogsResponse, L1ToL2Message, L2Block, L2BlockL2Logs, L2Tx, LogFilter, LogType, TxHash } from '@aztec/circuit-types';
2
2
  import { Fr } from '@aztec/circuits.js';
3
3
  import { AztecAddress } from '@aztec/foundation/aztec-address';
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,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,sBAAsB,CAAC;AAC9B,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAI/D,OAAO,EAA0B,YAAY,EAAE,MAAM,MAAM,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AA+BxD;;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;;;;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;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,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;CAwHpC"}
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"}
@@ -2,11 +2,9 @@ var _LMDBArchiverStore_instances, _LMDBArchiverStore_tables, _LMDBArchiverStore_
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
3
  import { ExtendedContractData, ExtendedUnencryptedL2Log, INITIAL_L2_BLOCK_NUM, L1ToL2Message, L2Block, L2BlockL2Logs, LogId, LogType, UnencryptedL2Log, } from '@aztec/circuit-types';
4
4
  import { Fr } from '@aztec/circuits.js';
5
- import { toBigIntBE, toBufferBE } from '@aztec/foundation/bigint-buffer';
6
5
  import { createDebugLogger } from '@aztec/foundation/log';
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,7 @@ 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();
65
63
  blockCtx.blockHash = block.getBlockHash();
66
64
  // no need to await, all writes are enqueued in the transaction
67
65
  // awaiting would interrupt the execution flow of this callback and "leak" the transaction to some other part
@@ -141,34 +139,29 @@ export class LMDBArchiverStore {
141
139
  /**
142
140
  * Append new pending L1 to L2 messages to the store.
143
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.
144
143
  * @returns True if the operation is successful.
145
144
  */
146
- addPendingL1ToL2Messages(messages) {
145
+ addPendingL1ToL2Messages(messages, l1BlockNumber) {
147
146
  return __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2Messages.transaction(() => {
148
- 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) {
149
153
  const messageKey = message.entryKey?.toBuffer();
150
154
  if (!messageKey) {
151
155
  throw new Error('Message does not have an entry key');
152
156
  }
153
- const dupeKey = l1ToL2MessageBlockKey(blockNumber, 'newMessage', indexInBlock);
154
- const messageInBlock = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2MessagesByBlock.get(dupeKey);
155
- if (messageInBlock?.equals(messageKey)) {
156
- continue;
157
- }
158
- else {
159
- if (messageInBlock) {
160
- __classPrivateFieldGet(this, _LMDBArchiverStore_log, "f").call(this, `Previously add pending message ${messageInBlock.toString('hex')} at ${dupeKey.toString()}, now got ${messageKey.toString('hex')}`);
161
- }
162
- void __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2MessagesByBlock.put(dupeKey, messageKey);
163
- }
164
- let messageWithCount = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2Messages.get(messageKey);
165
- if (!messageWithCount) {
166
- messageWithCount = {
157
+ let messageCtx = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2Messages.get(messageKey);
158
+ if (!messageCtx) {
159
+ messageCtx = {
167
160
  message: message.toBuffer(),
168
161
  pendingCount: 0,
169
162
  confirmedCount: 0,
170
163
  };
171
- void __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2Messages.put(messageKey, messageWithCount);
164
+ void __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2Messages.put(messageKey, messageCtx);
172
165
  }
173
166
  __classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_updateMessageCountInTx).call(this, messageKey, message, 1, 0);
174
167
  }
@@ -177,26 +170,22 @@ export class LMDBArchiverStore {
177
170
  }
178
171
  /**
179
172
  * Remove pending L1 to L2 messages from the store (if they were cancelled).
180
- * @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.
181
175
  * @returns True if the operation is successful.
182
176
  */
183
- cancelPendingL1ToL2Messages(messages) {
177
+ cancelPendingL1ToL2Messages(cancelledMessages, l1BlockNumber) {
184
178
  return __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2Messages.transaction(() => {
185
- for (const { blockNumber, indexInBlock, entryKey } of messages) {
186
- const messageKey = entryKey.toBuffer();
187
- const dupeKey = l1ToL2MessageBlockKey(blockNumber, 'cancelledMessage', indexInBlock);
188
- const messageInBlock = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2MessagesByBlock.get(dupeKey);
189
- 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) {
190
186
  continue;
191
187
  }
192
- else {
193
- if (messageInBlock) {
194
- __classPrivateFieldGet(this, _LMDBArchiverStore_log, "f").call(this, `Previously add pending message ${messageInBlock.toString('hex')} at ${dupeKey.toString()}, now got ${messageKey.toString('hex')}`);
195
- }
196
- void __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2MessagesByBlock.put(dupeKey, messageKey);
197
- }
198
- const message = __classPrivateFieldGet(this, _LMDBArchiverStore_instances, "m", _LMDBArchiverStore_getL1ToL2Message).call(this, messageKey);
199
- __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);
200
189
  }
201
190
  return true;
202
191
  });
@@ -397,21 +386,20 @@ export class LMDBArchiverStore {
397
386
  const [lastBlockNumber] = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").blocks.getKeys({ reverse: true, limit: 1 }).asArray;
398
387
  return Promise.resolve(typeof lastBlockNumber === 'number' ? lastBlockNumber : INITIAL_L2_BLOCK_NUM - 1);
399
388
  }
389
+ /**
390
+ * Gets the last L1 block number processed by the archiver
391
+ */
400
392
  getL1BlockNumber() {
401
393
  // inverse range with no start/end will return the last value
402
- const [lastBlock] = __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").blocks.getRange({ reverse: true, limit: 1 }).asArray;
403
- if (!lastBlock) {
404
- return Promise.resolve(0n);
405
- }
406
- else {
407
- const blockCtx = lastBlock.value;
408
- if (!blockCtx.l1BlockNumber) {
409
- return Promise.reject(new Error('L1 block number not found'));
410
- }
411
- else {
412
- return Promise.resolve(toBigIntBE(asBuffer(blockCtx.l1BlockNumber)));
413
- }
414
- }
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
+ });
415
403
  }
416
404
  }
417
405
  _LMDBArchiverStore_tables = new WeakMap(), _LMDBArchiverStore_logsMaxPageSize = new WeakMap(), _LMDBArchiverStore_log = new WeakMap(), _LMDBArchiverStore_instances = new WeakSet(), _LMDBArchiverStore_filterUnencryptedLogsOfTx = function _LMDBArchiverStore_filterUnencryptedLogsOfTx(filter) {
@@ -537,4 +525,4 @@ _LMDBArchiverStore_tables = new WeakMap(), _LMDBArchiverStore_logsMaxPageSize =
537
525
  function asBuffer(arr) {
538
526
  return Buffer.isBuffer(arr) ? arr : Buffer.from(arr.buffer, arr.byteOffset, arr.length / arr.BYTES_PER_ELEMENT);
539
527
  }
540
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG1kYl9hcmNoaXZlcl9zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcmNoaXZlci9sbWRiX2FyY2hpdmVyX3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUdMLG9CQUFvQixFQUNwQix3QkFBd0IsRUFFeEIsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixPQUFPLEVBQ1AsYUFBYSxFQUdiLEtBQUssRUFDTCxPQUFPLEVBR1AsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFlMUQsU0FBUyxxQkFBcUIsQ0FDNUIsYUFBcUIsRUFDckIsR0FBc0MsRUFDdEMsWUFBb0I7SUFFcEIsT0FBTyxHQUFHLFVBQVUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztBQUNuRixDQUFDO0FBWUQsbUJBQW1CO0FBRW5COztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQW9CNUIsWUFBWSxFQUFnQixFQUFFLGtCQUEwQixJQUFJOztRQW5CNUQsNENBYUU7UUFFRixxREFBeUI7UUFFekIsaUNBQU8saUJBQWlCLENBQUMscUJBQXFCLENBQUMsRUFBQztRQUc5Qyx1QkFBQSxJQUFJLDZCQUFXO1lBQ2IsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUMxQixXQUFXLEVBQUUsUUFBUTtnQkFDckIsUUFBUSxFQUFFLFNBQVM7YUFDcEIsQ0FBQztZQUNGLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtn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
528
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG1kYl9hcmNoaXZlcl9zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcmNoaXZlci9sbWRiX2FyY2hpdmVyX3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUVMLG9CQUFvQixFQUNwQix3QkFBd0IsRUFFeEIsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixPQUFPLEVBQ1AsYUFBYSxFQUdiLEtBQUssRUFDTCxPQUFPLEVBRVAsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBd0IxRCxNQUFNLDhCQUE4QixHQUFHLDRCQUE0QixDQUFDO0FBQ3BFLE1BQU0sMEJBQTBCLEdBQUcseUJBQXlCLENBQUM7QUFDN0QsbUJBQW1CO0FBRW5COztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQW9CNUIsWUFBWSxFQUFnQixFQUFFLGtCQUEwQixJQUFJOztRQW5CNUQsNENBYUU7UUFFRixxREFBeUI7UUFFekIsaUNBQU8saUJBQWlCLENBQUMscUJBQXFCLENBQUMsRUFBQztRQUc5Qyx1QkFBQSxJQUFJLDZCQUFXO1lBQ2IsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUMxQixXQUFXLEVBQUUsUUFBUTtnQkFDckIsUUFBUSxFQUFFLFNBQVM7YUFDcEIsQ0FBQztZQUNGLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtnQkFDN0IsV0FBVyxFQUFFLFFBQVE7Z0JBQ3JCLFFBQVEsRUFBRSxTQUFTO2FBQ3BCLENBQUM7WUFDRixhQUFhLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDekMsV0FBVyxFQUFFLFFBQVE7Z0JBQ3JCLFFBQVEsRUFBRSxTQUFTO2FB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
@@ -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,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;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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdG9fbDJfbWVzc2FnZV9zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcmNoaXZlci9tZW1vcnlfYXJjaGl2ZXJfc3RvcmUvbDFfdG9fbDJfbWVzc2FnZV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQVE3QjtRQVBBOzs7V0FHRztRQUNPLFVBQUssR0FBdUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN4RCxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFFN0IsQ0FBQztJQUVoQixVQUFVLENBQUMsVUFBYyxFQUFFLE9BQXNCLEVBQUUsYUFBcUIsRUFBRSxZQUFvQjtRQUM1RixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxJQUFJLFlBQVksRUFBRSxDQUFDLEVBQUU7WUFDaEUsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFjLEVBQUUsT0FBc0I7UUFDckQsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQzFDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckQsSUFBSSxXQUFXLEVBQUU7WUFDZixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDckI7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsT0FBTyxFQUFFLEtB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
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdG9fbDJfbWVzc2FnZV9zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcmNoaXZlci9tZW1vcnlfYXJjaGl2ZXJfc3RvcmUvbDFfdG9fbDJfbWVzc2FnZV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQU83QjtRQU5BOzs7V0FHRztRQUNPLFVBQUssR0FBdUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVqRCxDQUFDO0lBRWhCLFVBQVUsQ0FBQyxVQUFjLEVBQUUsT0FBc0I7UUFDL0MsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRCxJQUFJLFdBQVcsRUFBRTtZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNyQjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDekQ7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ25ELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxVQUFjO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDRjtBQUVEOzs7R0FHRztBQUNILE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxrQkFBa0I7SUFDL0QsY0FBYyxDQUFDLEtBQWE7UUFDMUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELHdFQUF3RTtRQUN4RSxvSEFBb0g7UUFDcEgsTUFBTSxRQUFRLEdBQVMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckcsS0FBSyxNQUFNLGVBQWUsSUFBSSxjQUFjLEVBQUU7WUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFTLENBQUMsQ0FBQztnQkFDakQsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtvQkFDN0IsT0FBTyxRQUFRLENBQUM7aUJBQ2pCO2FBQ0Y7U0FDRjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxhQUFhLENBQUMsVUFBYztRQUMxQixvR0FBb0c7UUFDcEcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDMUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELGdCQUFnQixxQkFBcUIsQ0FBQyxDQUFDO1NBQy9HO1FBQ0QsSUFBSSxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRTtZQUN6QixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDckI7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0NBQ0YifQ==
@@ -1,4 +1,4 @@
1
- import { CancelledL1ToL2Message, ContractData, ExtendedContractData, GetUnencryptedLogsResponse, L1ToL2Message, L2Block, L2BlockL2Logs, L2Tx, LogFilter, LogType, PendingL1ToL2Message, TxHash } from '@aztec/circuit-types';
1
+ import { ContractData, ExtendedContractData, GetUnencryptedLogsResponse, L1ToL2Message, L2Block, L2BlockL2Logs, L2Tx, LogFilter, LogType, TxHash } from '@aztec/circuit-types';
2
2
  import { Fr } from '@aztec/circuits.js';
3
3
  import { AztecAddress } from '@aztec/foundation/aztec-address';
4
4
  import { ArchiverDataStore } from '../archiver_store.js';
@@ -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":"AAAA,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,oBAAoB,EAEpB,0BAA0B,EAE1B,aAAa,EACb,OAAO,EAEP,aAAa,EACb,IAAI,EACJ,SAAS,EAET,OAAO,EACP,oBAAoB,EACpB,MAAM,EAEP,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,EAAE,EAAuC,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD;;GAEG;AACH,qBAAa,mBAAoB,YAAW,iBAAiB;IA6CzD,kFAAkF;aAClE,OAAO,EAAE,MAAM;IA7CjC;;OAEG;IACH,OAAO,CAAC,eAAe,CAAwB;IAE/C;;OAEG;IACH,OAAO,CAAC,KAAK,CAAc;IAE3B;;;OAGG;IACH,OAAO,CAAC,qBAAqB,CAAuB;IAEpD;;;OAGG;IACH,OAAO,CAAC,uBAAuB,CAAuB;IAEtD;;OAEG;IACH,OAAO,CAAC,2BAA2B,CAA8C;IAEjF;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAAgD;IAE5E;;;OAGG;IACH,OAAO,CAAC,uBAAuB,CAAgD;IAE/E;;OAEG;IACH,OAAO,CAAC,qBAAqB,CAA8D;;IAGzF,kFAAkF;IAClE,OAAO,EAAE,MAAM;IAGjC;;;;OAIG;IACI,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAMrD;;;;;;OAMG;IACH,OAAO,CAAC,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5G;;;;OAIG;IACI,wBAAwB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAOnF;;;;OAIG;IACI,2BAA2B,CAAC,QAAQ,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAOxF;;;;;OAKG;IACI,qBAAqB,CAAC,WAAW,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAQjE;;;;;OAKG;IACI,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBhG;;;;;;OAMG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAejE;;;;OAIG;IACI,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAKzD;;;;OAIG;IACI,2BAA2B,CAAC,KAAK,GAAE,MAA4C,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAItG;;;;OAIG;IACI,yBAAyB,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAQxE;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAahF;;;;;OAKG;IACH,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,0BAA0B,CAAC;IA8E1E;;;;OAIG;IACH,uBAAuB,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAKjG;;;;OAIG;IACI,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAOxF;;;;;OAKG;IACI,eAAe,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAcxF;;;;;OAKG;IACI,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC;IAQtF;;;OAGG;IACI,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAOjC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;CAM3C"}
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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"}
@@ -44,6 +44,8 @@ export class MemoryArchiverStore {
44
44
  * Contains all the pending L1 to L2 messages (accounts for duplication of messages)
45
45
  */
46
46
  this.pendingL1ToL2Messages = new PendingL1ToL2MessageStore();
47
+ this.lastL1BlockAddedMessages = 0n;
48
+ this.lastL1BlockCancelledMessages = 0n;
47
49
  }
48
50
  /**
49
51
  * Append new blocks to the store's list.
@@ -74,22 +76,32 @@ export class MemoryArchiverStore {
74
76
  /**
75
77
  * Append new pending L1 to L2 messages to the store.
76
78
  * @param messages - The L1 to L2 messages to be added to the store.
79
+ * @param l1BlockNumber - The L1 block number for which to add the messages.
77
80
  * @returns True if the operation is successful (always in this implementation).
78
81
  */
79
- addPendingL1ToL2Messages(messages) {
80
- for (const { message, blockNumber, indexInBlock } of messages) {
81
- this.pendingL1ToL2Messages.addMessage(message.entryKey, message, blockNumber, indexInBlock);
82
+ addPendingL1ToL2Messages(messages, l1BlockNumber) {
83
+ if (l1BlockNumber <= this.lastL1BlockAddedMessages) {
84
+ return Promise.resolve(false);
85
+ }
86
+ this.lastL1BlockAddedMessages = l1BlockNumber;
87
+ for (const message of messages) {
88
+ this.pendingL1ToL2Messages.addMessage(message.entryKey, message);
82
89
  }
83
90
  return Promise.resolve(true);
84
91
  }
85
92
  /**
86
93
  * Remove pending L1 to L2 messages from the store (if they were cancelled).
87
94
  * @param messages - The message keys to be removed from the store.
95
+ * @param l1BlockNumber - The L1 block number for which to remove the messages.
88
96
  * @returns True if the operation is successful (always in this implementation).
89
97
  */
90
- cancelPendingL1ToL2Messages(messages) {
91
- messages.forEach(({ entryKey, blockNumber, indexInBlock }) => {
92
- this.pendingL1ToL2Messages.removeMessage(entryKey, blockNumber, indexInBlock);
98
+ cancelPendingL1ToL2Messages(messages, l1BlockNumber) {
99
+ if (l1BlockNumber <= this.lastL1BlockCancelledMessages) {
100
+ return Promise.resolve(false);
101
+ }
102
+ this.lastL1BlockCancelledMessages = l1BlockNumber;
103
+ messages.forEach(entryKey => {
104
+ this.pendingL1ToL2Messages.removeMessage(entryKey);
93
105
  });
94
106
  return Promise.resolve(true);
95
107
  }
@@ -101,8 +113,8 @@ export class MemoryArchiverStore {
101
113
  */
102
114
  confirmL1ToL2Messages(messageKeys) {
103
115
  messageKeys.forEach(messageKey => {
104
- this.confirmedL1ToL2Messages.addMessageUnsafe(messageKey, this.pendingL1ToL2Messages.getMessage(messageKey));
105
- this.pendingL1ToL2Messages.removeMessageUnsafe(messageKey);
116
+ this.confirmedL1ToL2Messages.addMessage(messageKey, this.pendingL1ToL2Messages.getMessage(messageKey));
117
+ this.pendingL1ToL2Messages.removeMessage(messageKey);
106
118
  });
107
119
  return Promise.resolve(true);
108
120
  }
@@ -329,10 +341,14 @@ export class MemoryArchiverStore {
329
341
  return Promise.resolve(this.l2BlockContexts[this.l2BlockContexts.length - 1].block.number);
330
342
  }
331
343
  getL1BlockNumber() {
332
- if (this.l2BlockContexts.length === 0) {
333
- return Promise.resolve(0n);
334
- }
335
- return Promise.resolve(this.l2BlockContexts[this.l2BlockContexts.length - 1].block.getL1BlockNumber());
344
+ const addedBlock = this.l2BlockContexts[this.l2BlockContexts.length - 1]?.block?.getL1BlockNumber() ?? 0n;
345
+ const addedMessages = this.lastL1BlockAddedMessages;
346
+ const cancelledMessages = this.lastL1BlockCancelledMessages;
347
+ return Promise.resolve({
348
+ addedBlock,
349
+ addedMessages,
350
+ cancelledMessages,
351
+ });
336
352
  }
337
353
  }
338
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5X2FyY2hpdmVyX3N0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FyY2hpdmVyL21lbW9yeV9hcmNoaXZlcl9zdG9yZS9tZW1vcnlfYXJjaGl2ZXJfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLHdCQUF3QixFQUV4QixvQkFBb0IsRUFHcEIsY0FBYyxFQUlkLEtBQUssRUFDTCxPQUFPLEVBR1AsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFNLG1DQUFtQyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFNUY7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBNEM5QjtJQUNFLGtGQUFrRjtJQUNsRSxPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQTdDakM7O1dBRUc7UUFDSyxvQkFBZSxHQUFxQixFQUFFLENBQUM7UUFFL0M7O1dBRUc7UUFDSyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBRTNCOzs7V0FHRztRQUNLLDBCQUFxQixHQUFvQixFQUFFLENBQUM7UUFFcEQ7OztXQUdHO1FBQ0ssNEJBQXVCLEdBQW9CLEVBQUUsQ0FBQztRQUV0RDs7V0FFRztRQUNLLGdDQUEyQixHQUEyQyxFQUFFLENBQUM7UUFFakY7O1dBRUc7UUFDSyx5QkFBb0IsR0FBc0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUU1RTs7O1dBR0c7UUFDSyw0QkFBdUIsR0FBdUIsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBRS9FOztXQUVHO1FBQ0ssMEJBQXFCLEdBQThCLElBQUkseUJBQXlCLEVBQUUsQ0FBQztJQUt4RixDQUFDO0lBRUo7Ozs7T0FJRztJQUNJLFNBQVMsQ0FBQyxNQUFpQjtRQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE9BQU8sQ0FBQyxhQUE0QixFQUFFLGVBQThCLEVBQUUsV0FBbUI7UUFDdkYsSUFBSSxhQUFhLEVBQUU7WUFDakIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLGFBQWEsQ0FBQztTQUNoRjtRQUVELElBQUksZUFBZSxFQUFFO1lBQ25CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxlQUFlLENBQUM7U0FDcEY7UUFFRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSx3QkFBd0IsQ0FBQyxRQUFnQztRQUM5RCxLQUFLLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxJQUFJLFFBQVEsRUFBRTtZQUM3RCxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFTLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUM5RjtRQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLDJCQUEyQixDQUFDLFFBQWtDO1FBQ25FLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRTtZQUMzRCxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0kscUJBQXFCLENBQUMsV0FBaUI7UUFDNUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFFLENBQUMsQ0FBQztZQUM5RyxJQUFJLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksdUJBQXVCLENBQUMsSUFBNEIsRUFBRSxRQUFnQjtRQUMzRSwrQkFBK0I7UUFDL0IsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLEVBQUU7WUFDL0IsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDbEQ7UUFFRCwwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxFQUFFO1lBQ3RELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUMzRDthQUFNO1lBQ0wsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUN4RDtRQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksU0FBUyxDQUFDLElBQVksRUFBRSxLQUFhO1FBQzFDLG1EQUFtRDtRQUNuRCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDYixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM3RDtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNELElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQzVDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM1QjtRQUVELE1BQU0sT0FBTyxHQUFHLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE9BQU8sQ0FBQyxNQUFjO1FBQzNCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSwyQkFBMkIsQ0FBQyxRQUFnQixtQ0FBbUM7UUFDcEYsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHlCQUF5QixDQUFDLFVBQWM7UUFDN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsVUFBVSxDQUFDLFFBQVEsRUFBRSw0Q0FBNEMsQ0FBQyxDQUFDO1NBQ2pIO1FBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxPQUFPLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxPQUFnQjtRQUNuRCxJQUFJLElBQUksR0FBRyxvQkFBb0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDNUM7UUFDRCxNQUFNLElBQUksR0FBRyxPQUFPLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUM7UUFDdkcsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN0QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUI7UUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsb0JBQW9CLENBQUM7UUFDL0MsTUFBTSxRQUFRLEdBQUcsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUNwQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxrQkFBa0IsQ0FBQyxNQUFpQjtRQUNsQyxJQUFJLE1BQTBCLENBQUM7UUFDL0IsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUM7UUFDdkQsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUVyQixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDbkIsdURBQXVEO1lBQ3ZELElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRTtnQkFDcEYsY0FBYyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDO2dCQUNwRSxjQUFjLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7Z0JBQ3pDLFlBQVksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxxQ0FBcUM7YUFDbkY7aUJBQU07Z0JBQ0wsY0FBYyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQUcsb0JBQW9CLENBQUM7YUFDMUQ7U0FDRjthQUFNO1lBQ0wsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFFdkIsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtnQkFDbEMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQUcsb0JBQW9CLENBQUM7YUFDMUQ7U0FDRjtRQUVELElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDaEMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsb0JBQW9CLENBQUM7U0FDdEQ7UUFFRCxtREFBbUQ7UUFDbkQsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0UsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sSUFBSSxZQUFZLEdBQUcsY0FBYyxJQUFJLFlBQVksSUFBSSxDQUFDLEVBQUU7WUFDOUcsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO2dCQUNyQixJQUFJLEVBQUUsRUFBRTtnQkFDUixVQUFVLEVBQUUsS0FBSzthQUNsQixDQUFDLENBQUM7U0FDSjtRQUVELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFDL0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUVqQyxNQUFNLElBQUksR0FBK0IsRUFBRSxDQUFDO1FBRTVDLE9BQU8sY0FBYyxHQUFHLFlBQVksRUFBRSxjQUFjLEVBQUUsRUFBRTtZQUN0RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvRCxPQUFPLGNBQWMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsRUFBRTtnQkFDakUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDMUcsT0FBTyxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRTtvQkFDbkQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNqQyxJQUNFLENBQUMsQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ2xFLENBQUMsQ0FBQyxlQUFlLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7d0JBQ2pFLENBQUMsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDNUM7d0JBQ0EsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLHdCQUF3QixDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FDdEcsQ0FBQzt3QkFDRixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTs0QkFDaEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO2dDQUNyQixJQUFJO2dDQUNKLFVBQVUsRUFBRSxJQUFJOzZCQUNqQixDQUFDLENBQUM7eUJBQ0o7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsWUFBWSxHQUFHLENBQUMsQ0FBQzthQUNsQjtZQUNELGNBQWMsR0FBRyxDQUFDLENBQUM7U0FDcEI7UUFFRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDckIsSUFBSTtZQUNKLFVBQVUsRUFBRSxLQUFLO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsdUJBQXVCLENBQUMsZUFBNkI7UUFDbkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6RSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSw4QkFBOEIsQ0FBQyxRQUFnQjtRQUNwRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUMxQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUI7UUFDRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGVBQWUsQ0FBQyxlQUE2QjtRQUNsRCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM1QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbkM7UUFDRCxLQUFLLE1BQU0sWUFBWSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDL0MsS0FBSyxNQUFNLFlBQVksSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRTtnQkFDN0QsSUFBSSxZQUFZLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBRTtvQkFDeEQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUN0QzthQUNGO1NBQ0Y7UUFDRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksc0JBQXNCLENBQUMsVUFBa0I7UUFDOUMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDNUMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsTUFBTSxLQUFLLEdBQXdCLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxHQUFHLG9CQUFvQixDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ2xHLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGNBQWM7UUFDbkIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUN6RyxDQUFDO0NBQ0YifQ==
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5X2FyY2hpdmVyX3N0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FyY2hpdmVyL21lbW9yeV9hcmNoaXZlcl9zdG9yZS9tZW1vcnlfYXJjaGl2ZXJfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHdCQUF3QixFQUV4QixvQkFBb0IsRUFHcEIsY0FBYyxFQUlkLEtBQUssRUFDTCxPQUFPLEVBRVAsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFNLG1DQUFtQyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFNUY7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBK0M5QjtJQUNFLGtGQUFrRjtJQUNsRSxPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQWhEakM7O1dBRUc7UUFDSyxvQkFBZSxHQUFxQixFQUFFLENBQUM7UUFFL0M7O1dBRUc7UUFDSyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBRTNCOzs7V0FHRztRQUNLLDBCQUFxQixHQUFvQixFQUFFLENBQUM7UUFFcEQ7OztXQUdHO1FBQ0ssNEJBQXVCLEdBQW9CLEVBQUUsQ0FBQztRQUV0RDs7V0FFRztRQUNLLGdDQUEyQixHQUEyQyxFQUFFLENBQUM7UUFFakY7O1dBRUc7UUFDSyx5QkFBb0IsR0FBc0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUU1RTs7O1dBR0c7UUFDSyw0QkFBdUIsR0FBdUIsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBRS9FOztXQUVHO1FBQ0ssMEJBQXFCLEdBQThCLElBQUkseUJBQXlCLEVBQUUsQ0FBQztRQUVuRiw2QkFBd0IsR0FBVyxFQUFFLENBQUM7UUFDdEMsaUNBQTRCLEdBQVcsRUFBRSxDQUFDO0lBSy9DLENBQUM7SUFFSjs7OztPQUlHO0lBQ0ks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