@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
|
@@ -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 {
|
|
6
|
+
import { CheckpointedL2Block, L2BlockHash, L2BlockNew, 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';
|
|
@@ -11,15 +13,17 @@ import type { UInt64 } from '@aztec/stdlib/types';
|
|
|
11
13
|
* A mocked implementation of L2BlockSource to be used in tests.
|
|
12
14
|
*/
|
|
13
15
|
export declare class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
14
|
-
protected l2Blocks:
|
|
16
|
+
protected l2Blocks: L2BlockNew[];
|
|
15
17
|
private provenBlockNumber;
|
|
16
18
|
private finalizedBlockNumber;
|
|
19
|
+
private checkpointedBlockNumber;
|
|
17
20
|
private log;
|
|
18
21
|
createBlocks(numBlocks: number): Promise<void>;
|
|
19
|
-
addBlocks(blocks:
|
|
22
|
+
addBlocks(blocks: L2BlockNew[]): 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
|
+
getCheckpointedBlock(number: BlockNumber): Promise<CheckpointedL2Block | undefined>;
|
|
44
|
+
getCheckpointedBlocks(from: BlockNumber, limit: number, _proven?: boolean): Promise<CheckpointedL2Block[]>;
|
|
39
45
|
/**
|
|
40
46
|
* Gets an l2 block.
|
|
41
47
|
* @param number - The block number to return (inclusive).
|
|
42
48
|
* @returns The requested L2 block.
|
|
43
49
|
*/
|
|
44
|
-
getBlock(number: number): Promise<
|
|
50
|
+
getBlock(number: number): Promise<L2BlockNew | undefined>;
|
|
51
|
+
/**
|
|
52
|
+
* Gets an L2 block (new format).
|
|
53
|
+
* @param number - The block number to return.
|
|
54
|
+
* @returns The requested L2 block.
|
|
55
|
+
*/
|
|
56
|
+
getL2BlockNew(number: BlockNumber): Promise<L2BlockNew | undefined>;
|
|
45
57
|
/**
|
|
46
58
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
47
59
|
* @param from - Number of the first block to return (inclusive).
|
|
48
60
|
* @param limit - The maximum number of blocks to return.
|
|
49
61
|
* @returns The requested mocked L2 blocks.
|
|
50
62
|
*/
|
|
51
|
-
getBlocks(from: number, limit: number, proven?: boolean): Promise<
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
63
|
+
getBlocks(from: number, limit: number, proven?: boolean): Promise<L2BlockNew[]>;
|
|
64
|
+
getPublishedCheckpoints(from: CheckpointNumber, limit: number): Promise<PublishedCheckpoint[]>;
|
|
65
|
+
getCheckpointByArchive(archive: Fr): Promise<Checkpoint | undefined>;
|
|
66
|
+
getPublishedBlocks(from: number, limit: number, proven?: boolean): Promise<CheckpointedL2Block[]>;
|
|
67
|
+
getL2BlocksNew(from: BlockNumber, limit: number, proven?: boolean): Promise<L2BlockNew[]>;
|
|
68
|
+
getPublishedBlockByHash(blockHash: Fr): Promise<CheckpointedL2Block | undefined>;
|
|
69
|
+
getPublishedBlockByArchive(archive: Fr): Promise<CheckpointedL2Block | undefined>;
|
|
70
|
+
getL2BlockNewByHash(blockHash: Fr): Promise<L2BlockNew | undefined>;
|
|
71
|
+
getL2BlockNewByArchive(archive: Fr): Promise<L2BlockNew | 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
|
+
getBlocksForEpoch(epochNumber: EpochNumber): Promise<L2BlockNew[]>;
|
|
77
|
+
getBlocksForSlot(slotNumber: SlotNumber): Promise<L2BlockNew[]>;
|
|
78
|
+
getBlockHeadersForEpoch(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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMl9ibG9ja19zb3VyY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L21vY2tfbDJfYmxvY2tfc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0QsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxVQUFVLEVBQ1YsS0FBSyxhQUFhLEVBQ2xCLEtBQUssTUFBTSxFQUNYLEtBQUssd0JBQXdCLEVBQzlCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBbUIsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ILE9BQU8sRUFBMEIsS0FBSyxpQkFBaUIsRUFBd0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNuSCxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBWSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pGLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxEOztHQUVHO0FBQ0gscUJBQWEsaUJBQWtCLFlBQVcsYUFBYSxFQUFFLGtCQUFrQjtJQUN6RSxTQUFTLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFNO0lBRXRDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBYTtJQUN0QyxPQUFPLENBQUMsb0JBQW9CLENBQWE7SUFDekMsT0FBTyxDQUFDLHVCQUF1QixDQUFhO0lBRTVDLE9BQU8sQ0FBQyxHQUFHLENBQWlEO0lBRS9DLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxpQkFRMUM7SUFFTSxTQUFTLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUdwQztJQUVNLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxRQUdwQztJQUVNLG9CQUFvQixDQUFDLGlCQUFpQixFQUFFLE1BQU0sUUFFcEQ7SUFFTSx1QkFBdUIsQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLFFBSzFEO0lBRU0sMEJBQTBCLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxRQUVoRTtJQUVEOzs7T0FHRztJQUNILGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FFdEM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBRXhDO0lBRUQ7OztPQUdHO0lBQ0ksY0FBYyx5QkFFcEI7SUFFTSxvQkFBb0IseUJBRTFCO0lBRU0sb0JBQW9CLENBQUMsTUFBTSxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLENBZXpGO0lBRVkscUJBQXFCLENBQ2hDLElBQUksRUFBRSxXQUFXLEVBQ2pCLEtBQUssRUFBRSxNQUFNLEVBQ2IsT0FBTyxDQUFDLEVBQUUsT0FBTyxHQUNoQixPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQWFoQztJQUVEOzs7O09BSUc7SUFDSSxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUcvRDtJQUVEOzs7O09BSUc7SUFDSSxhQUFhLENBQUMsTUFBTSxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUd6RTtJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBTXJGO0lBRU0sdUJBQXVCLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxNQUFNLGtDQWVuRTtJQUVZLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FVaEY7SUFFTSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBY3ZHO0lBRUQsY0FBYyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBR3hGO0lBRVksdUJBQXVCLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLENBYTVGO0lBRU0sMEJBQTBCLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLENBYXZGO0lBRVksbUJBQW1CLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQVEvRTtJQUVNLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FHMUU7SUFFWSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBUWpGO0lBRU0sdUJBQXVCLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQUc1RTtJQUVELGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQUUxRTtJQUVELHNCQUFzQixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBZ0J0RTtJQUVELGlCQUFpQixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBUWpFO0lBRUQsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FHOUQ7SUFFSyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUc5RTtJQUVEOzs7O09BSUc7SUFDVSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU07Ozs7O21CQWN0QztJQUVEOzs7O09BSUc7SUFDVSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBZ0IvRTtJQUVLLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBeUNqQztJQUVELGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FFdkM7SUFFRCxlQUFlLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUVyQztJQUVELGVBQWUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FFM0Q7SUFFRCxjQUFjLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBRTNDO0lBRUQsZ0JBQWdCLElBQUksT0FBTyxDQUFDO1FBQUUsa0JBQWtCLEVBQUUsRUFBRSxDQUFBO0tBQUUsQ0FBQyxDQUV0RDtJQUVELGNBQWMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRWhDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FHNUI7SUFFRDs7O09BR0c7SUFDSSxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUczQjtJQUVELGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxDQUVsRTtJQUVELHFCQUFxQixDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FFdEQ7SUFFRCxXQUFXLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixHQUFHLFNBQVMsQ0FBQyxDQUV6RztJQUVELG1CQUFtQixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUVuQztJQUVELG9CQUFvQixDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBRXJHO0lBRUQsa0NBQWtDLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFdkU7SUFFRCxhQUFhLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUU3QjtJQUVELHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FFeEM7SUFFRCwrQkFBK0IsSUFBSSxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FFbkU7Q0FDRiJ9
|
|
@@ -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,10 +1,12 @@
|
|
|
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 {
|
|
8
|
+
import { CheckpointedL2Block, L2BlockHash, L2BlockNew } from '@aztec/stdlib/block';
|
|
9
|
+
import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
8
10
|
import { EmptyL1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
9
11
|
import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
10
12
|
/**
|
|
@@ -13,11 +15,14 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
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
|
|
23
|
+
const block = await L2BlockNew.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,17 +63,51 @@ 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
|
+
getCheckpointedBlock(number) {
|
|
72
|
+
if (number > this.checkpointedBlockNumber) {
|
|
73
|
+
return Promise.resolve(undefined);
|
|
74
|
+
}
|
|
75
|
+
const block = this.l2Blocks[number - 1];
|
|
76
|
+
if (!block) {
|
|
77
|
+
return Promise.resolve(undefined);
|
|
78
|
+
}
|
|
79
|
+
const checkpointedBlock = new CheckpointedL2Block(CheckpointNumber(number), block, new L1PublishedData(BigInt(number), BigInt(number), `0x${number.toString(16).padStart(64, '0')}`), []);
|
|
80
|
+
return Promise.resolve(checkpointedBlock);
|
|
81
|
+
}
|
|
82
|
+
async getCheckpointedBlocks(from, limit, _proven) {
|
|
83
|
+
const result = [];
|
|
84
|
+
for(let i = 0; i < limit; i++){
|
|
85
|
+
const blockNum = from + i;
|
|
86
|
+
if (blockNum > this.checkpointedBlockNumber) {
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
const block = await this.getCheckpointedBlock(BlockNumber(blockNum));
|
|
90
|
+
if (block) {
|
|
91
|
+
result.push(block);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
62
95
|
}
|
|
63
96
|
/**
|
|
64
97
|
* Gets an l2 block.
|
|
65
98
|
* @param number - The block number to return (inclusive).
|
|
66
99
|
* @returns The requested L2 block.
|
|
67
100
|
*/ getBlock(number) {
|
|
68
|
-
|
|
101
|
+
const block = this.l2Blocks[number - 1];
|
|
102
|
+
return Promise.resolve(block);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Gets an L2 block (new format).
|
|
106
|
+
* @param number - The block number to return.
|
|
107
|
+
* @returns The requested L2 block.
|
|
108
|
+
*/ getL2BlockNew(number) {
|
|
109
|
+
const block = this.l2Blocks[number - 1];
|
|
110
|
+
return Promise.resolve(block);
|
|
69
111
|
}
|
|
70
112
|
/**
|
|
71
113
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
@@ -75,29 +117,56 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
75
117
|
*/ getBlocks(from, limit, proven) {
|
|
76
118
|
return Promise.resolve(this.l2Blocks.slice(from - 1, from - 1 + limit).filter((b)=>!proven || this.provenBlockNumber === undefined || b.number <= this.provenBlockNumber));
|
|
77
119
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
120
|
+
getPublishedCheckpoints(from, limit) {
|
|
121
|
+
// TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
|
|
122
|
+
const blocks = this.l2Blocks.slice(from - 1, from - 1 + limit);
|
|
123
|
+
return Promise.all(blocks.map(async (block)=>{
|
|
124
|
+
// Create a checkpoint from the block - manually construct since L2BlockNew doesn't have toCheckpoint()
|
|
125
|
+
const checkpoint = await Checkpoint.random(block.checkpointNumber, {
|
|
126
|
+
numBlocks: 1
|
|
127
|
+
});
|
|
128
|
+
checkpoint.blocks = [
|
|
129
|
+
block
|
|
130
|
+
];
|
|
131
|
+
return new PublishedCheckpoint(checkpoint, new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()), []);
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
async getCheckpointByArchive(archive) {
|
|
135
|
+
// TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
|
|
136
|
+
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
137
|
+
if (!block) {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
// Create a checkpoint from the block - manually construct since L2BlockNew doesn't have toCheckpoint()
|
|
141
|
+
const checkpoint = await Checkpoint.random(block.checkpointNumber, {
|
|
142
|
+
numBlocks: 1
|
|
143
|
+
});
|
|
144
|
+
checkpoint.blocks = [
|
|
145
|
+
block
|
|
146
|
+
];
|
|
147
|
+
return checkpoint;
|
|
148
|
+
}
|
|
149
|
+
getPublishedBlocks(from, limit, proven) {
|
|
150
|
+
const blocks = this.l2Blocks.slice(from - 1, from - 1 + limit).filter((b)=>!proven || this.provenBlockNumber === undefined || b.number <= this.provenBlockNumber);
|
|
151
|
+
return Promise.resolve(blocks.map((block)=>CheckpointedL2Block.fromFields({
|
|
152
|
+
checkpointNumber: CheckpointNumber(block.number),
|
|
81
153
|
block,
|
|
82
|
-
l1:
|
|
83
|
-
blockNumber: BigInt(block.number),
|
|
84
|
-
blockHash: Buffer32.random().toString(),
|
|
85
|
-
timestamp: BigInt(block.number)
|
|
86
|
-
},
|
|
154
|
+
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
87
155
|
attestations: []
|
|
88
|
-
}));
|
|
156
|
+
})));
|
|
157
|
+
}
|
|
158
|
+
getL2BlocksNew(from, limit, proven) {
|
|
159
|
+
// getBlocks already returns L2BlockNew[], so just return directly
|
|
160
|
+
return this.getBlocks(from, limit, proven);
|
|
89
161
|
}
|
|
90
162
|
async getPublishedBlockByHash(blockHash) {
|
|
91
163
|
for (const block of this.l2Blocks){
|
|
92
164
|
const hash = await block.hash();
|
|
93
165
|
if (hash.equals(blockHash)) {
|
|
94
|
-
return
|
|
166
|
+
return CheckpointedL2Block.fromFields({
|
|
167
|
+
checkpointNumber: CheckpointNumber(block.number),
|
|
95
168
|
block,
|
|
96
|
-
l1:
|
|
97
|
-
blockNumber: BigInt(block.number),
|
|
98
|
-
blockHash: Buffer32.random().toString(),
|
|
99
|
-
timestamp: BigInt(block.number)
|
|
100
|
-
},
|
|
169
|
+
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
101
170
|
attestations: []
|
|
102
171
|
});
|
|
103
172
|
}
|
|
@@ -109,31 +178,62 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
109
178
|
if (!block) {
|
|
110
179
|
return Promise.resolve(undefined);
|
|
111
180
|
}
|
|
112
|
-
return Promise.resolve(
|
|
181
|
+
return Promise.resolve(CheckpointedL2Block.fromFields({
|
|
182
|
+
checkpointNumber: CheckpointNumber(block.number),
|
|
113
183
|
block,
|
|
114
|
-
l1:
|
|
115
|
-
blockNumber: BigInt(block.number),
|
|
116
|
-
blockHash: Buffer32.random().toString(),
|
|
117
|
-
timestamp: BigInt(block.number)
|
|
118
|
-
},
|
|
184
|
+
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
119
185
|
attestations: []
|
|
120
186
|
}));
|
|
121
187
|
}
|
|
188
|
+
async getL2BlockNewByHash(blockHash) {
|
|
189
|
+
for (const block of this.l2Blocks){
|
|
190
|
+
const hash = await block.hash();
|
|
191
|
+
if (hash.equals(blockHash)) {
|
|
192
|
+
return block;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
getL2BlockNewByArchive(archive) {
|
|
198
|
+
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
199
|
+
return Promise.resolve(block);
|
|
200
|
+
}
|
|
122
201
|
async getBlockHeaderByHash(blockHash) {
|
|
123
202
|
for (const block of this.l2Blocks){
|
|
124
203
|
const hash = await block.hash();
|
|
125
204
|
if (hash.equals(blockHash)) {
|
|
126
|
-
return block.
|
|
205
|
+
return block.header;
|
|
127
206
|
}
|
|
128
207
|
}
|
|
129
208
|
return undefined;
|
|
130
209
|
}
|
|
131
210
|
getBlockHeaderByArchive(archive) {
|
|
132
211
|
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
133
|
-
return Promise.resolve(block?.
|
|
212
|
+
return Promise.resolve(block?.header);
|
|
134
213
|
}
|
|
135
214
|
getBlockHeader(number) {
|
|
136
|
-
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.
|
|
215
|
+
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.header);
|
|
216
|
+
}
|
|
217
|
+
getCheckpointsForEpoch(epochNumber) {
|
|
218
|
+
// TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
|
|
219
|
+
const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
|
|
220
|
+
const [start, end] = getSlotRangeForEpoch(epochNumber, {
|
|
221
|
+
epochDuration
|
|
222
|
+
});
|
|
223
|
+
const blocks = this.l2Blocks.filter((b)=>{
|
|
224
|
+
const slot = b.header.globalVariables.slotNumber;
|
|
225
|
+
return slot >= start && slot <= end;
|
|
226
|
+
});
|
|
227
|
+
// Create checkpoints from blocks - manually construct since L2BlockNew doesn't have toCheckpoint()
|
|
228
|
+
return Promise.all(blocks.map(async (block)=>{
|
|
229
|
+
const checkpoint = await Checkpoint.random(block.checkpointNumber, {
|
|
230
|
+
numBlocks: 1
|
|
231
|
+
});
|
|
232
|
+
checkpoint.blocks = [
|
|
233
|
+
block
|
|
234
|
+
];
|
|
235
|
+
return checkpoint;
|
|
236
|
+
}));
|
|
137
237
|
}
|
|
138
238
|
getBlocksForEpoch(epochNumber) {
|
|
139
239
|
const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
|
|
@@ -141,14 +241,18 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
141
241
|
epochDuration
|
|
142
242
|
});
|
|
143
243
|
const blocks = this.l2Blocks.filter((b)=>{
|
|
144
|
-
const slot = b.header.globalVariables.slotNumber
|
|
244
|
+
const slot = b.header.globalVariables.slotNumber;
|
|
145
245
|
return slot >= start && slot <= end;
|
|
146
246
|
});
|
|
147
247
|
return Promise.resolve(blocks);
|
|
148
248
|
}
|
|
249
|
+
getBlocksForSlot(slotNumber) {
|
|
250
|
+
const blocks = this.l2Blocks.filter((b)=>b.header.globalVariables.slotNumber === slotNumber);
|
|
251
|
+
return Promise.resolve(blocks);
|
|
252
|
+
}
|
|
149
253
|
async getBlockHeadersForEpoch(epochNumber) {
|
|
150
254
|
const blocks = await this.getBlocksForEpoch(epochNumber);
|
|
151
|
-
return blocks.map((b)=>b.
|
|
255
|
+
return blocks.map((b)=>b.header);
|
|
152
256
|
}
|
|
153
257
|
/**
|
|
154
258
|
* Gets a tx effect.
|
|
@@ -185,27 +289,44 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
185
289
|
return undefined;
|
|
186
290
|
}
|
|
187
291
|
async getL2Tips() {
|
|
188
|
-
const [latest, proven, finalized] = [
|
|
292
|
+
const [latest, proven, finalized, checkpointed] = [
|
|
189
293
|
await this.getBlockNumber(),
|
|
190
294
|
await this.getProvenBlockNumber(),
|
|
191
|
-
this.finalizedBlockNumber
|
|
295
|
+
this.finalizedBlockNumber,
|
|
296
|
+
this.checkpointedBlockNumber
|
|
192
297
|
];
|
|
193
298
|
const latestBlock = this.l2Blocks[latest - 1];
|
|
194
299
|
const provenBlock = this.l2Blocks[proven - 1];
|
|
195
300
|
const finalizedBlock = this.l2Blocks[finalized - 1];
|
|
301
|
+
const checkpointedBlock = this.l2Blocks[checkpointed - 1];
|
|
302
|
+
const latestBlockId = {
|
|
303
|
+
number: BlockNumber(latest),
|
|
304
|
+
hash: (await latestBlock?.hash())?.toString()
|
|
305
|
+
};
|
|
306
|
+
const provenBlockId = {
|
|
307
|
+
number: BlockNumber(proven),
|
|
308
|
+
hash: (await provenBlock?.hash())?.toString()
|
|
309
|
+
};
|
|
310
|
+
const finalizedBlockId = {
|
|
311
|
+
number: BlockNumber(finalized),
|
|
312
|
+
hash: (await finalizedBlock?.hash())?.toString()
|
|
313
|
+
};
|
|
314
|
+
const checkpointedBlockId = {
|
|
315
|
+
number: BlockNumber(checkpointed),
|
|
316
|
+
hash: (await checkpointedBlock?.hash())?.toString()
|
|
317
|
+
};
|
|
318
|
+
const makeTipId = (blockId)=>({
|
|
319
|
+
block: blockId,
|
|
320
|
+
checkpoint: {
|
|
321
|
+
number: CheckpointNumber(blockId.number),
|
|
322
|
+
hash: blockId.hash
|
|
323
|
+
}
|
|
324
|
+
});
|
|
196
325
|
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
|
-
}
|
|
326
|
+
proposed: latestBlockId,
|
|
327
|
+
checkpointed: makeTipId(checkpointedBlockId),
|
|
328
|
+
proven: makeTipId(provenBlockId),
|
|
329
|
+
finalized: makeTipId(finalizedBlockId)
|
|
209
330
|
};
|
|
210
331
|
}
|
|
211
332
|
getL2EpochNumber() {
|