@aztec/archiver 0.85.0-alpha-testnet.2 → 0.85.0-alpha-testnet.4
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/kv_archiver_store/block_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/block_store.js +13 -6
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +4 -2
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.js +6 -0
- package/package.json +12 -12
- package/src/archiver/kv_archiver_store/block_store.ts +19 -6
- package/src/archiver/kv_archiver_store/kv_archiver_store.ts +13 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/kv_archiver_store/block_store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAA6C,MAAM,iBAAiB,CAAC;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAExF,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAWzE;;GAEG;AACH,qBAAa,UAAU;;IAwBT,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,iBAAiB;IAUzC;;;;OAIG;IACG,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA2B7D;;;;;;OAMG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IA0BvD;;;;;OAKG;IACI,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAC,gBAAgB,CAAC;IASvF;;;;OAIG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAQ1E;;;;;OAKG;IACI,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"block_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/kv_archiver_store/block_store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAA6C,MAAM,iBAAiB,CAAC;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAExF,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAWzE;;GAEG;AACH,qBAAa,UAAU;;IAwBT,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,iBAAiB;IAUzC;;;;OAIG;IACG,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA2B7D;;;;;;OAMG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IA0BvD;;;;;OAKG;IACI,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAC,gBAAgB,CAAC;IASvF;;;;OAIG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAQ1E;;;;;OAKG;IACI,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAC,WAAW,CAAC;YAY1E,wBAAwB;IAsBtC;;;;OAIG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAmBvE;;;;OAIG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAuBzE;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAI1F;;;;OAIG;IACH,mBAAmB,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAI7G;;;OAGG;IACG,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKhD;;;OAGG;IACH,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAItD,uBAAuB,CAAC,aAAa,EAAE,MAAM;IAIvC,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/C,sBAAsB,CAAC,WAAW,EAAE,MAAM;CAe3C"}
|
|
@@ -92,8 +92,8 @@ export { TxReceipt } from '@aztec/stdlib/tx';
|
|
|
92
92
|
* @param limit - The number of blocks to return.
|
|
93
93
|
* @returns The requested L2 blocks
|
|
94
94
|
*/ async *getBlocks(start, limit) {
|
|
95
|
-
for await (const blockStorage of this.#blocks.
|
|
96
|
-
const block = await this.getBlockFromBlockStorage(blockStorage);
|
|
95
|
+
for await (const [blockNumber, blockStorage] of this.#blocks.entriesAsync(this.#computeBlockRange(start, limit))){
|
|
96
|
+
const block = await this.getBlockFromBlockStorage(blockNumber, blockStorage);
|
|
97
97
|
if (block) {
|
|
98
98
|
yield block;
|
|
99
99
|
}
|
|
@@ -108,7 +108,7 @@ export { TxReceipt } from '@aztec/stdlib/tx';
|
|
|
108
108
|
if (!blockStorage || !blockStorage.header) {
|
|
109
109
|
return Promise.resolve(undefined);
|
|
110
110
|
}
|
|
111
|
-
return this.getBlockFromBlockStorage(blockStorage);
|
|
111
|
+
return this.getBlockFromBlockStorage(blockNumber, blockStorage);
|
|
112
112
|
}
|
|
113
113
|
/**
|
|
114
114
|
* Gets the headers for a sequence of L2 blocks.
|
|
@@ -116,11 +116,15 @@ export { TxReceipt } from '@aztec/stdlib/tx';
|
|
|
116
116
|
* @param limit - The number of blocks to return.
|
|
117
117
|
* @returns The requested L2 block headers
|
|
118
118
|
*/ async *getBlockHeaders(start, limit) {
|
|
119
|
-
for await (const blockStorage of this.#blocks.
|
|
120
|
-
|
|
119
|
+
for await (const [blockNumber, blockStorage] of this.#blocks.entriesAsync(this.#computeBlockRange(start, limit))){
|
|
120
|
+
const header = BlockHeader.fromBuffer(blockStorage.header);
|
|
121
|
+
if (header.getBlockNumber() !== blockNumber) {
|
|
122
|
+
throw new Error(`Block number mismatch when retrieving block header from archive (expected ${blockNumber} but got ${header.getBlockNumber()})`);
|
|
123
|
+
}
|
|
124
|
+
yield header;
|
|
121
125
|
}
|
|
122
126
|
}
|
|
123
|
-
async getBlockFromBlockStorage(blockStorage) {
|
|
127
|
+
async getBlockFromBlockStorage(blockNumber, blockStorage) {
|
|
124
128
|
const header = BlockHeader.fromBuffer(blockStorage.header);
|
|
125
129
|
const archive = AppendOnlyTreeSnapshot.fromBuffer(blockStorage.archive);
|
|
126
130
|
const blockHash = (await header.hash()).toString();
|
|
@@ -131,6 +135,9 @@ export { TxReceipt } from '@aztec/stdlib/tx';
|
|
|
131
135
|
}
|
|
132
136
|
const body = Body.fromBuffer(blockBodyBuffer);
|
|
133
137
|
const block = new L2Block(archive, header, body);
|
|
138
|
+
if (block.number !== blockNumber) {
|
|
139
|
+
throw new Error(`Block number mismatch when retrieving block from archive (expected ${blockNumber} but got ${block.number} with hash ${await block.hash()})`);
|
|
140
|
+
}
|
|
134
141
|
const signatures = blockStorage.signatures.map(Signature.fromBuffer);
|
|
135
142
|
return {
|
|
136
143
|
block,
|
|
@@ -3,7 +3,7 @@ import type { AztecAsyncKVStore, StoreSize } from '@aztec/kv-store';
|
|
|
3
3
|
import { FunctionSelector } from '@aztec/stdlib/abi';
|
|
4
4
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
5
|
import type { L2Block } from '@aztec/stdlib/block';
|
|
6
|
-
import type { ContractClassPublic, ContractInstanceUpdateWithAddress, ContractInstanceWithAddress, ExecutablePrivateFunctionWithMembershipProof, UtilityFunctionWithMembershipProof } from '@aztec/stdlib/contract';
|
|
6
|
+
import type { ContractClassPublic, ContractDataSource, ContractInstanceUpdateWithAddress, ContractInstanceWithAddress, ExecutablePrivateFunctionWithMembershipProof, UtilityFunctionWithMembershipProof } from '@aztec/stdlib/contract';
|
|
7
7
|
import type { GetContractClassLogsResponse, GetPublicLogsResponse } from '@aztec/stdlib/interfaces/client';
|
|
8
8
|
import { type LogFilter, PrivateLog, type TxScopedL2Log } from '@aztec/stdlib/logs';
|
|
9
9
|
import type { InboxLeaf } from '@aztec/stdlib/messaging';
|
|
@@ -15,12 +15,14 @@ export declare const ARCHIVER_DB_VERSION = 1;
|
|
|
15
15
|
/**
|
|
16
16
|
* LMDB implementation of the ArchiverDataStore interface.
|
|
17
17
|
*/
|
|
18
|
-
export declare class KVArchiverDataStore implements ArchiverDataStore {
|
|
18
|
+
export declare class KVArchiverDataStore implements ArchiverDataStore, ContractDataSource {
|
|
19
19
|
#private;
|
|
20
20
|
private db;
|
|
21
21
|
static readonly SCHEMA_VERSION = 1;
|
|
22
22
|
private functionNames;
|
|
23
23
|
constructor(db: AztecAsyncKVStore, logsMaxPageSize?: number);
|
|
24
|
+
getBlockNumber(): Promise<number>;
|
|
25
|
+
getContract(address: AztecAddress, blockNumber?: number): Promise<ContractInstanceWithAddress | undefined>;
|
|
24
26
|
backupTo(path: string, compress?: boolean): Promise<string>;
|
|
25
27
|
close(): Promise<void>;
|
|
26
28
|
getDebugFunctionName(_address: AztecAddress, selector: FunctionSelector): Promise<string | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kv_archiver_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/kv_archiver_store/kv_archiver_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAGnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EACV,mBAAmB,EACnB,iCAAiC,EACjC,2BAA2B,EAC3B,4CAA4C,EAC5C,kCAAkC,EACnC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC3G,OAAO,EAAE,KAAK,SAAS,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAIvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAOhE,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;GAEG;AACH,qBAAa,mBAAoB,YAAW,iBAAiB;;
|
|
1
|
+
{"version":3,"file":"kv_archiver_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/kv_archiver_store/kv_archiver_store.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,12 @@ export const ARCHIVER_DB_VERSION = 1;
|
|
|
30
30
|
this.#contractClassStore = new ContractClassStore(db);
|
|
31
31
|
this.#contractInstanceStore = new ContractInstanceStore(db);
|
|
32
32
|
}
|
|
33
|
+
getBlockNumber() {
|
|
34
|
+
return this.getSynchedL2BlockNumber();
|
|
35
|
+
}
|
|
36
|
+
async getContract(address, blockNumber) {
|
|
37
|
+
return this.getContractInstance(address, blockNumber ?? await this.getBlockNumber());
|
|
38
|
+
}
|
|
33
39
|
async backupTo(path, compress = true) {
|
|
34
40
|
await this.db.backupTo(path, compress);
|
|
35
41
|
return join(path, 'data.mdb');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/archiver",
|
|
3
|
-
"version": "0.85.0-alpha-testnet.
|
|
3
|
+
"version": "0.85.0-alpha-testnet.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -64,17 +64,17 @@
|
|
|
64
64
|
]
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@aztec/blob-lib": "0.85.0-alpha-testnet.
|
|
68
|
-
"@aztec/blob-sink": "0.85.0-alpha-testnet.
|
|
69
|
-
"@aztec/constants": "0.85.0-alpha-testnet.
|
|
70
|
-
"@aztec/ethereum": "0.85.0-alpha-testnet.
|
|
71
|
-
"@aztec/foundation": "0.85.0-alpha-testnet.
|
|
72
|
-
"@aztec/kv-store": "0.85.0-alpha-testnet.
|
|
73
|
-
"@aztec/l1-artifacts": "0.85.0-alpha-testnet.
|
|
74
|
-
"@aztec/noir-protocol-circuits-types": "0.85.0-alpha-testnet.
|
|
75
|
-
"@aztec/protocol-contracts": "0.85.0-alpha-testnet.
|
|
76
|
-
"@aztec/stdlib": "0.85.0-alpha-testnet.
|
|
77
|
-
"@aztec/telemetry-client": "0.85.0-alpha-testnet.
|
|
67
|
+
"@aztec/blob-lib": "0.85.0-alpha-testnet.4",
|
|
68
|
+
"@aztec/blob-sink": "0.85.0-alpha-testnet.4",
|
|
69
|
+
"@aztec/constants": "0.85.0-alpha-testnet.4",
|
|
70
|
+
"@aztec/ethereum": "0.85.0-alpha-testnet.4",
|
|
71
|
+
"@aztec/foundation": "0.85.0-alpha-testnet.4",
|
|
72
|
+
"@aztec/kv-store": "0.85.0-alpha-testnet.4",
|
|
73
|
+
"@aztec/l1-artifacts": "0.85.0-alpha-testnet.4",
|
|
74
|
+
"@aztec/noir-protocol-circuits-types": "0.85.0-alpha-testnet.4",
|
|
75
|
+
"@aztec/protocol-contracts": "0.85.0-alpha-testnet.4",
|
|
76
|
+
"@aztec/stdlib": "0.85.0-alpha-testnet.4",
|
|
77
|
+
"@aztec/telemetry-client": "0.85.0-alpha-testnet.4",
|
|
78
78
|
"debug": "^4.3.4",
|
|
79
79
|
"lodash.groupby": "^4.6.0",
|
|
80
80
|
"lodash.omit": "^4.5.0",
|
|
@@ -130,8 +130,8 @@ export class BlockStore {
|
|
|
130
130
|
* @returns The requested L2 blocks
|
|
131
131
|
*/
|
|
132
132
|
async *getBlocks(start: number, limit: number): AsyncIterableIterator<PublishedL2Block> {
|
|
133
|
-
for await (const blockStorage of this.#blocks.
|
|
134
|
-
const block = await this.getBlockFromBlockStorage(blockStorage);
|
|
133
|
+
for await (const [blockNumber, blockStorage] of this.#blocks.entriesAsync(this.#computeBlockRange(start, limit))) {
|
|
134
|
+
const block = await this.getBlockFromBlockStorage(blockNumber, blockStorage);
|
|
135
135
|
if (block) {
|
|
136
136
|
yield block;
|
|
137
137
|
}
|
|
@@ -148,7 +148,7 @@ export class BlockStore {
|
|
|
148
148
|
if (!blockStorage || !blockStorage.header) {
|
|
149
149
|
return Promise.resolve(undefined);
|
|
150
150
|
}
|
|
151
|
-
return this.getBlockFromBlockStorage(blockStorage);
|
|
151
|
+
return this.getBlockFromBlockStorage(blockNumber, blockStorage);
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
/**
|
|
@@ -158,12 +158,18 @@ export class BlockStore {
|
|
|
158
158
|
* @returns The requested L2 block headers
|
|
159
159
|
*/
|
|
160
160
|
async *getBlockHeaders(start: number, limit: number): AsyncIterableIterator<BlockHeader> {
|
|
161
|
-
for await (const blockStorage of this.#blocks.
|
|
162
|
-
|
|
161
|
+
for await (const [blockNumber, blockStorage] of this.#blocks.entriesAsync(this.#computeBlockRange(start, limit))) {
|
|
162
|
+
const header = BlockHeader.fromBuffer(blockStorage.header);
|
|
163
|
+
if (header.getBlockNumber() !== blockNumber) {
|
|
164
|
+
throw new Error(
|
|
165
|
+
`Block number mismatch when retrieving block header from archive (expected ${blockNumber} but got ${header.getBlockNumber()})`,
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
yield header;
|
|
163
169
|
}
|
|
164
170
|
}
|
|
165
171
|
|
|
166
|
-
private async getBlockFromBlockStorage(blockStorage: BlockStorage) {
|
|
172
|
+
private async getBlockFromBlockStorage(blockNumber: number, blockStorage: BlockStorage) {
|
|
167
173
|
const header = BlockHeader.fromBuffer(blockStorage.header);
|
|
168
174
|
const archive = AppendOnlyTreeSnapshot.fromBuffer(blockStorage.archive);
|
|
169
175
|
const blockHash = (await header.hash()).toString();
|
|
@@ -174,6 +180,13 @@ export class BlockStore {
|
|
|
174
180
|
}
|
|
175
181
|
const body = Body.fromBuffer(blockBodyBuffer);
|
|
176
182
|
const block = new L2Block(archive, header, body);
|
|
183
|
+
if (block.number !== blockNumber) {
|
|
184
|
+
throw new Error(
|
|
185
|
+
`Block number mismatch when retrieving block from archive (expected ${blockNumber} but got ${
|
|
186
|
+
block.number
|
|
187
|
+
} with hash ${await block.hash()})`,
|
|
188
|
+
);
|
|
189
|
+
}
|
|
177
190
|
const signatures = blockStorage.signatures.map(Signature.fromBuffer);
|
|
178
191
|
return { block, l1: blockStorage.l1, signatures };
|
|
179
192
|
}
|
|
@@ -7,6 +7,7 @@ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
|
7
7
|
import type { L2Block } from '@aztec/stdlib/block';
|
|
8
8
|
import type {
|
|
9
9
|
ContractClassPublic,
|
|
10
|
+
ContractDataSource,
|
|
10
11
|
ContractInstanceUpdateWithAddress,
|
|
11
12
|
ContractInstanceWithAddress,
|
|
12
13
|
ExecutablePrivateFunctionWithMembershipProof,
|
|
@@ -33,7 +34,7 @@ export const ARCHIVER_DB_VERSION = 1;
|
|
|
33
34
|
/**
|
|
34
35
|
* LMDB implementation of the ArchiverDataStore interface.
|
|
35
36
|
*/
|
|
36
|
-
export class KVArchiverDataStore implements ArchiverDataStore {
|
|
37
|
+
export class KVArchiverDataStore implements ArchiverDataStore, ContractDataSource {
|
|
37
38
|
public static readonly SCHEMA_VERSION = ARCHIVER_DB_VERSION;
|
|
38
39
|
|
|
39
40
|
#blockStore: BlockStore;
|
|
@@ -53,6 +54,17 @@ export class KVArchiverDataStore implements ArchiverDataStore {
|
|
|
53
54
|
this.#contractInstanceStore = new ContractInstanceStore(db);
|
|
54
55
|
}
|
|
55
56
|
|
|
57
|
+
public getBlockNumber(): Promise<number> {
|
|
58
|
+
return this.getSynchedL2BlockNumber();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
public async getContract(
|
|
62
|
+
address: AztecAddress,
|
|
63
|
+
blockNumber?: number,
|
|
64
|
+
): Promise<ContractInstanceWithAddress | undefined> {
|
|
65
|
+
return this.getContractInstance(address, blockNumber ?? (await this.getBlockNumber()));
|
|
66
|
+
}
|
|
67
|
+
|
|
56
68
|
public async backupTo(path: string, compress = true): Promise<string> {
|
|
57
69
|
await this.db.backupTo(path, compress);
|
|
58
70
|
return join(path, 'data.mdb');
|