@aztec/archiver 0.0.1-commit.24de95ac → 0.0.1-commit.3469e52
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 +147 -22
- package/dest/archiver.d.ts +135 -0
- package/dest/archiver.d.ts.map +1 -0
- package/dest/archiver.js +769 -0
- package/dest/config.d.ts +30 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/{archiver/config.js → config.js} +26 -5
- package/dest/errors.d.ts +36 -0
- package/dest/errors.d.ts.map +1 -0
- package/dest/errors.js +54 -0
- package/dest/factory.d.ts +5 -6
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +85 -7
- package/dest/index.d.ts +10 -4
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +8 -3
- package/dest/interfaces.d.ts +9 -0
- package/dest/interfaces.d.ts.map +1 -0
- package/dest/interfaces.js +3 -0
- package/dest/l1/bin/retrieve-calldata.d.ts +3 -0
- package/dest/l1/bin/retrieve-calldata.d.ts.map +1 -0
- package/dest/l1/bin/retrieve-calldata.js +149 -0
- package/dest/l1/calldata_retriever.d.ts +112 -0
- package/dest/l1/calldata_retriever.d.ts.map +1 -0
- package/dest/l1/calldata_retriever.js +471 -0
- package/dest/l1/data_retrieval.d.ts +88 -0
- package/dest/l1/data_retrieval.d.ts.map +1 -0
- package/dest/l1/data_retrieval.js +312 -0
- package/dest/l1/debug_tx.d.ts +19 -0
- package/dest/l1/debug_tx.d.ts.map +1 -0
- package/dest/l1/debug_tx.js +73 -0
- package/dest/l1/spire_proposer.d.ts +70 -0
- package/dest/l1/spire_proposer.d.ts.map +1 -0
- package/dest/l1/spire_proposer.js +157 -0
- package/dest/l1/trace_tx.d.ts +97 -0
- package/dest/l1/trace_tx.d.ts.map +1 -0
- package/dest/l1/trace_tx.js +91 -0
- package/dest/l1/types.d.ts +12 -0
- package/dest/l1/types.d.ts.map +1 -0
- package/dest/l1/types.js +3 -0
- package/dest/l1/validate_trace.d.ts +29 -0
- package/dest/l1/validate_trace.d.ts.map +1 -0
- package/dest/l1/validate_trace.js +150 -0
- package/dest/modules/data_source_base.d.ts +85 -0
- package/dest/modules/data_source_base.d.ts.map +1 -0
- package/dest/modules/data_source_base.js +291 -0
- package/dest/modules/data_store_updater.d.ts +69 -0
- package/dest/modules/data_store_updater.d.ts.map +1 -0
- package/dest/modules/data_store_updater.js +304 -0
- package/dest/modules/instrumentation.d.ts +37 -0
- package/dest/modules/instrumentation.d.ts.map +1 -0
- package/dest/{archiver → modules}/instrumentation.js +22 -59
- package/dest/modules/l1_synchronizer.d.ts +75 -0
- package/dest/modules/l1_synchronizer.d.ts.map +1 -0
- package/dest/modules/l1_synchronizer.js +1113 -0
- package/dest/modules/validation.d.ts +17 -0
- package/dest/modules/validation.d.ts.map +1 -0
- package/dest/{archiver → modules}/validation.js +35 -21
- package/dest/store/block_store.d.ts +178 -0
- package/dest/store/block_store.d.ts.map +1 -0
- package/dest/store/block_store.js +680 -0
- package/dest/store/contract_class_store.d.ts +18 -0
- package/dest/store/contract_class_store.d.ts.map +1 -0
- package/dest/{archiver/kv_archiver_store → store}/contract_class_store.js +2 -2
- package/dest/store/contract_instance_store.d.ts +24 -0
- package/dest/store/contract_instance_store.d.ts.map +1 -0
- package/dest/{archiver/kv_archiver_store → store}/contract_instance_store.js +1 -1
- package/dest/store/kv_archiver_store.d.ts +336 -0
- package/dest/store/kv_archiver_store.d.ts.map +1 -0
- package/dest/store/kv_archiver_store.js +443 -0
- package/dest/store/log_store.d.ts +54 -0
- package/dest/store/log_store.d.ts.map +1 -0
- package/dest/store/log_store.js +436 -0
- package/dest/store/message_store.d.ts +40 -0
- package/dest/store/message_store.d.ts.map +1 -0
- package/dest/{archiver/kv_archiver_store → store}/message_store.js +15 -14
- package/dest/structs/data_retrieval.d.ts +27 -0
- package/dest/structs/data_retrieval.d.ts.map +1 -0
- package/dest/structs/inbox_message.d.ts +15 -0
- package/dest/structs/inbox_message.d.ts.map +1 -0
- package/dest/{archiver/structs → structs}/inbox_message.js +6 -5
- package/dest/structs/published.d.ts +2 -0
- package/dest/structs/published.d.ts.map +1 -0
- package/dest/test/fake_l1_state.d.ts +190 -0
- package/dest/test/fake_l1_state.d.ts.map +1 -0
- package/dest/test/fake_l1_state.js +383 -0
- package/dest/test/index.d.ts +2 -1
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +1 -0
- package/dest/test/mock_archiver.d.ts +16 -8
- package/dest/test/mock_archiver.d.ts.map +1 -1
- package/dest/test/mock_archiver.js +18 -14
- package/dest/test/mock_l1_to_l2_message_source.d.ts +7 -6
- package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
- package/dest/test/mock_l1_to_l2_message_source.js +21 -11
- package/dest/test/mock_l2_block_source.d.ts +38 -19
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +168 -47
- package/dest/test/mock_structs.d.ts +78 -3
- package/dest/test/mock_structs.d.ts.map +1 -1
- package/dest/test/mock_structs.js +141 -9
- package/package.json +19 -20
- package/src/archiver.ts +525 -0
- package/src/{archiver/config.ts → config.ts} +33 -12
- package/src/errors.ts +90 -0
- package/src/factory.ts +121 -8
- package/src/index.ts +10 -3
- package/src/interfaces.ts +9 -0
- package/src/l1/README.md +98 -0
- package/src/l1/bin/retrieve-calldata.ts +182 -0
- package/src/l1/calldata_retriever.ts +641 -0
- package/src/l1/data_retrieval.ts +495 -0
- package/src/l1/debug_tx.ts +99 -0
- package/src/l1/spire_proposer.ts +160 -0
- package/src/l1/trace_tx.ts +128 -0
- package/src/l1/types.ts +13 -0
- package/src/l1/validate_trace.ts +211 -0
- package/src/modules/data_source_base.ts +418 -0
- package/src/modules/data_store_updater.ts +419 -0
- package/src/{archiver → modules}/instrumentation.ts +26 -61
- package/src/modules/l1_synchronizer.ts +931 -0
- package/src/modules/validation.ts +129 -0
- package/src/store/block_store.ts +919 -0
- package/src/{archiver/kv_archiver_store → store}/contract_class_store.ts +2 -2
- package/src/{archiver/kv_archiver_store → store}/contract_instance_store.ts +2 -2
- package/src/store/kv_archiver_store.ts +631 -0
- package/src/store/log_store.ts +575 -0
- package/src/{archiver/kv_archiver_store → store}/message_store.ts +21 -18
- package/src/{archiver/structs → structs}/inbox_message.ts +8 -8
- package/src/structs/published.ts +1 -0
- package/src/test/fake_l1_state.ts +599 -0
- package/src/test/fixtures/debug_traceTransaction-multicall3.json +88 -0
- package/src/test/fixtures/debug_traceTransaction-multiplePropose.json +153 -0
- package/src/test/fixtures/debug_traceTransaction-proxied.json +122 -0
- package/src/test/fixtures/trace_transaction-multicall3.json +65 -0
- package/src/test/fixtures/trace_transaction-multiplePropose.json +319 -0
- package/src/test/fixtures/trace_transaction-proxied.json +128 -0
- package/src/test/fixtures/trace_transaction-randomRevert.json +216 -0
- package/src/test/index.ts +1 -0
- package/src/test/mock_archiver.ts +22 -16
- package/src/test/mock_l1_to_l2_message_source.ts +18 -11
- package/src/test/mock_l2_block_source.ts +200 -63
- package/src/test/mock_structs.ts +256 -10
- package/dest/archiver/archiver.d.ts +0 -277
- package/dest/archiver/archiver.d.ts.map +0 -1
- package/dest/archiver/archiver.js +0 -1322
- package/dest/archiver/archiver_store.d.ts +0 -255
- package/dest/archiver/archiver_store.d.ts.map +0 -1
- package/dest/archiver/archiver_store.js +0 -4
- package/dest/archiver/archiver_store_test_suite.d.ts +0 -8
- package/dest/archiver/archiver_store_test_suite.d.ts.map +0 -1
- package/dest/archiver/archiver_store_test_suite.js +0 -1288
- package/dest/archiver/config.d.ts +0 -21
- package/dest/archiver/config.d.ts.map +0 -1
- package/dest/archiver/data_retrieval.d.ts +0 -79
- package/dest/archiver/data_retrieval.d.ts.map +0 -1
- package/dest/archiver/data_retrieval.js +0 -362
- package/dest/archiver/errors.d.ts +0 -12
- package/dest/archiver/errors.d.ts.map +0 -1
- package/dest/archiver/errors.js +0 -17
- package/dest/archiver/index.d.ts +0 -7
- package/dest/archiver/index.d.ts.map +0 -1
- package/dest/archiver/index.js +0 -4
- package/dest/archiver/instrumentation.d.ts +0 -35
- package/dest/archiver/instrumentation.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/block_store.d.ts +0 -124
- package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/block_store.js +0 -370
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +0 -18
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +0 -24
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -168
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.js +0 -296
- package/dest/archiver/kv_archiver_store/log_store.d.ts +0 -49
- package/dest/archiver/kv_archiver_store/log_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/log_store.js +0 -336
- package/dest/archiver/kv_archiver_store/message_store.d.ts +0 -39
- package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
- package/dest/archiver/structs/data_retrieval.d.ts +0 -27
- package/dest/archiver/structs/data_retrieval.d.ts.map +0 -1
- package/dest/archiver/structs/inbox_message.d.ts +0 -15
- package/dest/archiver/structs/inbox_message.d.ts.map +0 -1
- package/dest/archiver/structs/published.d.ts +0 -2
- package/dest/archiver/structs/published.d.ts.map +0 -1
- package/dest/archiver/validation.d.ts +0 -11
- package/dest/archiver/validation.d.ts.map +0 -1
- package/dest/rpc/index.d.ts +0 -9
- package/dest/rpc/index.d.ts.map +0 -1
- package/dest/rpc/index.js +0 -15
- package/src/archiver/archiver.ts +0 -1722
- package/src/archiver/archiver_store.ts +0 -305
- package/src/archiver/archiver_store_test_suite.ts +0 -1263
- package/src/archiver/data_retrieval.ts +0 -545
- package/src/archiver/errors.ts +0 -26
- package/src/archiver/index.ts +0 -6
- package/src/archiver/kv_archiver_store/block_store.ts +0 -481
- package/src/archiver/kv_archiver_store/kv_archiver_store.ts +0 -422
- package/src/archiver/kv_archiver_store/log_store.ts +0 -406
- package/src/archiver/structs/published.ts +0 -1
- package/src/archiver/validation.ts +0 -99
- package/src/rpc/index.ts +0 -16
- /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
- /package/dest/{archiver/structs → structs}/published.js +0 -0
- /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
|
|
2
|
-
import { DefaultL1ContractsConfig } from '@aztec/ethereum';
|
|
2
|
+
import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
|
|
3
|
+
import { BlockNumber, CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
4
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
5
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
6
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
6
7
|
import { createLogger } from '@aztec/foundation/log';
|
|
7
8
|
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
8
9
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
9
10
|
import {
|
|
10
|
-
|
|
11
|
+
CheckpointedL2Block,
|
|
11
12
|
L2BlockHash,
|
|
13
|
+
L2BlockNew,
|
|
12
14
|
type L2BlockSource,
|
|
13
15
|
type L2Tips,
|
|
14
|
-
|
|
15
|
-
type ValidateBlockResult,
|
|
16
|
+
type ValidateCheckpointResult,
|
|
16
17
|
} from '@aztec/stdlib/block';
|
|
18
|
+
import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
17
19
|
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
18
20
|
import { EmptyL1RollupConstants, type L1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
19
21
|
import { type BlockHeader, TxHash, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
@@ -23,24 +25,25 @@ import type { UInt64 } from '@aztec/stdlib/types';
|
|
|
23
25
|
* A mocked implementation of L2BlockSource to be used in tests.
|
|
24
26
|
*/
|
|
25
27
|
export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
26
|
-
protected l2Blocks:
|
|
28
|
+
protected l2Blocks: L2BlockNew[] = [];
|
|
27
29
|
|
|
28
30
|
private provenBlockNumber: number = 0;
|
|
29
31
|
private finalizedBlockNumber: number = 0;
|
|
32
|
+
private checkpointedBlockNumber: number = 0;
|
|
30
33
|
|
|
31
34
|
private log = createLogger('archiver:mock_l2_block_source');
|
|
32
35
|
|
|
33
36
|
public async createBlocks(numBlocks: number) {
|
|
34
37
|
for (let i = 0; i < numBlocks; i++) {
|
|
35
38
|
const blockNum = this.l2Blocks.length + 1;
|
|
36
|
-
const block = await
|
|
39
|
+
const block = await L2BlockNew.random(BlockNumber(blockNum), { slotNumber: SlotNumber(blockNum) });
|
|
37
40
|
this.l2Blocks.push(block);
|
|
38
41
|
}
|
|
39
42
|
|
|
40
43
|
this.log.verbose(`Created ${numBlocks} blocks in the mock L2 block source`);
|
|
41
44
|
}
|
|
42
45
|
|
|
43
|
-
public addBlocks(blocks:
|
|
46
|
+
public addBlocks(blocks: L2BlockNew[]) {
|
|
44
47
|
this.l2Blocks.push(...blocks);
|
|
45
48
|
this.log.verbose(`Added ${blocks.length} blocks to the mock L2 block source`);
|
|
46
49
|
}
|
|
@@ -61,6 +64,10 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
|
61
64
|
this.finalizedBlockNumber = finalizedBlockNumber;
|
|
62
65
|
}
|
|
63
66
|
|
|
67
|
+
public setCheckpointedBlockNumber(checkpointedBlockNumber: number) {
|
|
68
|
+
this.checkpointedBlockNumber = checkpointedBlockNumber;
|
|
69
|
+
}
|
|
70
|
+
|
|
64
71
|
/**
|
|
65
72
|
* Method to fetch the rollup contract address at the base-layer.
|
|
66
73
|
* @returns The rollup address.
|
|
@@ -82,11 +89,47 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
|
82
89
|
* @returns In this mock instance, returns the number of L2 blocks that we've mocked.
|
|
83
90
|
*/
|
|
84
91
|
public getBlockNumber() {
|
|
85
|
-
return Promise.resolve(this.l2Blocks.length);
|
|
92
|
+
return Promise.resolve(BlockNumber(this.l2Blocks.length));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
public getProvenBlockNumber() {
|
|
96
|
+
return Promise.resolve(BlockNumber(this.provenBlockNumber));
|
|
86
97
|
}
|
|
87
98
|
|
|
88
|
-
public
|
|
89
|
-
|
|
99
|
+
public getCheckpointedBlock(number: BlockNumber): Promise<CheckpointedL2Block | undefined> {
|
|
100
|
+
if (number > this.checkpointedBlockNumber) {
|
|
101
|
+
return Promise.resolve(undefined);
|
|
102
|
+
}
|
|
103
|
+
const block = this.l2Blocks[number - 1];
|
|
104
|
+
if (!block) {
|
|
105
|
+
return Promise.resolve(undefined);
|
|
106
|
+
}
|
|
107
|
+
const checkpointedBlock = new CheckpointedL2Block(
|
|
108
|
+
CheckpointNumber(number),
|
|
109
|
+
block,
|
|
110
|
+
new L1PublishedData(BigInt(number), BigInt(number), `0x${number.toString(16).padStart(64, '0')}`),
|
|
111
|
+
[],
|
|
112
|
+
);
|
|
113
|
+
return Promise.resolve(checkpointedBlock);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
public async getCheckpointedBlocks(
|
|
117
|
+
from: BlockNumber,
|
|
118
|
+
limit: number,
|
|
119
|
+
_proven?: boolean,
|
|
120
|
+
): Promise<CheckpointedL2Block[]> {
|
|
121
|
+
const result: CheckpointedL2Block[] = [];
|
|
122
|
+
for (let i = 0; i < limit; i++) {
|
|
123
|
+
const blockNum = from + i;
|
|
124
|
+
if (blockNum > this.checkpointedBlockNumber) {
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
const block = await this.getCheckpointedBlock(BlockNumber(blockNum));
|
|
128
|
+
if (block) {
|
|
129
|
+
result.push(block);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return result;
|
|
90
133
|
}
|
|
91
134
|
|
|
92
135
|
/**
|
|
@@ -94,8 +137,19 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
|
94
137
|
* @param number - The block number to return (inclusive).
|
|
95
138
|
* @returns The requested L2 block.
|
|
96
139
|
*/
|
|
97
|
-
public getBlock(number: number) {
|
|
98
|
-
|
|
140
|
+
public getBlock(number: number): Promise<L2BlockNew | undefined> {
|
|
141
|
+
const block = this.l2Blocks[number - 1];
|
|
142
|
+
return Promise.resolve(block);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Gets an L2 block (new format).
|
|
147
|
+
* @param number - The block number to return.
|
|
148
|
+
* @returns The requested L2 block.
|
|
149
|
+
*/
|
|
150
|
+
public getL2BlockNew(number: BlockNumber): Promise<L2BlockNew | undefined> {
|
|
151
|
+
const block = this.l2Blocks[number - 1];
|
|
152
|
+
return Promise.resolve(block);
|
|
99
153
|
}
|
|
100
154
|
|
|
101
155
|
/**
|
|
@@ -104,7 +158,7 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
|
104
158
|
* @param limit - The maximum number of blocks to return.
|
|
105
159
|
* @returns The requested mocked L2 blocks.
|
|
106
160
|
*/
|
|
107
|
-
public getBlocks(from: number, limit: number, proven?: boolean) {
|
|
161
|
+
public getBlocks(from: number, limit: number, proven?: boolean): Promise<L2BlockNew[]> {
|
|
108
162
|
return Promise.resolve(
|
|
109
163
|
this.l2Blocks
|
|
110
164
|
.slice(from - 1, from - 1 + limit)
|
|
@@ -112,32 +166,64 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
|
112
166
|
);
|
|
113
167
|
}
|
|
114
168
|
|
|
115
|
-
public
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
169
|
+
public getPublishedCheckpoints(from: CheckpointNumber, limit: number) {
|
|
170
|
+
// TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
|
|
171
|
+
const blocks = this.l2Blocks.slice(from - 1, from - 1 + limit);
|
|
172
|
+
return Promise.all(
|
|
173
|
+
blocks.map(async block => {
|
|
174
|
+
// Create a checkpoint from the block - manually construct since L2BlockNew doesn't have toCheckpoint()
|
|
175
|
+
const checkpoint = await Checkpoint.random(block.checkpointNumber, { numBlocks: 1 });
|
|
176
|
+
checkpoint.blocks = [block];
|
|
177
|
+
return new PublishedCheckpoint(
|
|
178
|
+
checkpoint,
|
|
179
|
+
new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
180
|
+
[],
|
|
181
|
+
);
|
|
126
182
|
}),
|
|
127
183
|
);
|
|
128
184
|
}
|
|
129
185
|
|
|
130
|
-
public async
|
|
186
|
+
public async getCheckpointByArchive(archive: Fr): Promise<Checkpoint | undefined> {
|
|
187
|
+
// TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
|
|
188
|
+
const block = this.l2Blocks.find(b => b.archive.root.equals(archive));
|
|
189
|
+
if (!block) {
|
|
190
|
+
return undefined;
|
|
191
|
+
}
|
|
192
|
+
// Create a checkpoint from the block - manually construct since L2BlockNew doesn't have toCheckpoint()
|
|
193
|
+
const checkpoint = await Checkpoint.random(block.checkpointNumber, { numBlocks: 1 });
|
|
194
|
+
checkpoint.blocks = [block];
|
|
195
|
+
return checkpoint;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
public getPublishedBlocks(from: number, limit: number, proven?: boolean): Promise<CheckpointedL2Block[]> {
|
|
199
|
+
const blocks = this.l2Blocks
|
|
200
|
+
.slice(from - 1, from - 1 + limit)
|
|
201
|
+
.filter(b => !proven || this.provenBlockNumber === undefined || b.number <= this.provenBlockNumber);
|
|
202
|
+
return Promise.resolve(
|
|
203
|
+
blocks.map(block =>
|
|
204
|
+
CheckpointedL2Block.fromFields({
|
|
205
|
+
checkpointNumber: CheckpointNumber(block.number),
|
|
206
|
+
block,
|
|
207
|
+
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
208
|
+
attestations: [],
|
|
209
|
+
}),
|
|
210
|
+
),
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
getL2BlocksNew(from: BlockNumber, limit: number, proven?: boolean): Promise<L2BlockNew[]> {
|
|
215
|
+
// getBlocks already returns L2BlockNew[], so just return directly
|
|
216
|
+
return this.getBlocks(from, limit, proven);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
public async getPublishedBlockByHash(blockHash: Fr): Promise<CheckpointedL2Block | undefined> {
|
|
131
220
|
for (const block of this.l2Blocks) {
|
|
132
221
|
const hash = await block.hash();
|
|
133
222
|
if (hash.equals(blockHash)) {
|
|
134
|
-
return
|
|
223
|
+
return CheckpointedL2Block.fromFields({
|
|
224
|
+
checkpointNumber: CheckpointNumber(block.number),
|
|
135
225
|
block,
|
|
136
|
-
l1:
|
|
137
|
-
blockNumber: BigInt(block.number),
|
|
138
|
-
blockHash: Buffer32.random().toString(),
|
|
139
|
-
timestamp: BigInt(block.number),
|
|
140
|
-
},
|
|
226
|
+
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
141
227
|
attestations: [],
|
|
142
228
|
});
|
|
143
229
|
}
|
|
@@ -145,29 +231,41 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
|
145
231
|
return undefined;
|
|
146
232
|
}
|
|
147
233
|
|
|
148
|
-
public getPublishedBlockByArchive(archive: Fr): Promise<
|
|
234
|
+
public getPublishedBlockByArchive(archive: Fr): Promise<CheckpointedL2Block | undefined> {
|
|
149
235
|
const block = this.l2Blocks.find(b => b.archive.root.equals(archive));
|
|
150
236
|
if (!block) {
|
|
151
237
|
return Promise.resolve(undefined);
|
|
152
238
|
}
|
|
153
239
|
return Promise.resolve(
|
|
154
|
-
|
|
240
|
+
CheckpointedL2Block.fromFields({
|
|
241
|
+
checkpointNumber: CheckpointNumber(block.number),
|
|
155
242
|
block,
|
|
156
|
-
l1:
|
|
157
|
-
blockNumber: BigInt(block.number),
|
|
158
|
-
blockHash: Buffer32.random().toString(),
|
|
159
|
-
timestamp: BigInt(block.number),
|
|
160
|
-
},
|
|
243
|
+
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
161
244
|
attestations: [],
|
|
162
245
|
}),
|
|
163
246
|
);
|
|
164
247
|
}
|
|
165
248
|
|
|
249
|
+
public async getL2BlockNewByHash(blockHash: Fr): Promise<L2BlockNew | undefined> {
|
|
250
|
+
for (const block of this.l2Blocks) {
|
|
251
|
+
const hash = await block.hash();
|
|
252
|
+
if (hash.equals(blockHash)) {
|
|
253
|
+
return block;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return undefined;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
public getL2BlockNewByArchive(archive: Fr): Promise<L2BlockNew | undefined> {
|
|
260
|
+
const block = this.l2Blocks.find(b => b.archive.root.equals(archive));
|
|
261
|
+
return Promise.resolve(block);
|
|
262
|
+
}
|
|
263
|
+
|
|
166
264
|
public async getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined> {
|
|
167
265
|
for (const block of this.l2Blocks) {
|
|
168
266
|
const hash = await block.hash();
|
|
169
267
|
if (hash.equals(blockHash)) {
|
|
170
|
-
return block.
|
|
268
|
+
return block.header;
|
|
171
269
|
}
|
|
172
270
|
}
|
|
173
271
|
return undefined;
|
|
@@ -175,26 +273,49 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
|
175
273
|
|
|
176
274
|
public getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined> {
|
|
177
275
|
const block = this.l2Blocks.find(b => b.archive.root.equals(archive));
|
|
178
|
-
return Promise.resolve(block?.
|
|
276
|
+
return Promise.resolve(block?.header);
|
|
179
277
|
}
|
|
180
278
|
|
|
181
279
|
getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined> {
|
|
182
|
-
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.
|
|
280
|
+
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.header);
|
|
183
281
|
}
|
|
184
282
|
|
|
185
|
-
|
|
283
|
+
getCheckpointsForEpoch(epochNumber: EpochNumber): Promise<Checkpoint[]> {
|
|
284
|
+
// TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
|
|
186
285
|
const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
|
|
187
286
|
const [start, end] = getSlotRangeForEpoch(epochNumber, { epochDuration });
|
|
188
287
|
const blocks = this.l2Blocks.filter(b => {
|
|
189
|
-
const slot = b.header.globalVariables.slotNumber
|
|
288
|
+
const slot = b.header.globalVariables.slotNumber;
|
|
190
289
|
return slot >= start && slot <= end;
|
|
191
290
|
});
|
|
291
|
+
// Create checkpoints from blocks - manually construct since L2BlockNew doesn't have toCheckpoint()
|
|
292
|
+
return Promise.all(
|
|
293
|
+
blocks.map(async block => {
|
|
294
|
+
const checkpoint = await Checkpoint.random(block.checkpointNumber, { numBlocks: 1 });
|
|
295
|
+
checkpoint.blocks = [block];
|
|
296
|
+
return checkpoint;
|
|
297
|
+
}),
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
getBlocksForEpoch(epochNumber: EpochNumber): Promise<L2BlockNew[]> {
|
|
302
|
+
const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
|
|
303
|
+
const [start, end] = getSlotRangeForEpoch(epochNumber, { epochDuration });
|
|
304
|
+
const blocks = this.l2Blocks.filter(b => {
|
|
305
|
+
const slot = b.header.globalVariables.slotNumber;
|
|
306
|
+
return slot >= start && slot <= end;
|
|
307
|
+
});
|
|
308
|
+
return Promise.resolve(blocks);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
getBlocksForSlot(slotNumber: SlotNumber): Promise<L2BlockNew[]> {
|
|
312
|
+
const blocks = this.l2Blocks.filter(b => b.header.globalVariables.slotNumber === slotNumber);
|
|
192
313
|
return Promise.resolve(blocks);
|
|
193
314
|
}
|
|
194
315
|
|
|
195
|
-
async getBlockHeadersForEpoch(epochNumber:
|
|
316
|
+
async getBlockHeadersForEpoch(epochNumber: EpochNumber): Promise<BlockHeader[]> {
|
|
196
317
|
const blocks = await this.getBlocksForEpoch(epochNumber);
|
|
197
|
-
return blocks.map(b => b.
|
|
318
|
+
return blocks.map(b => b.header);
|
|
198
319
|
}
|
|
199
320
|
|
|
200
321
|
/**
|
|
@@ -242,41 +363,57 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
|
242
363
|
}
|
|
243
364
|
|
|
244
365
|
async getL2Tips(): Promise<L2Tips> {
|
|
245
|
-
const [latest, proven, finalized] = [
|
|
366
|
+
const [latest, proven, finalized, checkpointed] = [
|
|
246
367
|
await this.getBlockNumber(),
|
|
247
368
|
await this.getProvenBlockNumber(),
|
|
248
369
|
this.finalizedBlockNumber,
|
|
370
|
+
this.checkpointedBlockNumber,
|
|
249
371
|
] as const;
|
|
250
372
|
|
|
251
373
|
const latestBlock = this.l2Blocks[latest - 1];
|
|
252
374
|
const provenBlock = this.l2Blocks[proven - 1];
|
|
253
375
|
const finalizedBlock = this.l2Blocks[finalized - 1];
|
|
376
|
+
const checkpointedBlock = this.l2Blocks[checkpointed - 1];
|
|
377
|
+
|
|
378
|
+
const latestBlockId = {
|
|
379
|
+
number: BlockNumber(latest),
|
|
380
|
+
hash: (await latestBlock?.hash())?.toString(),
|
|
381
|
+
};
|
|
382
|
+
const provenBlockId = {
|
|
383
|
+
number: BlockNumber(proven),
|
|
384
|
+
hash: (await provenBlock?.hash())?.toString(),
|
|
385
|
+
};
|
|
386
|
+
const finalizedBlockId = {
|
|
387
|
+
number: BlockNumber(finalized),
|
|
388
|
+
hash: (await finalizedBlock?.hash())?.toString(),
|
|
389
|
+
};
|
|
390
|
+
const checkpointedBlockId = {
|
|
391
|
+
number: BlockNumber(checkpointed),
|
|
392
|
+
hash: (await checkpointedBlock?.hash())?.toString(),
|
|
393
|
+
};
|
|
394
|
+
|
|
395
|
+
const makeTipId = (blockId: typeof latestBlockId) => ({
|
|
396
|
+
block: blockId,
|
|
397
|
+
checkpoint: { number: CheckpointNumber(blockId.number), hash: blockId.hash },
|
|
398
|
+
});
|
|
254
399
|
|
|
255
400
|
return {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
proven: {
|
|
261
|
-
number: proven,
|
|
262
|
-
hash: (await provenBlock?.hash())?.toString(),
|
|
263
|
-
},
|
|
264
|
-
finalized: {
|
|
265
|
-
number: finalized,
|
|
266
|
-
hash: (await finalizedBlock?.hash())?.toString(),
|
|
267
|
-
},
|
|
401
|
+
proposed: latestBlockId,
|
|
402
|
+
checkpointed: makeTipId(checkpointedBlockId),
|
|
403
|
+
proven: makeTipId(provenBlockId),
|
|
404
|
+
finalized: makeTipId(finalizedBlockId),
|
|
268
405
|
};
|
|
269
406
|
}
|
|
270
407
|
|
|
271
|
-
getL2EpochNumber(): Promise<
|
|
408
|
+
getL2EpochNumber(): Promise<EpochNumber> {
|
|
272
409
|
throw new Error('Method not implemented.');
|
|
273
410
|
}
|
|
274
411
|
|
|
275
|
-
getL2SlotNumber(): Promise<
|
|
412
|
+
getL2SlotNumber(): Promise<SlotNumber> {
|
|
276
413
|
throw new Error('Method not implemented.');
|
|
277
414
|
}
|
|
278
415
|
|
|
279
|
-
isEpochComplete(_epochNumber:
|
|
416
|
+
isEpochComplete(_epochNumber: EpochNumber): Promise<boolean> {
|
|
280
417
|
throw new Error('Method not implemented.');
|
|
281
418
|
}
|
|
282
419
|
|
|
@@ -342,7 +479,7 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
|
342
479
|
return Promise.resolve(false);
|
|
343
480
|
}
|
|
344
481
|
|
|
345
|
-
getPendingChainValidationStatus(): Promise<
|
|
482
|
+
getPendingChainValidationStatus(): Promise<ValidateCheckpointResult> {
|
|
346
483
|
return Promise.resolve({ valid: true });
|
|
347
484
|
}
|
|
348
485
|
}
|