@aztec/archiver 0.57.0 → 0.58.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/dest/archiver/archiver.d.ts +5 -3
- package/dest/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +77 -21
- package/dest/archiver/archiver_store.d.ts +1 -2
- 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 +10 -14
- package/dest/archiver/data_retrieval.js +3 -3
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +1 -2
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/contract_class_store.js +2 -2
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +1 -2
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/contract_instance_store.js +2 -2
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +1 -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 +1 -1
- package/dest/archiver/kv_archiver_store/message_store.d.ts +1 -1
- package/dest/archiver/kv_archiver_store/message_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/message_store.js +8 -11
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts +2 -2
- 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 +9 -14
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts +1 -2
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts.map +1 -1
- package/dest/archiver/memory_archiver_store/memory_archiver_store.js +2 -2
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +17 -1
- package/dest/test/index.d.ts +2 -0
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +3 -1
- package/dest/test/mock_archiver.d.ts +22 -0
- package/dest/test/mock_archiver.d.ts.map +1 -0
- package/dest/test/mock_archiver.js +44 -0
- package/dest/test/mock_l1_to_l2_message_source.d.ts +16 -0
- package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -0
- package/dest/test/mock_l1_to_l2_message_source.js +25 -0
- package/dest/test/mock_l2_block_source.d.ts +11 -9
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +36 -16
- package/package.json +10 -10
- package/src/archiver/archiver.ts +109 -34
- package/src/archiver/archiver_store.ts +5 -4
- package/src/archiver/archiver_store_test_suite.ts +20 -21
- package/src/archiver/data_retrieval.ts +2 -2
- package/src/archiver/kv_archiver_store/contract_class_store.ts +6 -4
- package/src/archiver/kv_archiver_store/contract_instance_store.ts +1 -2
- package/src/archiver/kv_archiver_store/kv_archiver_store.ts +7 -6
- package/src/archiver/kv_archiver_store/message_store.ts +7 -18
- package/src/archiver/memory_archiver_store/l1_to_l2_message_store.ts +9 -19
- package/src/archiver/memory_archiver_store/memory_archiver_store.ts +6 -4
- package/src/factory.ts +18 -0
- package/src/test/index.ts +2 -0
- package/src/test/mock_archiver.ts +55 -0
- package/src/test/mock_l1_to_l2_message_source.ts +31 -0
- package/src/test/mock_l2_block_source.ts +42 -17
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type L1ToL2MessageSource, type L2Block, type L2BlockSource } from '@aztec/circuit-types';
|
|
2
|
+
import { type Fr } from '@aztec/circuits.js';
|
|
3
|
+
|
|
4
|
+
import { MockL1ToL2MessageSource } from './mock_l1_to_l2_message_source.js';
|
|
5
|
+
import { MockL2BlockSource } from './mock_l2_block_source.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A mocked implementation of the archiver that implements L2BlockSource and L1ToL2MessageSource.
|
|
9
|
+
*/
|
|
10
|
+
export class MockArchiver extends MockL2BlockSource implements L2BlockSource, L1ToL2MessageSource {
|
|
11
|
+
private messageSource = new MockL1ToL2MessageSource(0);
|
|
12
|
+
|
|
13
|
+
public setL1ToL2Messages(blockNumber: number, msgs: Fr[]) {
|
|
14
|
+
this.messageSource.setL1ToL2Messages(blockNumber, msgs);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
getL1ToL2Messages(blockNumber: bigint): Promise<Fr[]> {
|
|
18
|
+
return this.messageSource.getL1ToL2Messages(blockNumber);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
getL1ToL2MessageIndex(_l1ToL2Message: Fr, _startIndex: bigint): Promise<bigint | undefined> {
|
|
22
|
+
return this.messageSource.getL1ToL2MessageIndex(_l1ToL2Message, _startIndex);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* A mocked implementation of the archiver with a set of precomputed blocks and messages.
|
|
28
|
+
*/
|
|
29
|
+
export class MockPrefilledArchiver extends MockArchiver {
|
|
30
|
+
private precomputed: L2Block[];
|
|
31
|
+
|
|
32
|
+
constructor(precomputed: L2Block[], messages: Fr[][]) {
|
|
33
|
+
super();
|
|
34
|
+
this.precomputed = precomputed.slice();
|
|
35
|
+
messages.forEach((msgs, i) => this.setL1ToL2Messages(i + 1, msgs));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public setPrefilledBlocks(blocks: L2Block[], messages: Fr[][]) {
|
|
39
|
+
for (const block of blocks) {
|
|
40
|
+
this.precomputed[block.number - 1] = block;
|
|
41
|
+
}
|
|
42
|
+
messages.forEach((msgs, i) => this.setL1ToL2Messages(blocks[i].number, msgs));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public override createBlocks(numBlocks: number) {
|
|
46
|
+
if (this.l2Blocks.length + numBlocks > this.precomputed.length) {
|
|
47
|
+
throw new Error(
|
|
48
|
+
`Not enough precomputed blocks to create ${numBlocks} more blocks (already at ${this.l2Blocks.length})`,
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const fromBlock = this.l2Blocks.length;
|
|
53
|
+
this.addBlocks(this.precomputed.slice(fromBlock, fromBlock + numBlocks));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type L1ToL2MessageSource } from '@aztec/circuit-types';
|
|
2
|
+
import { type Fr } from '@aztec/circuits.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A mocked implementation of L1ToL2MessageSource to be used in tests.
|
|
6
|
+
*/
|
|
7
|
+
export class MockL1ToL2MessageSource implements L1ToL2MessageSource {
|
|
8
|
+
private messagesPerBlock = new Map<number, Fr[]>();
|
|
9
|
+
|
|
10
|
+
constructor(private blockNumber: number) {}
|
|
11
|
+
|
|
12
|
+
public setL1ToL2Messages(blockNumber: number, msgs: Fr[]) {
|
|
13
|
+
this.messagesPerBlock.set(blockNumber, msgs);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public setBlockNumber(blockNumber: number) {
|
|
17
|
+
this.blockNumber = blockNumber;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
getL1ToL2Messages(blockNumber: bigint): Promise<Fr[]> {
|
|
21
|
+
return Promise.resolve(this.messagesPerBlock.get(Number(blockNumber)) ?? []);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
getL1ToL2MessageIndex(_l1ToL2Message: Fr, _startIndex: bigint): Promise<bigint | undefined> {
|
|
25
|
+
throw new Error('Method not implemented.');
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
getBlockNumber(): Promise<number> {
|
|
29
|
+
return Promise.resolve(this.blockNumber);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -1,27 +1,38 @@
|
|
|
1
|
-
import { L2Block, type L2BlockSource, type
|
|
1
|
+
import { L2Block, type L2BlockSource, type L2Tips, type TxHash, TxReceipt, TxStatus } from '@aztec/circuit-types';
|
|
2
2
|
import { EthAddress, type Header } from '@aztec/circuits.js';
|
|
3
|
+
import { createDebugLogger } from '@aztec/foundation/log';
|
|
3
4
|
|
|
4
5
|
import { getSlotRangeForEpoch } from '../archiver/epoch_helpers.js';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
|
-
* A mocked implementation of L2BlockSource to be used in
|
|
8
|
+
* A mocked implementation of L2BlockSource to be used in tests.
|
|
8
9
|
*/
|
|
9
|
-
export class
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
export class MockL2BlockSource implements L2BlockSource {
|
|
11
|
+
protected l2Blocks: L2Block[] = [];
|
|
12
|
+
|
|
12
13
|
private provenEpochNumber: number = 0;
|
|
14
|
+
private provenBlockNumber: number = 0;
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
this.addBlocks(numBlocks);
|
|
16
|
-
}
|
|
16
|
+
private log = createDebugLogger('aztec:archiver:mock_l2_block_source');
|
|
17
17
|
|
|
18
|
-
public
|
|
18
|
+
public createBlocks(numBlocks: number) {
|
|
19
19
|
for (let i = 0; i < numBlocks; i++) {
|
|
20
|
-
const blockNum = this.l2Blocks.length;
|
|
21
|
-
const block = L2Block.random(blockNum
|
|
20
|
+
const blockNum = this.l2Blocks.length + 1;
|
|
21
|
+
const block = L2Block.random(blockNum);
|
|
22
22
|
this.l2Blocks.push(block);
|
|
23
|
-
this.txEffects.push(...block.body.txEffects);
|
|
24
23
|
}
|
|
24
|
+
|
|
25
|
+
this.log.verbose(`Created ${numBlocks} blocks in the mock L2 block source`);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public addBlocks(blocks: L2Block[]) {
|
|
29
|
+
this.l2Blocks.push(...blocks);
|
|
30
|
+
this.log.verbose(`Added ${blocks.length} blocks to the mock L2 block source`);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public removeBlocks(numBlocks: number) {
|
|
34
|
+
this.l2Blocks = this.l2Blocks.slice(0, -numBlocks);
|
|
35
|
+
this.log.verbose(`Removed ${numBlocks} blocks from the mock L2 block source`);
|
|
25
36
|
}
|
|
26
37
|
|
|
27
38
|
public setProvenBlockNumber(provenBlockNumber: number) {
|
|
@@ -53,7 +64,7 @@ export class MockBlockSource implements L2BlockSource {
|
|
|
53
64
|
* @returns In this mock instance, returns the number of L2 blocks that we've mocked.
|
|
54
65
|
*/
|
|
55
66
|
public getBlockNumber() {
|
|
56
|
-
return Promise.resolve(this.l2Blocks.length
|
|
67
|
+
return Promise.resolve(this.l2Blocks.length);
|
|
57
68
|
}
|
|
58
69
|
|
|
59
70
|
public async getProvenBlockNumber(): Promise<number> {
|
|
@@ -70,7 +81,7 @@ export class MockBlockSource implements L2BlockSource {
|
|
|
70
81
|
* @returns The requested L2 block.
|
|
71
82
|
*/
|
|
72
83
|
public getBlock(number: number) {
|
|
73
|
-
return Promise.resolve(this.l2Blocks[number]);
|
|
84
|
+
return Promise.resolve(this.l2Blocks[number - 1]);
|
|
74
85
|
}
|
|
75
86
|
|
|
76
87
|
/**
|
|
@@ -82,13 +93,13 @@ export class MockBlockSource implements L2BlockSource {
|
|
|
82
93
|
public getBlocks(from: number, limit: number, proven?: boolean) {
|
|
83
94
|
return Promise.resolve(
|
|
84
95
|
this.l2Blocks
|
|
85
|
-
.slice(from, from + limit)
|
|
96
|
+
.slice(from - 1, from - 1 + limit)
|
|
86
97
|
.filter(b => !proven || this.provenBlockNumber === undefined || b.number <= this.provenBlockNumber),
|
|
87
98
|
);
|
|
88
99
|
}
|
|
89
100
|
|
|
90
101
|
getBlockHeader(number: number | 'latest'): Promise<Header | undefined> {
|
|
91
|
-
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number : -1)?.header);
|
|
102
|
+
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.header);
|
|
92
103
|
}
|
|
93
104
|
|
|
94
105
|
getBlocksForEpoch(epochNumber: bigint): Promise<L2Block[]> {
|
|
@@ -106,7 +117,7 @@ export class MockBlockSource implements L2BlockSource {
|
|
|
106
117
|
* @returns The requested tx effect.
|
|
107
118
|
*/
|
|
108
119
|
public getTxEffect(txHash: TxHash) {
|
|
109
|
-
const txEffect = this.txEffects.find(tx => tx.txHash.equals(txHash));
|
|
120
|
+
const txEffect = this.l2Blocks.flatMap(b => b.body.txEffects).find(tx => tx.txHash.equals(txHash));
|
|
110
121
|
return Promise.resolve(txEffect);
|
|
111
122
|
}
|
|
112
123
|
|
|
@@ -135,6 +146,20 @@ export class MockBlockSource implements L2BlockSource {
|
|
|
135
146
|
return Promise.resolve(undefined);
|
|
136
147
|
}
|
|
137
148
|
|
|
149
|
+
async getL2Tips(): Promise<L2Tips> {
|
|
150
|
+
const [latest, proven, finalized] = [
|
|
151
|
+
await this.getBlockNumber(),
|
|
152
|
+
await this.getProvenBlockNumber(),
|
|
153
|
+
await this.getProvenBlockNumber(),
|
|
154
|
+
] as const;
|
|
155
|
+
|
|
156
|
+
return {
|
|
157
|
+
latest: { number: latest, hash: this.l2Blocks[latest - 1]?.hash().toString() },
|
|
158
|
+
proven: { number: proven, hash: this.l2Blocks[proven - 1]?.hash().toString() },
|
|
159
|
+
finalized: { number: finalized, hash: this.l2Blocks[finalized - 1]?.hash().toString() },
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
138
163
|
getL2EpochNumber(): Promise<bigint> {
|
|
139
164
|
throw new Error('Method not implemented.');
|
|
140
165
|
}
|