@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.
- package/dest/archiver/archiver.d.ts +1 -2
- package/dest/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +51 -45
- package/dest/archiver/archiver_store.d.ts +18 -5
- package/dest/archiver/archiver_store.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.d.ts +1 -1
- package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.js +71 -74
- package/dest/archiver/data_retrieval.d.ts +4 -3
- package/dest/archiver/data_retrieval.d.ts.map +1 -1
- package/dest/archiver/data_retrieval.js +1 -1
- package/dest/archiver/eth_log_handlers.d.ts +4 -3
- package/dest/archiver/eth_log_handlers.d.ts.map +1 -1
- package/dest/archiver/eth_log_handlers.js +10 -6
- package/dest/archiver/lmdb_archiver_store.d.ts +11 -6
- package/dest/archiver/lmdb_archiver_store.d.ts.map +1 -1
- package/dest/archiver/lmdb_archiver_store.js +61 -78
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts +3 -7
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts.map +1 -1
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.js +4 -23
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts +12 -4
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts.map +1 -1
- package/dest/archiver/memory_archiver_store/memory_archiver_store.js +30 -14
- package/package.json +8 -7
|
@@ -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:
|
|
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
|
|
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(
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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
|
-
|
|
7
|
-
|
|
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: '
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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,
|
|
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
|
|
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(
|
|
177
|
+
cancelPendingL1ToL2Messages(cancelledMessages, l1BlockNumber) {
|
|
189
178
|
return __classPrivateFieldGet(this, _LMDBArchiverStore_tables, "f").l1ToL2Messages.transaction(() => {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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
|
-
|
|
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",
|
|
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",
|
|
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",
|
|
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 [
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
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(),
|
|
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
|
|
431
|
-
|
|
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
|
-
},
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
16
|
-
|
|
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
|
|
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,
|
|
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:
|
|
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:
|
|
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<
|
|
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,
|
|
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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"}
|