@aztec/archiver 0.24.0 → 0.26.2
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 +15 -11
- package/dest/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +67 -72
- package/dest/archiver/archiver_store.d.ts +37 -15
- package/dest/archiver/archiver_store.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.js +70 -54
- package/dest/archiver/data_retrieval.d.ts +18 -8
- package/dest/archiver/data_retrieval.d.ts.map +1 -1
- package/dest/archiver/data_retrieval.js +39 -14
- package/dest/archiver/eth_log_handlers.d.ts +25 -23
- package/dest/archiver/eth_log_handlers.d.ts.map +1 -1
- package/dest/archiver/eth_log_handlers.js +98 -57
- package/dest/archiver/kv_archiver_store/block_body_store.d.ts +27 -0
- package/dest/archiver/kv_archiver_store/block_body_store.d.ts.map +1 -0
- package/dest/archiver/kv_archiver_store/block_body_store.js +47 -0
- package/dest/archiver/kv_archiver_store/block_store.d.ts +19 -11
- package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/block_store.js +58 -30
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +1 -0
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/contract_class_store.js +4 -1
- package/dest/archiver/kv_archiver_store/contract_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/contract_store.js +6 -3
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +36 -16
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.js +52 -22
- package/dest/archiver/kv_archiver_store/log_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/log_store.js +4 -3
- package/dest/archiver/kv_archiver_store/message_store.d.ts +9 -9
- package/dest/archiver/kv_archiver_store/message_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/message_store.js +34 -31
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts +6 -6
- 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 +18 -18
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts +41 -16
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts.map +1 -1
- package/dest/archiver/memory_archiver_store/memory_archiver_store.js +78 -29
- package/dest/index.js +2 -2
- package/dest/rpc/archiver_client.d.ts.map +1 -1
- package/dest/rpc/archiver_client.js +3 -3
- package/dest/rpc/archiver_server.d.ts.map +1 -1
- package/dest/rpc/archiver_server.js +4 -3
- package/package.json +10 -10
- package/src/archiver/archiver.ts +95 -92
- package/src/archiver/archiver_store.ts +42 -15
- package/src/archiver/archiver_store_test_suite.ts +73 -58
- package/src/archiver/data_retrieval.ts +61 -16
- package/src/archiver/eth_log_handlers.ts +142 -68
- package/src/archiver/kv_archiver_store/block_body_store.ts +54 -0
- package/src/archiver/kv_archiver_store/block_store.ts +71 -36
- package/src/archiver/kv_archiver_store/contract_class_store.ts +4 -0
- package/src/archiver/kv_archiver_store/contract_store.ts +7 -2
- package/src/archiver/kv_archiver_store/kv_archiver_store.ts +56 -20
- package/src/archiver/kv_archiver_store/log_store.ts +2 -2
- package/src/archiver/kv_archiver_store/message_store.ts +34 -30
- package/src/archiver/memory_archiver_store/l1_to_l2_message_store.ts +17 -17
- package/src/archiver/memory_archiver_store/memory_archiver_store.ts +91 -29
- package/src/index.ts +1 -0
- package/src/rpc/archiver_client.ts +3 -1
- package/src/rpc/archiver_server.ts +5 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { getContractDeploymentLogs, getL1ToL2MessageCancelledLogs, getL2BlockProcessedLogs, getPendingL1ToL2MessageLogs,
|
|
1
|
+
import { getContractDeploymentLogs, getL1ToL2MessageCancelledLogs, getL2BlockProcessedLogs, getPendingL1ToL2MessageLogs, getTxsPublishedLogs, processCancelledL1ToL2MessagesLogs, processContractDeploymentLogs, processL2BlockProcessedLogs, processPendingL1ToL2MessageAddedLogs, processTxsPublishedLogs, } from './eth_log_handlers.js';
|
|
2
2
|
/**
|
|
3
|
-
* Fetches new L2
|
|
3
|
+
* Fetches new L2 block metadata (header, archive snapshot).
|
|
4
4
|
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
5
5
|
* @param rollupAddress - The address of the rollup contract.
|
|
6
6
|
* @param blockUntilSynced - If true, blocks until the archiver has fully synced.
|
|
7
7
|
* @param searchStartBlock - The block number to use for starting the search.
|
|
8
8
|
* @param searchEndBlock - The highest block number that we should search up to.
|
|
9
9
|
* @param expectedNextL2BlockNum - The next L2 block number that we expect to find.
|
|
10
|
-
* @returns An array of
|
|
10
|
+
* @returns An array of tuples representing block metadata including the header, archive tree snapshot, and associated l1 block number; as well as the next eth block to search from.
|
|
11
11
|
*/
|
|
12
|
-
export async function
|
|
13
|
-
const
|
|
12
|
+
export async function retrieveBlockMetadataFromRollup(publicClient, rollupAddress, blockUntilSynced, searchStartBlock, searchEndBlock, expectedNextL2BlockNum) {
|
|
13
|
+
const retrievedBlockMetadata = [];
|
|
14
14
|
do {
|
|
15
15
|
if (searchStartBlock > searchEndBlock) {
|
|
16
16
|
break;
|
|
@@ -19,12 +19,37 @@ export async function retrieveBlocks(publicClient, rollupAddress, blockUntilSync
|
|
|
19
19
|
if (l2BlockProcessedLogs.length === 0) {
|
|
20
20
|
break;
|
|
21
21
|
}
|
|
22
|
-
const
|
|
23
|
-
|
|
22
|
+
const newBlockMetadata = await processL2BlockProcessedLogs(publicClient, expectedNextL2BlockNum, l2BlockProcessedLogs);
|
|
23
|
+
retrievedBlockMetadata.push(...newBlockMetadata);
|
|
24
24
|
searchStartBlock = l2BlockProcessedLogs[l2BlockProcessedLogs.length - 1].blockNumber + 1n;
|
|
25
|
-
expectedNextL2BlockNum += BigInt(
|
|
25
|
+
expectedNextL2BlockNum += BigInt(newBlockMetadata.length);
|
|
26
26
|
} while (blockUntilSynced && searchStartBlock <= searchEndBlock);
|
|
27
|
-
return { nextEthBlockNumber: searchStartBlock, retrievedData:
|
|
27
|
+
return { nextEthBlockNumber: searchStartBlock, retrievedData: retrievedBlockMetadata };
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Fetches new L2 block bodies and their hashes.
|
|
31
|
+
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
32
|
+
* @param availabilityOracleAddress - The address of the availability oracle contract.
|
|
33
|
+
* @param blockUntilSynced - If true, blocks until the archiver has fully synced.
|
|
34
|
+
* @param searchStartBlock - The block number to use for starting the search.
|
|
35
|
+
* @param searchEndBlock - The highest block number that we should search up to.
|
|
36
|
+
* @returns A array of tuples of L2 block bodies and their associated hash as well as the next eth block to search from
|
|
37
|
+
*/
|
|
38
|
+
export async function retrieveBlockBodiesFromAvailabilityOracle(publicClient, availabilityOracleAddress, blockUntilSynced, searchStartBlock, searchEndBlock) {
|
|
39
|
+
const retrievedBlockBodies = [];
|
|
40
|
+
do {
|
|
41
|
+
if (searchStartBlock > searchEndBlock) {
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
const l2TxsPublishedLogs = await getTxsPublishedLogs(publicClient, availabilityOracleAddress, searchStartBlock, searchEndBlock);
|
|
45
|
+
if (l2TxsPublishedLogs.length === 0) {
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
const newBlockBodies = await processTxsPublishedLogs(publicClient, l2TxsPublishedLogs);
|
|
49
|
+
retrievedBlockBodies.push(...newBlockBodies);
|
|
50
|
+
searchStartBlock = l2TxsPublishedLogs[l2TxsPublishedLogs.length - 1].blockNumber + 1n;
|
|
51
|
+
} while (blockUntilSynced && searchStartBlock <= searchEndBlock);
|
|
52
|
+
return { nextEthBlockNumber: searchStartBlock, retrievedData: retrievedBlockBodies };
|
|
28
53
|
}
|
|
29
54
|
/**
|
|
30
55
|
* Fetches new contract data.
|
|
@@ -33,10 +58,10 @@ export async function retrieveBlocks(publicClient, rollupAddress, blockUntilSync
|
|
|
33
58
|
* @param blockUntilSynced - If true, blocks until the archiver has fully synced.
|
|
34
59
|
* @param searchStartBlock - The block number to use for starting the search.
|
|
35
60
|
* @param searchEndBlock - The highest block number that we should search up to.
|
|
36
|
-
* @param
|
|
61
|
+
* @param blockNumberToBodyHash - A mapping from block number to relevant body hash.
|
|
37
62
|
* @returns An array of ExtendedContractData and their equivalent L2 Block number along with the next eth block to search from..
|
|
38
63
|
*/
|
|
39
|
-
export async function retrieveNewContractData(publicClient, contractDeploymentEmitterAddress, blockUntilSynced, searchStartBlock, searchEndBlock,
|
|
64
|
+
export async function retrieveNewContractData(publicClient, contractDeploymentEmitterAddress, blockUntilSynced, searchStartBlock, searchEndBlock, blockNumberToBodyHash) {
|
|
40
65
|
let retrievedNewContracts = [];
|
|
41
66
|
do {
|
|
42
67
|
if (searchStartBlock > searchEndBlock) {
|
|
@@ -46,7 +71,7 @@ export async function retrieveNewContractData(publicClient, contractDeploymentEm
|
|
|
46
71
|
if (contractDataLogs.length === 0) {
|
|
47
72
|
break;
|
|
48
73
|
}
|
|
49
|
-
const newContracts = processContractDeploymentLogs(
|
|
74
|
+
const newContracts = processContractDeploymentLogs(blockNumberToBodyHash, contractDataLogs);
|
|
50
75
|
retrievedNewContracts = retrievedNewContracts.concat(newContracts);
|
|
51
76
|
searchStartBlock = (contractDataLogs.findLast(cd => !!cd)?.blockNumber || searchStartBlock) + 1n;
|
|
52
77
|
} while (blockUntilSynced && searchStartBlock <= searchEndBlock);
|
|
@@ -85,7 +110,7 @@ export async function retrieveNewPendingL1ToL2Messages(publicClient, inboxAddres
|
|
|
85
110
|
* @param blockUntilSynced - If true, blocks until the archiver has fully synced.
|
|
86
111
|
* @param searchStartBlock - The block number to use for starting the search.
|
|
87
112
|
* @param searchEndBlock - The highest block number that we should search up to.
|
|
88
|
-
* @returns An array of
|
|
113
|
+
* @returns An array of entry keys that were cancelled and next eth block to search from.
|
|
89
114
|
*/
|
|
90
115
|
export async function retrieveNewCancelledL1ToL2Messages(publicClient, inboxAddress, blockUntilSynced, searchStartBlock, searchEndBlock) {
|
|
91
116
|
const retrievedNewCancelledL1ToL2Messages = [];
|
|
@@ -105,4 +130,4 @@ export async function retrieveNewCancelledL1ToL2Messages(publicClient, inboxAddr
|
|
|
105
130
|
} while (blockUntilSynced && searchStartBlock <= searchEndBlock);
|
|
106
131
|
return { nextEthBlockNumber: searchStartBlock, retrievedData: retrievedNewCancelledL1ToL2Messages };
|
|
107
132
|
}
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9yZXRyaWV2YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl2ZXIvZGF0YV9yZXRyaWV2YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUNMLHlCQUF5QixFQUN6Qiw2QkFBNkIsRUFDN0IsdUJBQXVCLEVBQ3ZCLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsa0NBQWtDLEVBQ2xDLDZCQUE2QixFQUM3QiwyQkFBMkIsRUFDM0Isb0NBQW9DLEVBQ3BDLHVCQUF1QixHQUN4QixNQUFNLHVCQUF1QixDQUFDO0FBZ0IvQjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLCtCQUErQixDQUNuRCxZQUEwQixFQUMxQixhQUF5QixFQUN6QixnQkFBeUIsRUFDekIsZ0JBQXdCLEVBQ3hCLGNBQXNCLEVBQ3RCLHNCQUE4QjtJQUU5QixNQUFNLHNCQUFzQixHQUErQyxFQUFFLENBQUM7SUFDOUUsR0FBRyxDQUFDO1FBQ0YsSUFBSSxnQkFBZ0IsR0FBRyxjQUFjLEVBQUUsQ0FBQztZQUN0QyxNQUFNO1FBQ1IsQ0FBQztRQUNELE1BQU0sb0JBQW9CLEdBQUcsTUFBTSx1QkFBdUIsQ0FDeEQsWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsY0FBYyxDQUNmLENBQUM7UUFDRixJQUFJLG9CQUFvQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSwyQkFBMkIsQ0FDeEQsWUFBWSxFQUNaLHNCQUFzQixFQUN0QixvQkFBb0IsQ0FDckIsQ0FBQztRQUNGLHNCQUFzQixDQUFDLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUM7UUFDakQsZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVksR0FBRyxFQUFFLENBQUM7UUFDM0Ysc0JBQXNCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVELENBQUMsUUFBUSxnQkFBZ0IsSUFBSSxnQkFBZ0IsSUFBSSxjQUFjLEVBQUU7SUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO0FBQ3pGLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUseUNBQXlDLENBQzdELFlBQTBCLEVBQzFCLHlCQUFxQyxFQUNyQyxnQkFBeUIsRUFDekIsZ0JBQXdCLEVBQ3hCLGNBQXNCO0lBRXRCLE1BQU0sb0JBQW9CLEdBQXFCLEVBQUUsQ0FBQztJQUVsRCxHQUFHLENBQUM7UUFDRixJQUFJLGdCQUFnQixHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQ3RDLE1BQU07UUFDUixDQUFDO1FBQ0QsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLG1CQUFtQixDQUNsRCxZQUFZLEVBQ1oseUJBQXlCLEVBQ3pCLGdCQUFnQixFQUNoQixjQUFjLENBQ2YsQ0FBQztRQUNGLElBQUksa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsTUFBTSx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUN2RixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztRQUM3QyxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBWSxHQUFHLEVBQUUsQ0FBQztJQUN6RixDQUFDLFFBQVEsZ0JBQWdCLElBQUksZ0JBQWdCLElBQUksY0FBYyxFQUFFO0lBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztBQUN2RixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsWUFBMEIsRUFDMUIsZ0NBQTRDLEVBQzVDLGdCQUF5QixFQUN6QixnQkFBd0IsRUFDeEIsY0FBc0IsRUFDdEIscUJBQTREO0lBRTVELElBQUkscUJBQXFCLEdBQXVDLEVBQUUsQ0FBQztJQUNuRSxHQUFHLENBQUM7UUFDRixJQUFJLGdCQUFnQixHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQ3RDLE1BQU07UUFDUixDQUFDO1FBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLHlCQUF5QixDQUN0RCxZQUFZLEVBQ1osZ0NBQWdDLEVBQ2hDLGdCQUFnQixFQUNoQixjQUFjLENBQ2YsQ0FBQztRQUNGLElBQUksZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE1BQU07UUFDUixDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsNkJBQTZCLENBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM1RixxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkUsZ0JBQWdCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ25HLENBQUMsUUFBUSxnQkFBZ0IsSUFBSSxnQkFBZ0IsSUFBSSxjQUFjLEVBQUU7SUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hGLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0NBQWdDLENBQ3BELFlBQTBCLEVBQzFCLFlBQXdCLEVBQ3hCLGdCQUF5QixFQUN6QixnQkFBd0IsRUFDeEIsY0FBc0I7SUFFdEIsTUFBTSwwQkFBMEIsR0FBOEIsRUFBRSxDQUFDO0lBQ2pFLEdBQUcsQ0FBQztRQUNGLElBQUksZ0JBQWdCLEdBQUcsY0FBYyxFQUFFLENBQUM7WUFDdEMsTUFBTTtRQUNSLENBQUM7UUFDRCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sMkJBQTJCLENBQzVELFlBQVksRUFDWixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGNBQWMsQ0FDZixDQUFDO1FBQ0YsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTTtRQUNSLENBQUM7UUFDRCxNQUFNLGlCQUFpQixHQUFHLG9DQUFvQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDckYsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztRQUN0RCxtREFBbUQ7UUFDbkQsZ0JBQWdCLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQy9HLENBQUMsUUFBUSxnQkFBZ0IsSUFBSSxnQkFBZ0IsSUFBSSxjQUFjLEVBQUU7SUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSwwQkFBMEIsRUFBRSxDQUFDO0FBQzdGLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0NBQWtDLENBQ3RELFlBQTBCLEVBQzFCLFlBQXdCLEVBQ3hCLGdCQUF5QixFQUN6QixnQkFBd0IsRUFDeEIsY0FBc0I7SUFFdEIsTUFBTSxtQ0FBbUMsR0FBbUIsRUFBRSxDQUFDO0lBQy9ELEdBQUcsQ0FBQztRQUNGLElBQUksZ0JBQWdCLEdBQUcsY0FBYyxFQUFFLENBQUM7WUFDdEMsTUFBTTtRQUNSLENBQUM7UUFDRCxNQUFNLDZCQUE2QixHQUFHLE1BQU0sNkJBQTZCLENBQ3ZFLFlBQVksRUFDWixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGNBQWMsQ0FDZixDQUFDO1FBQ0YsSUFBSSw2QkFBNkIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0MsTUFBTTtRQUNSLENBQUM7UUFDRCxNQUFNLDBCQUEwQixHQUFHLGtDQUFrQyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDckcsbUNBQW1DLENBQUMsSUFBSSxDQUFDLEdBQUcsMEJBQTBCLENBQUMsQ0FBQztRQUN4RSxtREFBbUQ7UUFDbkQsZ0JBQWdCO1lBQ2QsQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3ZHLENBQUMsUUFBUSxnQkFBZ0IsSUFBSSxnQkFBZ0IsSUFBSSxjQUFjLEVBQUU7SUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxtQ0FBbUMsRUFBRSxDQUFDO0FBQ3RHLENBQUMifQ==
|
|
@@ -1,28 +1,31 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { ExtendedContractData, L1ToL2Message
|
|
2
|
+
import { Body, ExtendedContractData, L1ToL2Message } from '@aztec/circuit-types';
|
|
3
|
+
import { AppendOnlyTreeSnapshot, Header } from '@aztec/circuits.js';
|
|
3
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
5
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
|
-
import { ContractDeploymentEmitterAbi, InboxAbi, RollupAbi } from '@aztec/l1-artifacts';
|
|
6
|
+
import { AvailabilityOracleAbi, ContractDeploymentEmitterAbi, InboxAbi, RollupAbi } from '@aztec/l1-artifacts';
|
|
6
7
|
import { Log, PublicClient } from 'viem';
|
|
7
8
|
/**
|
|
8
9
|
* Processes newly received MessageAdded (L1 to L2) logs.
|
|
9
10
|
* @param logs - MessageAdded logs.
|
|
10
11
|
* @returns Array of all Pending L1 to L2 messages that were processed
|
|
11
12
|
*/
|
|
12
|
-
export declare function processPendingL1ToL2MessageAddedLogs(logs: Log<bigint, number, undefined, true, typeof InboxAbi, 'MessageAdded'>[]): [L1ToL2Message, bigint][];
|
|
13
|
+
export declare function processPendingL1ToL2MessageAddedLogs(logs: Log<bigint, number, false, undefined, true, typeof InboxAbi, 'MessageAdded'>[]): [L1ToL2Message, bigint][];
|
|
13
14
|
/**
|
|
14
15
|
* Process newly received L1ToL2MessageCancelled logs.
|
|
15
16
|
* @param logs - L1ToL2MessageCancelled logs.
|
|
16
|
-
* @returns Array of
|
|
17
|
+
* @returns Array of entry keys of the L1 to L2 messages that were cancelled
|
|
17
18
|
*/
|
|
18
|
-
export declare function processCancelledL1ToL2MessagesLogs(logs: Log<bigint, number, undefined, true, typeof InboxAbi, 'L1ToL2MessageCancelled'>[]): [Fr, bigint][];
|
|
19
|
+
export declare function processCancelledL1ToL2MessagesLogs(logs: Log<bigint, number, false, undefined, true, typeof InboxAbi, 'L1ToL2MessageCancelled'>[]): [Fr, bigint][];
|
|
19
20
|
/**
|
|
20
21
|
* Processes newly received L2BlockProcessed logs.
|
|
21
22
|
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
22
23
|
* @param expectedL2BlockNumber - The next expected L2 block number.
|
|
23
24
|
* @param logs - L2BlockProcessed logs.
|
|
25
|
+
* @returns - An array of tuples representing block metadata including the header, archive tree snapshot, and associated l1 block number.
|
|
24
26
|
*/
|
|
25
|
-
export declare function
|
|
27
|
+
export declare function processL2BlockProcessedLogs(publicClient: PublicClient, expectedL2BlockNumber: bigint, logs: Log<bigint, number, false, undefined, true, typeof RollupAbi, 'L2BlockProcessed'>[]): Promise<[Header, AppendOnlyTreeSnapshot, bigint][]>;
|
|
28
|
+
export declare function processTxsPublishedLogs(publicClient: PublicClient, logs: Log<bigint, number, false, undefined, true, typeof AvailabilityOracleAbi, 'TxsPublished'>[]): Promise<[Body, Buffer][]>;
|
|
26
29
|
/**
|
|
27
30
|
* Gets relevant `L2BlockProcessed` logs from chain.
|
|
28
31
|
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
@@ -31,17 +34,16 @@ export declare function processBlockLogs(publicClient: PublicClient, expectedL2B
|
|
|
31
34
|
* @param toBlock - Last block to get logs from (inclusive).
|
|
32
35
|
* @returns An array of `L2BlockProcessed` logs.
|
|
33
36
|
*/
|
|
34
|
-
export declare function getL2BlockProcessedLogs(publicClient: PublicClient, rollupAddress: EthAddress, fromBlock: bigint, toBlock: bigint): Promise<
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}, true>>;
|
|
37
|
+
export declare function getL2BlockProcessedLogs(publicClient: PublicClient, rollupAddress: EthAddress, fromBlock: bigint, toBlock: bigint): Promise<Log<bigint, number, false, undefined, true, typeof RollupAbi, 'L2BlockProcessed'>[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Gets relevant `TxsPublished` logs from chain.
|
|
40
|
+
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
41
|
+
* @param dataAvailabilityOracleAddress - The address of the availability oracle contract.
|
|
42
|
+
* @param fromBlock - First block to get logs from (inclusive).
|
|
43
|
+
* @param toBlock - Last block to get logs from (inclusive).
|
|
44
|
+
* @returns An array of `TxsPublished` logs.
|
|
45
|
+
*/
|
|
46
|
+
export declare function getTxsPublishedLogs(publicClient: PublicClient, dataAvailabilityOracleAddress: EthAddress, fromBlock: bigint, toBlock: bigint): Promise<Log<bigint, number, false, undefined, true, typeof AvailabilityOracleAbi, 'TxsPublished'>[]>;
|
|
45
47
|
/**
|
|
46
48
|
* Gets relevant `ContractDeployment` logs from chain.
|
|
47
49
|
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
@@ -50,16 +52,16 @@ export declare function getL2BlockProcessedLogs(publicClient: PublicClient, roll
|
|
|
50
52
|
* @param toBlock - Last block to get logs from (inclusive).
|
|
51
53
|
* @returns An array of `ContractDeployment` logs.
|
|
52
54
|
*/
|
|
53
|
-
export declare function getContractDeploymentLogs(publicClient: PublicClient, contractDeploymentEmitterAddress: EthAddress, fromBlock: bigint, toBlock: bigint): Promise<Log<bigint, number, undefined, true, typeof ContractDeploymentEmitterAbi, 'ContractDeployment'>[]>;
|
|
55
|
+
export declare function getContractDeploymentLogs(publicClient: PublicClient, contractDeploymentEmitterAddress: EthAddress, fromBlock: bigint, toBlock: bigint): Promise<Log<bigint, number, false, undefined, true, typeof ContractDeploymentEmitterAbi, 'ContractDeployment'>[]>;
|
|
54
56
|
/**
|
|
55
57
|
* Processes newly received ContractDeployment logs.
|
|
56
|
-
* @param
|
|
58
|
+
* @param blockNumberToBodyHash - A mapping from block number to relevant body hash.
|
|
57
59
|
* @param logs - ContractDeployment logs.
|
|
58
60
|
* @returns The set of retrieved extended contract data items.
|
|
59
61
|
*/
|
|
60
|
-
export declare function processContractDeploymentLogs(
|
|
62
|
+
export declare function processContractDeploymentLogs(blockNumberToBodyHash: {
|
|
61
63
|
[key: number]: Buffer | undefined;
|
|
62
|
-
}, logs: Log<bigint, number, undefined, true, typeof ContractDeploymentEmitterAbi, 'ContractDeployment'>[]): [ExtendedContractData[], number][];
|
|
64
|
+
}, logs: Log<bigint, number, false, undefined, true, typeof ContractDeploymentEmitterAbi, 'ContractDeployment'>[]): [ExtendedContractData[], number][];
|
|
63
65
|
/**
|
|
64
66
|
* Get relevant `MessageAdded` logs emitted by Inbox on chain.
|
|
65
67
|
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
@@ -68,7 +70,7 @@ export declare function processContractDeploymentLogs(blockHashMapping: {
|
|
|
68
70
|
* @param toBlock - Last block to get logs from (inclusive).
|
|
69
71
|
* @returns An array of `MessageAdded` logs.
|
|
70
72
|
*/
|
|
71
|
-
export declare function getPendingL1ToL2MessageLogs(publicClient: PublicClient, inboxAddress: EthAddress, fromBlock: bigint, toBlock: bigint): Promise<Log<bigint, number, undefined, true, typeof InboxAbi, 'MessageAdded'>[]>;
|
|
73
|
+
export declare function getPendingL1ToL2MessageLogs(publicClient: PublicClient, inboxAddress: EthAddress, fromBlock: bigint, toBlock: bigint): Promise<Log<bigint, number, false, undefined, true, typeof InboxAbi, 'MessageAdded'>[]>;
|
|
72
74
|
/**
|
|
73
75
|
* Get relevant `L1ToL2MessageCancelled` logs emitted by Inbox on chain when pending messages are cancelled
|
|
74
76
|
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
@@ -77,5 +79,5 @@ export declare function getPendingL1ToL2MessageLogs(publicClient: PublicClient,
|
|
|
77
79
|
* @param toBlock - Last block to get logs from (inclusive).
|
|
78
80
|
* @returns An array of `L1ToL2MessageCancelled` logs.
|
|
79
81
|
*/
|
|
80
|
-
export declare function getL1ToL2MessageCancelledLogs(publicClient: PublicClient, inboxAddress: EthAddress, fromBlock: bigint, toBlock: bigint): Promise<Log<bigint, number, undefined, true, typeof InboxAbi, 'L1ToL2MessageCancelled'>[]>;
|
|
82
|
+
export declare function getL1ToL2MessageCancelledLogs(publicClient: PublicClient, inboxAddress: EthAddress, fromBlock: bigint, toBlock: bigint): Promise<Log<bigint, number, false, undefined, true, typeof InboxAbi, 'L1ToL2MessageCancelled'>[]>;
|
|
81
83
|
//# sourceMappingURL=eth_log_handlers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eth_log_handlers.d.ts","sourceRoot":"","sources":["../../src/archiver/eth_log_handlers.ts"],"names":[],"mappings":";AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"eth_log_handlers.d.ts","sourceRoot":"","sources":["../../src/archiver/eth_log_handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { ContractData, EncodedContractFunction, ExtendedContractData, L1Actor, L1ToL2Message, L2Actor,
|
|
1
|
+
import { Body, ContractData, EncodedContractFunction, ExtendedContractData, L1Actor, L1ToL2Message, L2Actor, } from '@aztec/circuit-types';
|
|
2
|
+
import { AppendOnlyTreeSnapshot, Header } from '@aztec/circuits.js';
|
|
2
3
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
3
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
5
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
6
|
import { BufferReader, numToUInt32BE } from '@aztec/foundation/serialize';
|
|
6
|
-
import { ContractDeploymentEmitterAbi, InboxAbi, RollupAbi } from '@aztec/l1-artifacts';
|
|
7
|
+
import { AvailabilityOracleAbi, ContractDeploymentEmitterAbi, InboxAbi, RollupAbi } from '@aztec/l1-artifacts';
|
|
7
8
|
import { decodeFunctionData, getAbiItem, getAddress, hexToBytes } from 'viem';
|
|
8
9
|
/**
|
|
9
10
|
* Processes newly received MessageAdded (L1 to L2) logs.
|
|
@@ -24,7 +25,7 @@ export function processPendingL1ToL2MessageAddedLogs(logs) {
|
|
|
24
25
|
/**
|
|
25
26
|
* Process newly received L1ToL2MessageCancelled logs.
|
|
26
27
|
* @param logs - L1ToL2MessageCancelled logs.
|
|
27
|
-
* @returns Array of
|
|
28
|
+
* @returns Array of entry keys of the L1 to L2 messages that were cancelled
|
|
28
29
|
*/
|
|
29
30
|
export function processCancelledL1ToL2MessagesLogs(logs) {
|
|
30
31
|
const cancelledL1ToL2Messages = [];
|
|
@@ -38,53 +39,80 @@ export function processCancelledL1ToL2MessagesLogs(logs) {
|
|
|
38
39
|
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
39
40
|
* @param expectedL2BlockNumber - The next expected L2 block number.
|
|
40
41
|
* @param logs - L2BlockProcessed logs.
|
|
42
|
+
* @returns - An array of tuples representing block metadata including the header, archive tree snapshot, and associated l1 block number.
|
|
41
43
|
*/
|
|
42
|
-
export async function
|
|
43
|
-
const
|
|
44
|
+
export async function processL2BlockProcessedLogs(publicClient, expectedL2BlockNumber, logs) {
|
|
45
|
+
const retrievedBlockMetadata = [];
|
|
44
46
|
for (const log of logs) {
|
|
45
47
|
const blockNum = log.args.blockNumber;
|
|
46
48
|
if (blockNum !== expectedL2BlockNumber) {
|
|
47
49
|
throw new Error('Block number mismatch. Expected: ' + expectedL2BlockNumber + ' but got: ' + blockNum + '.');
|
|
48
50
|
}
|
|
49
51
|
// TODO: Fetch blocks from calldata in parallel
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
retrievedBlocks.push(newBlock);
|
|
52
|
+
const [header, archive] = await getBlockMetadataFromRollupTx(publicClient, log.transactionHash, log.args.blockNumber);
|
|
53
|
+
retrievedBlockMetadata.push([header, archive, log.blockNumber]);
|
|
53
54
|
expectedL2BlockNumber++;
|
|
54
55
|
}
|
|
55
|
-
return
|
|
56
|
+
return retrievedBlockMetadata;
|
|
57
|
+
}
|
|
58
|
+
export async function processTxsPublishedLogs(publicClient, logs) {
|
|
59
|
+
const retrievedBlockBodies = [];
|
|
60
|
+
for (const log of logs) {
|
|
61
|
+
const newBlockBody = await getBlockBodiesFromAvailabilityOracleTx(publicClient, log.transactionHash);
|
|
62
|
+
retrievedBlockBodies.push([newBlockBody, Buffer.from(hexToBytes(log.args.txsHash))]);
|
|
63
|
+
}
|
|
64
|
+
return retrievedBlockBodies;
|
|
56
65
|
}
|
|
57
66
|
/**
|
|
58
|
-
*
|
|
67
|
+
* Gets block metadata (header and archive snapshot) from the calldata of an L1 transaction.
|
|
59
68
|
* Assumes that the block was published from an EOA.
|
|
60
69
|
* TODO: Add retries and error management.
|
|
61
70
|
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
62
71
|
* @param txHash - Hash of the tx that published it.
|
|
63
72
|
* @param l2BlockNum - L2 block number.
|
|
64
|
-
* @returns
|
|
73
|
+
* @returns L2 block metadata (header and archive) from the calldata, deserialized
|
|
65
74
|
*/
|
|
66
|
-
async function
|
|
75
|
+
async function getBlockMetadataFromRollupTx(publicClient, txHash, l2BlockNum) {
|
|
67
76
|
const { input: data } = await publicClient.getTransaction({ hash: txHash });
|
|
68
|
-
// TODO: File a bug in viem who complains if we dont remove the ctor from the abi here
|
|
69
77
|
const { functionName, args } = decodeFunctionData({
|
|
70
|
-
abi: RollupAbi
|
|
78
|
+
abi: RollupAbi,
|
|
71
79
|
data,
|
|
72
80
|
});
|
|
73
81
|
if (functionName !== 'process') {
|
|
74
82
|
throw new Error(`Unexpected method called ${functionName}`);
|
|
75
83
|
}
|
|
76
|
-
const [headerHex, archiveRootHex
|
|
77
|
-
const
|
|
78
|
-
|
|
84
|
+
const [headerHex, archiveRootHex] = args;
|
|
85
|
+
const header = Header.fromBuffer(Buffer.from(hexToBytes(headerHex)));
|
|
86
|
+
const blockNumberFromHeader = header.globalVariables.blockNumber.toBigInt();
|
|
87
|
+
if (blockNumberFromHeader !== l2BlockNum) {
|
|
88
|
+
throw new Error(`Block number mismatch: expected ${l2BlockNum} but got ${blockNumberFromHeader}`);
|
|
89
|
+
}
|
|
90
|
+
const archive = AppendOnlyTreeSnapshot.fromBuffer(Buffer.concat([
|
|
79
91
|
Buffer.from(hexToBytes(archiveRootHex)), // L2Block.archive.root
|
|
80
92
|
numToUInt32BE(Number(l2BlockNum)), // L2Block.archive.nextAvailableLeafIndex
|
|
81
|
-
|
|
82
|
-
]
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
93
|
+
]));
|
|
94
|
+
return [header, archive];
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Gets block bodies from calldata of an L1 transaction, and deserializes them into Body objects.
|
|
98
|
+
* Assumes that the block was published from an EOA.
|
|
99
|
+
* TODO: Add retries and error management.
|
|
100
|
+
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
101
|
+
* @param txHash - Hash of the tx that published it.
|
|
102
|
+
* @returns An L2 block body from the calldata, deserialized
|
|
103
|
+
*/
|
|
104
|
+
async function getBlockBodiesFromAvailabilityOracleTx(publicClient, txHash) {
|
|
105
|
+
const { input: data } = await publicClient.getTransaction({ hash: txHash });
|
|
106
|
+
const { functionName, args } = decodeFunctionData({
|
|
107
|
+
abi: AvailabilityOracleAbi,
|
|
108
|
+
data,
|
|
109
|
+
});
|
|
110
|
+
if (functionName !== 'publish') {
|
|
111
|
+
throw new Error(`Unexpected method called ${functionName}`);
|
|
86
112
|
}
|
|
87
|
-
|
|
113
|
+
const [bodyHex] = args;
|
|
114
|
+
const blockBody = Body.fromBuffer(Buffer.from(hexToBytes(bodyHex)));
|
|
115
|
+
return blockBody;
|
|
88
116
|
}
|
|
89
117
|
/**
|
|
90
118
|
* Gets relevant `L2BlockProcessed` logs from chain.
|
|
@@ -94,16 +122,32 @@ async function getBlockFromCallData(publicClient, txHash, l2BlockNum) {
|
|
|
94
122
|
* @param toBlock - Last block to get logs from (inclusive).
|
|
95
123
|
* @returns An array of `L2BlockProcessed` logs.
|
|
96
124
|
*/
|
|
97
|
-
export
|
|
98
|
-
|
|
99
|
-
// as a standalone constant.
|
|
100
|
-
const abiItem = getAbiItem({
|
|
101
|
-
abi: RollupAbi,
|
|
102
|
-
name: 'L2BlockProcessed',
|
|
103
|
-
});
|
|
104
|
-
return await publicClient.getLogs({
|
|
125
|
+
export function getL2BlockProcessedLogs(publicClient, rollupAddress, fromBlock, toBlock) {
|
|
126
|
+
return publicClient.getLogs({
|
|
105
127
|
address: getAddress(rollupAddress.toString()),
|
|
106
|
-
event:
|
|
128
|
+
event: getAbiItem({
|
|
129
|
+
abi: RollupAbi,
|
|
130
|
+
name: 'L2BlockProcessed',
|
|
131
|
+
}),
|
|
132
|
+
fromBlock,
|
|
133
|
+
toBlock: toBlock + 1n, // the toBlock argument in getLogs is exclusive
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Gets relevant `TxsPublished` logs from chain.
|
|
138
|
+
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
139
|
+
* @param dataAvailabilityOracleAddress - The address of the availability oracle contract.
|
|
140
|
+
* @param fromBlock - First block to get logs from (inclusive).
|
|
141
|
+
* @param toBlock - Last block to get logs from (inclusive).
|
|
142
|
+
* @returns An array of `TxsPublished` logs.
|
|
143
|
+
*/
|
|
144
|
+
export function getTxsPublishedLogs(publicClient, dataAvailabilityOracleAddress, fromBlock, toBlock) {
|
|
145
|
+
return publicClient.getLogs({
|
|
146
|
+
address: getAddress(dataAvailabilityOracleAddress.toString()),
|
|
147
|
+
event: getAbiItem({
|
|
148
|
+
abi: AvailabilityOracleAbi,
|
|
149
|
+
name: 'TxsPublished',
|
|
150
|
+
}),
|
|
107
151
|
fromBlock,
|
|
108
152
|
toBlock: toBlock + 1n, // the toBlock argument in getLogs is exclusive
|
|
109
153
|
});
|
|
@@ -116,31 +160,30 @@ export async function getL2BlockProcessedLogs(publicClient, rollupAddress, fromB
|
|
|
116
160
|
* @param toBlock - Last block to get logs from (inclusive).
|
|
117
161
|
* @returns An array of `ContractDeployment` logs.
|
|
118
162
|
*/
|
|
119
|
-
export
|
|
120
|
-
|
|
121
|
-
abi: ContractDeploymentEmitterAbi,
|
|
122
|
-
name: 'ContractDeployment',
|
|
123
|
-
});
|
|
124
|
-
return await publicClient.getLogs({
|
|
163
|
+
export function getContractDeploymentLogs(publicClient, contractDeploymentEmitterAddress, fromBlock, toBlock) {
|
|
164
|
+
return publicClient.getLogs({
|
|
125
165
|
address: getAddress(contractDeploymentEmitterAddress.toString()),
|
|
126
|
-
event:
|
|
166
|
+
event: getAbiItem({
|
|
167
|
+
abi: ContractDeploymentEmitterAbi,
|
|
168
|
+
name: 'ContractDeployment',
|
|
169
|
+
}),
|
|
127
170
|
fromBlock,
|
|
128
171
|
toBlock: toBlock + 1n, // the toBlock argument in getLogs is exclusive
|
|
129
172
|
});
|
|
130
173
|
}
|
|
131
174
|
/**
|
|
132
175
|
* Processes newly received ContractDeployment logs.
|
|
133
|
-
* @param
|
|
176
|
+
* @param blockNumberToBodyHash - A mapping from block number to relevant body hash.
|
|
134
177
|
* @param logs - ContractDeployment logs.
|
|
135
178
|
* @returns The set of retrieved extended contract data items.
|
|
136
179
|
*/
|
|
137
|
-
export function processContractDeploymentLogs(
|
|
180
|
+
export function processContractDeploymentLogs(blockNumberToBodyHash, logs) {
|
|
138
181
|
const extendedContractData = [];
|
|
139
182
|
for (let i = 0; i < logs.length; i++) {
|
|
140
183
|
const log = logs[i];
|
|
141
184
|
const l2BlockNum = Number(log.args.l2BlockNum);
|
|
142
185
|
const blockHash = Buffer.from(hexToBytes(log.args.l2BlockHash));
|
|
143
|
-
const expectedBlockHash =
|
|
186
|
+
const expectedBlockHash = blockNumberToBodyHash[l2BlockNum];
|
|
144
187
|
if (expectedBlockHash === undefined || !blockHash.equals(expectedBlockHash)) {
|
|
145
188
|
continue;
|
|
146
189
|
}
|
|
@@ -166,14 +209,13 @@ export function processContractDeploymentLogs(blockHashMapping, logs) {
|
|
|
166
209
|
* @param toBlock - Last block to get logs from (inclusive).
|
|
167
210
|
* @returns An array of `MessageAdded` logs.
|
|
168
211
|
*/
|
|
169
|
-
export
|
|
170
|
-
|
|
171
|
-
abi: InboxAbi,
|
|
172
|
-
name: 'MessageAdded',
|
|
173
|
-
});
|
|
174
|
-
return await publicClient.getLogs({
|
|
212
|
+
export function getPendingL1ToL2MessageLogs(publicClient, inboxAddress, fromBlock, toBlock) {
|
|
213
|
+
return publicClient.getLogs({
|
|
175
214
|
address: getAddress(inboxAddress.toString()),
|
|
176
|
-
event:
|
|
215
|
+
event: getAbiItem({
|
|
216
|
+
abi: InboxAbi,
|
|
217
|
+
name: 'MessageAdded',
|
|
218
|
+
}),
|
|
177
219
|
fromBlock,
|
|
178
220
|
toBlock: toBlock + 1n, // the toBlock argument in getLogs is exclusive
|
|
179
221
|
});
|
|
@@ -186,16 +228,15 @@ export async function getPendingL1ToL2MessageLogs(publicClient, inboxAddress, fr
|
|
|
186
228
|
* @param toBlock - Last block to get logs from (inclusive).
|
|
187
229
|
* @returns An array of `L1ToL2MessageCancelled` logs.
|
|
188
230
|
*/
|
|
189
|
-
export
|
|
190
|
-
|
|
191
|
-
abi: InboxAbi,
|
|
192
|
-
name: 'L1ToL2MessageCancelled',
|
|
193
|
-
});
|
|
194
|
-
return await publicClient.getLogs({
|
|
231
|
+
export function getL1ToL2MessageCancelledLogs(publicClient, inboxAddress, fromBlock, toBlock) {
|
|
232
|
+
return publicClient.getLogs({
|
|
195
233
|
address: getAddress(inboxAddress.toString()),
|
|
196
|
-
event:
|
|
234
|
+
event: getAbiItem({
|
|
235
|
+
abi: InboxAbi,
|
|
236
|
+
name: 'L1ToL2MessageCancelled',
|
|
237
|
+
}),
|
|
197
238
|
fromBlock,
|
|
198
239
|
toBlock: toBlock + 1n, // the toBlock argument in getLogs is exclusive
|
|
199
240
|
});
|
|
200
241
|
}
|
|
201
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRoX2xvZ19oYW5kbGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcmNoaXZlci9ldGhfbG9nX2hhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxJQUFJLEVBQ0osWUFBWSxFQUNaLHVCQUF1QixFQUN2QixvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLGFBQWEsRUFDYixPQUFPLEdBQ1IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsNEJBQTRCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRS9HLE9BQU8sRUFBMEIsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEc7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxvQ0FBb0MsQ0FDbEQsSUFBb0Y7SUFFcEYsTUFBTSxjQUFjLEdBQThCLEVBQUUsQ0FBQztJQUNyRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQ3hHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDWCxjQUFjLENBQUMs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
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { Body } from '@aztec/circuit-types';
|
|
3
|
+
import { AztecKVStore } from '@aztec/kv-store';
|
|
4
|
+
export declare class BlockBodyStore {
|
|
5
|
+
#private;
|
|
6
|
+
private db;
|
|
7
|
+
constructor(db: AztecKVStore);
|
|
8
|
+
/**
|
|
9
|
+
* Append new block bodies to the store's map.
|
|
10
|
+
* @param blockBodies - The L2 block bodies to be added to the store.
|
|
11
|
+
* @returns True if the operation is successful.
|
|
12
|
+
*/
|
|
13
|
+
addBlockBodies(blockBodies: Body[]): Promise<boolean>;
|
|
14
|
+
/**
|
|
15
|
+
* Gets a list of L2 block bodies with its associated txsHashes
|
|
16
|
+
* @param txsHashes - The txsHashes list that corresponds to the blockBodies we want to retrieve
|
|
17
|
+
* @returns The requested L2 block bodies
|
|
18
|
+
*/
|
|
19
|
+
getBlockBodies(txsHashes: Buffer[]): Promise<Body[]>;
|
|
20
|
+
/**
|
|
21
|
+
* Gets an L2 block body.
|
|
22
|
+
* @param txsHash - The txHash of the the block body to return
|
|
23
|
+
* @returns The requested L2 block body
|
|
24
|
+
*/
|
|
25
|
+
getBlockBody(txsHash: Buffer): Body | undefined;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=block_body_store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block_body_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/kv_archiver_store/block_body_store.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAY,MAAM,iBAAiB,CAAC;AAEzD,qBAAa,cAAc;;IAIb,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,YAAY;IAIpC;;;;OAIG;IACH,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAUrD;;;;OAIG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAY1D;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;CAKhD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
var _BlockBodyStore_blockBodies;
|
|
2
|
+
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
+
import { Body } from '@aztec/circuit-types';
|
|
4
|
+
export class BlockBodyStore {
|
|
5
|
+
constructor(db) {
|
|
6
|
+
this.db = db;
|
|
7
|
+
/** Map block body hash to block body */
|
|
8
|
+
_BlockBodyStore_blockBodies.set(this, void 0);
|
|
9
|
+
__classPrivateFieldSet(this, _BlockBodyStore_blockBodies, db.openMap('archiver_block_bodies'), "f");
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Append new block bodies to the store's map.
|
|
13
|
+
* @param blockBodies - The L2 block bodies to be added to the store.
|
|
14
|
+
* @returns True if the operation is successful.
|
|
15
|
+
*/
|
|
16
|
+
addBlockBodies(blockBodies) {
|
|
17
|
+
return this.db.transaction(() => {
|
|
18
|
+
for (const body of blockBodies) {
|
|
19
|
+
void __classPrivateFieldGet(this, _BlockBodyStore_blockBodies, "f").set(body.getCalldataHash().toString('hex'), body.toBuffer());
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Gets a list of L2 block bodies with its associated txsHashes
|
|
26
|
+
* @param txsHashes - The txsHashes list that corresponds to the blockBodies we want to retrieve
|
|
27
|
+
* @returns The requested L2 block bodies
|
|
28
|
+
*/
|
|
29
|
+
async getBlockBodies(txsHashes) {
|
|
30
|
+
const blockBodiesBuffer = await this.db.transaction(() => txsHashes.map(txsHash => __classPrivateFieldGet(this, _BlockBodyStore_blockBodies, "f").get(txsHash.toString('hex'))));
|
|
31
|
+
if (blockBodiesBuffer.some(bodyBuffer => bodyBuffer === undefined)) {
|
|
32
|
+
throw new Error('Block body buffer is undefined');
|
|
33
|
+
}
|
|
34
|
+
return blockBodiesBuffer.map(blockBodyBuffer => Body.fromBuffer(blockBodyBuffer));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Gets an L2 block body.
|
|
38
|
+
* @param txsHash - The txHash of the the block body to return
|
|
39
|
+
* @returns The requested L2 block body
|
|
40
|
+
*/
|
|
41
|
+
getBlockBody(txsHash) {
|
|
42
|
+
const blockBody = __classPrivateFieldGet(this, _BlockBodyStore_blockBodies, "f").get(txsHash.toString('hex'));
|
|
43
|
+
return blockBody && Body.fromBuffer(blockBody);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
_BlockBodyStore_blockBodies = new WeakMap();
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfYm9keV9zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcmNoaXZlci9rdl9hcmNoaXZlcl9zdG9yZS9ibG9ja19ib2R5X3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRzVDLE1BQU0sT0FBTyxjQUFjO0lBSXpCLFlBQW9CLEVBQWdCO1FBQWhCLE9BQUUsR0FBRixFQUFFLENBQWM7UUFIcEMsd0NBQXdDO1FBQ3hDLDhDQUF1QztRQUdyQyx1QkFBQSxJQUFJLCtCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLE1BQUEsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxXQUFtQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUM5QixLQUFLLE1BQU0sSUFBSSxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUMvQixLQUFLLHVCQUFBLElBQUksbUNBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN0RixDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFtQjtRQUN0QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQ3ZELFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLG1DQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUN6RSxDQUFDO1FBRUYsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELE9BQU8saUJBQWlCLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFnQixDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQVksQ0FBQyxPQUFlO1FBQzFCLE1BQU0sU0FBUyxHQUFHLHVCQUFBLElBQUksbUNBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRWpFLE9BQU8sU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakQsQ0FBQztDQUNGIn0=
|