@aztec/archiver 0.0.1-commit.d3ec352c → 0.0.1-commit.f295ac2
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} +21 -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 +82 -5
- 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/{archiver → l1}/data_retrieval.js +75 -150
- 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 +7 -1
- 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 +331 -0
- package/dest/store/kv_archiver_store.d.ts.map +1 -0
- package/dest/store/kv_archiver_store.js +438 -0
- package/dest/store/log_store.d.ts +45 -0
- package/dest/store/log_store.d.ts.map +1 -0
- package/dest/store/log_store.js +422 -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/{archiver/structs → structs}/data_retrieval.d.ts +1 -1
- 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 -6
- 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 +5 -6
- package/dest/test/mock_archiver.d.ts.map +1 -1
- package/dest/test/mock_archiver.js +6 -11
- package/dest/test/mock_l1_to_l2_message_source.d.ts +6 -7
- package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
- package/dest/test/mock_l1_to_l2_message_source.js +19 -14
- package/dest/test/mock_l2_block_source.d.ts +28 -14
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +160 -52
- 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 -10
- package/package.json +17 -18
- package/src/archiver.ts +525 -0
- package/src/{archiver/config.ts → config.ts} +28 -12
- package/src/errors.ts +90 -0
- package/src/factory.ts +118 -6
- 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/{archiver → l1}/data_retrieval.ts +136 -218
- 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 +414 -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/{archiver → modules}/validation.ts +11 -6
- 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 +622 -0
- package/src/store/log_store.ts +552 -0
- package/src/{archiver/kv_archiver_store → store}/message_store.ts +21 -18
- package/src/{archiver/structs → structs}/inbox_message.ts +7 -8
- package/src/{archiver/structs → structs}/published.ts +0 -1
- 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 +8 -13
- package/src/test/mock_l1_to_l2_message_source.ts +16 -15
- package/src/test/mock_l2_block_source.ts +184 -64
- package/src/test/mock_structs.ts +256 -11
- package/dest/archiver/archiver.d.ts +0 -290
- package/dest/archiver/archiver.d.ts.map +0 -1
- package/dest/archiver/archiver.js +0 -1434
- package/dest/archiver/archiver_store.d.ts +0 -256
- 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 -1289
- 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 -80
- package/dest/archiver/data_retrieval.d.ts.map +0 -1
- 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 -125
- package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/block_store.js +0 -371
- 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 -169
- 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 -337
- 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.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 -3
- package/dest/archiver/structs/published.d.ts.map +0 -1
- package/dest/archiver/validation.d.ts +0 -17
- 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 -1880
- package/src/archiver/archiver_store.ts +0 -310
- package/src/archiver/archiver_store_test_suite.ts +0 -1295
- package/src/archiver/errors.ts +0 -26
- package/src/archiver/index.ts +0 -6
- package/src/archiver/kv_archiver_store/block_store.ts +0 -482
- package/src/archiver/kv_archiver_store/kv_archiver_store.ts +0 -423
- package/src/archiver/kv_archiver_store/log_store.ts +0 -407
- package/src/rpc/index.ts +0 -16
- /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
- /package/dest/{archiver/structs → structs}/published.js +0 -0
- /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
|
@@ -1,23 +1,18 @@
|
|
|
1
|
-
import { L2Block } from '@aztec/stdlib/block';
|
|
2
1
|
import { MockL1ToL2MessageSource } from './mock_l1_to_l2_message_source.js';
|
|
3
2
|
import { MockL2BlockSource } from './mock_l2_block_source.js';
|
|
4
3
|
/**
|
|
5
4
|
* A mocked implementation of the archiver that implements L2BlockSource and L1ToL2MessageSource.
|
|
6
5
|
*/ export class MockArchiver extends MockL2BlockSource {
|
|
7
6
|
messageSource = new MockL1ToL2MessageSource(0);
|
|
8
|
-
setL1ToL2Messages(
|
|
9
|
-
this.messageSource.setL1ToL2Messages(
|
|
7
|
+
setL1ToL2Messages(checkpointNumber, msgs) {
|
|
8
|
+
this.messageSource.setL1ToL2Messages(checkpointNumber, msgs);
|
|
10
9
|
}
|
|
11
|
-
getL1ToL2Messages(
|
|
12
|
-
return this.messageSource.getL1ToL2Messages(
|
|
10
|
+
getL1ToL2Messages(checkpointNumber) {
|
|
11
|
+
return this.messageSource.getL1ToL2Messages(checkpointNumber);
|
|
13
12
|
}
|
|
14
13
|
getL1ToL2MessageIndex(_l1ToL2Message) {
|
|
15
14
|
return this.messageSource.getL1ToL2MessageIndex(_l1ToL2Message);
|
|
16
15
|
}
|
|
17
|
-
getL1ToL2MessagesForCheckpoint(checkpointNumber) {
|
|
18
|
-
// TODO: Implement this properly. This only works when we have one block per checkpoint.
|
|
19
|
-
return this.messageSource.getL1ToL2Messages(checkpointNumber);
|
|
20
|
-
}
|
|
21
16
|
}
|
|
22
17
|
/**
|
|
23
18
|
* A mocked implementation of the archiver with a set of precomputed blocks and messages.
|
|
@@ -33,7 +28,7 @@ import { MockL2BlockSource } from './mock_l2_block_source.js';
|
|
|
33
28
|
if (checkpoint.blocks.length !== 1) {
|
|
34
29
|
throw new Error('Prefilled checkpoint must only have 1 block at the moment.');
|
|
35
30
|
}
|
|
36
|
-
this.setL1ToL2Messages(checkpoint.
|
|
31
|
+
this.setL1ToL2Messages(checkpoint.number, messages);
|
|
37
32
|
}
|
|
38
33
|
}
|
|
39
34
|
createBlocks(numBlocks) {
|
|
@@ -43,7 +38,7 @@ import { MockL2BlockSource } from './mock_l2_block_source.js';
|
|
|
43
38
|
}
|
|
44
39
|
const fromBlock = this.l2Blocks.length;
|
|
45
40
|
// TODO: Add L2 blocks and checkpoints separately once archiver has the apis for that.
|
|
46
|
-
this.addBlocks(this.prefilled.slice(fromBlock, fromBlock + numBlocks).
|
|
41
|
+
this.addBlocks(this.prefilled.slice(fromBlock, fromBlock + numBlocks).flatMap((c)=>c.blocks));
|
|
47
42
|
return Promise.resolve();
|
|
48
43
|
}
|
|
49
44
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BlockNumber,
|
|
2
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import type { L2Tips } from '@aztec/stdlib/block';
|
|
4
4
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
5
5
|
/**
|
|
@@ -7,14 +7,13 @@ import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
|
7
7
|
*/
|
|
8
8
|
export declare class MockL1ToL2MessageSource implements L1ToL2MessageSource {
|
|
9
9
|
private blockNumber;
|
|
10
|
-
private
|
|
10
|
+
private messagesPerCheckpoint;
|
|
11
11
|
constructor(blockNumber: number);
|
|
12
|
-
setL1ToL2Messages(
|
|
12
|
+
setL1ToL2Messages(checkpointNumber: CheckpointNumber, msgs: Fr[]): void;
|
|
13
13
|
setBlockNumber(blockNumber: number): void;
|
|
14
|
-
|
|
15
|
-
getL1ToL2Messages(blockNumber: number): Promise<Fr[]>;
|
|
14
|
+
getL1ToL2Messages(checkpointNumber: CheckpointNumber): Promise<Fr[]>;
|
|
16
15
|
getL1ToL2MessageIndex(_l1ToL2Message: Fr): Promise<bigint | undefined>;
|
|
17
16
|
getBlockNumber(): Promise<BlockNumber>;
|
|
18
17
|
getL2Tips(): Promise<L2Tips>;
|
|
19
18
|
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
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,WAAW,EAAE,
|
|
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,26 +1,22 @@
|
|
|
1
|
-
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
/**
|
|
4
4
|
* A mocked implementation of L1ToL2MessageSource to be used in tests.
|
|
5
5
|
*/ export class MockL1ToL2MessageSource {
|
|
6
6
|
blockNumber;
|
|
7
|
-
|
|
7
|
+
messagesPerCheckpoint;
|
|
8
8
|
constructor(blockNumber){
|
|
9
9
|
this.blockNumber = blockNumber;
|
|
10
|
-
this.
|
|
10
|
+
this.messagesPerCheckpoint = new Map();
|
|
11
11
|
}
|
|
12
|
-
setL1ToL2Messages(
|
|
13
|
-
this.
|
|
12
|
+
setL1ToL2Messages(checkpointNumber, msgs) {
|
|
13
|
+
this.messagesPerCheckpoint.set(checkpointNumber, msgs);
|
|
14
14
|
}
|
|
15
15
|
setBlockNumber(blockNumber) {
|
|
16
16
|
this.blockNumber = blockNumber;
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return this.getL1ToL2Messages(checkpointNumber);
|
|
21
|
-
}
|
|
22
|
-
getL1ToL2Messages(blockNumber) {
|
|
23
|
-
return Promise.resolve(this.messagesPerBlock.get(blockNumber) ?? []);
|
|
18
|
+
getL1ToL2Messages(checkpointNumber) {
|
|
19
|
+
return Promise.resolve(this.messagesPerCheckpoint.get(checkpointNumber) ?? []);
|
|
24
20
|
}
|
|
25
21
|
getL1ToL2MessageIndex(_l1ToL2Message) {
|
|
26
22
|
throw new Error('Method not implemented.');
|
|
@@ -30,12 +26,21 @@ import { Fr } from '@aztec/foundation/fields';
|
|
|
30
26
|
}
|
|
31
27
|
getL2Tips() {
|
|
32
28
|
const number = this.blockNumber;
|
|
33
|
-
const
|
|
29
|
+
const blockId = {
|
|
34
30
|
number: BlockNumber(number),
|
|
35
31
|
hash: new Fr(number).toString()
|
|
36
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
|
+
};
|
|
37
41
|
return Promise.resolve({
|
|
38
|
-
|
|
42
|
+
proposed: blockId,
|
|
43
|
+
checkpointed: tip,
|
|
39
44
|
proven: tip,
|
|
40
45
|
finalized: tip
|
|
41
46
|
});
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { BlockNumber, CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
4
4
|
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
5
5
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
6
|
+
import { CheckpointedL2Block, L2BlockHash, L2BlockNew, type L2BlockSource, type L2Tips, type ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
7
|
+
import { Checkpoint, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
8
8
|
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
9
9
|
import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
10
10
|
import { type BlockHeader, TxHash, TxReceipt } from '@aztec/stdlib/tx';
|
|
@@ -13,15 +13,17 @@ import type { UInt64 } from '@aztec/stdlib/types';
|
|
|
13
13
|
* A mocked implementation of L2BlockSource to be used in tests.
|
|
14
14
|
*/
|
|
15
15
|
export declare class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
16
|
-
protected l2Blocks:
|
|
16
|
+
protected l2Blocks: L2BlockNew[];
|
|
17
17
|
private provenBlockNumber;
|
|
18
18
|
private finalizedBlockNumber;
|
|
19
|
+
private checkpointedBlockNumber;
|
|
19
20
|
private log;
|
|
20
21
|
createBlocks(numBlocks: number): Promise<void>;
|
|
21
|
-
addBlocks(blocks:
|
|
22
|
+
addBlocks(blocks: L2BlockNew[]): void;
|
|
22
23
|
removeBlocks(numBlocks: number): void;
|
|
23
24
|
setProvenBlockNumber(provenBlockNumber: number): void;
|
|
24
25
|
setFinalizedBlockNumber(finalizedBlockNumber: number): void;
|
|
26
|
+
setCheckpointedBlockNumber(checkpointedBlockNumber: number): void;
|
|
25
27
|
/**
|
|
26
28
|
* Method to fetch the rollup contract address at the base-layer.
|
|
27
29
|
* @returns The rollup address.
|
|
@@ -38,29 +40,41 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
38
40
|
*/
|
|
39
41
|
getBlockNumber(): Promise<BlockNumber>;
|
|
40
42
|
getProvenBlockNumber(): Promise<BlockNumber>;
|
|
43
|
+
getCheckpointedBlock(number: BlockNumber): Promise<CheckpointedL2Block | undefined>;
|
|
44
|
+
getCheckpointedBlocks(from: BlockNumber, limit: number, _proven?: boolean): Promise<CheckpointedL2Block[]>;
|
|
41
45
|
/**
|
|
42
46
|
* Gets an l2 block.
|
|
43
47
|
* @param number - The block number to return (inclusive).
|
|
44
48
|
* @returns The requested L2 block.
|
|
45
49
|
*/
|
|
46
|
-
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>;
|
|
47
57
|
/**
|
|
48
58
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
49
59
|
* @param from - Number of the first block to return (inclusive).
|
|
50
60
|
* @param limit - The maximum number of blocks to return.
|
|
51
61
|
* @returns The requested mocked L2 blocks.
|
|
52
62
|
*/
|
|
53
|
-
getBlocks(from: number, limit: number, proven?: boolean): Promise<
|
|
54
|
-
getPublishedCheckpoints(from: CheckpointNumber, limit: number): Promise<
|
|
63
|
+
getBlocks(from: number, limit: number, proven?: boolean): Promise<L2BlockNew[]>;
|
|
64
|
+
getPublishedCheckpoints(from: CheckpointNumber, limit: number): Promise<PublishedCheckpoint[]>;
|
|
55
65
|
getCheckpointByArchive(archive: Fr): Promise<Checkpoint | undefined>;
|
|
56
|
-
getPublishedBlocks(from: number, limit: number, proven?: boolean): Promise<
|
|
57
|
-
|
|
58
|
-
|
|
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>;
|
|
59
72
|
getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined>;
|
|
60
73
|
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
|
|
61
74
|
getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined>;
|
|
62
75
|
getCheckpointsForEpoch(epochNumber: EpochNumber): Promise<Checkpoint[]>;
|
|
63
|
-
getBlocksForEpoch(epochNumber: EpochNumber): Promise<
|
|
76
|
+
getBlocksForEpoch(epochNumber: EpochNumber): Promise<L2BlockNew[]>;
|
|
77
|
+
getBlocksForSlot(slotNumber: SlotNumber): Promise<L2BlockNew[]>;
|
|
64
78
|
getBlockHeadersForEpoch(epochNumber: EpochNumber): Promise<BlockHeader[]>;
|
|
65
79
|
/**
|
|
66
80
|
* Gets a tx effect.
|
|
@@ -106,6 +120,6 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
106
120
|
registerContractFunctionSignatures(_signatures: string[]): Promise<void>;
|
|
107
121
|
syncImmediate(): Promise<void>;
|
|
108
122
|
isPendingChainInvalid(): Promise<boolean>;
|
|
109
|
-
getPendingChainValidationStatus(): Promise<
|
|
123
|
+
getPendingChainValidationStatus(): Promise<ValidateCheckpointResult>;
|
|
110
124
|
}
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMl9ibG9ja19zb3VyY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L21vY2tfbDJfYmxvY2tfc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0QsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxVQUFVLEVBQ1YsS0FBSyxhQUFhLEVBQ2xCLEtBQUssTUFBTSxFQUNYLEtBQUssd0JBQXdCLEVBQzlCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBbUIsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ILE9BQU8sRUFBMEIsS0FBSyxpQkFBaUIsRUFBd0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNuSCxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBWSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pGLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxEOztHQUVHO0FBQ0gscUJBQWEsaUJBQWtCLFlBQVcsYUFBYSxFQUFFLGtCQUFrQjtJQUN6RSxTQUFTLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxD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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAEzG,OAAO,EAAE,
|
|
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,11 +1,12 @@
|
|
|
1
1
|
import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
|
|
2
|
-
import { DefaultL1ContractsConfig } from '@aztec/ethereum';
|
|
3
|
-
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
|
|
3
|
+
import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
4
4
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
5
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
6
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
6
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
7
7
|
import { createLogger } from '@aztec/foundation/log';
|
|
8
|
-
import {
|
|
8
|
+
import { CheckpointedL2Block, L2BlockHash, L2BlockNew } from '@aztec/stdlib/block';
|
|
9
|
+
import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
9
10
|
import { EmptyL1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
10
11
|
import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
11
12
|
/**
|
|
@@ -14,11 +15,14 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
14
15
|
l2Blocks = [];
|
|
15
16
|
provenBlockNumber = 0;
|
|
16
17
|
finalizedBlockNumber = 0;
|
|
18
|
+
checkpointedBlockNumber = 0;
|
|
17
19
|
log = createLogger('archiver:mock_l2_block_source');
|
|
18
20
|
async createBlocks(numBlocks) {
|
|
19
21
|
for(let i = 0; i < numBlocks; i++){
|
|
20
22
|
const blockNum = this.l2Blocks.length + 1;
|
|
21
|
-
const block = await
|
|
23
|
+
const block = await L2BlockNew.random(BlockNumber(blockNum), {
|
|
24
|
+
slotNumber: SlotNumber(blockNum)
|
|
25
|
+
});
|
|
22
26
|
this.l2Blocks.push(block);
|
|
23
27
|
}
|
|
24
28
|
this.log.verbose(`Created ${numBlocks} blocks in the mock L2 block source`);
|
|
@@ -40,6 +44,9 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
40
44
|
}
|
|
41
45
|
this.finalizedBlockNumber = finalizedBlockNumber;
|
|
42
46
|
}
|
|
47
|
+
setCheckpointedBlockNumber(checkpointedBlockNumber) {
|
|
48
|
+
this.checkpointedBlockNumber = checkpointedBlockNumber;
|
|
49
|
+
}
|
|
43
50
|
/**
|
|
44
51
|
* Method to fetch the rollup contract address at the base-layer.
|
|
45
52
|
* @returns The rollup address.
|
|
@@ -61,12 +68,46 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
61
68
|
getProvenBlockNumber() {
|
|
62
69
|
return Promise.resolve(BlockNumber(this.provenBlockNumber));
|
|
63
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;
|
|
95
|
+
}
|
|
64
96
|
/**
|
|
65
97
|
* Gets an l2 block.
|
|
66
98
|
* @param number - The block number to return (inclusive).
|
|
67
99
|
* @returns The requested L2 block.
|
|
68
100
|
*/ getBlock(number) {
|
|
69
|
-
|
|
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);
|
|
70
111
|
}
|
|
71
112
|
/**
|
|
72
113
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
@@ -76,37 +117,56 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
76
117
|
*/ getBlocks(from, limit, proven) {
|
|
77
118
|
return Promise.resolve(this.l2Blocks.slice(from - 1, from - 1 + limit).filter((b)=>!proven || this.provenBlockNumber === undefined || b.number <= this.provenBlockNumber));
|
|
78
119
|
}
|
|
79
|
-
|
|
80
|
-
// TODO: Implement this properly. This only works when we have one block per checkpoint.
|
|
81
|
-
|
|
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
|
+
}));
|
|
82
133
|
}
|
|
83
134
|
async getCheckpointByArchive(archive) {
|
|
84
|
-
// TODO: Implement this properly. This only works when we have one block per checkpoint.
|
|
85
|
-
|
|
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;
|
|
86
148
|
}
|
|
87
|
-
|
|
88
|
-
const blocks =
|
|
89
|
-
return blocks.map((block)=>
|
|
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),
|
|
90
153
|
block,
|
|
91
|
-
l1:
|
|
92
|
-
blockNumber: BigInt(block.number),
|
|
93
|
-
blockHash: Buffer32.random().toString(),
|
|
94
|
-
timestamp: BigInt(block.number)
|
|
95
|
-
},
|
|
154
|
+
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
96
155
|
attestations: []
|
|
97
|
-
}));
|
|
156
|
+
})));
|
|
157
|
+
}
|
|
158
|
+
getL2BlocksNew(from, limit, proven) {
|
|
159
|
+
// getBlocks already returns L2BlockNew[], so just return directly
|
|
160
|
+
return this.getBlocks(from, limit, proven);
|
|
98
161
|
}
|
|
99
162
|
async getPublishedBlockByHash(blockHash) {
|
|
100
163
|
for (const block of this.l2Blocks){
|
|
101
164
|
const hash = await block.hash();
|
|
102
165
|
if (hash.equals(blockHash)) {
|
|
103
|
-
return
|
|
166
|
+
return CheckpointedL2Block.fromFields({
|
|
167
|
+
checkpointNumber: CheckpointNumber(block.number),
|
|
104
168
|
block,
|
|
105
|
-
l1:
|
|
106
|
-
blockNumber: BigInt(block.number),
|
|
107
|
-
blockHash: Buffer32.random().toString(),
|
|
108
|
-
timestamp: BigInt(block.number)
|
|
109
|
-
},
|
|
169
|
+
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
110
170
|
attestations: []
|
|
111
171
|
});
|
|
112
172
|
}
|
|
@@ -118,35 +178,62 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
118
178
|
if (!block) {
|
|
119
179
|
return Promise.resolve(undefined);
|
|
120
180
|
}
|
|
121
|
-
return Promise.resolve(
|
|
181
|
+
return Promise.resolve(CheckpointedL2Block.fromFields({
|
|
182
|
+
checkpointNumber: CheckpointNumber(block.number),
|
|
122
183
|
block,
|
|
123
|
-
l1:
|
|
124
|
-
blockNumber: BigInt(block.number),
|
|
125
|
-
blockHash: Buffer32.random().toString(),
|
|
126
|
-
timestamp: BigInt(block.number)
|
|
127
|
-
},
|
|
184
|
+
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
128
185
|
attestations: []
|
|
129
186
|
}));
|
|
130
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
|
+
}
|
|
131
201
|
async getBlockHeaderByHash(blockHash) {
|
|
132
202
|
for (const block of this.l2Blocks){
|
|
133
203
|
const hash = await block.hash();
|
|
134
204
|
if (hash.equals(blockHash)) {
|
|
135
|
-
return block.
|
|
205
|
+
return block.header;
|
|
136
206
|
}
|
|
137
207
|
}
|
|
138
208
|
return undefined;
|
|
139
209
|
}
|
|
140
210
|
getBlockHeaderByArchive(archive) {
|
|
141
211
|
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
142
|
-
return Promise.resolve(block?.
|
|
212
|
+
return Promise.resolve(block?.header);
|
|
143
213
|
}
|
|
144
214
|
getBlockHeader(number) {
|
|
145
|
-
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);
|
|
146
216
|
}
|
|
147
217
|
getCheckpointsForEpoch(epochNumber) {
|
|
148
|
-
// TODO: Implement this properly. This only works when we have one block per checkpoint.
|
|
149
|
-
|
|
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
|
+
}));
|
|
150
237
|
}
|
|
151
238
|
getBlocksForEpoch(epochNumber) {
|
|
152
239
|
const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
|
|
@@ -159,9 +246,13 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
159
246
|
});
|
|
160
247
|
return Promise.resolve(blocks);
|
|
161
248
|
}
|
|
249
|
+
getBlocksForSlot(slotNumber) {
|
|
250
|
+
const blocks = this.l2Blocks.filter((b)=>b.header.globalVariables.slotNumber === slotNumber);
|
|
251
|
+
return Promise.resolve(blocks);
|
|
252
|
+
}
|
|
162
253
|
async getBlockHeadersForEpoch(epochNumber) {
|
|
163
254
|
const blocks = await this.getBlocksForEpoch(epochNumber);
|
|
164
|
-
return blocks.map((b)=>b.
|
|
255
|
+
return blocks.map((b)=>b.header);
|
|
165
256
|
}
|
|
166
257
|
/**
|
|
167
258
|
* Gets a tx effect.
|
|
@@ -198,27 +289,44 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
198
289
|
return undefined;
|
|
199
290
|
}
|
|
200
291
|
async getL2Tips() {
|
|
201
|
-
const [latest, proven, finalized] = [
|
|
292
|
+
const [latest, proven, finalized, checkpointed] = [
|
|
202
293
|
await this.getBlockNumber(),
|
|
203
294
|
await this.getProvenBlockNumber(),
|
|
204
|
-
this.finalizedBlockNumber
|
|
295
|
+
this.finalizedBlockNumber,
|
|
296
|
+
this.checkpointedBlockNumber
|
|
205
297
|
];
|
|
206
298
|
const latestBlock = this.l2Blocks[latest - 1];
|
|
207
299
|
const provenBlock = this.l2Blocks[proven - 1];
|
|
208
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
|
+
});
|
|
209
325
|
return {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
proven: {
|
|
215
|
-
number: BlockNumber(proven),
|
|
216
|
-
hash: (await provenBlock?.hash())?.toString()
|
|
217
|
-
},
|
|
218
|
-
finalized: {
|
|
219
|
-
number: BlockNumber(finalized),
|
|
220
|
-
hash: (await finalizedBlock?.hash())?.toString()
|
|
221
|
-
}
|
|
326
|
+
proposed: latestBlockId,
|
|
327
|
+
checkpointed: makeTipId(checkpointedBlockId),
|
|
328
|
+
proven: makeTipId(provenBlockId),
|
|
329
|
+
finalized: makeTipId(finalizedBlockId)
|
|
222
330
|
};
|
|
223
331
|
}
|
|
224
332
|
getL2EpochNumber() {
|