@aztec/archiver 3.0.0-nightly.20251024 → 3.0.0-nightly.20251026
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 +12 -0
- package/dest/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +34 -3
- package/dest/archiver/archiver_store.d.ts +20 -0
- 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 +90 -0
- package/dest/archiver/config.js +1 -1
- package/dest/archiver/kv_archiver_store/block_store.d.ts +26 -1
- package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/block_store.js +62 -0
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +5 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.js +13 -0
- package/dest/factory.js +1 -1
- package/dest/test/mock_l2_block_source.d.ts +8 -1
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +52 -0
- package/package.json +13 -13
- package/src/archiver/archiver.ts +36 -2
- package/src/archiver/archiver_store.ts +24 -0
- package/src/archiver/archiver_store_test_suite.ts +102 -0
- package/src/archiver/config.ts +1 -1
- package/src/archiver/kv_archiver_store/block_store.ts +77 -0
- package/src/archiver/kv_archiver_store/kv_archiver_store.ts +17 -1
- package/src/factory.ts +1 -1
- package/src/test/mock_l2_block_source.ts +57 -1
|
@@ -82,6 +82,7 @@ export declare class Archiver extends Archiver_base implements ArchiveSource, Tr
|
|
|
82
82
|
skipValidateBlockAttestations?: boolean;
|
|
83
83
|
}, blobSinkClient: BlobSinkClientInterface, epochCache: EpochCache, instrumentation: ArchiverInstrumentation, l1constants: L1RollupConstants & {
|
|
84
84
|
l1StartBlockHash: Buffer32;
|
|
85
|
+
genesisArchiveRoot: Fr;
|
|
85
86
|
}, log?: Logger);
|
|
86
87
|
/**
|
|
87
88
|
* Creates a new instance of the Archiver and blocks until it syncs from chain.
|
|
@@ -124,6 +125,9 @@ export declare class Archiver extends Archiver_base implements ArchiveSource, Tr
|
|
|
124
125
|
stop(): Promise<void>;
|
|
125
126
|
backupTo(destPath: string): Promise<string>;
|
|
126
127
|
getL1Constants(): Promise<L1RollupConstants>;
|
|
128
|
+
getGenesisValues(): Promise<{
|
|
129
|
+
genesisArchiveRoot: Fr;
|
|
130
|
+
}>;
|
|
127
131
|
getRollupAddress(): Promise<EthAddress>;
|
|
128
132
|
getRegistryAddress(): Promise<EthAddress>;
|
|
129
133
|
getL1BlockNumber(): bigint;
|
|
@@ -145,6 +149,10 @@ export declare class Archiver extends Archiver_base implements ArchiveSource, Tr
|
|
|
145
149
|
getBlocks(from: number, limit: number, proven?: boolean): Promise<L2Block[]>;
|
|
146
150
|
/** Equivalent to getBlocks but includes publish data. */
|
|
147
151
|
getPublishedBlocks(from: number, limit: number, proven?: boolean): Promise<PublishedL2Block[]>;
|
|
152
|
+
getPublishedBlockByHash(blockHash: Fr): Promise<PublishedL2Block | undefined>;
|
|
153
|
+
getPublishedBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined>;
|
|
154
|
+
getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined>;
|
|
155
|
+
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
|
|
148
156
|
/**
|
|
149
157
|
* Gets an l2 block.
|
|
150
158
|
* @param number - The block number to return.
|
|
@@ -225,7 +233,11 @@ export declare class ArchiverStoreHelper implements Omit<ArchiverDataStore, 'add
|
|
|
225
233
|
unwindBlocks(from: number, blocksToUnwind: number): Promise<boolean>;
|
|
226
234
|
getPublishedBlocks(from: number, limit: number): Promise<PublishedL2Block[]>;
|
|
227
235
|
getPublishedBlock(number: number): Promise<PublishedL2Block | undefined>;
|
|
236
|
+
getPublishedBlockByHash(blockHash: Fr): Promise<PublishedL2Block | undefined>;
|
|
237
|
+
getPublishedBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined>;
|
|
228
238
|
getBlockHeaders(from: number, limit: number): Promise<BlockHeader[]>;
|
|
239
|
+
getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined>;
|
|
240
|
+
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
|
|
229
241
|
getTxEffect(txHash: TxHash): Promise<IndexedTxEffect | undefined>;
|
|
230
242
|
getSettledTxReceipt(txHash: TxHash): Promise<TxReceipt | undefined>;
|
|
231
243
|
addL1ToL2Messages(messages: InboxMessage[]): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"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"}
|
|
@@ -89,10 +89,11 @@ function mapArchiverConfig(config) {
|
|
|
89
89
|
pollingInterval: config.viemPollingIntervalMS
|
|
90
90
|
});
|
|
91
91
|
const rollup = new RollupContract(publicClient, config.l1Contracts.rollupAddress);
|
|
92
|
-
const [l1StartBlock, l1GenesisTime, proofSubmissionEpochs] = await Promise.all([
|
|
92
|
+
const [l1StartBlock, l1GenesisTime, proofSubmissionEpochs, genesisArchiveRoot] = await Promise.all([
|
|
93
93
|
rollup.getL1StartBlock(),
|
|
94
94
|
rollup.getL1GenesisTime(),
|
|
95
|
-
rollup.getProofSubmissionEpochs()
|
|
95
|
+
rollup.getProofSubmissionEpochs(),
|
|
96
|
+
rollup.getGenesisArchiveTreeRoot()
|
|
96
97
|
]);
|
|
97
98
|
const l1StartBlockHash = await publicClient.getBlock({
|
|
98
99
|
blockNumber: l1StartBlock,
|
|
@@ -106,7 +107,8 @@ function mapArchiverConfig(config) {
|
|
|
106
107
|
epochDuration,
|
|
107
108
|
slotDuration,
|
|
108
109
|
ethereumSlotDuration,
|
|
109
|
-
proofSubmissionEpochs: Number(proofSubmissionEpochs)
|
|
110
|
+
proofSubmissionEpochs: Number(proofSubmissionEpochs),
|
|
111
|
+
genesisArchiveRoot: Fr.fromHexString(genesisArchiveRoot)
|
|
110
112
|
};
|
|
111
113
|
const opts = merge({
|
|
112
114
|
pollingIntervalMs: 10_000,
|
|
@@ -718,6 +720,11 @@ function mapArchiverConfig(config) {
|
|
|
718
720
|
getL1Constants() {
|
|
719
721
|
return Promise.resolve(this.l1constants);
|
|
720
722
|
}
|
|
723
|
+
getGenesisValues() {
|
|
724
|
+
return Promise.resolve({
|
|
725
|
+
genesisArchiveRoot: this.l1constants.genesisArchiveRoot
|
|
726
|
+
});
|
|
727
|
+
}
|
|
721
728
|
getRollupAddress() {
|
|
722
729
|
return Promise.resolve(this.l1Addresses.rollupAddress);
|
|
723
730
|
}
|
|
@@ -815,6 +822,18 @@ function mapArchiverConfig(config) {
|
|
|
815
822
|
const limitWithProven = proven ? Math.min(limit, Math.max(await this.store.getProvenL2BlockNumber() - from + 1, 0)) : limit;
|
|
816
823
|
return limitWithProven === 0 ? [] : await this.store.getPublishedBlocks(from, limitWithProven);
|
|
817
824
|
}
|
|
825
|
+
getPublishedBlockByHash(blockHash) {
|
|
826
|
+
return this.store.getPublishedBlockByHash(blockHash);
|
|
827
|
+
}
|
|
828
|
+
getPublishedBlockByArchive(archive) {
|
|
829
|
+
return this.store.getPublishedBlockByArchive(archive);
|
|
830
|
+
}
|
|
831
|
+
getBlockHeaderByHash(blockHash) {
|
|
832
|
+
return this.store.getBlockHeaderByHash(blockHash);
|
|
833
|
+
}
|
|
834
|
+
getBlockHeaderByArchive(archive) {
|
|
835
|
+
return this.store.getBlockHeaderByArchive(archive);
|
|
836
|
+
}
|
|
818
837
|
/**
|
|
819
838
|
* Gets an l2 block.
|
|
820
839
|
* @param number - The block number to return.
|
|
@@ -1200,9 +1219,21 @@ var Operation = /*#__PURE__*/ function(Operation) {
|
|
|
1200
1219
|
getPublishedBlock(number) {
|
|
1201
1220
|
return this.store.getPublishedBlock(number);
|
|
1202
1221
|
}
|
|
1222
|
+
getPublishedBlockByHash(blockHash) {
|
|
1223
|
+
return this.store.getPublishedBlockByHash(blockHash);
|
|
1224
|
+
}
|
|
1225
|
+
getPublishedBlockByArchive(archive) {
|
|
1226
|
+
return this.store.getPublishedBlockByArchive(archive);
|
|
1227
|
+
}
|
|
1203
1228
|
getBlockHeaders(from, limit) {
|
|
1204
1229
|
return this.store.getBlockHeaders(from, limit);
|
|
1205
1230
|
}
|
|
1231
|
+
getBlockHeaderByHash(blockHash) {
|
|
1232
|
+
return this.store.getBlockHeaderByHash(blockHash);
|
|
1233
|
+
}
|
|
1234
|
+
getBlockHeaderByArchive(archive) {
|
|
1235
|
+
return this.store.getBlockHeaderByArchive(archive);
|
|
1236
|
+
}
|
|
1206
1237
|
getTxEffect(txHash) {
|
|
1207
1238
|
return this.store.getTxEffect(txHash);
|
|
1208
1239
|
}
|
|
@@ -50,6 +50,16 @@ export interface ArchiverDataStore {
|
|
|
50
50
|
* @param number - The block number to return.
|
|
51
51
|
*/
|
|
52
52
|
getPublishedBlock(number: number): Promise<PublishedL2Block | undefined>;
|
|
53
|
+
/**
|
|
54
|
+
* Returns the block for the given hash, or undefined if not exists.
|
|
55
|
+
* @param blockHash - The block hash to return.
|
|
56
|
+
*/
|
|
57
|
+
getPublishedBlockByHash(blockHash: Fr): Promise<PublishedL2Block | undefined>;
|
|
58
|
+
/**
|
|
59
|
+
* Returns the block for the given archive root, or undefined if not exists.
|
|
60
|
+
* @param archive - The archive root to return.
|
|
61
|
+
*/
|
|
62
|
+
getPublishedBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined>;
|
|
53
63
|
/**
|
|
54
64
|
* Gets up to `limit` amount of published L2 blocks starting from `from`.
|
|
55
65
|
* @param from - Number of the first block to return (inclusive).
|
|
@@ -64,6 +74,16 @@ export interface ArchiverDataStore {
|
|
|
64
74
|
* @returns The requested L2 block headers.
|
|
65
75
|
*/
|
|
66
76
|
getBlockHeaders(from: number, limit: number): Promise<BlockHeader[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Returns the block header for the given hash, or undefined if not exists.
|
|
79
|
+
* @param blockHash - The block hash to return.
|
|
80
|
+
*/
|
|
81
|
+
getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined>;
|
|
82
|
+
/**
|
|
83
|
+
* Returns the block header for the given archive root, or undefined if not exists.
|
|
84
|
+
* @param archive - The archive root to return.
|
|
85
|
+
*/
|
|
86
|
+
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
|
|
67
87
|
/**
|
|
68
88
|
* Gets a tx effect.
|
|
69
89
|
* @param txHash - The hash of the tx corresponding to the tx effect.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver_store.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"archiver_store.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver_store_test_suite.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store_test_suite.ts"],"names":[],"mappings":"AAoCA,OAAO,4BAA4B,CAAC;AAIpC,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,qBAAqB,CAAC;AAKnF;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"archiver_store_test_suite.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store_test_suite.ts"],"names":[],"mappings":"AAoCA,OAAO,4BAA4B,CAAC;AAIpC,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,qBAAqB,CAAC;AAKnF;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,QA2rC/D"}
|
|
@@ -130,6 +130,24 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
130
130
|
await store.addBlocks(blocks);
|
|
131
131
|
await expect(store.unwindBlocks(5, 1)).rejects.toThrow(/can only unwind blocks from the tip/i);
|
|
132
132
|
});
|
|
133
|
+
it('unwound blocks and headers cannot be retrieved by hash or archive', async ()=>{
|
|
134
|
+
await store.addBlocks(blocks);
|
|
135
|
+
const lastBlock = blocks[blocks.length - 1];
|
|
136
|
+
const blockHash = await lastBlock.block.hash();
|
|
137
|
+
const archive = lastBlock.block.archive.root;
|
|
138
|
+
// Verify block and header exist before unwinding
|
|
139
|
+
expect(await store.getPublishedBlockByHash(blockHash)).toBeDefined();
|
|
140
|
+
expect(await store.getPublishedBlockByArchive(archive)).toBeDefined();
|
|
141
|
+
expect(await store.getBlockHeaderByHash(blockHash)).toBeDefined();
|
|
142
|
+
expect(await store.getBlockHeaderByArchive(archive)).toBeDefined();
|
|
143
|
+
// Unwind the block
|
|
144
|
+
await store.unwindBlocks(lastBlock.block.number, 1);
|
|
145
|
+
// Verify neither block nor header can be retrieved after unwinding
|
|
146
|
+
expect(await store.getPublishedBlockByHash(blockHash)).toBeUndefined();
|
|
147
|
+
expect(await store.getPublishedBlockByArchive(archive)).toBeUndefined();
|
|
148
|
+
expect(await store.getBlockHeaderByHash(blockHash)).toBeUndefined();
|
|
149
|
+
expect(await store.getBlockHeaderByArchive(archive)).toBeUndefined();
|
|
150
|
+
});
|
|
133
151
|
});
|
|
134
152
|
describe('getBlocks', ()=>{
|
|
135
153
|
beforeEach(async ()=>{
|
|
@@ -165,6 +183,78 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
165
183
|
await expect(store.getPublishedBlocks(20, 2)).rejects.toThrow(`mismatch`);
|
|
166
184
|
});
|
|
167
185
|
});
|
|
186
|
+
describe('getPublishedBlockByHash', ()=>{
|
|
187
|
+
beforeEach(async ()=>{
|
|
188
|
+
await store.addBlocks(blocks);
|
|
189
|
+
});
|
|
190
|
+
it('retrieves a block by its hash', async ()=>{
|
|
191
|
+
const expectedBlock = blocks[5];
|
|
192
|
+
const blockHash = await expectedBlock.block.hash();
|
|
193
|
+
const retrievedBlock = await store.getPublishedBlockByHash(blockHash);
|
|
194
|
+
expect(retrievedBlock).toBeDefined();
|
|
195
|
+
expectBlocksEqual([
|
|
196
|
+
retrievedBlock
|
|
197
|
+
], [
|
|
198
|
+
expectedBlock
|
|
199
|
+
]);
|
|
200
|
+
});
|
|
201
|
+
it('returns undefined for non-existent block hash', async ()=>{
|
|
202
|
+
const nonExistentHash = Fr.random();
|
|
203
|
+
await expect(store.getPublishedBlockByHash(nonExistentHash)).resolves.toBeUndefined();
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
describe('getPublishedBlockByArchive', ()=>{
|
|
207
|
+
beforeEach(async ()=>{
|
|
208
|
+
await store.addBlocks(blocks);
|
|
209
|
+
});
|
|
210
|
+
it('retrieves a block by its archive root', async ()=>{
|
|
211
|
+
const expectedBlock = blocks[3];
|
|
212
|
+
const archive = expectedBlock.block.archive.root;
|
|
213
|
+
const retrievedBlock = await store.getPublishedBlockByArchive(archive);
|
|
214
|
+
expect(retrievedBlock).toBeDefined();
|
|
215
|
+
expectBlocksEqual([
|
|
216
|
+
retrievedBlock
|
|
217
|
+
], [
|
|
218
|
+
expectedBlock
|
|
219
|
+
]);
|
|
220
|
+
});
|
|
221
|
+
it('returns undefined for non-existent archive root', async ()=>{
|
|
222
|
+
const nonExistentArchive = Fr.random();
|
|
223
|
+
await expect(store.getPublishedBlockByArchive(nonExistentArchive)).resolves.toBeUndefined();
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
describe('getBlockHeaderByHash', ()=>{
|
|
227
|
+
beforeEach(async ()=>{
|
|
228
|
+
await store.addBlocks(blocks);
|
|
229
|
+
});
|
|
230
|
+
it('retrieves a block header by its hash', async ()=>{
|
|
231
|
+
const expectedBlock = blocks[7];
|
|
232
|
+
const blockHash = await expectedBlock.block.hash();
|
|
233
|
+
const retrievedHeader = await store.getBlockHeaderByHash(blockHash);
|
|
234
|
+
expect(retrievedHeader).toBeDefined();
|
|
235
|
+
expect(retrievedHeader.equals(expectedBlock.block.getBlockHeader())).toBe(true);
|
|
236
|
+
});
|
|
237
|
+
it('returns undefined for non-existent block hash', async ()=>{
|
|
238
|
+
const nonExistentHash = Fr.random();
|
|
239
|
+
await expect(store.getBlockHeaderByHash(nonExistentHash)).resolves.toBeUndefined();
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
describe('getBlockHeaderByArchive', ()=>{
|
|
243
|
+
beforeEach(async ()=>{
|
|
244
|
+
await store.addBlocks(blocks);
|
|
245
|
+
});
|
|
246
|
+
it('retrieves a block header by its archive root', async ()=>{
|
|
247
|
+
const expectedBlock = blocks[2];
|
|
248
|
+
const archive = expectedBlock.block.archive.root;
|
|
249
|
+
const retrievedHeader = await store.getBlockHeaderByArchive(archive);
|
|
250
|
+
expect(retrievedHeader).toBeDefined();
|
|
251
|
+
expect(retrievedHeader.equals(expectedBlock.block.getBlockHeader())).toBe(true);
|
|
252
|
+
});
|
|
253
|
+
it('returns undefined for non-existent archive root', async ()=>{
|
|
254
|
+
const nonExistentArchive = Fr.random();
|
|
255
|
+
await expect(store.getBlockHeaderByArchive(nonExistentArchive)).resolves.toBeUndefined();
|
|
256
|
+
});
|
|
257
|
+
});
|
|
168
258
|
describe('getSyncedL2BlockNumber', ()=>{
|
|
169
259
|
it('returns the block number before INITIAL_L2_BLOCK_NUM if no blocks have been added', async ()=>{
|
|
170
260
|
await expect(store.getSynchedL2BlockNumber()).resolves.toEqual(INITIAL_L2_BLOCK_NUM - 1);
|
package/dest/archiver/config.js
CHANGED
|
@@ -22,7 +22,7 @@ export const archiverConfigMappings = {
|
|
|
22
22
|
archiverStoreMapSizeKb: {
|
|
23
23
|
env: 'ARCHIVER_STORE_MAP_SIZE_KB',
|
|
24
24
|
parseEnv: (val)=>val ? +val : undefined,
|
|
25
|
-
description: 'The maximum possible size of the archiver DB in KB. Overwrites the general
|
|
25
|
+
description: 'The maximum possible size of the archiver DB in KB. Overwrites the general dataStoreMapSizeKb.'
|
|
26
26
|
},
|
|
27
27
|
skipValidateBlockAttestations: {
|
|
28
28
|
description: 'Whether to skip validating block attestations (use only for testing).',
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
1
2
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
2
3
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
|
-
import { PublishedL2Block, type ValidateBlockResult } from '@aztec/stdlib/block';
|
|
4
|
+
import { L2BlockHash, PublishedL2Block, type ValidateBlockResult } from '@aztec/stdlib/block';
|
|
4
5
|
import { BlockHeader, type IndexedTxEffect, TxHash, TxReceipt } from '@aztec/stdlib/tx';
|
|
5
6
|
export { TxReceipt, type TxEffect, type TxHash } from '@aztec/stdlib/tx';
|
|
6
7
|
/**
|
|
@@ -39,6 +40,30 @@ export declare class BlockStore {
|
|
|
39
40
|
* @returns The requested L2 block.
|
|
40
41
|
*/
|
|
41
42
|
getBlock(blockNumber: number): Promise<PublishedL2Block | undefined>;
|
|
43
|
+
/**
|
|
44
|
+
* Gets an L2 block by its hash.
|
|
45
|
+
* @param blockHash - The hash of the block to return.
|
|
46
|
+
* @returns The requested L2 block.
|
|
47
|
+
*/
|
|
48
|
+
getBlockByHash(blockHash: L2BlockHash): Promise<PublishedL2Block | undefined>;
|
|
49
|
+
/**
|
|
50
|
+
* Gets an L2 block by its archive root.
|
|
51
|
+
* @param archive - The archive root of the block to return.
|
|
52
|
+
* @returns The requested L2 block.
|
|
53
|
+
*/
|
|
54
|
+
getBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined>;
|
|
55
|
+
/**
|
|
56
|
+
* Gets a block header by its hash.
|
|
57
|
+
* @param blockHash - The hash of the block to return.
|
|
58
|
+
* @returns The requested block header.
|
|
59
|
+
*/
|
|
60
|
+
getBlockHeaderByHash(blockHash: L2BlockHash): Promise<BlockHeader | undefined>;
|
|
61
|
+
/**
|
|
62
|
+
* Gets a block header by its archive root.
|
|
63
|
+
* @param archive - The archive root of the block to return.
|
|
64
|
+
* @returns The requested block header.
|
|
65
|
+
*/
|
|
66
|
+
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
|
|
42
67
|
/**
|
|
43
68
|
* Gets the headers for a sequence of L2 blocks.
|
|
44
69
|
* @param start - Number of the first block to return (inclusive).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/kv_archiver_store/block_store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"block_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/kv_archiver_store/block_store.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,8 @@ export { TxReceipt } from '@aztec/stdlib/tx';
|
|
|
21
21
|
/** Stores l2 block number of the last proven block */ #lastProvenL2Block;
|
|
22
22
|
/** Stores the pending chain validation status */ #pendingChainValidationStatus;
|
|
23
23
|
/** Index mapping a contract's address (as a string) to its location in a block */ #contractIndex;
|
|
24
|
+
/** Index mapping block hash to block number */ #blockHashIndex;
|
|
25
|
+
/** Index mapping block archive to block number */ #blockArchiveIndex;
|
|
24
26
|
#log;
|
|
25
27
|
constructor(db){
|
|
26
28
|
this.db = db;
|
|
@@ -29,6 +31,8 @@ export { TxReceipt } from '@aztec/stdlib/tx';
|
|
|
29
31
|
this.#blockTxs = db.openMap('archiver_block_txs');
|
|
30
32
|
this.#txEffects = db.openMap('archiver_tx_effects');
|
|
31
33
|
this.#contractIndex = db.openMap('archiver_contract_index');
|
|
34
|
+
this.#blockHashIndex = db.openMap('archiver_block_hash_index');
|
|
35
|
+
this.#blockArchiveIndex = db.openMap('archiver_block_archive_index');
|
|
32
36
|
this.#lastSynchedL1Block = db.openSingleton('archiver_last_synched_l1_block');
|
|
33
37
|
this.#lastProvenL2Block = db.openSingleton('archiver_last_proven_l2_block');
|
|
34
38
|
this.#pendingChainValidationStatus = db.openSingleton('archiver_pending_chain_validation_status');
|
|
@@ -78,6 +82,9 @@ export { TxReceipt } from '@aztec/stdlib/tx';
|
|
|
78
82
|
await this.#txEffects.set(txEffect.data.txHash.toString(), serializeIndexedTxEffect(txEffect));
|
|
79
83
|
}
|
|
80
84
|
await this.#blockTxs.set(blockHash.toString(), Buffer.concat(block.block.body.txEffects.map((tx)=>tx.txHash.toBuffer())));
|
|
85
|
+
// Update indices for block hash and archive
|
|
86
|
+
await this.#blockHashIndex.set(blockHash.toString(), block.block.number);
|
|
87
|
+
await this.#blockArchiveIndex.set(block.block.archive.root.toString(), block.block.number);
|
|
81
88
|
}
|
|
82
89
|
await this.#lastSynchedL1Block.set(blocks[blocks.length - 1].l1.blockNumber);
|
|
83
90
|
return true;
|
|
@@ -110,6 +117,9 @@ export { TxReceipt } from '@aztec/stdlib/tx';
|
|
|
110
117
|
await Promise.all(block.block.body.txEffects.map((tx)=>this.#txEffects.delete(tx.txHash.toString())));
|
|
111
118
|
const blockHash = (await block.block.hash()).toString();
|
|
112
119
|
await this.#blockTxs.delete(blockHash);
|
|
120
|
+
// Clean up indices
|
|
121
|
+
await this.#blockHashIndex.delete(blockHash);
|
|
122
|
+
await this.#blockArchiveIndex.delete(block.block.archive.root.toString());
|
|
113
123
|
this.#log.debug(`Unwound block ${blockNumber} ${blockHash}`);
|
|
114
124
|
}
|
|
115
125
|
return true;
|
|
@@ -140,6 +150,58 @@ export { TxReceipt } from '@aztec/stdlib/tx';
|
|
|
140
150
|
return this.getBlockFromBlockStorage(blockNumber, blockStorage);
|
|
141
151
|
}
|
|
142
152
|
/**
|
|
153
|
+
* Gets an L2 block by its hash.
|
|
154
|
+
* @param blockHash - The hash of the block to return.
|
|
155
|
+
* @returns The requested L2 block.
|
|
156
|
+
*/ async getBlockByHash(blockHash) {
|
|
157
|
+
const blockNumber = await this.#blockHashIndex.getAsync(blockHash.toString());
|
|
158
|
+
if (blockNumber === undefined) {
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
return this.getBlock(blockNumber);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Gets an L2 block by its archive root.
|
|
165
|
+
* @param archive - The archive root of the block to return.
|
|
166
|
+
* @returns The requested L2 block.
|
|
167
|
+
*/ async getBlockByArchive(archive) {
|
|
168
|
+
const blockNumber = await this.#blockArchiveIndex.getAsync(archive.toString());
|
|
169
|
+
if (blockNumber === undefined) {
|
|
170
|
+
return undefined;
|
|
171
|
+
}
|
|
172
|
+
return this.getBlock(blockNumber);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Gets a block header by its hash.
|
|
176
|
+
* @param blockHash - The hash of the block to return.
|
|
177
|
+
* @returns The requested block header.
|
|
178
|
+
*/ async getBlockHeaderByHash(blockHash) {
|
|
179
|
+
const blockNumber = await this.#blockHashIndex.getAsync(blockHash.toString());
|
|
180
|
+
if (blockNumber === undefined) {
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
const blockStorage = await this.#blocks.getAsync(blockNumber);
|
|
184
|
+
if (!blockStorage || !blockStorage.header) {
|
|
185
|
+
return undefined;
|
|
186
|
+
}
|
|
187
|
+
return L2BlockHeader.fromBuffer(blockStorage.header).toBlockHeader();
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Gets a block header by its archive root.
|
|
191
|
+
* @param archive - The archive root of the block to return.
|
|
192
|
+
* @returns The requested block header.
|
|
193
|
+
*/ async getBlockHeaderByArchive(archive) {
|
|
194
|
+
const blockNumber = await this.#blockArchiveIndex.getAsync(archive.toString());
|
|
195
|
+
if (blockNumber === undefined) {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
const blockStorage = await this.#blocks.getAsync(blockNumber);
|
|
199
|
+
if (!blockStorage || !blockStorage.header) {
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
return L2BlockHeader.fromBuffer(blockStorage.header).toBlockHeader();
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
143
205
|
* Gets the headers for a sequence of L2 blocks.
|
|
144
206
|
* @param start - Number of the first block to return (inclusive).
|
|
145
207
|
* @param limit - The number of blocks to return.
|
|
@@ -3,7 +3,7 @@ import type { Fr } from '@aztec/foundation/fields';
|
|
|
3
3
|
import type { AztecAsyncKVStore, CustomRange, StoreSize } from '@aztec/kv-store';
|
|
4
4
|
import { FunctionSelector } from '@aztec/stdlib/abi';
|
|
5
5
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
|
-
import type
|
|
6
|
+
import { type L2Block, type ValidateBlockResult } from '@aztec/stdlib/block';
|
|
7
7
|
import type { ContractClassPublic, ContractDataSource, ContractInstanceUpdateWithAddress, ContractInstanceWithAddress, ExecutablePrivateFunctionWithMembershipProof, UtilityFunctionWithMembershipProof } from '@aztec/stdlib/contract';
|
|
8
8
|
import type { GetContractClassLogsResponse, GetPublicLogsResponse } from '@aztec/stdlib/interfaces/client';
|
|
9
9
|
import { type LogFilter, PrivateLog, type TxScopedL2Log } from '@aztec/stdlib/logs';
|
|
@@ -60,6 +60,8 @@ export declare class KVArchiverDataStore implements ArchiverDataStore, ContractD
|
|
|
60
60
|
*/
|
|
61
61
|
unwindBlocks(from: number, blocksToUnwind: number): Promise<boolean>;
|
|
62
62
|
getPublishedBlock(number: number): Promise<PublishedL2Block | undefined>;
|
|
63
|
+
getPublishedBlockByHash(blockHash: Fr): Promise<PublishedL2Block | undefined>;
|
|
64
|
+
getPublishedBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined>;
|
|
63
65
|
/**
|
|
64
66
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
65
67
|
*
|
|
@@ -76,6 +78,8 @@ export declare class KVArchiverDataStore implements ArchiverDataStore, ContractD
|
|
|
76
78
|
* @returns The requested L2 blocks
|
|
77
79
|
*/
|
|
78
80
|
getBlockHeaders(start: number, limit: number): Promise<BlockHeader[]>;
|
|
81
|
+
getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined>;
|
|
82
|
+
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
|
|
79
83
|
/**
|
|
80
84
|
* Gets a tx effect.
|
|
81
85
|
* @param txHash - The hash of the tx corresponding to the tx effect.
|
|
@@ -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,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAGnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,
|
|
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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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { toArray } from '@aztec/foundation/iterable';
|
|
2
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import { FunctionSelector } from '@aztec/stdlib/abi';
|
|
4
|
+
import { L2BlockHash } from '@aztec/stdlib/block';
|
|
4
5
|
import { join } from 'path';
|
|
5
6
|
import { BlockStore } from './block_store.js';
|
|
6
7
|
import { ContractClassStore } from './contract_class_store.js';
|
|
@@ -121,6 +122,12 @@ export const MAX_FUNCTION_NAME_LEN = 256;
|
|
|
121
122
|
getPublishedBlock(number) {
|
|
122
123
|
return this.#blockStore.getBlock(number);
|
|
123
124
|
}
|
|
125
|
+
getPublishedBlockByHash(blockHash) {
|
|
126
|
+
return this.#blockStore.getBlockByHash(L2BlockHash.fromField(blockHash));
|
|
127
|
+
}
|
|
128
|
+
getPublishedBlockByArchive(archive) {
|
|
129
|
+
return this.#blockStore.getBlockByArchive(archive);
|
|
130
|
+
}
|
|
124
131
|
/**
|
|
125
132
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
126
133
|
*
|
|
@@ -139,6 +146,12 @@ export const MAX_FUNCTION_NAME_LEN = 256;
|
|
|
139
146
|
*/ getBlockHeaders(start, limit) {
|
|
140
147
|
return toArray(this.#blockStore.getBlockHeaders(start, limit));
|
|
141
148
|
}
|
|
149
|
+
getBlockHeaderByHash(blockHash) {
|
|
150
|
+
return this.#blockStore.getBlockHeaderByHash(L2BlockHash.fromField(blockHash));
|
|
151
|
+
}
|
|
152
|
+
getBlockHeaderByArchive(archive) {
|
|
153
|
+
return this.#blockStore.getBlockHeaderByArchive(archive);
|
|
154
|
+
}
|
|
142
155
|
/**
|
|
143
156
|
* Gets a tx effect.
|
|
144
157
|
* @param txHash - The hash of the tx corresponding to the tx effect.
|
package/dest/factory.js
CHANGED
|
@@ -10,7 +10,7 @@ export const ARCHIVER_STORE_NAME = 'archiver';
|
|
|
10
10
|
/** Creates an archiver store. */ export async function createArchiverStore(userConfig) {
|
|
11
11
|
const config = {
|
|
12
12
|
...userConfig,
|
|
13
|
-
|
|
13
|
+
dataStoreMapSizeKb: userConfig.archiverStoreMapSizeKb ?? userConfig.dataStoreMapSizeKb
|
|
14
14
|
};
|
|
15
15
|
const store = await createStore(ARCHIVER_STORE_NAME, ARCHIVER_DB_VERSION, config, createLogger('archiver:lmdb'));
|
|
16
16
|
return new KVArchiverDataStore(store, config.maxLogs);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
-
import
|
|
2
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
3
3
|
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
4
4
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
5
|
import { L2Block, L2BlockHash, type L2BlockSource, type L2Tips, PublishedL2Block, type ValidateBlockResult } from '@aztec/stdlib/block';
|
|
@@ -50,6 +50,10 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
50
50
|
*/
|
|
51
51
|
getBlocks(from: number, limit: number, proven?: boolean): Promise<L2Block[]>;
|
|
52
52
|
getPublishedBlocks(from: number, limit: number, proven?: boolean): Promise<PublishedL2Block[]>;
|
|
53
|
+
getPublishedBlockByHash(blockHash: Fr): Promise<PublishedL2Block | undefined>;
|
|
54
|
+
getPublishedBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined>;
|
|
55
|
+
getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined>;
|
|
56
|
+
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
|
|
53
57
|
getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined>;
|
|
54
58
|
getBlocksForEpoch(epochNumber: bigint): Promise<L2Block[]>;
|
|
55
59
|
getBlockHeadersForEpoch(epochNumber: bigint): Promise<BlockHeader[]>;
|
|
@@ -75,6 +79,9 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
75
79
|
getL2SlotNumber(): Promise<bigint>;
|
|
76
80
|
isEpochComplete(_epochNumber: bigint): Promise<boolean>;
|
|
77
81
|
getL1Constants(): Promise<L1RollupConstants>;
|
|
82
|
+
getGenesisValues(): Promise<{
|
|
83
|
+
genesisArchiveRoot: Fr;
|
|
84
|
+
}>;
|
|
78
85
|
getL1Timestamp(): Promise<bigint>;
|
|
79
86
|
/**
|
|
80
87
|
* Starts the block source. In this mock implementation, this is a noop.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
|
|
1
2
|
import { DefaultL1ContractsConfig } from '@aztec/ethereum';
|
|
2
3
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
3
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
4
6
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
7
|
import { L2Block, L2BlockHash, PublishedL2Block } from '@aztec/stdlib/block';
|
|
6
8
|
import { EmptyL1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
@@ -85,6 +87,51 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
85
87
|
attestations: []
|
|
86
88
|
}));
|
|
87
89
|
}
|
|
90
|
+
async getPublishedBlockByHash(blockHash) {
|
|
91
|
+
for (const block of this.l2Blocks){
|
|
92
|
+
const hash = await block.hash();
|
|
93
|
+
if (hash.equals(blockHash)) {
|
|
94
|
+
return PublishedL2Block.fromFields({
|
|
95
|
+
block,
|
|
96
|
+
l1: {
|
|
97
|
+
blockNumber: BigInt(block.number),
|
|
98
|
+
blockHash: Buffer32.random().toString(),
|
|
99
|
+
timestamp: BigInt(block.number)
|
|
100
|
+
},
|
|
101
|
+
attestations: []
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
getPublishedBlockByArchive(archive) {
|
|
108
|
+
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
109
|
+
if (!block) {
|
|
110
|
+
return Promise.resolve(undefined);
|
|
111
|
+
}
|
|
112
|
+
return Promise.resolve(PublishedL2Block.fromFields({
|
|
113
|
+
block,
|
|
114
|
+
l1: {
|
|
115
|
+
blockNumber: BigInt(block.number),
|
|
116
|
+
blockHash: Buffer32.random().toString(),
|
|
117
|
+
timestamp: BigInt(block.number)
|
|
118
|
+
},
|
|
119
|
+
attestations: []
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
async getBlockHeaderByHash(blockHash) {
|
|
123
|
+
for (const block of this.l2Blocks){
|
|
124
|
+
const hash = await block.hash();
|
|
125
|
+
if (hash.equals(blockHash)) {
|
|
126
|
+
return block.getBlockHeader();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
getBlockHeaderByArchive(archive) {
|
|
132
|
+
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
133
|
+
return Promise.resolve(block?.getBlockHeader());
|
|
134
|
+
}
|
|
88
135
|
getBlockHeader(number) {
|
|
89
136
|
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.getBlockHeader());
|
|
90
137
|
}
|
|
@@ -173,6 +220,11 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
173
220
|
getL1Constants() {
|
|
174
221
|
return Promise.resolve(EmptyL1RollupConstants);
|
|
175
222
|
}
|
|
223
|
+
getGenesisValues() {
|
|
224
|
+
return Promise.resolve({
|
|
225
|
+
genesisArchiveRoot: new Fr(GENESIS_ARCHIVE_ROOT)
|
|
226
|
+
});
|
|
227
|
+
}
|
|
176
228
|
getL1Timestamp() {
|
|
177
229
|
throw new Error('Method not implemented.');
|
|
178
230
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/archiver",
|
|
3
|
-
"version": "3.0.0-nightly.
|
|
3
|
+
"version": "3.0.0-nightly.20251026",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -66,18 +66,18 @@
|
|
|
66
66
|
]
|
|
67
67
|
},
|
|
68
68
|
"dependencies": {
|
|
69
|
-
"@aztec/blob-lib": "3.0.0-nightly.
|
|
70
|
-
"@aztec/blob-sink": "3.0.0-nightly.
|
|
71
|
-
"@aztec/constants": "3.0.0-nightly.
|
|
72
|
-
"@aztec/epoch-cache": "3.0.0-nightly.
|
|
73
|
-
"@aztec/ethereum": "3.0.0-nightly.
|
|
74
|
-
"@aztec/foundation": "3.0.0-nightly.
|
|
75
|
-
"@aztec/kv-store": "3.0.0-nightly.
|
|
76
|
-
"@aztec/l1-artifacts": "3.0.0-nightly.
|
|
77
|
-
"@aztec/noir-protocol-circuits-types": "3.0.0-nightly.
|
|
78
|
-
"@aztec/protocol-contracts": "3.0.0-nightly.
|
|
79
|
-
"@aztec/stdlib": "3.0.0-nightly.
|
|
80
|
-
"@aztec/telemetry-client": "3.0.0-nightly.
|
|
69
|
+
"@aztec/blob-lib": "3.0.0-nightly.20251026",
|
|
70
|
+
"@aztec/blob-sink": "3.0.0-nightly.20251026",
|
|
71
|
+
"@aztec/constants": "3.0.0-nightly.20251026",
|
|
72
|
+
"@aztec/epoch-cache": "3.0.0-nightly.20251026",
|
|
73
|
+
"@aztec/ethereum": "3.0.0-nightly.20251026",
|
|
74
|
+
"@aztec/foundation": "3.0.0-nightly.20251026",
|
|
75
|
+
"@aztec/kv-store": "3.0.0-nightly.20251026",
|
|
76
|
+
"@aztec/l1-artifacts": "3.0.0-nightly.20251026",
|
|
77
|
+
"@aztec/noir-protocol-circuits-types": "3.0.0-nightly.20251026",
|
|
78
|
+
"@aztec/protocol-contracts": "3.0.0-nightly.20251026",
|
|
79
|
+
"@aztec/stdlib": "3.0.0-nightly.20251026",
|
|
80
|
+
"@aztec/telemetry-client": "3.0.0-nightly.20251026",
|
|
81
81
|
"lodash.groupby": "^4.6.0",
|
|
82
82
|
"lodash.omit": "^4.5.0",
|
|
83
83
|
"tsc-watch": "^6.0.0",
|
package/src/archiver/archiver.ts
CHANGED
|
@@ -150,7 +150,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
|
|
|
150
150
|
private readonly blobSinkClient: BlobSinkClientInterface,
|
|
151
151
|
private readonly epochCache: EpochCache,
|
|
152
152
|
private readonly instrumentation: ArchiverInstrumentation,
|
|
153
|
-
private readonly l1constants: L1RollupConstants & { l1StartBlockHash: Buffer32 },
|
|
153
|
+
private readonly l1constants: L1RollupConstants & { l1StartBlockHash: Buffer32; genesisArchiveRoot: Fr },
|
|
154
154
|
private readonly log: Logger = createLogger('archiver'),
|
|
155
155
|
) {
|
|
156
156
|
super();
|
|
@@ -184,10 +184,11 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
|
|
|
184
184
|
|
|
185
185
|
const rollup = new RollupContract(publicClient, config.l1Contracts.rollupAddress);
|
|
186
186
|
|
|
187
|
-
const [l1StartBlock, l1GenesisTime, proofSubmissionEpochs] = await Promise.all([
|
|
187
|
+
const [l1StartBlock, l1GenesisTime, proofSubmissionEpochs, genesisArchiveRoot] = await Promise.all([
|
|
188
188
|
rollup.getL1StartBlock(),
|
|
189
189
|
rollup.getL1GenesisTime(),
|
|
190
190
|
rollup.getProofSubmissionEpochs(),
|
|
191
|
+
rollup.getGenesisArchiveTreeRoot(),
|
|
191
192
|
] as const);
|
|
192
193
|
|
|
193
194
|
const l1StartBlockHash = await publicClient
|
|
@@ -204,6 +205,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
|
|
|
204
205
|
slotDuration,
|
|
205
206
|
ethereumSlotDuration,
|
|
206
207
|
proofSubmissionEpochs: Number(proofSubmissionEpochs),
|
|
208
|
+
genesisArchiveRoot: Fr.fromHexString(genesisArchiveRoot),
|
|
207
209
|
};
|
|
208
210
|
|
|
209
211
|
const opts = merge({ pollingIntervalMs: 10_000, batchSize: 100 }, mapArchiverConfig(config));
|
|
@@ -977,6 +979,10 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
|
|
|
977
979
|
return Promise.resolve(this.l1constants);
|
|
978
980
|
}
|
|
979
981
|
|
|
982
|
+
public getGenesisValues(): Promise<{ genesisArchiveRoot: Fr }> {
|
|
983
|
+
return Promise.resolve({ genesisArchiveRoot: this.l1constants.genesisArchiveRoot });
|
|
984
|
+
}
|
|
985
|
+
|
|
980
986
|
public getRollupAddress(): Promise<EthAddress> {
|
|
981
987
|
return Promise.resolve(this.l1Addresses.rollupAddress);
|
|
982
988
|
}
|
|
@@ -1097,6 +1103,22 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
|
|
|
1097
1103
|
return limitWithProven === 0 ? [] : await this.store.getPublishedBlocks(from, limitWithProven);
|
|
1098
1104
|
}
|
|
1099
1105
|
|
|
1106
|
+
public getPublishedBlockByHash(blockHash: Fr): Promise<PublishedL2Block | undefined> {
|
|
1107
|
+
return this.store.getPublishedBlockByHash(blockHash);
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
public getPublishedBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined> {
|
|
1111
|
+
return this.store.getPublishedBlockByArchive(archive);
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
public getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined> {
|
|
1115
|
+
return this.store.getBlockHeaderByHash(blockHash);
|
|
1116
|
+
}
|
|
1117
|
+
|
|
1118
|
+
public getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined> {
|
|
1119
|
+
return this.store.getBlockHeaderByArchive(archive);
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1100
1122
|
/**
|
|
1101
1123
|
* Gets an l2 block.
|
|
1102
1124
|
* @param number - The block number to return.
|
|
@@ -1592,9 +1614,21 @@ export class ArchiverStoreHelper
|
|
|
1592
1614
|
getPublishedBlock(number: number): Promise<PublishedL2Block | undefined> {
|
|
1593
1615
|
return this.store.getPublishedBlock(number);
|
|
1594
1616
|
}
|
|
1617
|
+
getPublishedBlockByHash(blockHash: Fr): Promise<PublishedL2Block | undefined> {
|
|
1618
|
+
return this.store.getPublishedBlockByHash(blockHash);
|
|
1619
|
+
}
|
|
1620
|
+
getPublishedBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined> {
|
|
1621
|
+
return this.store.getPublishedBlockByArchive(archive);
|
|
1622
|
+
}
|
|
1595
1623
|
getBlockHeaders(from: number, limit: number): Promise<BlockHeader[]> {
|
|
1596
1624
|
return this.store.getBlockHeaders(from, limit);
|
|
1597
1625
|
}
|
|
1626
|
+
getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined> {
|
|
1627
|
+
return this.store.getBlockHeaderByHash(blockHash);
|
|
1628
|
+
}
|
|
1629
|
+
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined> {
|
|
1630
|
+
return this.store.getBlockHeaderByArchive(archive);
|
|
1631
|
+
}
|
|
1598
1632
|
getTxEffect(txHash: TxHash): Promise<IndexedTxEffect | undefined> {
|
|
1599
1633
|
return this.store.getTxEffect(txHash);
|
|
1600
1634
|
}
|
|
@@ -61,6 +61,18 @@ export interface ArchiverDataStore {
|
|
|
61
61
|
*/
|
|
62
62
|
getPublishedBlock(number: number): Promise<PublishedL2Block | undefined>;
|
|
63
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Returns the block for the given hash, or undefined if not exists.
|
|
66
|
+
* @param blockHash - The block hash to return.
|
|
67
|
+
*/
|
|
68
|
+
getPublishedBlockByHash(blockHash: Fr): Promise<PublishedL2Block | undefined>;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Returns the block for the given archive root, or undefined if not exists.
|
|
72
|
+
* @param archive - The archive root to return.
|
|
73
|
+
*/
|
|
74
|
+
getPublishedBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined>;
|
|
75
|
+
|
|
64
76
|
/**
|
|
65
77
|
* Gets up to `limit` amount of published L2 blocks starting from `from`.
|
|
66
78
|
* @param from - Number of the first block to return (inclusive).
|
|
@@ -77,6 +89,18 @@ export interface ArchiverDataStore {
|
|
|
77
89
|
*/
|
|
78
90
|
getBlockHeaders(from: number, limit: number): Promise<BlockHeader[]>;
|
|
79
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Returns the block header for the given hash, or undefined if not exists.
|
|
94
|
+
* @param blockHash - The block hash to return.
|
|
95
|
+
*/
|
|
96
|
+
getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined>;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Returns the block header for the given archive root, or undefined if not exists.
|
|
100
|
+
* @param archive - The archive root to return.
|
|
101
|
+
*/
|
|
102
|
+
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
|
|
103
|
+
|
|
80
104
|
/**
|
|
81
105
|
* Gets a tx effect.
|
|
82
106
|
* @param txHash - The hash of the tx corresponding to the tx effect.
|
|
@@ -142,6 +142,28 @@ export function describeArchiverDataStore(
|
|
|
142
142
|
await store.addBlocks(blocks);
|
|
143
143
|
await expect(store.unwindBlocks(5, 1)).rejects.toThrow(/can only unwind blocks from the tip/i);
|
|
144
144
|
});
|
|
145
|
+
|
|
146
|
+
it('unwound blocks and headers cannot be retrieved by hash or archive', async () => {
|
|
147
|
+
await store.addBlocks(blocks);
|
|
148
|
+
const lastBlock = blocks[blocks.length - 1];
|
|
149
|
+
const blockHash = await lastBlock.block.hash();
|
|
150
|
+
const archive = lastBlock.block.archive.root;
|
|
151
|
+
|
|
152
|
+
// Verify block and header exist before unwinding
|
|
153
|
+
expect(await store.getPublishedBlockByHash(blockHash)).toBeDefined();
|
|
154
|
+
expect(await store.getPublishedBlockByArchive(archive)).toBeDefined();
|
|
155
|
+
expect(await store.getBlockHeaderByHash(blockHash)).toBeDefined();
|
|
156
|
+
expect(await store.getBlockHeaderByArchive(archive)).toBeDefined();
|
|
157
|
+
|
|
158
|
+
// Unwind the block
|
|
159
|
+
await store.unwindBlocks(lastBlock.block.number, 1);
|
|
160
|
+
|
|
161
|
+
// Verify neither block nor header can be retrieved after unwinding
|
|
162
|
+
expect(await store.getPublishedBlockByHash(blockHash)).toBeUndefined();
|
|
163
|
+
expect(await store.getPublishedBlockByArchive(archive)).toBeUndefined();
|
|
164
|
+
expect(await store.getBlockHeaderByHash(blockHash)).toBeUndefined();
|
|
165
|
+
expect(await store.getBlockHeaderByArchive(archive)).toBeUndefined();
|
|
166
|
+
});
|
|
145
167
|
});
|
|
146
168
|
|
|
147
169
|
describe('getBlocks', () => {
|
|
@@ -179,6 +201,86 @@ export function describeArchiverDataStore(
|
|
|
179
201
|
});
|
|
180
202
|
});
|
|
181
203
|
|
|
204
|
+
describe('getPublishedBlockByHash', () => {
|
|
205
|
+
beforeEach(async () => {
|
|
206
|
+
await store.addBlocks(blocks);
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
it('retrieves a block by its hash', async () => {
|
|
210
|
+
const expectedBlock = blocks[5];
|
|
211
|
+
const blockHash = await expectedBlock.block.hash();
|
|
212
|
+
const retrievedBlock = await store.getPublishedBlockByHash(blockHash);
|
|
213
|
+
|
|
214
|
+
expect(retrievedBlock).toBeDefined();
|
|
215
|
+
expectBlocksEqual([retrievedBlock!], [expectedBlock]);
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
it('returns undefined for non-existent block hash', async () => {
|
|
219
|
+
const nonExistentHash = Fr.random();
|
|
220
|
+
await expect(store.getPublishedBlockByHash(nonExistentHash)).resolves.toBeUndefined();
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
describe('getPublishedBlockByArchive', () => {
|
|
225
|
+
beforeEach(async () => {
|
|
226
|
+
await store.addBlocks(blocks);
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
it('retrieves a block by its archive root', async () => {
|
|
230
|
+
const expectedBlock = blocks[3];
|
|
231
|
+
const archive = expectedBlock.block.archive.root;
|
|
232
|
+
const retrievedBlock = await store.getPublishedBlockByArchive(archive);
|
|
233
|
+
|
|
234
|
+
expect(retrievedBlock).toBeDefined();
|
|
235
|
+
expectBlocksEqual([retrievedBlock!], [expectedBlock]);
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
it('returns undefined for non-existent archive root', async () => {
|
|
239
|
+
const nonExistentArchive = Fr.random();
|
|
240
|
+
await expect(store.getPublishedBlockByArchive(nonExistentArchive)).resolves.toBeUndefined();
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
describe('getBlockHeaderByHash', () => {
|
|
245
|
+
beforeEach(async () => {
|
|
246
|
+
await store.addBlocks(blocks);
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
it('retrieves a block header by its hash', async () => {
|
|
250
|
+
const expectedBlock = blocks[7];
|
|
251
|
+
const blockHash = await expectedBlock.block.hash();
|
|
252
|
+
const retrievedHeader = await store.getBlockHeaderByHash(blockHash);
|
|
253
|
+
|
|
254
|
+
expect(retrievedHeader).toBeDefined();
|
|
255
|
+
expect(retrievedHeader!.equals(expectedBlock.block.getBlockHeader())).toBe(true);
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
it('returns undefined for non-existent block hash', async () => {
|
|
259
|
+
const nonExistentHash = Fr.random();
|
|
260
|
+
await expect(store.getBlockHeaderByHash(nonExistentHash)).resolves.toBeUndefined();
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
describe('getBlockHeaderByArchive', () => {
|
|
265
|
+
beforeEach(async () => {
|
|
266
|
+
await store.addBlocks(blocks);
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
it('retrieves a block header by its archive root', async () => {
|
|
270
|
+
const expectedBlock = blocks[2];
|
|
271
|
+
const archive = expectedBlock.block.archive.root;
|
|
272
|
+
const retrievedHeader = await store.getBlockHeaderByArchive(archive);
|
|
273
|
+
|
|
274
|
+
expect(retrievedHeader).toBeDefined();
|
|
275
|
+
expect(retrievedHeader!.equals(expectedBlock.block.getBlockHeader())).toBe(true);
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
it('returns undefined for non-existent archive root', async () => {
|
|
279
|
+
const nonExistentArchive = Fr.random();
|
|
280
|
+
await expect(store.getBlockHeaderByArchive(nonExistentArchive)).resolves.toBeUndefined();
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
|
|
182
284
|
describe('getSyncedL2BlockNumber', () => {
|
|
183
285
|
it('returns the block number before INITIAL_L2_BLOCK_NUM if no blocks have been added', async () => {
|
|
184
286
|
await expect(store.getSynchedL2BlockNumber()).resolves.toEqual(INITIAL_L2_BLOCK_NUM - 1);
|
package/src/archiver/config.ts
CHANGED
|
@@ -44,7 +44,7 @@ export const archiverConfigMappings: ConfigMappingsType<ArchiverConfig> = {
|
|
|
44
44
|
archiverStoreMapSizeKb: {
|
|
45
45
|
env: 'ARCHIVER_STORE_MAP_SIZE_KB',
|
|
46
46
|
parseEnv: (val: string | undefined) => (val ? +val : undefined),
|
|
47
|
-
description: 'The maximum possible size of the archiver DB in KB. Overwrites the general
|
|
47
|
+
description: 'The maximum possible size of the archiver DB in KB. Overwrites the general dataStoreMapSizeKb.',
|
|
48
48
|
},
|
|
49
49
|
skipValidateBlockAttestations: {
|
|
50
50
|
description: 'Whether to skip validating block attestations (use only for testing).',
|
|
@@ -66,6 +66,12 @@ export class BlockStore {
|
|
|
66
66
|
/** Index mapping a contract's address (as a string) to its location in a block */
|
|
67
67
|
#contractIndex: AztecAsyncMap<string, BlockIndexValue>;
|
|
68
68
|
|
|
69
|
+
/** Index mapping block hash to block number */
|
|
70
|
+
#blockHashIndex: AztecAsyncMap<string, number>;
|
|
71
|
+
|
|
72
|
+
/** Index mapping block archive to block number */
|
|
73
|
+
#blockArchiveIndex: AztecAsyncMap<string, number>;
|
|
74
|
+
|
|
69
75
|
#log = createLogger('archiver:block_store');
|
|
70
76
|
|
|
71
77
|
constructor(private db: AztecAsyncKVStore) {
|
|
@@ -73,6 +79,8 @@ export class BlockStore {
|
|
|
73
79
|
this.#blockTxs = db.openMap('archiver_block_txs');
|
|
74
80
|
this.#txEffects = db.openMap('archiver_tx_effects');
|
|
75
81
|
this.#contractIndex = db.openMap('archiver_contract_index');
|
|
82
|
+
this.#blockHashIndex = db.openMap('archiver_block_hash_index');
|
|
83
|
+
this.#blockArchiveIndex = db.openMap('archiver_block_archive_index');
|
|
76
84
|
this.#lastSynchedL1Block = db.openSingleton('archiver_last_synched_l1_block');
|
|
77
85
|
this.#lastProvenL2Block = db.openSingleton('archiver_last_proven_l2_block');
|
|
78
86
|
this.#pendingChainValidationStatus = db.openSingleton('archiver_pending_chain_validation_status');
|
|
@@ -132,6 +140,10 @@ export class BlockStore {
|
|
|
132
140
|
blockHash.toString(),
|
|
133
141
|
Buffer.concat(block.block.body.txEffects.map(tx => tx.txHash.toBuffer())),
|
|
134
142
|
);
|
|
143
|
+
|
|
144
|
+
// Update indices for block hash and archive
|
|
145
|
+
await this.#blockHashIndex.set(blockHash.toString(), block.block.number);
|
|
146
|
+
await this.#blockArchiveIndex.set(block.block.archive.root.toString(), block.block.number);
|
|
135
147
|
}
|
|
136
148
|
|
|
137
149
|
await this.#lastSynchedL1Block.set(blocks[blocks.length - 1].l1.blockNumber);
|
|
@@ -170,6 +182,11 @@ export class BlockStore {
|
|
|
170
182
|
await Promise.all(block.block.body.txEffects.map(tx => this.#txEffects.delete(tx.txHash.toString())));
|
|
171
183
|
const blockHash = (await block.block.hash()).toString();
|
|
172
184
|
await this.#blockTxs.delete(blockHash);
|
|
185
|
+
|
|
186
|
+
// Clean up indices
|
|
187
|
+
await this.#blockHashIndex.delete(blockHash);
|
|
188
|
+
await this.#blockArchiveIndex.delete(block.block.archive.root.toString());
|
|
189
|
+
|
|
173
190
|
this.#log.debug(`Unwound block ${blockNumber} ${blockHash}`);
|
|
174
191
|
}
|
|
175
192
|
|
|
@@ -205,6 +222,66 @@ export class BlockStore {
|
|
|
205
222
|
return this.getBlockFromBlockStorage(blockNumber, blockStorage);
|
|
206
223
|
}
|
|
207
224
|
|
|
225
|
+
/**
|
|
226
|
+
* Gets an L2 block by its hash.
|
|
227
|
+
* @param blockHash - The hash of the block to return.
|
|
228
|
+
* @returns The requested L2 block.
|
|
229
|
+
*/
|
|
230
|
+
async getBlockByHash(blockHash: L2BlockHash): Promise<PublishedL2Block | undefined> {
|
|
231
|
+
const blockNumber = await this.#blockHashIndex.getAsync(blockHash.toString());
|
|
232
|
+
if (blockNumber === undefined) {
|
|
233
|
+
return undefined;
|
|
234
|
+
}
|
|
235
|
+
return this.getBlock(blockNumber);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Gets an L2 block by its archive root.
|
|
240
|
+
* @param archive - The archive root of the block to return.
|
|
241
|
+
* @returns The requested L2 block.
|
|
242
|
+
*/
|
|
243
|
+
async getBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined> {
|
|
244
|
+
const blockNumber = await this.#blockArchiveIndex.getAsync(archive.toString());
|
|
245
|
+
if (blockNumber === undefined) {
|
|
246
|
+
return undefined;
|
|
247
|
+
}
|
|
248
|
+
return this.getBlock(blockNumber);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Gets a block header by its hash.
|
|
253
|
+
* @param blockHash - The hash of the block to return.
|
|
254
|
+
* @returns The requested block header.
|
|
255
|
+
*/
|
|
256
|
+
async getBlockHeaderByHash(blockHash: L2BlockHash): Promise<BlockHeader | undefined> {
|
|
257
|
+
const blockNumber = await this.#blockHashIndex.getAsync(blockHash.toString());
|
|
258
|
+
if (blockNumber === undefined) {
|
|
259
|
+
return undefined;
|
|
260
|
+
}
|
|
261
|
+
const blockStorage = await this.#blocks.getAsync(blockNumber);
|
|
262
|
+
if (!blockStorage || !blockStorage.header) {
|
|
263
|
+
return undefined;
|
|
264
|
+
}
|
|
265
|
+
return L2BlockHeader.fromBuffer(blockStorage.header).toBlockHeader();
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Gets a block header by its archive root.
|
|
270
|
+
* @param archive - The archive root of the block to return.
|
|
271
|
+
* @returns The requested block header.
|
|
272
|
+
*/
|
|
273
|
+
async getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined> {
|
|
274
|
+
const blockNumber = await this.#blockArchiveIndex.getAsync(archive.toString());
|
|
275
|
+
if (blockNumber === undefined) {
|
|
276
|
+
return undefined;
|
|
277
|
+
}
|
|
278
|
+
const blockStorage = await this.#blocks.getAsync(blockNumber);
|
|
279
|
+
if (!blockStorage || !blockStorage.header) {
|
|
280
|
+
return undefined;
|
|
281
|
+
}
|
|
282
|
+
return L2BlockHeader.fromBuffer(blockStorage.header).toBlockHeader();
|
|
283
|
+
}
|
|
284
|
+
|
|
208
285
|
/**
|
|
209
286
|
* Gets the headers for a sequence of L2 blocks.
|
|
210
287
|
* @param start - Number of the first block to return (inclusive).
|
|
@@ -5,7 +5,7 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
5
5
|
import type { AztecAsyncKVStore, CustomRange, StoreSize } from '@aztec/kv-store';
|
|
6
6
|
import { FunctionSelector } from '@aztec/stdlib/abi';
|
|
7
7
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
8
|
-
import type
|
|
8
|
+
import { type L2Block, L2BlockHash, type ValidateBlockResult } from '@aztec/stdlib/block';
|
|
9
9
|
import type {
|
|
10
10
|
ContractClassPublic,
|
|
11
11
|
ContractDataSource,
|
|
@@ -204,6 +204,14 @@ export class KVArchiverDataStore implements ArchiverDataStore, ContractDataSourc
|
|
|
204
204
|
return this.#blockStore.getBlock(number);
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
+
getPublishedBlockByHash(blockHash: Fr): Promise<PublishedL2Block | undefined> {
|
|
208
|
+
return this.#blockStore.getBlockByHash(L2BlockHash.fromField(blockHash));
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
getPublishedBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined> {
|
|
212
|
+
return this.#blockStore.getBlockByArchive(archive);
|
|
213
|
+
}
|
|
214
|
+
|
|
207
215
|
/**
|
|
208
216
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
209
217
|
*
|
|
@@ -226,6 +234,14 @@ export class KVArchiverDataStore implements ArchiverDataStore, ContractDataSourc
|
|
|
226
234
|
return toArray(this.#blockStore.getBlockHeaders(start, limit));
|
|
227
235
|
}
|
|
228
236
|
|
|
237
|
+
getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined> {
|
|
238
|
+
return this.#blockStore.getBlockHeaderByHash(L2BlockHash.fromField(blockHash));
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined> {
|
|
242
|
+
return this.#blockStore.getBlockHeaderByArchive(archive);
|
|
243
|
+
}
|
|
244
|
+
|
|
229
245
|
/**
|
|
230
246
|
* Gets a tx effect.
|
|
231
247
|
* @param txHash - The hash of the tx corresponding to the tx effect.
|
package/src/factory.ts
CHANGED
|
@@ -20,7 +20,7 @@ export async function createArchiverStore(
|
|
|
20
20
|
) {
|
|
21
21
|
const config = {
|
|
22
22
|
...userConfig,
|
|
23
|
-
|
|
23
|
+
dataStoreMapSizeKb: userConfig.archiverStoreMapSizeKb ?? userConfig.dataStoreMapSizeKb,
|
|
24
24
|
};
|
|
25
25
|
const store = await createStore(ARCHIVER_STORE_NAME, ARCHIVER_DB_VERSION, config, createLogger('archiver:lmdb'));
|
|
26
26
|
return new KVArchiverDataStore(store, config.maxLogs);
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
|
|
1
2
|
import { DefaultL1ContractsConfig } from '@aztec/ethereum';
|
|
2
3
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
3
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
|
-
import
|
|
5
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
5
6
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
7
|
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
7
8
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
@@ -126,6 +127,57 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
|
126
127
|
);
|
|
127
128
|
}
|
|
128
129
|
|
|
130
|
+
public async getPublishedBlockByHash(blockHash: Fr): Promise<PublishedL2Block | undefined> {
|
|
131
|
+
for (const block of this.l2Blocks) {
|
|
132
|
+
const hash = await block.hash();
|
|
133
|
+
if (hash.equals(blockHash)) {
|
|
134
|
+
return PublishedL2Block.fromFields({
|
|
135
|
+
block,
|
|
136
|
+
l1: {
|
|
137
|
+
blockNumber: BigInt(block.number),
|
|
138
|
+
blockHash: Buffer32.random().toString(),
|
|
139
|
+
timestamp: BigInt(block.number),
|
|
140
|
+
},
|
|
141
|
+
attestations: [],
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
public getPublishedBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined> {
|
|
149
|
+
const block = this.l2Blocks.find(b => b.archive.root.equals(archive));
|
|
150
|
+
if (!block) {
|
|
151
|
+
return Promise.resolve(undefined);
|
|
152
|
+
}
|
|
153
|
+
return Promise.resolve(
|
|
154
|
+
PublishedL2Block.fromFields({
|
|
155
|
+
block,
|
|
156
|
+
l1: {
|
|
157
|
+
blockNumber: BigInt(block.number),
|
|
158
|
+
blockHash: Buffer32.random().toString(),
|
|
159
|
+
timestamp: BigInt(block.number),
|
|
160
|
+
},
|
|
161
|
+
attestations: [],
|
|
162
|
+
}),
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
public async getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined> {
|
|
167
|
+
for (const block of this.l2Blocks) {
|
|
168
|
+
const hash = await block.hash();
|
|
169
|
+
if (hash.equals(blockHash)) {
|
|
170
|
+
return block.getBlockHeader();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
public getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined> {
|
|
177
|
+
const block = this.l2Blocks.find(b => b.archive.root.equals(archive));
|
|
178
|
+
return Promise.resolve(block?.getBlockHeader());
|
|
179
|
+
}
|
|
180
|
+
|
|
129
181
|
getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined> {
|
|
130
182
|
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.getBlockHeader());
|
|
131
183
|
}
|
|
@@ -232,6 +284,10 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
|
232
284
|
return Promise.resolve(EmptyL1RollupConstants);
|
|
233
285
|
}
|
|
234
286
|
|
|
287
|
+
getGenesisValues(): Promise<{ genesisArchiveRoot: Fr }> {
|
|
288
|
+
return Promise.resolve({ genesisArchiveRoot: new Fr(GENESIS_ARCHIVE_ROOT) });
|
|
289
|
+
}
|
|
290
|
+
|
|
235
291
|
getL1Timestamp(): Promise<bigint> {
|
|
236
292
|
throw new Error('Method not implemented.');
|
|
237
293
|
}
|