@aztec/archiver 0.0.1-commit.c7c42ec → 0.0.1-commit.c80b6263
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/README.md +156 -22
- package/dest/archiver.d.ts +136 -0
- package/dest/archiver.d.ts.map +1 -0
- package/dest/archiver.js +781 -0
- package/dest/{archiver/config.d.ts → config.d.ts} +9 -1
- package/dest/config.d.ts.map +1 -0
- package/dest/{archiver/config.js → config.js} +11 -2
- package/dest/errors.d.ts +41 -0
- package/dest/errors.d.ts.map +1 -0
- package/dest/{archiver/errors.js → errors.js} +8 -0
- package/dest/factory.d.ts +9 -7
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +89 -11
- package/dest/index.d.ts +10 -4
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +8 -3
- package/dest/interfaces.d.ts +9 -0
- package/dest/interfaces.d.ts.map +1 -0
- package/dest/interfaces.js +3 -0
- package/dest/{archiver/l1 → l1}/bin/retrieve-calldata.d.ts +1 -1
- package/dest/l1/bin/retrieve-calldata.d.ts.map +1 -0
- package/dest/{archiver/l1 → l1}/bin/retrieve-calldata.js +2 -2
- package/dest/{archiver/l1 → l1}/calldata_retriever.d.ts +3 -3
- package/dest/l1/calldata_retriever.d.ts.map +1 -0
- package/dest/{archiver/l1 → l1}/calldata_retriever.js +2 -2
- package/dest/l1/data_retrieval.d.ts +88 -0
- package/dest/l1/data_retrieval.d.ts.map +1 -0
- package/dest/{archiver/l1 → l1}/data_retrieval.js +35 -54
- package/dest/{archiver/l1 → l1}/debug_tx.d.ts +1 -1
- package/dest/l1/debug_tx.d.ts.map +1 -0
- package/dest/{archiver/l1 → l1}/spire_proposer.d.ts +1 -1
- package/dest/l1/spire_proposer.d.ts.map +1 -0
- package/dest/{archiver/l1 → l1}/trace_tx.d.ts +1 -1
- package/dest/l1/trace_tx.d.ts.map +1 -0
- package/dest/l1/types.d.ts +12 -0
- package/dest/l1/types.d.ts.map +1 -0
- package/dest/{archiver/l1 → l1}/validate_trace.d.ts +6 -3
- package/dest/l1/validate_trace.d.ts.map +1 -0
- package/dest/{archiver/l1 → l1}/validate_trace.js +14 -10
- package/dest/modules/data_source_base.d.ts +84 -0
- package/dest/modules/data_source_base.d.ts.map +1 -0
- package/dest/modules/data_source_base.js +260 -0
- package/dest/modules/data_store_updater.d.ts +73 -0
- package/dest/modules/data_store_updater.d.ts.map +1 -0
- package/dest/modules/data_store_updater.js +302 -0
- package/dest/modules/instrumentation.d.ts +37 -0
- package/dest/modules/instrumentation.d.ts.map +1 -0
- package/dest/{archiver → modules}/instrumentation.js +24 -65
- package/dest/modules/l1_synchronizer.d.ts +75 -0
- package/dest/modules/l1_synchronizer.d.ts.map +1 -0
- package/dest/modules/l1_synchronizer.js +1112 -0
- package/dest/modules/validation.d.ts +17 -0
- package/dest/modules/validation.d.ts.map +1 -0
- package/dest/{archiver → modules}/validation.js +7 -1
- package/dest/store/block_store.d.ts +192 -0
- package/dest/store/block_store.d.ts.map +1 -0
- package/dest/{archiver/kv_archiver_store → store}/block_store.js +163 -49
- package/dest/store/contract_class_store.d.ts +18 -0
- package/dest/store/contract_class_store.d.ts.map +1 -0
- package/dest/{archiver/kv_archiver_store → store}/contract_class_store.js +1 -1
- package/dest/store/contract_instance_store.d.ts +24 -0
- package/dest/store/contract_instance_store.d.ts.map +1 -0
- package/dest/{archiver/kv_archiver_store → store}/contract_instance_store.js +1 -1
- package/dest/store/kv_archiver_store.d.ts +340 -0
- package/dest/store/kv_archiver_store.d.ts.map +1 -0
- package/dest/store/kv_archiver_store.js +447 -0
- package/dest/store/log_store.d.ts +54 -0
- package/dest/store/log_store.d.ts.map +1 -0
- package/dest/{archiver/kv_archiver_store → store}/log_store.js +91 -56
- package/dest/{archiver/kv_archiver_store → store}/message_store.d.ts +1 -1
- package/dest/store/message_store.d.ts.map +1 -0
- package/dest/{archiver/structs → structs}/data_retrieval.d.ts +1 -1
- package/dest/structs/data_retrieval.d.ts.map +1 -0
- package/dest/structs/inbox_message.d.ts +15 -0
- package/dest/structs/inbox_message.d.ts.map +1 -0
- package/dest/{archiver/structs → structs}/published.d.ts +1 -1
- package/dest/structs/published.d.ts.map +1 -0
- package/dest/test/fake_l1_state.d.ts +190 -0
- package/dest/test/fake_l1_state.d.ts.map +1 -0
- package/dest/test/fake_l1_state.js +383 -0
- package/dest/test/index.d.ts +2 -1
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +4 -1
- package/dest/test/mock_archiver.d.ts +2 -2
- package/dest/test/mock_archiver.d.ts.map +1 -1
- package/dest/test/mock_archiver.js +1 -2
- package/dest/test/mock_l1_to_l2_message_source.d.ts +2 -2
- package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
- package/dest/test/mock_l1_to_l2_message_source.js +12 -3
- package/dest/test/mock_l2_block_source.d.ts +23 -16
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +164 -58
- package/dest/test/mock_structs.d.ts +78 -3
- package/dest/test/mock_structs.d.ts.map +1 -1
- package/dest/test/mock_structs.js +140 -7
- package/dest/test/noop_l1_archiver.d.ts +23 -0
- package/dest/test/noop_l1_archiver.d.ts.map +1 -0
- package/dest/test/noop_l1_archiver.js +68 -0
- package/package.json +16 -17
- package/src/archiver.ts +543 -0
- package/src/{archiver/config.ts → config.ts} +13 -2
- package/src/{archiver/errors.ts → errors.ts} +12 -0
- package/src/factory.ts +125 -11
- package/src/index.ts +10 -3
- package/src/interfaces.ts +9 -0
- package/src/{archiver/l1 → l1}/bin/retrieve-calldata.ts +7 -2
- package/src/{archiver/l1 → l1}/calldata_retriever.ts +3 -3
- package/src/{archiver/l1 → l1}/data_retrieval.ts +56 -73
- package/src/{archiver/l1 → l1}/validate_trace.ts +25 -7
- package/src/modules/data_source_base.ts +367 -0
- package/src/modules/data_store_updater.ts +423 -0
- package/src/{archiver → modules}/instrumentation.ts +24 -68
- package/src/modules/l1_synchronizer.ts +930 -0
- package/src/{archiver → modules}/validation.ts +11 -6
- package/src/{archiver/kv_archiver_store → store}/block_store.ts +213 -69
- package/src/{archiver/kv_archiver_store → store}/contract_class_store.ts +1 -1
- package/src/{archiver/kv_archiver_store → store}/contract_instance_store.ts +1 -1
- package/src/{archiver/kv_archiver_store → store}/kv_archiver_store.ts +238 -37
- package/src/{archiver/kv_archiver_store → store}/log_store.ts +148 -89
- package/src/test/fake_l1_state.ts +599 -0
- package/src/test/index.ts +4 -0
- package/src/test/mock_archiver.ts +2 -2
- package/src/test/mock_l1_to_l2_message_source.ts +10 -4
- package/src/test/mock_l2_block_source.ts +176 -70
- package/src/test/mock_structs.ts +269 -8
- package/src/test/noop_l1_archiver.ts +109 -0
- package/dest/archiver/archiver.d.ts +0 -304
- package/dest/archiver/archiver.d.ts.map +0 -1
- package/dest/archiver/archiver.js +0 -1645
- package/dest/archiver/archiver_store.d.ts +0 -308
- package/dest/archiver/archiver_store.d.ts.map +0 -1
- package/dest/archiver/archiver_store.js +0 -4
- package/dest/archiver/archiver_store_test_suite.d.ts +0 -8
- package/dest/archiver/archiver_store_test_suite.d.ts.map +0 -1
- package/dest/archiver/archiver_store_test_suite.js +0 -2770
- package/dest/archiver/config.d.ts.map +0 -1
- package/dest/archiver/errors.d.ts +0 -36
- package/dest/archiver/errors.d.ts.map +0 -1
- package/dest/archiver/index.d.ts +0 -7
- package/dest/archiver/index.d.ts.map +0 -1
- package/dest/archiver/index.js +0 -4
- package/dest/archiver/instrumentation.d.ts +0 -37
- package/dest/archiver/instrumentation.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/block_store.d.ts +0 -157
- package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +0 -18
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +0 -24
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -158
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.js +0 -313
- package/dest/archiver/kv_archiver_store/log_store.d.ts +0 -45
- package/dest/archiver/kv_archiver_store/log_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
- package/dest/archiver/l1/bin/retrieve-calldata.d.ts.map +0 -1
- package/dest/archiver/l1/calldata_retriever.d.ts.map +0 -1
- package/dest/archiver/l1/data_retrieval.d.ts +0 -90
- package/dest/archiver/l1/data_retrieval.d.ts.map +0 -1
- package/dest/archiver/l1/debug_tx.d.ts.map +0 -1
- package/dest/archiver/l1/spire_proposer.d.ts.map +0 -1
- package/dest/archiver/l1/trace_tx.d.ts.map +0 -1
- package/dest/archiver/l1/types.d.ts +0 -12
- package/dest/archiver/l1/types.d.ts.map +0 -1
- package/dest/archiver/l1/validate_trace.d.ts.map +0 -1
- package/dest/archiver/structs/data_retrieval.d.ts.map +0 -1
- package/dest/archiver/structs/inbox_message.d.ts +0 -15
- package/dest/archiver/structs/inbox_message.d.ts.map +0 -1
- package/dest/archiver/structs/published.d.ts.map +0 -1
- package/dest/archiver/validation.d.ts +0 -17
- package/dest/archiver/validation.d.ts.map +0 -1
- package/dest/rpc/index.d.ts +0 -9
- package/dest/rpc/index.d.ts.map +0 -1
- package/dest/rpc/index.js +0 -15
- package/src/archiver/archiver.ts +0 -2157
- package/src/archiver/archiver_store.ts +0 -372
- package/src/archiver/archiver_store_test_suite.ts +0 -2843
- package/src/archiver/index.ts +0 -6
- package/src/rpc/index.ts +0 -16
- /package/dest/{archiver/l1 → l1}/debug_tx.js +0 -0
- /package/dest/{archiver/l1 → l1}/spire_proposer.js +0 -0
- /package/dest/{archiver/l1 → l1}/trace_tx.js +0 -0
- /package/dest/{archiver/l1 → l1}/types.js +0 -0
- /package/dest/{archiver/kv_archiver_store → store}/message_store.js +0 -0
- /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
- /package/dest/{archiver/structs → structs}/inbox_message.js +0 -0
- /package/dest/{archiver/structs → structs}/published.js +0 -0
- /package/src/{archiver/l1 → l1}/README.md +0 -0
- /package/src/{archiver/l1 → l1}/debug_tx.ts +0 -0
- /package/src/{archiver/l1 → l1}/spire_proposer.ts +0 -0
- /package/src/{archiver/l1 → l1}/trace_tx.ts +0 -0
- /package/src/{archiver/l1 → l1}/types.ts +0 -0
- /package/src/{archiver/kv_archiver_store → store}/message_store.ts +0 -0
- /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
- /package/src/{archiver/structs → structs}/inbox_message.ts +0 -0
- /package/src/{archiver/structs → structs}/published.ts +0 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
|
|
2
2
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { filterAsync } from '@aztec/foundation/collection';
|
|
3
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
6
|
import { BufferReader, numToUInt32BE } from '@aztec/foundation/serialize';
|
|
6
7
|
import type { AztecAsyncKVStore, AztecAsyncMap } from '@aztec/kv-store';
|
|
7
8
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
8
|
-
import {
|
|
9
|
+
import { BlockHash, L2Block } from '@aztec/stdlib/block';
|
|
10
|
+
import { MAX_LOGS_PER_TAG } from '@aztec/stdlib/interfaces/api-limit';
|
|
9
11
|
import type { GetContractClassLogsResponse, GetPublicLogsResponse } from '@aztec/stdlib/interfaces/client';
|
|
10
12
|
import {
|
|
11
13
|
ContractClassLog,
|
|
@@ -57,7 +59,7 @@ export class LogStore {
|
|
|
57
59
|
* @param block - The L2 block to extract logs from.
|
|
58
60
|
* @returns An object containing the private and public tagged logs for the block.
|
|
59
61
|
*/
|
|
60
|
-
#extractTaggedLogsFromBlock(block:
|
|
62
|
+
#extractTaggedLogsFromBlock(block: L2Block) {
|
|
61
63
|
// SiloedTag (as string) -> array of log buffers.
|
|
62
64
|
const privateTaggedLogs = new Map<string, Buffer[]>();
|
|
63
65
|
// "{contractAddress}_{tag}" (as string) -> array of log buffers.
|
|
@@ -118,7 +120,7 @@ export class LogStore {
|
|
|
118
120
|
* @returns A map from tag (as string) to an array of serialized private logs belonging to that tag, and a map from
|
|
119
121
|
* "{contractAddress}_{tag}" (as string) to an array of serialized public logs belonging to that key.
|
|
120
122
|
*/
|
|
121
|
-
#extractTaggedLogs(blocks:
|
|
123
|
+
#extractTaggedLogs(blocks: L2Block[]): {
|
|
122
124
|
privateTaggedLogs: Map<string, Buffer[]>;
|
|
123
125
|
publicTaggedLogs: Map<string, Buffer[]>;
|
|
124
126
|
} {
|
|
@@ -144,92 +146,127 @@ export class LogStore {
|
|
|
144
146
|
return { privateTaggedLogs, publicTaggedLogs };
|
|
145
147
|
}
|
|
146
148
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
addLogs(blocks: L2BlockNew[]): Promise<boolean> {
|
|
153
|
-
const { privateTaggedLogs, publicTaggedLogs } = this.#extractTaggedLogs(blocks);
|
|
149
|
+
async #addPrivateLogs(blocks: L2Block[]): Promise<void> {
|
|
150
|
+
const newBlocks = await filterAsync(
|
|
151
|
+
blocks,
|
|
152
|
+
async block => !(await this.#privateLogKeysByBlock.hasAsync(block.number)),
|
|
153
|
+
);
|
|
154
154
|
|
|
155
|
+
const { privateTaggedLogs } = this.#extractTaggedLogs(newBlocks);
|
|
155
156
|
const keysOfPrivateLogsToUpdate = Array.from(privateTaggedLogs.keys());
|
|
156
|
-
const keysOfPublicLogsToUpdate = Array.from(publicTaggedLogs.keys());
|
|
157
157
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
);
|
|
165
|
-
currentPrivateTaggedLogs.forEach(taggedLogBuffer => {
|
|
166
|
-
if (taggedLogBuffer.logBuffers && taggedLogBuffer.logBuffers.length > 0) {
|
|
167
|
-
privateTaggedLogs.set(
|
|
168
|
-
taggedLogBuffer.tag,
|
|
169
|
-
taggedLogBuffer.logBuffers!.concat(privateTaggedLogs.get(taggedLogBuffer.tag)!),
|
|
170
|
-
);
|
|
171
|
-
}
|
|
172
|
-
});
|
|
158
|
+
const currentPrivateTaggedLogs = await Promise.all(
|
|
159
|
+
keysOfPrivateLogsToUpdate.map(async key => ({
|
|
160
|
+
tag: key,
|
|
161
|
+
logBuffers: await this.#privateLogsByTag.getAsync(key),
|
|
162
|
+
})),
|
|
163
|
+
);
|
|
173
164
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
publicTaggedLogs.set(
|
|
183
|
-
taggedLogBuffer.key,
|
|
184
|
-
taggedLogBuffer.logBuffers!.concat(publicTaggedLogs.get(taggedLogBuffer.key)!),
|
|
185
|
-
);
|
|
186
|
-
}
|
|
187
|
-
});
|
|
165
|
+
for (const taggedLogBuffer of currentPrivateTaggedLogs) {
|
|
166
|
+
if (taggedLogBuffer.logBuffers && taggedLogBuffer.logBuffers.length > 0) {
|
|
167
|
+
privateTaggedLogs.set(
|
|
168
|
+
taggedLogBuffer.tag,
|
|
169
|
+
taggedLogBuffer.logBuffers!.concat(privateTaggedLogs.get(taggedLogBuffer.tag)!),
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
188
173
|
|
|
189
|
-
|
|
190
|
-
|
|
174
|
+
for (const block of newBlocks) {
|
|
175
|
+
const privateTagsInBlock: string[] = [];
|
|
176
|
+
for (const [tag, logs] of privateTaggedLogs.entries()) {
|
|
177
|
+
await this.#privateLogsByTag.set(tag, logs);
|
|
178
|
+
privateTagsInBlock.push(tag);
|
|
179
|
+
}
|
|
180
|
+
await this.#privateLogKeysByBlock.set(block.number, privateTagsInBlock);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
191
183
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
await this.#privateLogKeysByBlock.set(block.number, privateTagsInBlock);
|
|
184
|
+
async #addPublicLogs(blocks: L2Block[]): Promise<void> {
|
|
185
|
+
const newBlocks = await filterAsync(
|
|
186
|
+
blocks,
|
|
187
|
+
async block => !(await this.#publicLogKeysByBlock.hasAsync(block.number)),
|
|
188
|
+
);
|
|
198
189
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
)
|
|
214
|
-
.flat();
|
|
215
|
-
|
|
216
|
-
const contractClassLogsInBlock = block.body.txEffects
|
|
217
|
-
.map((txEffect, txIndex) =>
|
|
218
|
-
[
|
|
219
|
-
numToUInt32BE(txIndex),
|
|
220
|
-
numToUInt32BE(txEffect.contractClassLogs.length),
|
|
221
|
-
txEffect.contractClassLogs.map(log => log.toBuffer()),
|
|
222
|
-
].flat(),
|
|
223
|
-
)
|
|
224
|
-
.flat();
|
|
225
|
-
|
|
226
|
-
await this.#publicLogsByBlock.set(block.number, this.#packWithBlockHash(blockHash, publicLogsInBlock));
|
|
227
|
-
await this.#contractClassLogsByBlock.set(
|
|
228
|
-
block.number,
|
|
229
|
-
this.#packWithBlockHash(blockHash, contractClassLogsInBlock),
|
|
190
|
+
const { publicTaggedLogs } = this.#extractTaggedLogs(newBlocks);
|
|
191
|
+
const keysOfPublicLogsToUpdate = Array.from(publicTaggedLogs.keys());
|
|
192
|
+
|
|
193
|
+
const currentPublicTaggedLogs = await Promise.all(
|
|
194
|
+
keysOfPublicLogsToUpdate.map(async key => ({
|
|
195
|
+
tag: key,
|
|
196
|
+
logBuffers: await this.#publicLogsByContractAndTag.getAsync(key),
|
|
197
|
+
})),
|
|
198
|
+
);
|
|
199
|
+
|
|
200
|
+
for (const taggedLogBuffer of currentPublicTaggedLogs) {
|
|
201
|
+
if (taggedLogBuffer.logBuffers && taggedLogBuffer.logBuffers.length > 0) {
|
|
202
|
+
publicTaggedLogs.set(
|
|
203
|
+
taggedLogBuffer.tag,
|
|
204
|
+
taggedLogBuffer.logBuffers!.concat(publicTaggedLogs.get(taggedLogBuffer.tag)!),
|
|
230
205
|
);
|
|
231
206
|
}
|
|
207
|
+
}
|
|
232
208
|
|
|
209
|
+
for (const block of newBlocks) {
|
|
210
|
+
const blockHash = await block.hash();
|
|
211
|
+
const publicTagsInBlock: string[] = [];
|
|
212
|
+
for (const [tag, logs] of publicTaggedLogs.entries()) {
|
|
213
|
+
await this.#publicLogsByContractAndTag.set(tag, logs);
|
|
214
|
+
publicTagsInBlock.push(tag);
|
|
215
|
+
}
|
|
216
|
+
await this.#publicLogKeysByBlock.set(block.number, publicTagsInBlock);
|
|
217
|
+
|
|
218
|
+
const publicLogsInBlock = block.body.txEffects
|
|
219
|
+
.map((txEffect, txIndex) =>
|
|
220
|
+
[
|
|
221
|
+
numToUInt32BE(txIndex),
|
|
222
|
+
numToUInt32BE(txEffect.publicLogs.length),
|
|
223
|
+
txEffect.publicLogs.map(log => log.toBuffer()),
|
|
224
|
+
].flat(),
|
|
225
|
+
)
|
|
226
|
+
.flat();
|
|
227
|
+
|
|
228
|
+
await this.#publicLogsByBlock.set(block.number, this.#packWithBlockHash(blockHash, publicLogsInBlock));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
async #addContractClassLogs(blocks: L2Block[]): Promise<void> {
|
|
233
|
+
const newBlocks = await filterAsync(
|
|
234
|
+
blocks,
|
|
235
|
+
async block => !(await this.#contractClassLogsByBlock.hasAsync(block.number)),
|
|
236
|
+
);
|
|
237
|
+
|
|
238
|
+
for (const block of newBlocks) {
|
|
239
|
+
const blockHash = await block.hash();
|
|
240
|
+
|
|
241
|
+
const contractClassLogsInBlock = block.body.txEffects
|
|
242
|
+
.map((txEffect, txIndex) =>
|
|
243
|
+
[
|
|
244
|
+
numToUInt32BE(txIndex),
|
|
245
|
+
numToUInt32BE(txEffect.contractClassLogs.length),
|
|
246
|
+
txEffect.contractClassLogs.map(log => log.toBuffer()),
|
|
247
|
+
].flat(),
|
|
248
|
+
)
|
|
249
|
+
.flat();
|
|
250
|
+
|
|
251
|
+
await this.#contractClassLogsByBlock.set(
|
|
252
|
+
block.number,
|
|
253
|
+
this.#packWithBlockHash(blockHash, contractClassLogsInBlock),
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Append new logs to the store's list.
|
|
260
|
+
* @param blocks - The blocks for which to add the logs.
|
|
261
|
+
* @returns True if the operation is successful.
|
|
262
|
+
*/
|
|
263
|
+
addLogs(blocks: L2Block[]): Promise<boolean> {
|
|
264
|
+
return this.db.transactionAsync(async () => {
|
|
265
|
+
await Promise.all([
|
|
266
|
+
this.#addPrivateLogs(blocks),
|
|
267
|
+
this.#addPublicLogs(blocks),
|
|
268
|
+
this.#addContractClassLogs(blocks),
|
|
269
|
+
]);
|
|
233
270
|
return true;
|
|
234
271
|
});
|
|
235
272
|
}
|
|
@@ -238,17 +275,17 @@ export class LogStore {
|
|
|
238
275
|
return Buffer.concat([blockHash.toBuffer(), ...data]);
|
|
239
276
|
}
|
|
240
277
|
|
|
241
|
-
#unpackBlockHash(reader: BufferReader):
|
|
278
|
+
#unpackBlockHash(reader: BufferReader): BlockHash {
|
|
242
279
|
const blockHash = reader.remainingBytes() > 0 ? reader.readObject(Fr) : undefined;
|
|
243
280
|
|
|
244
281
|
if (!blockHash) {
|
|
245
282
|
throw new Error('Failed to read block hash from log entry buffer');
|
|
246
283
|
}
|
|
247
284
|
|
|
248
|
-
return
|
|
285
|
+
return BlockHash.fromField(blockHash);
|
|
249
286
|
}
|
|
250
287
|
|
|
251
|
-
deleteLogs(blocks:
|
|
288
|
+
deleteLogs(blocks: L2Block[]): Promise<boolean> {
|
|
252
289
|
return this.db.transactionAsync(async () => {
|
|
253
290
|
await Promise.all(
|
|
254
291
|
blocks.map(async block => {
|
|
@@ -278,27 +315,49 @@ export class LogStore {
|
|
|
278
315
|
}
|
|
279
316
|
|
|
280
317
|
/**
|
|
281
|
-
* Gets
|
|
318
|
+
* Gets private logs that match any of the `tags`. For each tag, an array of matching logs is returned. An empty
|
|
282
319
|
* array implies no logs match that tag.
|
|
320
|
+
* @param tags - The tags to search for.
|
|
321
|
+
* @param page - The page number (0-indexed) for pagination.
|
|
322
|
+
* @returns An array of log arrays, one per tag. Returns at most MAX_LOGS_PER_TAG logs per tag per page. If
|
|
323
|
+
* MAX_LOGS_PER_TAG logs are returned for a tag, the caller should fetch the next page to check for more logs.
|
|
283
324
|
*/
|
|
284
|
-
async getPrivateLogsByTags(tags: SiloedTag[]): Promise<TxScopedL2Log[][]> {
|
|
325
|
+
async getPrivateLogsByTags(tags: SiloedTag[], page: number = 0): Promise<TxScopedL2Log[][]> {
|
|
285
326
|
const logs = await Promise.all(tags.map(tag => this.#privateLogsByTag.getAsync(tag.toString())));
|
|
327
|
+
const start = page * MAX_LOGS_PER_TAG;
|
|
328
|
+
const end = start + MAX_LOGS_PER_TAG;
|
|
286
329
|
|
|
287
|
-
return logs.map(
|
|
330
|
+
return logs.map(
|
|
331
|
+
logBuffers => logBuffers?.slice(start, end).map(logBuffer => TxScopedL2Log.fromBuffer(logBuffer)) ?? [],
|
|
332
|
+
);
|
|
288
333
|
}
|
|
289
334
|
|
|
290
335
|
/**
|
|
291
|
-
* Gets
|
|
336
|
+
* Gets public logs that match any of the `tags` from the specified contract. For each tag, an array of matching
|
|
292
337
|
* logs is returned. An empty array implies no logs match that tag.
|
|
338
|
+
* @param contractAddress - The contract address to search logs for.
|
|
339
|
+
* @param tags - The tags to search for.
|
|
340
|
+
* @param page - The page number (0-indexed) for pagination.
|
|
341
|
+
* @returns An array of log arrays, one per tag. Returns at most MAX_LOGS_PER_TAG logs per tag per page. If
|
|
342
|
+
* MAX_LOGS_PER_TAG logs are returned for a tag, the caller should fetch the next page to check for more logs.
|
|
293
343
|
*/
|
|
294
|
-
async getPublicLogsByTagsFromContract(
|
|
344
|
+
async getPublicLogsByTagsFromContract(
|
|
345
|
+
contractAddress: AztecAddress,
|
|
346
|
+
tags: Tag[],
|
|
347
|
+
page: number = 0,
|
|
348
|
+
): Promise<TxScopedL2Log[][]> {
|
|
295
349
|
const logs = await Promise.all(
|
|
296
350
|
tags.map(tag => {
|
|
297
351
|
const key = `${contractAddress.toString()}_${tag.value.toString()}`;
|
|
298
352
|
return this.#publicLogsByContractAndTag.getAsync(key);
|
|
299
353
|
}),
|
|
300
354
|
);
|
|
301
|
-
|
|
355
|
+
const start = page * MAX_LOGS_PER_TAG;
|
|
356
|
+
const end = start + MAX_LOGS_PER_TAG;
|
|
357
|
+
|
|
358
|
+
return logs.map(
|
|
359
|
+
logBuffers => logBuffers?.slice(start, end).map(logBuffer => TxScopedL2Log.fromBuffer(logBuffer)) ?? [],
|
|
360
|
+
);
|
|
302
361
|
}
|
|
303
362
|
|
|
304
363
|
/**
|
|
@@ -484,7 +543,7 @@ export class LogStore {
|
|
|
484
543
|
#accumulateLogs(
|
|
485
544
|
results: (ExtendedContractClassLog | ExtendedPublicLog)[],
|
|
486
545
|
blockNumber: number,
|
|
487
|
-
blockHash:
|
|
546
|
+
blockHash: BlockHash,
|
|
488
547
|
txIndex: number,
|
|
489
548
|
txLogs: (ContractClassLog | PublicLog)[],
|
|
490
549
|
filter: LogFilter = {},
|