@aztec/archiver 0.0.0-test.1 → 0.0.1-commit.023c3e5
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 +164 -9
- package/dest/archiver.d.ts +136 -0
- package/dest/archiver.d.ts.map +1 -0
- package/dest/archiver.js +781 -0
- package/dest/config.d.ts +30 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/config.js +71 -0
- package/dest/errors.d.ts +41 -0
- package/dest/errors.d.ts.map +1 -0
- package/dest/errors.js +62 -0
- package/dest/factory.d.ts +13 -16
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +103 -55
- 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 +32 -0
- package/dest/l1/validate_trace.d.ts.map +1 -0
- package/dest/l1/validate_trace.js +154 -0
- package/dest/modules/data_source_base.d.ts +84 -0
- package/dest/modules/data_source_base.d.ts.map +1 -0
- package/dest/modules/data_source_base.js +260 -0
- package/dest/modules/data_store_updater.d.ts +73 -0
- package/dest/modules/data_store_updater.d.ts.map +1 -0
- package/dest/modules/data_store_updater.js +302 -0
- package/dest/modules/instrumentation.d.ts +37 -0
- package/dest/modules/instrumentation.d.ts.map +1 -0
- package/dest/modules/instrumentation.js +110 -0
- 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 +1112 -0
- package/dest/modules/validation.d.ts +17 -0
- package/dest/modules/validation.d.ts.map +1 -0
- package/dest/modules/validation.js +104 -0
- package/dest/store/block_store.d.ts +192 -0
- package/dest/store/block_store.d.ts.map +1 -0
- package/dest/store/block_store.js +721 -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 +25 -27
- package/dest/store/contract_instance_store.d.ts +24 -0
- package/dest/store/contract_instance_store.d.ts.map +1 -0
- package/dest/store/contract_instance_store.js +77 -0
- package/dest/store/kv_archiver_store.d.ts +340 -0
- package/dest/store/kv_archiver_store.d.ts.map +1 -0
- package/dest/store/kv_archiver_store.js +446 -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/store/message_store.js +188 -0
- 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/structs/inbox_message.js +39 -0
- package/dest/structs/published.d.ts +2 -0
- package/dest/structs/published.d.ts.map +1 -0
- package/dest/structs/published.js +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 +4 -1
- 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 +9 -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 +30 -7
- package/dest/test/mock_l2_block_source.d.ts +62 -16
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +263 -32
- package/dest/test/mock_structs.d.ts +85 -0
- package/dest/test/mock_structs.d.ts.map +1 -0
- package/dest/test/mock_structs.js +171 -0
- package/dest/test/noop_l1_archiver.d.ts +23 -0
- package/dest/test/noop_l1_archiver.d.ts.map +1 -0
- package/dest/test/noop_l1_archiver.js +68 -0
- package/package.json +31 -33
- package/src/archiver.ts +543 -0
- package/src/config.ts +95 -0
- package/src/errors.ts +102 -0
- package/src/factory.ts +144 -71
- 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 +187 -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 +229 -0
- package/src/modules/data_source_base.ts +367 -0
- package/src/modules/data_store_updater.ts +423 -0
- package/src/modules/instrumentation.ts +157 -0
- package/src/modules/l1_synchronizer.ts +930 -0
- package/src/modules/validation.ts +129 -0
- package/src/store/block_store.ts +966 -0
- package/src/{archiver/kv_archiver_store → store}/contract_class_store.ts +26 -32
- package/src/{archiver/kv_archiver_store → store}/contract_instance_store.ts +37 -29
- package/src/store/kv_archiver_store.ts +639 -0
- package/src/store/log_store.ts +575 -0
- package/src/store/message_store.ts +261 -0
- package/src/structs/inbox_message.ts +41 -0
- 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 +4 -0
- package/src/test/mock_archiver.ts +22 -16
- package/src/test/mock_l1_to_l2_message_source.ts +26 -8
- package/src/test/mock_l2_block_source.ts +313 -42
- package/src/test/mock_structs.ts +311 -0
- package/src/test/noop_l1_archiver.ts +109 -0
- package/dest/archiver/archiver.d.ts +0 -197
- package/dest/archiver/archiver.d.ts.map +0 -1
- package/dest/archiver/archiver.js +0 -900
- package/dest/archiver/archiver_store.d.ts +0 -220
- 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 -794
- package/dest/archiver/config.d.ts +0 -37
- package/dest/archiver/config.d.ts.map +0 -1
- package/dest/archiver/config.js +0 -46
- package/dest/archiver/data_retrieval.d.ts +0 -74
- package/dest/archiver/data_retrieval.d.ts.map +0 -1
- package/dest/archiver/data_retrieval.js +0 -283
- package/dest/archiver/errors.d.ts +0 -4
- package/dest/archiver/errors.d.ts.map +0 -1
- package/dest/archiver/errors.js +0 -5
- package/dest/archiver/index.d.ts +0 -8
- package/dest/archiver/index.d.ts.map +0 -1
- package/dest/archiver/index.js +0 -5
- package/dest/archiver/instrumentation.d.ts +0 -29
- package/dest/archiver/instrumentation.d.ts.map +0 -1
- package/dest/archiver/instrumentation.js +0 -99
- package/dest/archiver/kv_archiver_store/block_store.d.ts +0 -87
- package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/block_store.js +0 -217
- 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 -21
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/contract_instance_store.js +0 -63
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -153
- 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 -254
- 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 -364
- package/dest/archiver/kv_archiver_store/message_store.d.ts +0 -33
- package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/message_store.js +0 -85
- package/dest/archiver/kv_archiver_store/nullifier_store.d.ts +0 -12
- package/dest/archiver/kv_archiver_store/nullifier_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/nullifier_store.js +0 -73
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts +0 -23
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts.map +0 -1
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.js +0 -49
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts +0 -175
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts.map +0 -1
- package/dest/archiver/memory_archiver_store/memory_archiver_store.js +0 -636
- 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/published.d.ts +0 -11
- package/dest/archiver/structs/published.d.ts.map +0 -1
- package/dest/archiver/structs/published.js +0 -1
- package/dest/rpc/index.d.ts +0 -10
- package/dest/rpc/index.d.ts.map +0 -1
- package/dest/rpc/index.js +0 -18
- package/src/archiver/archiver.ts +0 -1181
- package/src/archiver/archiver_store.ts +0 -263
- package/src/archiver/archiver_store_test_suite.ts +0 -810
- package/src/archiver/config.ts +0 -92
- package/src/archiver/data_retrieval.ts +0 -422
- package/src/archiver/errors.ts +0 -5
- package/src/archiver/index.ts +0 -7
- package/src/archiver/instrumentation.ts +0 -132
- package/src/archiver/kv_archiver_store/block_store.ts +0 -283
- package/src/archiver/kv_archiver_store/kv_archiver_store.ts +0 -358
- package/src/archiver/kv_archiver_store/log_store.ts +0 -444
- package/src/archiver/kv_archiver_store/message_store.ts +0 -102
- package/src/archiver/kv_archiver_store/nullifier_store.ts +0 -97
- package/src/archiver/memory_archiver_store/l1_to_l2_message_store.ts +0 -61
- package/src/archiver/memory_archiver_store/memory_archiver_store.ts +0 -801
- package/src/archiver/structs/published.ts +0 -11
- package/src/rpc/index.ts +0 -20
- /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
- /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
|
@@ -1,33 +1,51 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
|
|
2
|
+
import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
|
|
3
|
+
import { BlockNumber, CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
5
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
6
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
7
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
8
|
+
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
9
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
10
|
+
import {
|
|
11
|
+
BlockHash,
|
|
12
|
+
CheckpointedL2Block,
|
|
13
|
+
L2Block,
|
|
14
|
+
type L2BlockSource,
|
|
15
|
+
type L2Tips,
|
|
16
|
+
type ValidateCheckpointResult,
|
|
17
|
+
} from '@aztec/stdlib/block';
|
|
18
|
+
import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
19
|
+
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
20
|
+
import { EmptyL1RollupConstants, type L1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
21
|
+
import { type BlockHeader, TxExecutionResult, TxHash, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
22
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
7
23
|
|
|
8
24
|
/**
|
|
9
25
|
* A mocked implementation of L2BlockSource to be used in tests.
|
|
10
26
|
*/
|
|
11
|
-
export class MockL2BlockSource implements L2BlockSource {
|
|
27
|
+
export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
12
28
|
protected l2Blocks: L2Block[] = [];
|
|
13
29
|
|
|
14
30
|
private provenBlockNumber: number = 0;
|
|
31
|
+
private finalizedBlockNumber: number = 0;
|
|
32
|
+
private checkpointedBlockNumber: number = 0;
|
|
15
33
|
|
|
16
34
|
private log = createLogger('archiver:mock_l2_block_source');
|
|
17
35
|
|
|
18
36
|
public async createBlocks(numBlocks: number) {
|
|
19
37
|
for (let i = 0; i < numBlocks; i++) {
|
|
20
38
|
const blockNum = this.l2Blocks.length + 1;
|
|
21
|
-
const block = await L2Block.random(blockNum);
|
|
39
|
+
const block = await L2Block.random(BlockNumber(blockNum), { slotNumber: SlotNumber(blockNum) });
|
|
22
40
|
this.l2Blocks.push(block);
|
|
23
41
|
}
|
|
24
42
|
|
|
25
43
|
this.log.verbose(`Created ${numBlocks} blocks in the mock L2 block source`);
|
|
26
44
|
}
|
|
27
45
|
|
|
28
|
-
public
|
|
46
|
+
public addProposedBlocks(blocks: L2Block[]) {
|
|
29
47
|
this.l2Blocks.push(...blocks);
|
|
30
|
-
this.log.verbose(`Added ${blocks.length} blocks to the mock L2 block source`);
|
|
48
|
+
this.log.verbose(`Added ${blocks.length} proposed blocks to the mock L2 block source`);
|
|
31
49
|
}
|
|
32
50
|
|
|
33
51
|
public removeBlocks(numBlocks: number) {
|
|
@@ -39,6 +57,17 @@ export class MockL2BlockSource implements L2BlockSource {
|
|
|
39
57
|
this.provenBlockNumber = provenBlockNumber;
|
|
40
58
|
}
|
|
41
59
|
|
|
60
|
+
public setFinalizedBlockNumber(finalizedBlockNumber: number) {
|
|
61
|
+
if (finalizedBlockNumber > this.provenBlockNumber) {
|
|
62
|
+
this.provenBlockNumber = finalizedBlockNumber;
|
|
63
|
+
}
|
|
64
|
+
this.finalizedBlockNumber = finalizedBlockNumber;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
public setCheckpointedBlockNumber(checkpointedBlockNumber: number) {
|
|
68
|
+
this.checkpointedBlockNumber = checkpointedBlockNumber;
|
|
69
|
+
}
|
|
70
|
+
|
|
42
71
|
/**
|
|
43
72
|
* Method to fetch the rollup contract address at the base-layer.
|
|
44
73
|
* @returns The rollup address.
|
|
@@ -60,11 +89,51 @@ export class MockL2BlockSource implements L2BlockSource {
|
|
|
60
89
|
* @returns In this mock instance, returns the number of L2 blocks that we've mocked.
|
|
61
90
|
*/
|
|
62
91
|
public getBlockNumber() {
|
|
63
|
-
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));
|
|
64
97
|
}
|
|
65
98
|
|
|
66
|
-
public
|
|
67
|
-
return Promise.resolve(this.
|
|
99
|
+
public getCheckpointedL2BlockNumber() {
|
|
100
|
+
return Promise.resolve(BlockNumber(this.checkpointedBlockNumber));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
public getFinalizedL2BlockNumber() {
|
|
104
|
+
return Promise.resolve(BlockNumber(this.finalizedBlockNumber));
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
public getCheckpointedBlock(number: BlockNumber): Promise<CheckpointedL2Block | undefined> {
|
|
108
|
+
if (number > this.checkpointedBlockNumber) {
|
|
109
|
+
return Promise.resolve(undefined);
|
|
110
|
+
}
|
|
111
|
+
const block = this.l2Blocks[number - 1];
|
|
112
|
+
if (!block) {
|
|
113
|
+
return Promise.resolve(undefined);
|
|
114
|
+
}
|
|
115
|
+
const checkpointedBlock = new CheckpointedL2Block(
|
|
116
|
+
CheckpointNumber.fromBlockNumber(number),
|
|
117
|
+
block,
|
|
118
|
+
new L1PublishedData(BigInt(number), BigInt(number), `0x${number.toString(16).padStart(64, '0')}`),
|
|
119
|
+
[],
|
|
120
|
+
);
|
|
121
|
+
return Promise.resolve(checkpointedBlock);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
public async getCheckpointedBlocks(from: BlockNumber, limit: number): Promise<CheckpointedL2Block[]> {
|
|
125
|
+
const result: CheckpointedL2Block[] = [];
|
|
126
|
+
for (let i = 0; i < limit; i++) {
|
|
127
|
+
const blockNum = from + i;
|
|
128
|
+
if (blockNum > this.checkpointedBlockNumber) {
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
const block = await this.getCheckpointedBlock(BlockNumber(blockNum));
|
|
132
|
+
if (block) {
|
|
133
|
+
result.push(block);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return result;
|
|
68
137
|
}
|
|
69
138
|
|
|
70
139
|
/**
|
|
@@ -72,8 +141,19 @@ export class MockL2BlockSource implements L2BlockSource {
|
|
|
72
141
|
* @param number - The block number to return (inclusive).
|
|
73
142
|
* @returns The requested L2 block.
|
|
74
143
|
*/
|
|
75
|
-
public getBlock(number: number) {
|
|
76
|
-
|
|
144
|
+
public getBlock(number: number): Promise<L2Block | undefined> {
|
|
145
|
+
const block = this.l2Blocks[number - 1];
|
|
146
|
+
return Promise.resolve(block);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Gets an L2 block (new format).
|
|
151
|
+
* @param number - The block number to return.
|
|
152
|
+
* @returns The requested L2 block.
|
|
153
|
+
*/
|
|
154
|
+
public getL2Block(number: BlockNumber): Promise<L2Block | undefined> {
|
|
155
|
+
const block = this.l2Blocks[number - 1];
|
|
156
|
+
return Promise.resolve(block);
|
|
77
157
|
}
|
|
78
158
|
|
|
79
159
|
/**
|
|
@@ -82,32 +162,154 @@ export class MockL2BlockSource implements L2BlockSource {
|
|
|
82
162
|
* @param limit - The maximum number of blocks to return.
|
|
83
163
|
* @returns The requested mocked L2 blocks.
|
|
84
164
|
*/
|
|
85
|
-
public getBlocks(from: number, limit: number
|
|
165
|
+
public getBlocks(from: number, limit: number): Promise<L2Block[]> {
|
|
166
|
+
return Promise.resolve(this.l2Blocks.slice(from - 1, from - 1 + limit));
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
public getCheckpoints(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 L2Block 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
|
+
);
|
|
182
|
+
}),
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
|
|
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 L2Block 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 async getCheckpointedBlockByHash(blockHash: BlockHash): Promise<CheckpointedL2Block | undefined> {
|
|
199
|
+
for (const block of this.l2Blocks) {
|
|
200
|
+
const hash = await block.hash();
|
|
201
|
+
if (hash.equals(blockHash)) {
|
|
202
|
+
return CheckpointedL2Block.fromFields({
|
|
203
|
+
checkpointNumber: CheckpointNumber.fromBlockNumber(block.number),
|
|
204
|
+
block,
|
|
205
|
+
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
206
|
+
attestations: [],
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return undefined;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
public getCheckpointedBlockByArchive(archive: Fr): Promise<CheckpointedL2Block | undefined> {
|
|
214
|
+
const block = this.l2Blocks.find(b => b.archive.root.equals(archive));
|
|
215
|
+
if (!block) {
|
|
216
|
+
return Promise.resolve(undefined);
|
|
217
|
+
}
|
|
86
218
|
return Promise.resolve(
|
|
87
|
-
|
|
88
|
-
.
|
|
89
|
-
|
|
219
|
+
CheckpointedL2Block.fromFields({
|
|
220
|
+
checkpointNumber: CheckpointNumber.fromBlockNumber(block.number),
|
|
221
|
+
block,
|
|
222
|
+
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
223
|
+
attestations: [],
|
|
224
|
+
}),
|
|
90
225
|
);
|
|
91
226
|
}
|
|
92
227
|
|
|
228
|
+
public async getL2BlockByHash(blockHash: BlockHash): Promise<L2Block | undefined> {
|
|
229
|
+
for (const block of this.l2Blocks) {
|
|
230
|
+
const hash = await block.hash();
|
|
231
|
+
if (hash.equals(blockHash)) {
|
|
232
|
+
return block;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return undefined;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
public getL2BlockByArchive(archive: Fr): Promise<L2Block | undefined> {
|
|
239
|
+
const block = this.l2Blocks.find(b => b.archive.root.equals(archive));
|
|
240
|
+
return Promise.resolve(block);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
public async getBlockHeaderByHash(blockHash: BlockHash): Promise<BlockHeader | undefined> {
|
|
244
|
+
for (const block of this.l2Blocks) {
|
|
245
|
+
const hash = await block.hash();
|
|
246
|
+
if (hash.equals(blockHash)) {
|
|
247
|
+
return block.header;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return undefined;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
public getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined> {
|
|
254
|
+
const block = this.l2Blocks.find(b => b.archive.root.equals(archive));
|
|
255
|
+
return Promise.resolve(block?.header);
|
|
256
|
+
}
|
|
257
|
+
|
|
93
258
|
getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined> {
|
|
94
259
|
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.header);
|
|
95
260
|
}
|
|
96
261
|
|
|
97
|
-
|
|
262
|
+
getCheckpointsForEpoch(epochNumber: EpochNumber): Promise<Checkpoint[]> {
|
|
263
|
+
// TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
|
|
264
|
+
const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
|
|
265
|
+
const [start, end] = getSlotRangeForEpoch(epochNumber, { epochDuration });
|
|
266
|
+
const blocks = this.l2Blocks.filter(b => {
|
|
267
|
+
const slot = b.header.globalVariables.slotNumber;
|
|
268
|
+
return slot >= start && slot <= end;
|
|
269
|
+
});
|
|
270
|
+
// Create checkpoints from blocks - manually construct since L2Block doesn't have toCheckpoint()
|
|
271
|
+
return Promise.all(
|
|
272
|
+
blocks.map(async block => {
|
|
273
|
+
const checkpoint = await Checkpoint.random(block.checkpointNumber, { numBlocks: 1 });
|
|
274
|
+
checkpoint.blocks = [block];
|
|
275
|
+
return checkpoint;
|
|
276
|
+
}),
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
getCheckpointedBlocksForEpoch(epochNumber: EpochNumber): Promise<CheckpointedL2Block[]> {
|
|
98
281
|
const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
|
|
99
282
|
const [start, end] = getSlotRangeForEpoch(epochNumber, { epochDuration });
|
|
100
283
|
const blocks = this.l2Blocks.filter(b => {
|
|
101
|
-
const slot = b.header.globalVariables.slotNumber
|
|
284
|
+
const slot = b.header.globalVariables.slotNumber;
|
|
102
285
|
return slot >= start && slot <= end;
|
|
103
286
|
});
|
|
287
|
+
return Promise.resolve(
|
|
288
|
+
blocks.map(block =>
|
|
289
|
+
CheckpointedL2Block.fromFields({
|
|
290
|
+
checkpointNumber: CheckpointNumber.fromBlockNumber(block.number),
|
|
291
|
+
block,
|
|
292
|
+
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
293
|
+
attestations: [],
|
|
294
|
+
}),
|
|
295
|
+
),
|
|
296
|
+
);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
getBlocksForSlot(slotNumber: SlotNumber): Promise<L2Block[]> {
|
|
300
|
+
const blocks = this.l2Blocks.filter(b => b.header.globalVariables.slotNumber === slotNumber);
|
|
104
301
|
return Promise.resolve(blocks);
|
|
105
302
|
}
|
|
106
303
|
|
|
304
|
+
async getCheckpointedBlockHeadersForEpoch(epochNumber: EpochNumber): Promise<BlockHeader[]> {
|
|
305
|
+
const checkpointedBlocks = await this.getCheckpointedBlocksForEpoch(epochNumber);
|
|
306
|
+
return checkpointedBlocks.map(b => b.block.header);
|
|
307
|
+
}
|
|
308
|
+
|
|
107
309
|
/**
|
|
108
310
|
* Gets a tx effect.
|
|
109
|
-
* @param txHash - The hash of
|
|
110
|
-
* @returns The requested tx effect.
|
|
311
|
+
* @param txHash - The hash of the tx corresponding to the tx effect.
|
|
312
|
+
* @returns The requested tx effect with block info (or undefined if not found).
|
|
111
313
|
*/
|
|
112
314
|
public async getTxEffect(txHash: TxHash) {
|
|
113
315
|
const match = this.l2Blocks
|
|
@@ -117,7 +319,12 @@ export class MockL2BlockSource implements L2BlockSource {
|
|
|
117
319
|
return Promise.resolve(undefined);
|
|
118
320
|
}
|
|
119
321
|
const [txEffect, block] = match;
|
|
120
|
-
return {
|
|
322
|
+
return {
|
|
323
|
+
data: txEffect,
|
|
324
|
+
l2BlockNumber: block.number,
|
|
325
|
+
l2BlockHash: await block.hash(),
|
|
326
|
+
txIndexInBlock: block.body.txEffects.indexOf(txEffect),
|
|
327
|
+
};
|
|
121
328
|
}
|
|
122
329
|
|
|
123
330
|
/**
|
|
@@ -129,12 +336,14 @@ export class MockL2BlockSource implements L2BlockSource {
|
|
|
129
336
|
for (const block of this.l2Blocks) {
|
|
130
337
|
for (const txEffect of block.body.txEffects) {
|
|
131
338
|
if (txEffect.txHash.equals(txHash)) {
|
|
339
|
+
// In mock, assume all txs are checkpointed with successful execution
|
|
132
340
|
return new TxReceipt(
|
|
133
341
|
txHash,
|
|
134
|
-
TxStatus.
|
|
135
|
-
|
|
342
|
+
TxStatus.CHECKPOINTED,
|
|
343
|
+
TxExecutionResult.SUCCESS,
|
|
344
|
+
undefined,
|
|
136
345
|
txEffect.transactionFee.toBigInt(),
|
|
137
|
-
|
|
346
|
+
await block.hash(),
|
|
138
347
|
block.number,
|
|
139
348
|
);
|
|
140
349
|
}
|
|
@@ -144,45 +353,69 @@ export class MockL2BlockSource implements L2BlockSource {
|
|
|
144
353
|
}
|
|
145
354
|
|
|
146
355
|
async getL2Tips(): Promise<L2Tips> {
|
|
147
|
-
const [latest, proven, finalized] = [
|
|
356
|
+
const [latest, proven, finalized, checkpointed] = [
|
|
148
357
|
await this.getBlockNumber(),
|
|
149
358
|
await this.getProvenBlockNumber(),
|
|
150
|
-
|
|
359
|
+
this.finalizedBlockNumber,
|
|
360
|
+
this.checkpointedBlockNumber,
|
|
151
361
|
] as const;
|
|
152
362
|
|
|
153
363
|
const latestBlock = this.l2Blocks[latest - 1];
|
|
154
364
|
const provenBlock = this.l2Blocks[proven - 1];
|
|
155
365
|
const finalizedBlock = this.l2Blocks[finalized - 1];
|
|
366
|
+
const checkpointedBlock = this.l2Blocks[checkpointed - 1];
|
|
367
|
+
|
|
368
|
+
const latestBlockId = {
|
|
369
|
+
number: BlockNumber(latest),
|
|
370
|
+
hash: (await latestBlock?.hash())?.toString(),
|
|
371
|
+
};
|
|
372
|
+
const provenBlockId = {
|
|
373
|
+
number: BlockNumber(proven),
|
|
374
|
+
hash: (await provenBlock?.hash())?.toString(),
|
|
375
|
+
};
|
|
376
|
+
const finalizedBlockId = {
|
|
377
|
+
number: BlockNumber(finalized),
|
|
378
|
+
hash: (await finalizedBlock?.hash())?.toString(),
|
|
379
|
+
};
|
|
380
|
+
const checkpointedBlockId = {
|
|
381
|
+
number: BlockNumber(checkpointed),
|
|
382
|
+
hash: (await checkpointedBlock?.hash())?.toString(),
|
|
383
|
+
};
|
|
384
|
+
|
|
385
|
+
const makeTipId = (blockId: typeof latestBlockId) => ({
|
|
386
|
+
block: blockId,
|
|
387
|
+
checkpoint: { number: CheckpointNumber.fromBlockNumber(blockId.number), hash: blockId.hash },
|
|
388
|
+
});
|
|
156
389
|
|
|
157
390
|
return {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
proven: {
|
|
163
|
-
number: proven,
|
|
164
|
-
hash: (await provenBlock?.hash())?.toString(),
|
|
165
|
-
},
|
|
166
|
-
finalized: {
|
|
167
|
-
number: finalized,
|
|
168
|
-
hash: (await finalizedBlock?.hash())?.toString(),
|
|
169
|
-
},
|
|
391
|
+
proposed: latestBlockId,
|
|
392
|
+
checkpointed: makeTipId(checkpointedBlockId),
|
|
393
|
+
proven: makeTipId(provenBlockId),
|
|
394
|
+
finalized: makeTipId(finalizedBlockId),
|
|
170
395
|
};
|
|
171
396
|
}
|
|
172
397
|
|
|
173
|
-
getL2EpochNumber(): Promise<
|
|
398
|
+
getL2EpochNumber(): Promise<EpochNumber> {
|
|
174
399
|
throw new Error('Method not implemented.');
|
|
175
400
|
}
|
|
176
401
|
|
|
177
|
-
getL2SlotNumber(): Promise<
|
|
402
|
+
getL2SlotNumber(): Promise<SlotNumber> {
|
|
178
403
|
throw new Error('Method not implemented.');
|
|
179
404
|
}
|
|
180
405
|
|
|
181
|
-
isEpochComplete(_epochNumber:
|
|
406
|
+
isEpochComplete(_epochNumber: EpochNumber): Promise<boolean> {
|
|
182
407
|
throw new Error('Method not implemented.');
|
|
183
408
|
}
|
|
184
409
|
|
|
185
410
|
getL1Constants(): Promise<L1RollupConstants> {
|
|
411
|
+
return Promise.resolve(EmptyL1RollupConstants);
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
getGenesisValues(): Promise<{ genesisArchiveRoot: Fr }> {
|
|
415
|
+
return Promise.resolve({ genesisArchiveRoot: new Fr(GENESIS_ARCHIVE_ROOT) });
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
getL1Timestamp(): Promise<bigint> {
|
|
186
419
|
throw new Error('Method not implemented.');
|
|
187
420
|
}
|
|
188
421
|
|
|
@@ -191,6 +424,7 @@ export class MockL2BlockSource implements L2BlockSource {
|
|
|
191
424
|
* @returns A promise that signals the initialization of the l2 block source on completion.
|
|
192
425
|
*/
|
|
193
426
|
public start(): Promise<void> {
|
|
427
|
+
this.log.verbose('Starting mock L2 block source');
|
|
194
428
|
return Promise.resolve();
|
|
195
429
|
}
|
|
196
430
|
|
|
@@ -199,6 +433,43 @@ export class MockL2BlockSource implements L2BlockSource {
|
|
|
199
433
|
* @returns A promise that signals the l2 block source is now stopped.
|
|
200
434
|
*/
|
|
201
435
|
public stop(): Promise<void> {
|
|
436
|
+
this.log.verbose('Stopping mock L2 block source');
|
|
437
|
+
return Promise.resolve();
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
getContractClass(_id: Fr): Promise<ContractClassPublic | undefined> {
|
|
441
|
+
return Promise.resolve(undefined);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
getBytecodeCommitment(_id: Fr): Promise<Fr | undefined> {
|
|
445
|
+
return Promise.resolve(undefined);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
getContract(_address: AztecAddress, _timestamp?: UInt64): Promise<ContractInstanceWithAddress | undefined> {
|
|
449
|
+
return Promise.resolve(undefined);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
getContractClassIds(): Promise<Fr[]> {
|
|
453
|
+
return Promise.resolve([]);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
getDebugFunctionName(_address: AztecAddress, _selector: FunctionSelector): Promise<string | undefined> {
|
|
457
|
+
return Promise.resolve(undefined);
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
registerContractFunctionSignatures(_signatures: string[]): Promise<void> {
|
|
202
461
|
return Promise.resolve();
|
|
203
462
|
}
|
|
463
|
+
|
|
464
|
+
syncImmediate(): Promise<void> {
|
|
465
|
+
return Promise.resolve();
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
isPendingChainInvalid(): Promise<boolean> {
|
|
469
|
+
return Promise.resolve(false);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
getPendingChainValidationStatus(): Promise<ValidateCheckpointResult> {
|
|
473
|
+
return Promise.resolve({ valid: true });
|
|
474
|
+
}
|
|
204
475
|
}
|