@aztec/archiver 0.55.1 → 0.57.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/README.md +1 -1
- package/dest/archiver/archiver.d.ts +27 -25
- package/dest/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +391 -169
- package/dest/archiver/archiver_store.d.ts +47 -23
- 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 +75 -42
- package/dest/archiver/config.js +6 -6
- package/dest/archiver/data_retrieval.d.ts +32 -5
- package/dest/archiver/data_retrieval.d.ts.map +1 -1
- package/dest/archiver/data_retrieval.js +126 -16
- package/dest/archiver/epoch_helpers.d.ts +15 -0
- package/dest/archiver/epoch_helpers.d.ts.map +1 -0
- package/dest/archiver/epoch_helpers.js +23 -0
- package/dest/archiver/kv_archiver_store/block_store.d.ts +22 -3
- package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/block_store.js +75 -12
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +2 -1
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/contract_class_store.js +11 -4
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +1 -0
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/contract_instance_store.js +4 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +31 -23
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.js +65 -38
- package/dest/archiver/kv_archiver_store/log_store.d.ts +4 -5
- package/dest/archiver/kv_archiver_store/log_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/log_store.js +18 -14
- package/dest/archiver/kv_archiver_store/message_store.d.ts +2 -0
- package/dest/archiver/kv_archiver_store/message_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/message_store.js +18 -8
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts +1 -0
- 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 -1
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts +23 -39
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts.map +1 -1
- package/dest/archiver/memory_archiver_store/memory_archiver_store.js +132 -91
- package/dest/index.d.ts +0 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -2
- package/dest/test/index.d.ts +2 -0
- package/dest/test/index.d.ts.map +1 -0
- package/dest/test/index.js +2 -0
- package/dest/test/mock_l2_block_source.d.ts +73 -0
- package/dest/test/mock_l2_block_source.d.ts.map +1 -0
- package/dest/test/mock_l2_block_source.js +134 -0
- package/package.json +15 -11
- package/src/archiver/archiver.ts +531 -248
- package/src/archiver/archiver_store.ts +53 -31
- package/src/archiver/archiver_store_test_suite.ts +93 -81
- package/src/archiver/config.ts +5 -5
- package/src/archiver/data_retrieval.ts +189 -30
- package/src/archiver/epoch_helpers.ts +26 -0
- package/src/archiver/kv_archiver_store/block_store.ts +87 -12
- package/src/archiver/kv_archiver_store/contract_class_store.ts +18 -5
- package/src/archiver/kv_archiver_store/contract_instance_store.ts +4 -0
- package/src/archiver/kv_archiver_store/kv_archiver_store.ts +74 -47
- package/src/archiver/kv_archiver_store/log_store.ts +18 -18
- package/src/archiver/kv_archiver_store/message_store.ts +18 -5
- package/src/archiver/memory_archiver_store/l1_to_l2_message_store.ts +4 -0
- package/src/archiver/memory_archiver_store/memory_archiver_store.ts +155 -108
- package/src/index.ts +1 -2
- package/src/test/index.ts +1 -0
- package/src/test/mock_l2_block_source.ts +165 -0
- package/dest/archiver/eth_log_handlers.d.ts +0 -59
- package/dest/archiver/eth_log_handlers.d.ts.map +0 -1
- package/dest/archiver/eth_log_handlers.js +0 -155
- package/dest/archiver/kv_archiver_store/block_body_store.d.ts +0 -34
- package/dest/archiver/kv_archiver_store/block_body_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/block_body_store.js +0 -65
- package/dest/archiver/kv_archiver_store/proven_store.d.ts +0 -14
- package/dest/archiver/kv_archiver_store/proven_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/proven_store.js +0 -30
- package/src/archiver/eth_log_handlers.ts +0 -213
- package/src/archiver/kv_archiver_store/block_body_store.ts +0 -74
- package/src/archiver/kv_archiver_store/proven_store.ts +0 -34
package/README.md
CHANGED
|
@@ -13,4 +13,4 @@ The interfaces defining how the data can be consumed from the archiver are `L2Bl
|
|
|
13
13
|
To install dependencies and build the package run `yarn install` followed by `yarn build`.
|
|
14
14
|
To run test execute `yarn test`.
|
|
15
15
|
|
|
16
|
-
To start the service export `ETHEREUM_HOST` (defaults to `http://127.0.0.1:8545/`), `
|
|
16
|
+
To start the service export `ETHEREUM_HOST` (defaults to `http://127.0.0.1:8545/`), `ARCHIVER_POLLING_INTERVAL_MS` (defaults to `1000 ms`), `ROLLUP_CONTRACT_ADDRESS`, `INBOX_CONTRACT_ADDRESS` environmental variables and start the service with `yarn start`.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type FromLogType, type GetUnencryptedLogsResponse, type L1ToL2MessageSource, type L2Block, type L2BlockL2Logs, type L2BlockSource, type L2LogsSource, type LogFilter, type LogType, type TxEffect, type TxHash, type TxReceipt } from '@aztec/circuit-types';
|
|
2
|
-
import { type FunctionSelector } from '@aztec/circuits.js';
|
|
2
|
+
import { type FunctionSelector, type Header } from '@aztec/circuits.js';
|
|
3
3
|
import { type ContractArtifact } from '@aztec/foundation/abi';
|
|
4
4
|
import { type AztecAddress } from '@aztec/foundation/aztec-address';
|
|
5
5
|
import { type EthAddress } from '@aztec/foundation/eth-address';
|
|
@@ -11,7 +11,6 @@ import { type Chain, type HttpTransport, type PublicClient } from 'viem';
|
|
|
11
11
|
import { type ArchiverDataStore } from './archiver_store.js';
|
|
12
12
|
import { type ArchiverConfig } from './config.js';
|
|
13
13
|
import { ArchiverInstrumentation } from './instrumentation.js';
|
|
14
|
-
import { type SingletonDataRetrieval } from './structs/data_retrieval.js';
|
|
15
14
|
/**
|
|
16
15
|
* Helper interface to combine all sources this archiver implementation provides.
|
|
17
16
|
*/
|
|
@@ -24,17 +23,22 @@ export type ArchiveSource = L2BlockSource & L2LogsSource & ContractDataSource &
|
|
|
24
23
|
export declare class Archiver implements ArchiveSource {
|
|
25
24
|
private readonly publicClient;
|
|
26
25
|
private readonly rollupAddress;
|
|
27
|
-
|
|
26
|
+
readonly inboxAddress: EthAddress;
|
|
28
27
|
private readonly registryAddress;
|
|
29
|
-
|
|
28
|
+
readonly dataStore: ArchiverDataStore;
|
|
30
29
|
private readonly pollingIntervalMs;
|
|
31
30
|
private readonly instrumentation;
|
|
32
|
-
private readonly
|
|
31
|
+
private readonly l1constants;
|
|
33
32
|
private readonly log;
|
|
34
33
|
/**
|
|
35
34
|
* A promise in which we will be continually fetching new L2 blocks.
|
|
36
35
|
*/
|
|
37
36
|
private runningPromise?;
|
|
37
|
+
private rollup;
|
|
38
|
+
private inbox;
|
|
39
|
+
private store;
|
|
40
|
+
l1BlockNumber: bigint | undefined;
|
|
41
|
+
l1Timestamp: bigint | undefined;
|
|
38
42
|
/**
|
|
39
43
|
* Creates a new instance of the Archiver.
|
|
40
44
|
* @param publicClient - A client for interacting with the Ethereum node.
|
|
@@ -45,7 +49,7 @@ export declare class Archiver implements ArchiveSource {
|
|
|
45
49
|
* @param store - An archiver data store for storage & retrieval of blocks, encrypted logs & contract data.
|
|
46
50
|
* @param log - A logger.
|
|
47
51
|
*/
|
|
48
|
-
constructor(publicClient: PublicClient<HttpTransport, Chain>, rollupAddress: EthAddress, inboxAddress: EthAddress, registryAddress: EthAddress,
|
|
52
|
+
constructor(publicClient: PublicClient<HttpTransport, Chain>, rollupAddress: EthAddress, inboxAddress: EthAddress, registryAddress: EthAddress, dataStore: ArchiverDataStore, pollingIntervalMs: number, instrumentation: ArchiverInstrumentation, l1constants?: L1RollupConstants, log?: DebugLogger);
|
|
49
53
|
/**
|
|
50
54
|
* Creates a new instance of the Archiver and blocks until it syncs from chain.
|
|
51
55
|
* @param config - The archiver's desired configuration.
|
|
@@ -68,23 +72,8 @@ export declare class Archiver implements ArchiveSource {
|
|
|
68
72
|
* @param blockUntilSynced - If true, blocks until the archiver has fully synced.
|
|
69
73
|
*/
|
|
70
74
|
private sync;
|
|
71
|
-
private
|
|
72
|
-
|
|
73
|
-
* Emits as metrics the block number proven, who proved it, and how much time passed since it was submitted.
|
|
74
|
-
* @param logs - The ProofVerified logs to emit metrics for, as collected from `retrieveL2ProofVerifiedEvents`.
|
|
75
|
-
**/
|
|
76
|
-
private emitProofVerifiedMetrics;
|
|
77
|
-
/**
|
|
78
|
-
* Extracts and stores contract classes out of ContractClassRegistered events emitted by the class registerer contract.
|
|
79
|
-
* @param allLogs - All logs emitted in a bunch of blocks.
|
|
80
|
-
*/
|
|
81
|
-
private storeRegisteredContractClasses;
|
|
82
|
-
/**
|
|
83
|
-
* Extracts and stores contract instances out of ContractInstanceDeployed events emitted by the canonical deployer contract.
|
|
84
|
-
* @param allLogs - All logs emitted in a bunch of blocks.
|
|
85
|
-
*/
|
|
86
|
-
private storeDeployedContractInstances;
|
|
87
|
-
private storeBroadcastedIndividualFunctions;
|
|
75
|
+
private handleL1ToL2Messages;
|
|
76
|
+
private handleL2blocks;
|
|
88
77
|
/**
|
|
89
78
|
* Stops the archiver.
|
|
90
79
|
* @returns A promise signalling completion of the stop process.
|
|
@@ -92,6 +81,12 @@ export declare class Archiver implements ArchiveSource {
|
|
|
92
81
|
stop(): Promise<void>;
|
|
93
82
|
getRollupAddress(): Promise<EthAddress>;
|
|
94
83
|
getRegistryAddress(): Promise<EthAddress>;
|
|
84
|
+
getL1BlockNumber(): bigint;
|
|
85
|
+
getL1Timestamp(): bigint;
|
|
86
|
+
getL2SlotNumber(): Promise<bigint>;
|
|
87
|
+
getL2EpochNumber(): Promise<bigint>;
|
|
88
|
+
getBlocksForEpoch(epochNumber: bigint): Promise<L2Block[]>;
|
|
89
|
+
isEpochComplete(epochNumber: bigint): Promise<boolean>;
|
|
95
90
|
/**
|
|
96
91
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
97
92
|
* @param from - Number of the first block to return (inclusive).
|
|
@@ -102,10 +97,11 @@ export declare class Archiver implements ArchiveSource {
|
|
|
102
97
|
getBlocks(from: number, limit: number, proven?: boolean): Promise<L2Block[]>;
|
|
103
98
|
/**
|
|
104
99
|
* Gets an l2 block.
|
|
105
|
-
* @param number - The block number to return
|
|
100
|
+
* @param number - The block number to return.
|
|
106
101
|
* @returns The requested L2 block.
|
|
107
102
|
*/
|
|
108
103
|
getBlock(number: number): Promise<L2Block | undefined>;
|
|
104
|
+
getBlockHeader(number: number | 'latest'): Promise<Header | undefined>;
|
|
109
105
|
getTxEffect(txHash: TxHash): Promise<TxEffect | undefined>;
|
|
110
106
|
getSettledTxReceipt(txHash: TxHash): Promise<TxReceipt | undefined>;
|
|
111
107
|
/**
|
|
@@ -135,8 +131,9 @@ export declare class Archiver implements ArchiveSource {
|
|
|
135
131
|
*/
|
|
136
132
|
getBlockNumber(): Promise<number>;
|
|
137
133
|
getProvenBlockNumber(): Promise<number>;
|
|
134
|
+
getProvenL2EpochNumber(): Promise<number | undefined>;
|
|
138
135
|
/** Forcefully updates the last proven block number. Use for testing. */
|
|
139
|
-
setProvenBlockNumber(
|
|
136
|
+
setProvenBlockNumber(blockNumber: number): Promise<void>;
|
|
140
137
|
getContractClass(id: Fr): Promise<ContractClassPublic | undefined>;
|
|
141
138
|
getContract(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined>;
|
|
142
139
|
/**
|
|
@@ -156,4 +153,9 @@ export declare class Archiver implements ArchiveSource {
|
|
|
156
153
|
addContractArtifact(address: AztecAddress, artifact: ContractArtifact): Promise<void>;
|
|
157
154
|
getContractArtifact(address: AztecAddress): Promise<ContractArtifact | undefined>;
|
|
158
155
|
}
|
|
156
|
+
type L1RollupConstants = {
|
|
157
|
+
l1StartBlock: bigint;
|
|
158
|
+
l1GenesisTime: bigint;
|
|
159
|
+
};
|
|
160
|
+
export {};
|
|
159
161
|
//# sourceMappingURL=archiver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,0BAA0B,
|
|
1
|
+
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"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"}
|