@aztec/archiver 0.0.1-commit.b655e406 → 0.0.1-commit.d1f2d6c
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 +156 -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 +7 -7
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +90 -10
- 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 +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 +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 +188 -0
- package/dest/store/block_store.d.ts.map +1 -0
- package/dest/store/block_store.js +709 -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 +339 -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/{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 +36 -17
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +178 -58
- 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 +522 -0
- package/src/{archiver/config.ts → config.ts} +33 -12
- package/src/errors.ts +90 -0
- package/src/factory.ts +125 -10
- 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 +211 -0
- package/src/modules/data_source_base.ts +367 -0
- package/src/modules/data_store_updater.ts +419 -0
- package/src/{archiver → modules}/instrumentation.ts +24 -59
- package/src/modules/l1_synchronizer.ts +931 -0
- package/src/modules/validation.ts +129 -0
- package/src/store/block_store.ts +957 -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 +638 -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 +197 -70
- 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
|
@@ -4,11 +4,11 @@ import { MockL2BlockSource } from './mock_l2_block_source.js';
|
|
|
4
4
|
* A mocked implementation of the archiver that implements L2BlockSource and L1ToL2MessageSource.
|
|
5
5
|
*/ export class MockArchiver extends MockL2BlockSource {
|
|
6
6
|
messageSource = new MockL1ToL2MessageSource(0);
|
|
7
|
-
setL1ToL2Messages(
|
|
8
|
-
this.messageSource.setL1ToL2Messages(
|
|
7
|
+
setL1ToL2Messages(checkpointNumber, msgs) {
|
|
8
|
+
this.messageSource.setL1ToL2Messages(checkpointNumber, msgs);
|
|
9
9
|
}
|
|
10
|
-
getL1ToL2Messages(
|
|
11
|
-
return this.messageSource.getL1ToL2Messages(
|
|
10
|
+
getL1ToL2Messages(checkpointNumber) {
|
|
11
|
+
return this.messageSource.getL1ToL2Messages(checkpointNumber);
|
|
12
12
|
}
|
|
13
13
|
getL1ToL2MessageIndex(_l1ToL2Message) {
|
|
14
14
|
return this.messageSource.getL1ToL2MessageIndex(_l1ToL2Message);
|
|
@@ -17,24 +17,28 @@ import { MockL2BlockSource } from './mock_l2_block_source.js';
|
|
|
17
17
|
/**
|
|
18
18
|
* A mocked implementation of the archiver with a set of precomputed blocks and messages.
|
|
19
19
|
*/ export class MockPrefilledArchiver extends MockArchiver {
|
|
20
|
-
|
|
21
|
-
constructor(
|
|
20
|
+
prefilled = [];
|
|
21
|
+
constructor(prefilled){
|
|
22
22
|
super();
|
|
23
|
-
this.
|
|
24
|
-
messages.forEach((msgs, i)=>this.setL1ToL2Messages(i + 1, msgs));
|
|
23
|
+
this.setPrefilled(prefilled);
|
|
25
24
|
}
|
|
26
|
-
|
|
27
|
-
for (const
|
|
28
|
-
this.
|
|
25
|
+
setPrefilled(prefilled) {
|
|
26
|
+
for (const { checkpoint, messages } of prefilled){
|
|
27
|
+
this.prefilled[checkpoint.number - 1] = checkpoint;
|
|
28
|
+
if (checkpoint.blocks.length !== 1) {
|
|
29
|
+
throw new Error('Prefilled checkpoint must only have 1 block at the moment.');
|
|
30
|
+
}
|
|
31
|
+
this.setL1ToL2Messages(checkpoint.number, messages);
|
|
29
32
|
}
|
|
30
|
-
messages.forEach((msgs, i)=>this.setL1ToL2Messages(blocks[i].number, msgs));
|
|
31
33
|
}
|
|
32
34
|
createBlocks(numBlocks) {
|
|
33
|
-
|
|
35
|
+
const flattenedBlocks = this.prefilled.flatMap((c)=>c.blocks);
|
|
36
|
+
if (this.l2Blocks.length + numBlocks > flattenedBlocks.length) {
|
|
34
37
|
throw new Error(`Not enough precomputed blocks to create ${numBlocks} more blocks (already at ${this.l2Blocks.length})`);
|
|
35
38
|
}
|
|
36
39
|
const fromBlock = this.l2Blocks.length;
|
|
37
|
-
|
|
40
|
+
// TODO: Add L2 blocks and checkpoints separately once archiver has the apis for that.
|
|
41
|
+
this.addBlocks(this.prefilled.slice(fromBlock, fromBlock + numBlocks).flatMap((c)=>c.blocks));
|
|
38
42
|
return Promise.resolve();
|
|
39
43
|
}
|
|
40
44
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
3
|
import type { L2Tips } from '@aztec/stdlib/block';
|
|
3
4
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
4
5
|
/**
|
|
@@ -6,13 +7,13 @@ import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
|
6
7
|
*/
|
|
7
8
|
export declare class MockL1ToL2MessageSource implements L1ToL2MessageSource {
|
|
8
9
|
private blockNumber;
|
|
9
|
-
private
|
|
10
|
+
private messagesPerCheckpoint;
|
|
10
11
|
constructor(blockNumber: number);
|
|
11
|
-
setL1ToL2Messages(
|
|
12
|
+
setL1ToL2Messages(checkpointNumber: CheckpointNumber, msgs: Fr[]): void;
|
|
12
13
|
setBlockNumber(blockNumber: number): void;
|
|
13
|
-
getL1ToL2Messages(
|
|
14
|
+
getL1ToL2Messages(checkpointNumber: CheckpointNumber): Promise<Fr[]>;
|
|
14
15
|
getL1ToL2MessageIndex(_l1ToL2Message: Fr): Promise<bigint | undefined>;
|
|
15
|
-
getBlockNumber(): Promise<
|
|
16
|
+
getBlockNumber(): Promise<BlockNumber>;
|
|
16
17
|
getL2Tips(): Promise<L2Tips>;
|
|
17
18
|
}
|
|
18
|
-
//# sourceMappingURL=
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvbW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFvQyxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5FOztHQUVHO0FBQ0gscUJBQWEsdUJBQXdCLFlBQVcsbUJBQW1CO0lBR3JELE9BQU8sQ0FBQyxXQUFXO0lBRi9CLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBcUM7SUFFbEUsWUFBb0IsV0FBVyxFQUFFLE1BQU0sRUFBSTtJQUVwQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBRXRFO0lBRU0sY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLFFBRXhDO0lBRUQsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBRW5FO0lBRUQscUJBQXFCLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUVyRTtJQUVELGNBQWMseUJBRWI7SUFFRCxTQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQWMzQjtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_l1_to_l2_message_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l1_to_l2_message_source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mock_l1_to_l2_message_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l1_to_l2_message_source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAoC,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IAGrD,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,qBAAqB,CAAqC;IAElE,YAAoB,WAAW,EAAE,MAAM,EAAI;IAEpC,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,QAEtE;IAEM,cAAc,CAAC,WAAW,EAAE,MAAM,QAExC;IAED,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAEnE;IAED,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAErE;IAED,cAAc,yBAEb;IAED,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAc3B;CACF"}
|
|
@@ -1,36 +1,46 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
3
|
/**
|
|
3
4
|
* A mocked implementation of L1ToL2MessageSource to be used in tests.
|
|
4
5
|
*/ export class MockL1ToL2MessageSource {
|
|
5
6
|
blockNumber;
|
|
6
|
-
|
|
7
|
+
messagesPerCheckpoint;
|
|
7
8
|
constructor(blockNumber){
|
|
8
9
|
this.blockNumber = blockNumber;
|
|
9
|
-
this.
|
|
10
|
+
this.messagesPerCheckpoint = new Map();
|
|
10
11
|
}
|
|
11
|
-
setL1ToL2Messages(
|
|
12
|
-
this.
|
|
12
|
+
setL1ToL2Messages(checkpointNumber, msgs) {
|
|
13
|
+
this.messagesPerCheckpoint.set(checkpointNumber, msgs);
|
|
13
14
|
}
|
|
14
15
|
setBlockNumber(blockNumber) {
|
|
15
16
|
this.blockNumber = blockNumber;
|
|
16
17
|
}
|
|
17
|
-
getL1ToL2Messages(
|
|
18
|
-
return Promise.resolve(this.
|
|
18
|
+
getL1ToL2Messages(checkpointNumber) {
|
|
19
|
+
return Promise.resolve(this.messagesPerCheckpoint.get(checkpointNumber) ?? []);
|
|
19
20
|
}
|
|
20
21
|
getL1ToL2MessageIndex(_l1ToL2Message) {
|
|
21
22
|
throw new Error('Method not implemented.');
|
|
22
23
|
}
|
|
23
24
|
getBlockNumber() {
|
|
24
|
-
return Promise.resolve(this.blockNumber);
|
|
25
|
+
return Promise.resolve(BlockNumber(this.blockNumber));
|
|
25
26
|
}
|
|
26
27
|
getL2Tips() {
|
|
27
28
|
const number = this.blockNumber;
|
|
28
|
-
const
|
|
29
|
-
number,
|
|
29
|
+
const blockId = {
|
|
30
|
+
number: BlockNumber(number),
|
|
30
31
|
hash: new Fr(number).toString()
|
|
31
32
|
};
|
|
33
|
+
const checkpointId = {
|
|
34
|
+
number: CheckpointNumber(number),
|
|
35
|
+
hash: new Fr(number + 1).toString()
|
|
36
|
+
};
|
|
37
|
+
const tip = {
|
|
38
|
+
block: blockId,
|
|
39
|
+
checkpoint: checkpointId
|
|
40
|
+
};
|
|
32
41
|
return Promise.resolve({
|
|
33
|
-
|
|
42
|
+
proposed: blockId,
|
|
43
|
+
checkpointed: tip,
|
|
34
44
|
proven: tip,
|
|
35
45
|
finalized: tip
|
|
36
46
|
});
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { BlockNumber, CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
1
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
3
4
|
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
4
5
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
|
-
import { L2Block, L2BlockHash, type L2BlockSource, type L2Tips,
|
|
6
|
+
import { CheckpointedL2Block, L2Block, L2BlockHash, type L2BlockSource, type L2Tips, type ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
7
|
+
import { Checkpoint, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
6
8
|
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
7
9
|
import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
8
10
|
import { type BlockHeader, TxHash, TxReceipt } from '@aztec/stdlib/tx';
|
|
@@ -14,12 +16,14 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
14
16
|
protected l2Blocks: L2Block[];
|
|
15
17
|
private provenBlockNumber;
|
|
16
18
|
private finalizedBlockNumber;
|
|
19
|
+
private checkpointedBlockNumber;
|
|
17
20
|
private log;
|
|
18
21
|
createBlocks(numBlocks: number): Promise<void>;
|
|
19
22
|
addBlocks(blocks: L2Block[]): void;
|
|
20
23
|
removeBlocks(numBlocks: number): void;
|
|
21
24
|
setProvenBlockNumber(provenBlockNumber: number): void;
|
|
22
25
|
setFinalizedBlockNumber(finalizedBlockNumber: number): void;
|
|
26
|
+
setCheckpointedBlockNumber(checkpointedBlockNumber: number): void;
|
|
23
27
|
/**
|
|
24
28
|
* Method to fetch the rollup contract address at the base-layer.
|
|
25
29
|
* @returns The rollup address.
|
|
@@ -34,29 +38,44 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
34
38
|
* Gets the number of the latest L2 block processed by the block source implementation.
|
|
35
39
|
* @returns In this mock instance, returns the number of L2 blocks that we've mocked.
|
|
36
40
|
*/
|
|
37
|
-
getBlockNumber(): Promise<
|
|
38
|
-
getProvenBlockNumber(): Promise<
|
|
41
|
+
getBlockNumber(): Promise<BlockNumber>;
|
|
42
|
+
getProvenBlockNumber(): Promise<BlockNumber>;
|
|
43
|
+
getCheckpointedL2BlockNumber(): Promise<BlockNumber>;
|
|
44
|
+
getFinalizedL2BlockNumber(): Promise<BlockNumber>;
|
|
45
|
+
getCheckpointedBlock(number: BlockNumber): Promise<CheckpointedL2Block | undefined>;
|
|
46
|
+
getCheckpointedBlocks(from: BlockNumber, limit: number): Promise<CheckpointedL2Block[]>;
|
|
39
47
|
/**
|
|
40
48
|
* Gets an l2 block.
|
|
41
49
|
* @param number - The block number to return (inclusive).
|
|
42
50
|
* @returns The requested L2 block.
|
|
43
51
|
*/
|
|
44
|
-
getBlock(number: number): Promise<L2Block>;
|
|
52
|
+
getBlock(number: number): Promise<L2Block | undefined>;
|
|
53
|
+
/**
|
|
54
|
+
* Gets an L2 block (new format).
|
|
55
|
+
* @param number - The block number to return.
|
|
56
|
+
* @returns The requested L2 block.
|
|
57
|
+
*/
|
|
58
|
+
getL2Block(number: BlockNumber): Promise<L2Block | undefined>;
|
|
45
59
|
/**
|
|
46
60
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
47
61
|
* @param from - Number of the first block to return (inclusive).
|
|
48
62
|
* @param limit - The maximum number of blocks to return.
|
|
49
63
|
* @returns The requested mocked L2 blocks.
|
|
50
64
|
*/
|
|
51
|
-
getBlocks(from: number, limit: number
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
65
|
+
getBlocks(from: number, limit: number): Promise<L2Block[]>;
|
|
66
|
+
getCheckpoints(from: CheckpointNumber, limit: number): Promise<PublishedCheckpoint[]>;
|
|
67
|
+
getCheckpointByArchive(archive: Fr): Promise<Checkpoint | undefined>;
|
|
68
|
+
getCheckpointedBlockByHash(blockHash: Fr): Promise<CheckpointedL2Block | undefined>;
|
|
69
|
+
getCheckpointedBlockByArchive(archive: Fr): Promise<CheckpointedL2Block | undefined>;
|
|
70
|
+
getL2BlockByHash(blockHash: Fr): Promise<L2Block | undefined>;
|
|
71
|
+
getL2BlockByArchive(archive: Fr): Promise<L2Block | undefined>;
|
|
55
72
|
getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined>;
|
|
56
73
|
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
|
|
57
74
|
getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined>;
|
|
58
|
-
|
|
59
|
-
|
|
75
|
+
getCheckpointsForEpoch(epochNumber: EpochNumber): Promise<Checkpoint[]>;
|
|
76
|
+
getCheckpointedBlocksForEpoch(epochNumber: EpochNumber): Promise<CheckpointedL2Block[]>;
|
|
77
|
+
getBlocksForSlot(slotNumber: SlotNumber): Promise<L2Block[]>;
|
|
78
|
+
getCheckpointedBlockHeadersForEpoch(epochNumber: EpochNumber): Promise<BlockHeader[]>;
|
|
60
79
|
/**
|
|
61
80
|
* Gets a tx effect.
|
|
62
81
|
* @param txHash - The hash of the tx corresponding to the tx effect.
|
|
@@ -64,7 +83,7 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
64
83
|
*/
|
|
65
84
|
getTxEffect(txHash: TxHash): Promise<{
|
|
66
85
|
data: import("@aztec/stdlib/tx").TxEffect;
|
|
67
|
-
l2BlockNumber:
|
|
86
|
+
l2BlockNumber: BlockNumber;
|
|
68
87
|
l2BlockHash: L2BlockHash;
|
|
69
88
|
txIndexInBlock: number;
|
|
70
89
|
} | undefined>;
|
|
@@ -75,9 +94,9 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
75
94
|
*/
|
|
76
95
|
getSettledTxReceipt(txHash: TxHash): Promise<TxReceipt | undefined>;
|
|
77
96
|
getL2Tips(): Promise<L2Tips>;
|
|
78
|
-
getL2EpochNumber(): Promise<
|
|
79
|
-
getL2SlotNumber(): Promise<
|
|
80
|
-
isEpochComplete(_epochNumber:
|
|
97
|
+
getL2EpochNumber(): Promise<EpochNumber>;
|
|
98
|
+
getL2SlotNumber(): Promise<SlotNumber>;
|
|
99
|
+
isEpochComplete(_epochNumber: EpochNumber): Promise<boolean>;
|
|
81
100
|
getL1Constants(): Promise<L1RollupConstants>;
|
|
82
101
|
getGenesisValues(): Promise<{
|
|
83
102
|
genesisArchiveRoot: Fr;
|
|
@@ -101,6 +120,6 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
101
120
|
registerContractFunctionSignatures(_signatures: string[]): Promise<void>;
|
|
102
121
|
syncImmediate(): Promise<void>;
|
|
103
122
|
isPendingChainInvalid(): Promise<boolean>;
|
|
104
|
-
getPendingChainValidationStatus(): Promise<
|
|
123
|
+
getPendingChainValidationStatus(): Promise<ValidateCheckpointResult>;
|
|
105
124
|
}
|
|
106
|
-
//# sourceMappingURL=
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMl9ibG9ja19zb3VyY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L21vY2tfbDJfYmxvY2tfc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0QsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLE9BQU8sRUFDUCxXQUFXLEVBQ1gsS0FBSyxhQUFhLEVBQ2xCLEtBQUssTUFBTSxFQUNYLEtBQUssd0JBQXdCLEVBQzlCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBbUIsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ILE9BQU8sRUFBMEIsS0FBSyxpQkFBaUIsRUFBd0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNuSCxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQVksTUFBTSxrQkFBa0IsQ0FBQztBQUNwRyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRDs7R0FFRztBQUNILHFCQUFhLGlCQUFrQixZQUFXLGFBQWEsRUFBRSxrQkFBa0I7SUFDekUsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBTTtJQUVuQyxPQUFPLENBQUMsaUJBQWlCLENBQWE7SUFDdEMsT0FBTyxDQUFDLG9CQUFvQixDQUFhO0lBQ3pDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBYTtJQUU1QyxPQUFPLENBQUMsR0FBRyxDQUFpRDtJQUUvQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0saUJBUTFDO0lBRU0sU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFHakM7SUFFTSxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sUUFHcEM7SUFFTSxvQkFBb0IsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLFFBRXBEO0lBRU0sdUJBQXVCLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxRQUsxRDtJQUVNLDBCQUEwQixDQUFDLHVCQUF1QixFQUFFLE1BQU0sUUFFaEU7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBRXRDO0lBRUQ7OztPQUdHO0lBQ0gsa0JBQWtCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUV4QztJQUVEOzs7T0FHRztJQUNJLGNBQWMseUJBRXBCO0lBRU0sb0JBQW9CLHlCQUUxQjtJQUVNLDRCQUE0Qix5QkFFbEM7SUFFTSx5QkFBeUIseUJBRS9CO0lBRU0sb0JBQW9CLENBQUMsTUFBTSxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLENBZXpGO0lBRVkscUJBQXFCLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBYW5HO0lBRUQ7Ozs7T0FJRztJQUNJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLENBRzVEO0lBRUQ7Ozs7T0FJRztJQUNJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLENBR25FO0lBRUQ7Ozs7O09BS0c7SUFDSSxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUVoRTtJQUVNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0NBZTFEO0lBRVksc0JBQXNCLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQVVoRjtJQUVZLDBCQUEwQixDQUFDLFNBQVMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxDQWEvRjtJQUVNLDZCQUE2QixDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxDQWExRjtJQUVZLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FRekU7SUFFTSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLENBR3BFO0lBRVksb0JBQW9CLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQVFqRjtJQUVNLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsQ0FHNUU7SUFFRCxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsQ0FFMUU7SUFFRCxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQWdCdEU7SUFFRCw2QkFBNkIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBaUJ0RjtJQUVELGdCQUFnQixDQUFDLFVBQVUsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBRzNEO0lBRUssbUNBQW1DLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FHMUY7SUFFRDs7OztPQUlHO0lBQ1UsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNOzs7OzttQkFjdEM7SUFFRDs7OztPQUlHO0lBQ1UsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQWtCL0U7SUFFSyxTQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQXlDakM7SUFFRCxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLENBRXZDO0lBRUQsZUFBZSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FFckM7SUFFRCxlQUFlLENBQUMsWUFBWSxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRTNEO0lBRUQsY0FBYyxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUUzQztJQUVELGdCQUFnQixJQUFJLE9BQU8sQ0FBQztRQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQTtLQUFFLENBQUMsQ0FFdEQ7SUFFRCxjQUFjLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUVoQztJQUVEOzs7T0FHRztJQUNJLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBRzVCO0lBRUQ7OztPQUdHO0lBQ0ksSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FHM0I7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsQ0FFbEU7SUFFRCxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBRXREO0lBRUQsV0FBVyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQywyQkFBMkIsR0FBRyxTQUFTLENBQUMsQ0FFekc7SUFFRCxtQkFBbUIsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FFbkM7SUFFRCxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUVyRztJQUVELGtDQUFrQyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBRXZFO0lBRUQsYUFBYSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFN0I7SUFFRCxxQkFBcUIsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBRXhDO0lBRUQsK0JBQStCLElBQUksT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBRW5FO0NBQ0YifQ==
|
|
@@ -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,23 +1,28 @@
|
|
|
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, 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
|
-
import { L2Block, L2BlockHash
|
|
8
|
+
import { CheckpointedL2Block, L2Block, L2BlockHash } from '@aztec/stdlib/block';
|
|
9
|
+
import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
8
10
|
import { EmptyL1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
9
|
-
import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
11
|
+
import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
10
12
|
/**
|
|
11
13
|
* A mocked implementation of L2BlockSource to be used in tests.
|
|
12
14
|
*/ export class MockL2BlockSource {
|
|
13
15
|
l2Blocks = [];
|
|
14
16
|
provenBlockNumber = 0;
|
|
15
17
|
finalizedBlockNumber = 0;
|
|
18
|
+
checkpointedBlockNumber = 0;
|
|
16
19
|
log = createLogger('archiver:mock_l2_block_source');
|
|
17
20
|
async createBlocks(numBlocks) {
|
|
18
21
|
for(let i = 0; i < numBlocks; i++){
|
|
19
22
|
const blockNum = this.l2Blocks.length + 1;
|
|
20
|
-
const block = await L2Block.random(blockNum)
|
|
23
|
+
const block = await L2Block.random(BlockNumber(blockNum), {
|
|
24
|
+
slotNumber: SlotNumber(blockNum)
|
|
25
|
+
});
|
|
21
26
|
this.l2Blocks.push(block);
|
|
22
27
|
}
|
|
23
28
|
this.log.verbose(`Created ${numBlocks} blocks in the mock L2 block source`);
|
|
@@ -39,6 +44,9 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
39
44
|
}
|
|
40
45
|
this.finalizedBlockNumber = finalizedBlockNumber;
|
|
41
46
|
}
|
|
47
|
+
setCheckpointedBlockNumber(checkpointedBlockNumber) {
|
|
48
|
+
this.checkpointedBlockNumber = checkpointedBlockNumber;
|
|
49
|
+
}
|
|
42
50
|
/**
|
|
43
51
|
* Method to fetch the rollup contract address at the base-layer.
|
|
44
52
|
* @returns The rollup address.
|
|
@@ -55,100 +63,194 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
55
63
|
* Gets the number of the latest L2 block processed by the block source implementation.
|
|
56
64
|
* @returns In this mock instance, returns the number of L2 blocks that we've mocked.
|
|
57
65
|
*/ getBlockNumber() {
|
|
58
|
-
return Promise.resolve(this.l2Blocks.length);
|
|
66
|
+
return Promise.resolve(BlockNumber(this.l2Blocks.length));
|
|
59
67
|
}
|
|
60
68
|
getProvenBlockNumber() {
|
|
61
|
-
return Promise.resolve(this.provenBlockNumber);
|
|
69
|
+
return Promise.resolve(BlockNumber(this.provenBlockNumber));
|
|
70
|
+
}
|
|
71
|
+
getCheckpointedL2BlockNumber() {
|
|
72
|
+
return Promise.resolve(BlockNumber(this.checkpointedBlockNumber));
|
|
73
|
+
}
|
|
74
|
+
getFinalizedL2BlockNumber() {
|
|
75
|
+
return Promise.resolve(BlockNumber(this.finalizedBlockNumber));
|
|
76
|
+
}
|
|
77
|
+
getCheckpointedBlock(number) {
|
|
78
|
+
if (number > this.checkpointedBlockNumber) {
|
|
79
|
+
return Promise.resolve(undefined);
|
|
80
|
+
}
|
|
81
|
+
const block = this.l2Blocks[number - 1];
|
|
82
|
+
if (!block) {
|
|
83
|
+
return Promise.resolve(undefined);
|
|
84
|
+
}
|
|
85
|
+
const checkpointedBlock = new CheckpointedL2Block(CheckpointNumber.fromBlockNumber(number), block, new L1PublishedData(BigInt(number), BigInt(number), `0x${number.toString(16).padStart(64, '0')}`), []);
|
|
86
|
+
return Promise.resolve(checkpointedBlock);
|
|
87
|
+
}
|
|
88
|
+
async getCheckpointedBlocks(from, limit) {
|
|
89
|
+
const result = [];
|
|
90
|
+
for(let i = 0; i < limit; i++){
|
|
91
|
+
const blockNum = from + i;
|
|
92
|
+
if (blockNum > this.checkpointedBlockNumber) {
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
const block = await this.getCheckpointedBlock(BlockNumber(blockNum));
|
|
96
|
+
if (block) {
|
|
97
|
+
result.push(block);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return result;
|
|
62
101
|
}
|
|
63
102
|
/**
|
|
64
103
|
* Gets an l2 block.
|
|
65
104
|
* @param number - The block number to return (inclusive).
|
|
66
105
|
* @returns The requested L2 block.
|
|
67
106
|
*/ getBlock(number) {
|
|
68
|
-
|
|
107
|
+
const block = this.l2Blocks[number - 1];
|
|
108
|
+
return Promise.resolve(block);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Gets an L2 block (new format).
|
|
112
|
+
* @param number - The block number to return.
|
|
113
|
+
* @returns The requested L2 block.
|
|
114
|
+
*/ getL2Block(number) {
|
|
115
|
+
const block = this.l2Blocks[number - 1];
|
|
116
|
+
return Promise.resolve(block);
|
|
69
117
|
}
|
|
70
118
|
/**
|
|
71
119
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
72
120
|
* @param from - Number of the first block to return (inclusive).
|
|
73
121
|
* @param limit - The maximum number of blocks to return.
|
|
74
122
|
* @returns The requested mocked L2 blocks.
|
|
75
|
-
*/ getBlocks(from, limit
|
|
76
|
-
return Promise.resolve(this.l2Blocks.slice(from - 1, from - 1 + limit)
|
|
123
|
+
*/ getBlocks(from, limit) {
|
|
124
|
+
return Promise.resolve(this.l2Blocks.slice(from - 1, from - 1 + limit));
|
|
125
|
+
}
|
|
126
|
+
getCheckpoints(from, limit) {
|
|
127
|
+
// TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
|
|
128
|
+
const blocks = this.l2Blocks.slice(from - 1, from - 1 + limit);
|
|
129
|
+
return Promise.all(blocks.map(async (block)=>{
|
|
130
|
+
// Create a checkpoint from the block - manually construct since L2Block doesn't have toCheckpoint()
|
|
131
|
+
const checkpoint = await Checkpoint.random(block.checkpointNumber, {
|
|
132
|
+
numBlocks: 1
|
|
133
|
+
});
|
|
134
|
+
checkpoint.blocks = [
|
|
135
|
+
block
|
|
136
|
+
];
|
|
137
|
+
return new PublishedCheckpoint(checkpoint, new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()), []);
|
|
138
|
+
}));
|
|
77
139
|
}
|
|
78
|
-
async
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
140
|
+
async getCheckpointByArchive(archive) {
|
|
141
|
+
// TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
|
|
142
|
+
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
143
|
+
if (!block) {
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
// Create a checkpoint from the block - manually construct since L2Block doesn't have toCheckpoint()
|
|
147
|
+
const checkpoint = await Checkpoint.random(block.checkpointNumber, {
|
|
148
|
+
numBlocks: 1
|
|
149
|
+
});
|
|
150
|
+
checkpoint.blocks = [
|
|
151
|
+
block
|
|
152
|
+
];
|
|
153
|
+
return checkpoint;
|
|
89
154
|
}
|
|
90
|
-
async
|
|
155
|
+
async getCheckpointedBlockByHash(blockHash) {
|
|
91
156
|
for (const block of this.l2Blocks){
|
|
92
157
|
const hash = await block.hash();
|
|
93
158
|
if (hash.equals(blockHash)) {
|
|
94
|
-
return
|
|
159
|
+
return CheckpointedL2Block.fromFields({
|
|
160
|
+
checkpointNumber: CheckpointNumber.fromBlockNumber(block.number),
|
|
95
161
|
block,
|
|
96
|
-
l1:
|
|
97
|
-
blockNumber: BigInt(block.number),
|
|
98
|
-
blockHash: Buffer32.random().toString(),
|
|
99
|
-
timestamp: BigInt(block.number)
|
|
100
|
-
},
|
|
162
|
+
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
101
163
|
attestations: []
|
|
102
164
|
});
|
|
103
165
|
}
|
|
104
166
|
}
|
|
105
167
|
return undefined;
|
|
106
168
|
}
|
|
107
|
-
|
|
169
|
+
getCheckpointedBlockByArchive(archive) {
|
|
108
170
|
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
109
171
|
if (!block) {
|
|
110
172
|
return Promise.resolve(undefined);
|
|
111
173
|
}
|
|
112
|
-
return Promise.resolve(
|
|
174
|
+
return Promise.resolve(CheckpointedL2Block.fromFields({
|
|
175
|
+
checkpointNumber: CheckpointNumber.fromBlockNumber(block.number),
|
|
113
176
|
block,
|
|
114
|
-
l1:
|
|
115
|
-
blockNumber: BigInt(block.number),
|
|
116
|
-
blockHash: Buffer32.random().toString(),
|
|
117
|
-
timestamp: BigInt(block.number)
|
|
118
|
-
},
|
|
177
|
+
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
119
178
|
attestations: []
|
|
120
179
|
}));
|
|
121
180
|
}
|
|
181
|
+
async getL2BlockByHash(blockHash) {
|
|
182
|
+
for (const block of this.l2Blocks){
|
|
183
|
+
const hash = await block.hash();
|
|
184
|
+
if (hash.equals(blockHash)) {
|
|
185
|
+
return block;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
getL2BlockByArchive(archive) {
|
|
191
|
+
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
192
|
+
return Promise.resolve(block);
|
|
193
|
+
}
|
|
122
194
|
async getBlockHeaderByHash(blockHash) {
|
|
123
195
|
for (const block of this.l2Blocks){
|
|
124
196
|
const hash = await block.hash();
|
|
125
197
|
if (hash.equals(blockHash)) {
|
|
126
|
-
return block.
|
|
198
|
+
return block.header;
|
|
127
199
|
}
|
|
128
200
|
}
|
|
129
201
|
return undefined;
|
|
130
202
|
}
|
|
131
203
|
getBlockHeaderByArchive(archive) {
|
|
132
204
|
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
133
|
-
return Promise.resolve(block?.
|
|
205
|
+
return Promise.resolve(block?.header);
|
|
134
206
|
}
|
|
135
207
|
getBlockHeader(number) {
|
|
136
|
-
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.
|
|
208
|
+
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.header);
|
|
137
209
|
}
|
|
138
|
-
|
|
210
|
+
getCheckpointsForEpoch(epochNumber) {
|
|
211
|
+
// TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
|
|
139
212
|
const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
|
|
140
213
|
const [start, end] = getSlotRangeForEpoch(epochNumber, {
|
|
141
214
|
epochDuration
|
|
142
215
|
});
|
|
143
216
|
const blocks = this.l2Blocks.filter((b)=>{
|
|
144
|
-
const slot = b.header.globalVariables.slotNumber
|
|
217
|
+
const slot = b.header.globalVariables.slotNumber;
|
|
145
218
|
return slot >= start && slot <= end;
|
|
146
219
|
});
|
|
220
|
+
// Create checkpoints from blocks - manually construct since L2Block doesn't have toCheckpoint()
|
|
221
|
+
return Promise.all(blocks.map(async (block)=>{
|
|
222
|
+
const checkpoint = await Checkpoint.random(block.checkpointNumber, {
|
|
223
|
+
numBlocks: 1
|
|
224
|
+
});
|
|
225
|
+
checkpoint.blocks = [
|
|
226
|
+
block
|
|
227
|
+
];
|
|
228
|
+
return checkpoint;
|
|
229
|
+
}));
|
|
230
|
+
}
|
|
231
|
+
getCheckpointedBlocksForEpoch(epochNumber) {
|
|
232
|
+
const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
|
|
233
|
+
const [start, end] = getSlotRangeForEpoch(epochNumber, {
|
|
234
|
+
epochDuration
|
|
235
|
+
});
|
|
236
|
+
const blocks = this.l2Blocks.filter((b)=>{
|
|
237
|
+
const slot = b.header.globalVariables.slotNumber;
|
|
238
|
+
return slot >= start && slot <= end;
|
|
239
|
+
});
|
|
240
|
+
return Promise.resolve(blocks.map((block)=>CheckpointedL2Block.fromFields({
|
|
241
|
+
checkpointNumber: CheckpointNumber.fromBlockNumber(block.number),
|
|
242
|
+
block,
|
|
243
|
+
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
244
|
+
attestations: []
|
|
245
|
+
})));
|
|
246
|
+
}
|
|
247
|
+
getBlocksForSlot(slotNumber) {
|
|
248
|
+
const blocks = this.l2Blocks.filter((b)=>b.header.globalVariables.slotNumber === slotNumber);
|
|
147
249
|
return Promise.resolve(blocks);
|
|
148
250
|
}
|
|
149
|
-
async
|
|
150
|
-
const
|
|
151
|
-
return
|
|
251
|
+
async getCheckpointedBlockHeadersForEpoch(epochNumber) {
|
|
252
|
+
const checkpointedBlocks = await this.getCheckpointedBlocksForEpoch(epochNumber);
|
|
253
|
+
return checkpointedBlocks.map((b)=>b.block.header);
|
|
152
254
|
}
|
|
153
255
|
/**
|
|
154
256
|
* Gets a tx effect.
|
|
@@ -178,34 +280,52 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
178
280
|
for (const block of this.l2Blocks){
|
|
179
281
|
for (const txEffect of block.body.txEffects){
|
|
180
282
|
if (txEffect.txHash.equals(txHash)) {
|
|
181
|
-
|
|
283
|
+
// In mock, assume all txs are checkpointed with successful execution
|
|
284
|
+
return new TxReceipt(txHash, TxStatus.CHECKPOINTED, TxExecutionResult.SUCCESS, undefined, txEffect.transactionFee.toBigInt(), L2BlockHash.fromField(await block.hash()), block.number);
|
|
182
285
|
}
|
|
183
286
|
}
|
|
184
287
|
}
|
|
185
288
|
return undefined;
|
|
186
289
|
}
|
|
187
290
|
async getL2Tips() {
|
|
188
|
-
const [latest, proven, finalized] = [
|
|
291
|
+
const [latest, proven, finalized, checkpointed] = [
|
|
189
292
|
await this.getBlockNumber(),
|
|
190
293
|
await this.getProvenBlockNumber(),
|
|
191
|
-
this.finalizedBlockNumber
|
|
294
|
+
this.finalizedBlockNumber,
|
|
295
|
+
this.checkpointedBlockNumber
|
|
192
296
|
];
|
|
193
297
|
const latestBlock = this.l2Blocks[latest - 1];
|
|
194
298
|
const provenBlock = this.l2Blocks[proven - 1];
|
|
195
299
|
const finalizedBlock = this.l2Blocks[finalized - 1];
|
|
300
|
+
const checkpointedBlock = this.l2Blocks[checkpointed - 1];
|
|
301
|
+
const latestBlockId = {
|
|
302
|
+
number: BlockNumber(latest),
|
|
303
|
+
hash: (await latestBlock?.hash())?.toString()
|
|
304
|
+
};
|
|
305
|
+
const provenBlockId = {
|
|
306
|
+
number: BlockNumber(proven),
|
|
307
|
+
hash: (await provenBlock?.hash())?.toString()
|
|
308
|
+
};
|
|
309
|
+
const finalizedBlockId = {
|
|
310
|
+
number: BlockNumber(finalized),
|
|
311
|
+
hash: (await finalizedBlock?.hash())?.toString()
|
|
312
|
+
};
|
|
313
|
+
const checkpointedBlockId = {
|
|
314
|
+
number: BlockNumber(checkpointed),
|
|
315
|
+
hash: (await checkpointedBlock?.hash())?.toString()
|
|
316
|
+
};
|
|
317
|
+
const makeTipId = (blockId)=>({
|
|
318
|
+
block: blockId,
|
|
319
|
+
checkpoint: {
|
|
320
|
+
number: CheckpointNumber.fromBlockNumber(blockId.number),
|
|
321
|
+
hash: blockId.hash
|
|
322
|
+
}
|
|
323
|
+
});
|
|
196
324
|
return {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
proven: {
|
|
202
|
-
number: proven,
|
|
203
|
-
hash: (await provenBlock?.hash())?.toString()
|
|
204
|
-
},
|
|
205
|
-
finalized: {
|
|
206
|
-
number: finalized,
|
|
207
|
-
hash: (await finalizedBlock?.hash())?.toString()
|
|
208
|
-
}
|
|
325
|
+
proposed: latestBlockId,
|
|
326
|
+
checkpointed: makeTipId(checkpointedBlockId),
|
|
327
|
+
proven: makeTipId(provenBlockId),
|
|
328
|
+
finalized: makeTipId(finalizedBlockId)
|
|
209
329
|
};
|
|
210
330
|
}
|
|
211
331
|
getL2EpochNumber() {
|