@aztec/archiver 3.0.0-canary.a9708bd → 3.0.0-devnet.2-patch.1
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 +27 -6
- package/dest/archiver/archiver.d.ts +87 -64
- package/dest/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +463 -278
- package/dest/archiver/archiver_store.d.ts +46 -28
- package/dest/archiver/archiver_store.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.d.ts +1 -1
- package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.js +316 -143
- package/dest/archiver/config.d.ts +6 -23
- package/dest/archiver/config.d.ts.map +1 -1
- package/dest/archiver/config.js +19 -12
- package/dest/archiver/errors.d.ts +1 -1
- package/dest/archiver/errors.d.ts.map +1 -1
- package/dest/archiver/index.d.ts +1 -1
- package/dest/archiver/instrumentation.d.ts +5 -3
- package/dest/archiver/instrumentation.d.ts.map +1 -1
- package/dest/archiver/instrumentation.js +14 -0
- package/dest/archiver/kv_archiver_store/block_store.d.ts +45 -9
- package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/block_store.js +99 -12
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +2 -2
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/contract_class_store.js +1 -1
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +2 -2
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +30 -30
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.js +26 -15
- package/dest/archiver/kv_archiver_store/log_store.d.ts +3 -10
- package/dest/archiver/kv_archiver_store/log_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/log_store.js +4 -26
- package/dest/archiver/kv_archiver_store/message_store.d.ts +6 -5
- package/dest/archiver/kv_archiver_store/message_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/message_store.js +15 -14
- package/dest/archiver/l1/bin/retrieve-calldata.d.ts +3 -0
- package/dest/archiver/l1/bin/retrieve-calldata.d.ts.map +1 -0
- package/dest/archiver/l1/bin/retrieve-calldata.js +147 -0
- package/dest/archiver/l1/calldata_retriever.d.ts +98 -0
- package/dest/archiver/l1/calldata_retriever.d.ts.map +1 -0
- package/dest/archiver/l1/calldata_retriever.js +403 -0
- package/dest/archiver/l1/data_retrieval.d.ts +87 -0
- package/dest/archiver/l1/data_retrieval.d.ts.map +1 -0
- package/dest/archiver/{data_retrieval.js → l1/data_retrieval.js} +118 -154
- package/dest/archiver/l1/debug_tx.d.ts +19 -0
- package/dest/archiver/l1/debug_tx.d.ts.map +1 -0
- package/dest/archiver/l1/debug_tx.js +73 -0
- package/dest/archiver/l1/spire_proposer.d.ts +70 -0
- package/dest/archiver/l1/spire_proposer.d.ts.map +1 -0
- package/dest/archiver/l1/spire_proposer.js +157 -0
- package/dest/archiver/l1/trace_tx.d.ts +97 -0
- package/dest/archiver/l1/trace_tx.d.ts.map +1 -0
- package/dest/archiver/l1/trace_tx.js +91 -0
- package/dest/archiver/l1/types.d.ts +12 -0
- package/dest/archiver/l1/types.d.ts.map +1 -0
- package/dest/archiver/l1/types.js +3 -0
- package/dest/archiver/l1/validate_trace.d.ts +29 -0
- package/dest/archiver/l1/validate_trace.d.ts.map +1 -0
- package/dest/archiver/l1/validate_trace.js +150 -0
- package/dest/archiver/structs/data_retrieval.d.ts +1 -1
- package/dest/archiver/structs/inbox_message.d.ts +4 -4
- package/dest/archiver/structs/inbox_message.d.ts.map +1 -1
- package/dest/archiver/structs/inbox_message.js +6 -5
- package/dest/archiver/structs/published.d.ts +3 -2
- package/dest/archiver/structs/published.d.ts.map +1 -1
- package/dest/archiver/validation.d.ts +10 -4
- package/dest/archiver/validation.d.ts.map +1 -1
- package/dest/archiver/validation.js +66 -44
- package/dest/factory.d.ts +3 -11
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +5 -17
- package/dest/index.d.ts +2 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -1
- package/dest/rpc/index.d.ts +2 -2
- package/dest/test/index.d.ts +1 -1
- package/dest/test/mock_archiver.d.ts +16 -8
- package/dest/test/mock_archiver.d.ts.map +1 -1
- package/dest/test/mock_archiver.js +19 -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 +10 -9
- package/dest/test/mock_l2_block_source.d.ts +24 -20
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +79 -13
- package/dest/test/mock_structs.d.ts +3 -2
- package/dest/test/mock_structs.d.ts.map +1 -1
- package/dest/test/mock_structs.js +9 -8
- package/package.json +18 -17
- package/src/archiver/archiver.ts +610 -363
- package/src/archiver/archiver_store.ts +55 -28
- package/src/archiver/archiver_store_test_suite.ts +369 -143
- package/src/archiver/config.ts +26 -51
- package/src/archiver/instrumentation.ts +19 -2
- package/src/archiver/kv_archiver_store/block_store.ts +139 -21
- package/src/archiver/kv_archiver_store/contract_class_store.ts +1 -1
- package/src/archiver/kv_archiver_store/contract_instance_store.ts +1 -1
- package/src/archiver/kv_archiver_store/kv_archiver_store.ts +48 -33
- package/src/archiver/kv_archiver_store/log_store.ts +4 -30
- package/src/archiver/kv_archiver_store/message_store.ts +21 -18
- package/src/archiver/l1/README.md +98 -0
- package/src/archiver/l1/bin/retrieve-calldata.ts +182 -0
- package/src/archiver/l1/calldata_retriever.ts +531 -0
- package/src/archiver/{data_retrieval.ts → l1/data_retrieval.ts} +198 -242
- package/src/archiver/l1/debug_tx.ts +99 -0
- package/src/archiver/l1/spire_proposer.ts +160 -0
- package/src/archiver/l1/trace_tx.ts +128 -0
- package/src/archiver/l1/types.ts +13 -0
- package/src/archiver/l1/validate_trace.ts +211 -0
- package/src/archiver/structs/inbox_message.ts +8 -8
- package/src/archiver/structs/published.ts +2 -1
- package/src/archiver/validation.ts +86 -32
- package/src/factory.ts +6 -26
- package/src/index.ts +1 -1
- 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/mock_archiver.ts +22 -16
- package/src/test/mock_l1_to_l2_message_source.ts +10 -9
- package/src/test/mock_l2_block_source.ts +110 -27
- package/src/test/mock_structs.ts +10 -9
- package/dest/archiver/data_retrieval.d.ts +0 -78
- package/dest/archiver/data_retrieval.d.ts.map +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
|
|
2
|
-
import { Fr } from '@aztec/foundation/
|
|
3
|
-
import type { UInt32 } from '@aztec/stdlib/types';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
export type InboxMessage = {
|
|
5
5
|
index: bigint;
|
|
6
6
|
leaf: Fr;
|
|
7
|
-
|
|
7
|
+
checkpointNumber: CheckpointNumber;
|
|
8
8
|
l1BlockNumber: bigint;
|
|
9
9
|
l1BlockHash: Buffer32;
|
|
10
10
|
rollingHash: Buffer16;
|
|
@@ -12,4 +12,4 @@ export type InboxMessage = {
|
|
|
12
12
|
export declare function updateRollingHash(currentRollingHash: Buffer16, leaf: Fr): Buffer16;
|
|
13
13
|
export declare function serializeInboxMessage(message: InboxMessage): Buffer;
|
|
14
14
|
export declare function deserializeInboxMessage(buffer: Buffer): InboxMessage;
|
|
15
|
-
//# sourceMappingURL=
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5ib3hfbWVzc2FnZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FyY2hpdmVyL3N0cnVjdHMvaW5ib3hfbWVzc2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTlELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdwRCxNQUFNLE1BQU0sWUFBWSxHQUFHO0lBQ3pCLEtBQUssRUFBRSxNQUFNLENBQUM7SUFDZCxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ1QsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUM7SUFDbkMsYUFBYSxFQUFFLE1BQU0sQ0FBQztJQUN0QixXQUFXLEVBQUUsUUFBUSxDQUFDO0lBQ3RCLFdBQVcsRUFBRSxRQUFRLENBQUM7Q0FDdkIsQ0FBQztBQUVGLHdCQUFnQixpQkFBaUIsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxRQUFRLENBR2xGO0FBRUQsd0JBQWdCLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUcsTUFBTSxDQVNuRTtBQUVELHdCQUFnQix1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFlBQVksQ0FTcEUifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox_message.d.ts","sourceRoot":"","sources":["../../../src/archiver/structs/inbox_message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"inbox_message.d.ts","sourceRoot":"","sources":["../../../src/archiver/structs/inbox_message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAGpD,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,EAAE,CAAC;IACT,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,QAAQ,CAAC;IACtB,WAAW,EAAE,QAAQ,CAAC;CACvB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,QAAQ,CAGlF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CASnE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CASpE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
|
|
2
|
-
import { keccak256 } from '@aztec/foundation/crypto';
|
|
3
|
-
import { Fr } from '@aztec/foundation/
|
|
3
|
+
import { keccak256 } from '@aztec/foundation/crypto/keccak';
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
5
|
import { BufferReader, bigintToUInt64BE, numToUInt32BE, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
5
6
|
export function updateRollingHash(currentRollingHash, leaf) {
|
|
6
7
|
const input = Buffer.concat([
|
|
@@ -15,7 +16,7 @@ export function serializeInboxMessage(message) {
|
|
|
15
16
|
message.leaf,
|
|
16
17
|
message.l1BlockHash,
|
|
17
18
|
numToUInt32BE(Number(message.l1BlockNumber)),
|
|
18
|
-
numToUInt32BE(message.
|
|
19
|
+
numToUInt32BE(message.checkpointNumber),
|
|
19
20
|
message.rollingHash
|
|
20
21
|
]);
|
|
21
22
|
}
|
|
@@ -25,14 +26,14 @@ export function deserializeInboxMessage(buffer) {
|
|
|
25
26
|
const leaf = reader.readObject(Fr);
|
|
26
27
|
const l1BlockHash = reader.readObject(Buffer32);
|
|
27
28
|
const l1BlockNumber = BigInt(reader.readNumber());
|
|
28
|
-
const
|
|
29
|
+
const checkpointNumber = CheckpointNumber(reader.readNumber());
|
|
29
30
|
const rollingHash = reader.readObject(Buffer16);
|
|
30
31
|
return {
|
|
31
32
|
index,
|
|
32
33
|
leaf,
|
|
33
34
|
l1BlockHash,
|
|
34
35
|
l1BlockNumber,
|
|
35
|
-
|
|
36
|
+
checkpointNumber,
|
|
36
37
|
rollingHash
|
|
37
38
|
};
|
|
38
39
|
}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export type { PublishedL2Block
|
|
2
|
-
|
|
1
|
+
export type { PublishedL2Block } from '@aztec/stdlib/block';
|
|
2
|
+
export type { L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaGVkLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXJjaGl2ZXIvc3RydWN0cy9wdWJsaXNoZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsWUFBWSxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"published.d.ts","sourceRoot":"","sources":["../../../src/archiver/structs/published.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"published.d.ts","sourceRoot":"","sources":["../../../src/archiver/structs/published.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
2
2
|
import type { Logger } from '@aztec/foundation/log';
|
|
3
|
-
import { type
|
|
3
|
+
import { type AttestationInfo, type ValidateBlockResult } from '@aztec/stdlib/block';
|
|
4
|
+
import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
4
5
|
import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
5
6
|
export type { ValidateBlockResult };
|
|
6
7
|
/**
|
|
7
|
-
*
|
|
8
|
+
* Extracts attestation information from a published checkpoint.
|
|
9
|
+
* Returns info for each attestation, preserving array indices.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getAttestationInfoFromPublishedCheckpoint({ checkpoint, attestations }: PublishedCheckpoint): AttestationInfo[];
|
|
12
|
+
/**
|
|
13
|
+
* Validates the attestations submitted for the given checkpoint.
|
|
8
14
|
* Returns true if the attestations are valid and sufficient, false otherwise.
|
|
9
15
|
*/
|
|
10
|
-
export declare function
|
|
11
|
-
//# sourceMappingURL=
|
|
16
|
+
export declare function validateCheckpointAttestations(publishedCheckpoint: PublishedCheckpoint, epochCache: EpochCache, constants: Pick<L1RollupConstants, 'epochDuration'>, logger?: Logger): Promise<ValidateBlockResult>;
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FyY2hpdmVyL3ZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHckQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUNMLEtBQUssZUFBZSxFQUVwQixLQUFLLG1CQUFtQixFQUV6QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFFLEtBQUssaUJBQWlCLEVBQWtCLE1BQU0sNkJBQTZCLENBQUM7QUFHckYsWUFBWSxFQUFFLG1CQUFtQixFQUFFLENBQUM7QUFFcEM7OztHQUdHO0FBQ0gsd0JBQWdCLHlDQUF5QyxDQUFDLEVBQ3hELFVBQVUsRUFDVixZQUFZLEVBQ2IsRUFBRSxtQkFBbUIsR0FBRyxlQUFlLEVBQUUsQ0FHekM7QUFFRDs7O0dBR0c7QUFDSCx3QkFBc0IsOEJBQThCLENBQ2xELG1CQUFtQixFQUFFLG1CQUFtQixFQUN4QyxVQUFVLEVBQUUsVUFBVSxFQUN0QixTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxFQUNuRCxNQUFNLENBQUMsRUFBRSxNQUFNLEdBQ2QsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBc0Y5QiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/archiver/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/archiver/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,mBAAmB,EAEzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,KAAK,iBAAiB,EAAkB,MAAM,6BAA6B,CAAC;AAGrF,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC;;;GAGG;AACH,wBAAgB,yCAAyC,CAAC,EACxD,UAAU,EACV,YAAY,EACb,EAAE,mBAAmB,GAAG,eAAe,EAAE,CAGzC;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CAClD,mBAAmB,EAAE,mBAAmB,EACxC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,EACnD,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,CAAC,CAsF9B"}
|
|
@@ -1,75 +1,97 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { compactArray } from '@aztec/foundation/collection';
|
|
2
|
+
import { getAttestationInfoFromPayload } from '@aztec/stdlib/block';
|
|
2
3
|
import { getEpochAtSlot } from '@aztec/stdlib/epoch-helpers';
|
|
4
|
+
import { ConsensusPayload } from '@aztec/stdlib/p2p';
|
|
3
5
|
/**
|
|
4
|
-
*
|
|
6
|
+
* Extracts attestation information from a published checkpoint.
|
|
7
|
+
* Returns info for each attestation, preserving array indices.
|
|
8
|
+
*/ export function getAttestationInfoFromPublishedCheckpoint({ checkpoint, attestations }) {
|
|
9
|
+
const payload = ConsensusPayload.fromCheckpoint(checkpoint);
|
|
10
|
+
return getAttestationInfoFromPayload(payload, attestations);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Validates the attestations submitted for the given checkpoint.
|
|
5
14
|
* Returns true if the attestations are valid and sufficient, false otherwise.
|
|
6
|
-
*/ export async function
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
15
|
+
*/ export async function validateCheckpointAttestations(publishedCheckpoint, epochCache, constants, logger) {
|
|
16
|
+
const attestorInfos = getAttestationInfoFromPublishedCheckpoint(publishedCheckpoint);
|
|
17
|
+
const attestors = compactArray(attestorInfos.map((info)=>'address' in info ? info.address : undefined));
|
|
18
|
+
const { checkpoint, attestations } = publishedCheckpoint;
|
|
19
|
+
const headerHash = checkpoint.header.hash();
|
|
20
|
+
const archiveRoot = checkpoint.archive.root.toString();
|
|
21
|
+
const slot = checkpoint.header.slotNumber;
|
|
12
22
|
const epoch = getEpochAtSlot(slot, constants);
|
|
13
23
|
const { committee, seed } = await epochCache.getCommitteeForEpoch(epoch);
|
|
14
24
|
const logData = {
|
|
15
|
-
|
|
25
|
+
checkpointNumber: checkpoint.number,
|
|
16
26
|
slot,
|
|
17
27
|
epoch,
|
|
18
|
-
|
|
28
|
+
headerHash,
|
|
19
29
|
archiveRoot
|
|
20
30
|
};
|
|
21
|
-
logger?.debug(`Validating attestations for
|
|
31
|
+
logger?.debug(`Validating attestations for checkpoint ${checkpoint.number} at slot ${slot} in epoch ${epoch}`, {
|
|
22
32
|
committee: (committee ?? []).map((member)=>member.toString()),
|
|
23
|
-
recoveredAttestors:
|
|
24
|
-
postedAttestations:
|
|
33
|
+
recoveredAttestors: attestorInfos,
|
|
34
|
+
postedAttestations: attestations.map((a)=>(a.address.isZero() ? a.signature : a.address).toString()),
|
|
25
35
|
...logData
|
|
26
36
|
});
|
|
27
37
|
if (!committee || committee.length === 0) {
|
|
28
|
-
logger?.warn(`No committee found for epoch ${epoch} at slot ${slot}. Accepting
|
|
38
|
+
logger?.warn(`No committee found for epoch ${epoch} at slot ${slot}. Accepting checkpoint without validation.`, logData);
|
|
29
39
|
return {
|
|
30
40
|
valid: true
|
|
31
41
|
};
|
|
32
42
|
}
|
|
33
|
-
const committeeSet = new Set(committee.map((member)=>member.toString()));
|
|
34
43
|
const requiredAttestationCount = Math.floor(committee.length * 2 / 3) + 1;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
44
|
+
const failedValidationResult = (reason)=>({
|
|
45
|
+
valid: false,
|
|
46
|
+
reason,
|
|
47
|
+
block: checkpoint.blocks[0].toBlockInfo(),
|
|
48
|
+
committee,
|
|
49
|
+
seed,
|
|
50
|
+
epoch,
|
|
51
|
+
attestors,
|
|
52
|
+
attestations
|
|
53
|
+
});
|
|
54
|
+
for(let i = 0; i < attestorInfos.length; i++){
|
|
55
|
+
const info = attestorInfos[i];
|
|
56
|
+
// Fail on invalid signatures (no address recovered)
|
|
57
|
+
if (info.status === 'invalid-signature' || info.status === 'empty') {
|
|
58
|
+
logger?.warn(`Attestation with empty or invalid signature at slot ${slot}`, {
|
|
59
|
+
committee,
|
|
60
|
+
invalidIndex: i,
|
|
61
|
+
...logData
|
|
41
62
|
});
|
|
42
|
-
const reason = 'invalid-attestation';
|
|
43
63
|
return {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
invalidIndex: i,
|
|
47
|
-
block: publishedBlock,
|
|
48
|
-
committee,
|
|
49
|
-
seed,
|
|
50
|
-
epoch,
|
|
51
|
-
attestations
|
|
64
|
+
...failedValidationResult('invalid-attestation'),
|
|
65
|
+
invalidIndex: i
|
|
52
66
|
};
|
|
53
67
|
}
|
|
68
|
+
// Check if the attestor at this index matches the committee member at the same index
|
|
69
|
+
if (info.status === 'recovered-from-signature' || info.status === 'provided-as-address') {
|
|
70
|
+
const signer = info.address.toString();
|
|
71
|
+
const expectedCommitteeMember = committee[i]?.toString();
|
|
72
|
+
if (!expectedCommitteeMember || signer !== expectedCommitteeMember) {
|
|
73
|
+
logger?.warn(`Attestation at index ${i} from ${signer} does not match expected committee member ${expectedCommitteeMember} at slot ${slot}`, {
|
|
74
|
+
committee,
|
|
75
|
+
invalidIndex: i,
|
|
76
|
+
...logData
|
|
77
|
+
});
|
|
78
|
+
return {
|
|
79
|
+
...failedValidationResult('invalid-attestation'),
|
|
80
|
+
invalidIndex: i
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
54
84
|
}
|
|
55
|
-
|
|
56
|
-
|
|
85
|
+
const validAttestationCount = attestorInfos.filter((info)=>info.status === 'recovered-from-signature').length;
|
|
86
|
+
if (validAttestationCount < requiredAttestationCount) {
|
|
87
|
+
logger?.warn(`Insufficient attestations for checkpoint at slot ${slot}`, {
|
|
57
88
|
requiredAttestations: requiredAttestationCount,
|
|
58
|
-
actualAttestations:
|
|
89
|
+
actualAttestations: validAttestationCount,
|
|
59
90
|
...logData
|
|
60
91
|
});
|
|
61
|
-
|
|
62
|
-
return {
|
|
63
|
-
valid: false,
|
|
64
|
-
reason,
|
|
65
|
-
block: publishedBlock,
|
|
66
|
-
committee,
|
|
67
|
-
seed,
|
|
68
|
-
epoch,
|
|
69
|
-
attestations
|
|
70
|
-
};
|
|
92
|
+
return failedValidationResult('insufficient-attestations');
|
|
71
93
|
}
|
|
72
|
-
logger?.debug(`
|
|
94
|
+
logger?.debug(`Checkpoint attestations validated successfully for checkpoint ${checkpoint.number} at slot ${slot}`, logData);
|
|
73
95
|
return {
|
|
74
96
|
valid: true
|
|
75
97
|
};
|
package/dest/factory.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
2
|
-
import type
|
|
3
|
-
import type { ArchiverApi, Service } from '@aztec/stdlib/interfaces/server';
|
|
4
|
-
import { type ArchiverDeps } from './archiver/archiver.js';
|
|
2
|
+
import { Archiver, type ArchiverDeps } from './archiver/archiver.js';
|
|
5
3
|
import type { ArchiverConfig } from './archiver/config.js';
|
|
6
4
|
import { KVArchiverDataStore } from './archiver/kv_archiver_store/kv_archiver_store.js';
|
|
7
5
|
export declare const ARCHIVER_STORE_NAME = "archiver";
|
|
@@ -17,11 +15,5 @@ export declare function createArchiverStore(userConfig: Pick<ArchiverConfig, 'ar
|
|
|
17
15
|
*/
|
|
18
16
|
export declare function createArchiver(config: ArchiverConfig & DataStoreConfig, deps: ArchiverDeps, opts?: {
|
|
19
17
|
blockUntilSync: boolean;
|
|
20
|
-
}): Promise<
|
|
21
|
-
|
|
22
|
-
* Creates a remote archiver client.
|
|
23
|
-
* @param config - The archiver configuration.
|
|
24
|
-
* @returns The remote archiver client.
|
|
25
|
-
*/
|
|
26
|
-
export declare function createRemoteArchiver(config: ArchiverConfig): ArchiverApi;
|
|
27
|
-
//# sourceMappingURL=factory.d.ts.map
|
|
18
|
+
}): Promise<Archiver>;
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFPOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBdUIsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUU3RyxlQUFPLE1BQU0sbUJBQW1CLGFBQWEsQ0FBQztBQUU5QyxpQ0FBaUM7QUFDakMsd0JBQXNCLG1CQUFtQixDQUN2QyxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSx3QkFBd0IsR0FBRyxTQUFTLENBQUMsR0FBRyxlQUFlLGdDQVF6RjtBQUVEOzs7Ozs7O0dBT0c7QUFDSCx3QkFBc0IsY0FBYyxDQUNsQyxNQUFNLEVBQUUsY0FBYyxHQUFHLGVBQWUsRUFDeEMsSUFBSSxFQUFFLFlBQVksRUFDbEIsSUFBSSxHQUFFO0lBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQTtDQUE2QixHQUMzRCxPQUFPLENBQUMsUUFBUSxDQUFDLENBSW5CIn0=
|
package/dest/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAO9D,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAuB,mBAAmB,EAAE,MAAM,mDAAmD,CAAC;AAE7G,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAE9C,iCAAiC;AACjC,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,wBAAwB,GAAG,SAAS,CAAC,GAAG,eAAe,gCAQzF;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,GAAG,eAAe,EACxC,IAAI,EAAE,YAAY,EAClB,IAAI,GAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAA6B,GAC3D,OAAO,CAAC,QAAQ,CAAC,CAInB"}
|
package/dest/factory.js
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
3
|
import { createStore } from '@aztec/kv-store/lmdb-v2';
|
|
3
|
-
import {
|
|
4
|
-
import { protocolContractNames, protocolContractTreeRoot } from '@aztec/protocol-contracts';
|
|
4
|
+
import { protocolContractNames } from '@aztec/protocol-contracts';
|
|
5
5
|
import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
|
|
6
6
|
import { FunctionType, decodeFunctionSignature } from '@aztec/stdlib/abi';
|
|
7
7
|
import { computePublicBytecodeCommitment } from '@aztec/stdlib/contract';
|
|
8
|
-
import { getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
|
|
9
8
|
import { Archiver } from './archiver/archiver.js';
|
|
10
9
|
import { ARCHIVER_DB_VERSION, KVArchiverDataStore } from './archiver/kv_archiver_store/kv_archiver_store.js';
|
|
11
|
-
import { createArchiverClient } from './rpc/index.js';
|
|
12
10
|
export const ARCHIVER_STORE_NAME = 'archiver';
|
|
13
11
|
/** Creates an archiver store. */ export async function createArchiverStore(userConfig) {
|
|
14
12
|
const config = {
|
|
15
13
|
...userConfig,
|
|
16
|
-
|
|
14
|
+
dataStoreMapSizeKb: userConfig.archiverStoreMapSizeKb ?? userConfig.dataStoreMapSizeKb
|
|
17
15
|
};
|
|
18
16
|
const store = await createStore(ARCHIVER_STORE_NAME, ARCHIVER_DB_VERSION, config, createLogger('archiver:lmdb'));
|
|
19
17
|
return new KVArchiverDataStore(store, config.maxLogs);
|
|
@@ -32,16 +30,6 @@ export const ARCHIVER_STORE_NAME = 'archiver';
|
|
|
32
30
|
await registerProtocolContracts(archiverStore);
|
|
33
31
|
return Archiver.createAndSync(config, archiverStore, deps, opts.blockUntilSync);
|
|
34
32
|
}
|
|
35
|
-
/**
|
|
36
|
-
* Creates a remote archiver client.
|
|
37
|
-
* @param config - The archiver configuration.
|
|
38
|
-
* @returns The remote archiver client.
|
|
39
|
-
*/ export function createRemoteArchiver(config) {
|
|
40
|
-
if (!config.archiverUrl) {
|
|
41
|
-
throw new Error('Archiver URL is required');
|
|
42
|
-
}
|
|
43
|
-
return createArchiverClient(config.archiverUrl, getComponentsVersionsFromConfig(config, protocolContractTreeRoot, getVKTreeRoot()));
|
|
44
|
-
}
|
|
45
33
|
async function registerProtocolContracts(store) {
|
|
46
34
|
const blockNumber = 0;
|
|
47
35
|
for (const name of protocolContractNames){
|
|
@@ -59,9 +47,9 @@ async function registerProtocolContracts(store) {
|
|
|
59
47
|
contractClassPublic
|
|
60
48
|
], [
|
|
61
49
|
bytecodeCommitment
|
|
62
|
-
], blockNumber);
|
|
50
|
+
], BlockNumber(blockNumber));
|
|
63
51
|
await store.addContractInstances([
|
|
64
52
|
contract.instance
|
|
65
|
-
], blockNumber);
|
|
53
|
+
], BlockNumber(blockNumber));
|
|
66
54
|
}
|
|
67
55
|
}
|
package/dest/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export * from './archiver/index.js';
|
|
2
2
|
export * from './factory.js';
|
|
3
3
|
export * from './rpc/index.js';
|
|
4
|
-
export {
|
|
5
|
-
//# sourceMappingURL=
|
|
4
|
+
export { retrieveCheckpointsFromRollup, retrieveL2ProofVerifiedEvents } from './archiver/l1/data_retrieval.js';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFFL0IsT0FBTyxFQUFFLDZCQUE2QixFQUFFLDZCQUE2QixFQUFFLE1BQU0saUNBQWlDLENBQUMifQ==
|
package/dest/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,6BAA6B,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC"}
|
package/dest/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export * from './archiver/index.js';
|
|
2
2
|
export * from './factory.js';
|
|
3
3
|
export * from './rpc/index.js';
|
|
4
|
-
export {
|
|
4
|
+
export { retrieveCheckpointsFromRollup, retrieveL2ProofVerifiedEvents } from './archiver/l1/data_retrieval.js';
|
package/dest/rpc/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type ArchiverApi } from '@aztec/stdlib/interfaces/server';
|
|
2
2
|
import { type ComponentsVersions } from '@aztec/stdlib/versioning';
|
|
3
|
-
export declare function createArchiverClient(url: string, versions: Partial<ComponentsVersions>, fetch?: (host: string, body: unknown, extraHeaders?: Record<string, string
|
|
3
|
+
export declare function createArchiverClient(url: string, versions: Partial<ComponentsVersions>, fetch?: (host: string, body: unknown, extraHeaders?: Record<string, string> | undefined, noRetry?: boolean | undefined) => Promise<{
|
|
4
4
|
response: any;
|
|
5
5
|
headers: {
|
|
6
6
|
get: (header: string) => string | null | undefined;
|
|
7
7
|
};
|
|
8
8
|
}>): ArchiverApi;
|
|
9
|
-
//# sourceMappingURL=
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ycGMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssV0FBVyxFQUFxQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUFnQyxNQUFNLDBCQUEwQixDQUFDO0FBR2pHLHdCQUFnQixvQkFBb0IsQ0FDbEMsR0FBRyxFQUFFLE1BQU0sRUFDWCxRQUFRLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ3JDLEtBQUs7Ozs7O0VBQW1DLEdBQ3ZDLFdBQVcsQ0FNYiJ9
|
package/dest/test/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export * from './mock_l2_block_source.js';
|
|
2
2
|
export * from './mock_l1_to_l2_message_source.js';
|
|
3
3
|
export * from './mock_archiver.js';
|
|
4
|
-
//# sourceMappingURL=
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLG9CQUFvQixDQUFDIn0=
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
+
import { type L2BlockSource } from '@aztec/stdlib/block';
|
|
4
|
+
import type { Checkpoint } from '@aztec/stdlib/checkpoint';
|
|
3
5
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
4
6
|
import { MockL2BlockSource } from './mock_l2_block_source.js';
|
|
5
7
|
/**
|
|
@@ -7,17 +9,23 @@ import { MockL2BlockSource } from './mock_l2_block_source.js';
|
|
|
7
9
|
*/
|
|
8
10
|
export declare class MockArchiver extends MockL2BlockSource implements L2BlockSource, L1ToL2MessageSource {
|
|
9
11
|
private messageSource;
|
|
10
|
-
setL1ToL2Messages(
|
|
11
|
-
getL1ToL2Messages(
|
|
12
|
+
setL1ToL2Messages(checkpointNumber: CheckpointNumber, msgs: Fr[]): void;
|
|
13
|
+
getL1ToL2Messages(checkpointNumber: CheckpointNumber): Promise<Fr[]>;
|
|
12
14
|
getL1ToL2MessageIndex(_l1ToL2Message: Fr): Promise<bigint | undefined>;
|
|
13
15
|
}
|
|
14
16
|
/**
|
|
15
17
|
* A mocked implementation of the archiver with a set of precomputed blocks and messages.
|
|
16
18
|
*/
|
|
17
19
|
export declare class MockPrefilledArchiver extends MockArchiver {
|
|
18
|
-
private
|
|
19
|
-
constructor(
|
|
20
|
-
|
|
20
|
+
private prefilled;
|
|
21
|
+
constructor(prefilled: {
|
|
22
|
+
checkpoint: Checkpoint;
|
|
23
|
+
messages: Fr[];
|
|
24
|
+
}[]);
|
|
25
|
+
setPrefilled(prefilled: {
|
|
26
|
+
checkpoint: Checkpoint;
|
|
27
|
+
messages: Fr[];
|
|
28
|
+
}[]): void;
|
|
21
29
|
createBlocks(numBlocks: number): Promise<void>;
|
|
22
30
|
}
|
|
23
|
-
//# sourceMappingURL=
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19hcmNoaXZlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvbW9ja19hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sRUFBVyxLQUFLLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xFLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFOUQ7O0dBRUc7QUFDSCxxQkFBYSxZQUFhLFNBQVEsaUJBQWtCLFlBQVcsYUFBYSxFQUFFLG1CQUFtQjtJQUMvRixPQUFPLENBQUMsYUFBYSxDQUFrQztJQUVoRCxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBRXRFO0lBRUQsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBRW5FO0lBRUQscUJBQXFCLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUVyRTtDQUNGO0FBRUQ7O0dBRUc7QUFDSCxxQkFBYSxxQkFBc0IsU0FBUSxZQUFZO0lBQ3JELE9BQU8sQ0FBQyxTQUFTLENBQW9CO0lBRXJDLFlBQVksU0FBUyxFQUFFO1FBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztRQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQTtLQUFFLEVBQUUsRUFHbEU7SUFFTSxZQUFZLENBQUMsU0FBUyxFQUFFO1FBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztRQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQTtLQUFFLEVBQUUsUUFRMUU7SUFFZSxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0saUJBWTdDO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_archiver.d.ts","sourceRoot":"","sources":["../../src/test/mock_archiver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"mock_archiver.d.ts","sourceRoot":"","sources":["../../src/test/mock_archiver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAW,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;GAEG;AACH,qBAAa,YAAa,SAAQ,iBAAkB,YAAW,aAAa,EAAE,mBAAmB;IAC/F,OAAO,CAAC,aAAa,CAAkC;IAEhD,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,QAEtE;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;CACF;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,OAAO,CAAC,SAAS,CAAoB;IAErC,YAAY,SAAS,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,EAAE,EAAE,CAAA;KAAE,EAAE,EAGlE;IAEM,YAAY,CAAC,SAAS,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,EAAE,EAAE,CAAA;KAAE,EAAE,QAQ1E;IAEe,YAAY,CAAC,SAAS,EAAE,MAAM,iBAY7C;CACF"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import { L2Block } from '@aztec/stdlib/block';
|
|
1
2
|
import { MockL1ToL2MessageSource } from './mock_l1_to_l2_message_source.js';
|
|
2
3
|
import { MockL2BlockSource } from './mock_l2_block_source.js';
|
|
3
4
|
/**
|
|
4
5
|
* A mocked implementation of the archiver that implements L2BlockSource and L1ToL2MessageSource.
|
|
5
6
|
*/ export class MockArchiver extends MockL2BlockSource {
|
|
6
7
|
messageSource = new MockL1ToL2MessageSource(0);
|
|
7
|
-
setL1ToL2Messages(
|
|
8
|
-
this.messageSource.setL1ToL2Messages(
|
|
8
|
+
setL1ToL2Messages(checkpointNumber, msgs) {
|
|
9
|
+
this.messageSource.setL1ToL2Messages(checkpointNumber, msgs);
|
|
9
10
|
}
|
|
10
|
-
getL1ToL2Messages(
|
|
11
|
-
return this.messageSource.getL1ToL2Messages(
|
|
11
|
+
getL1ToL2Messages(checkpointNumber) {
|
|
12
|
+
return this.messageSource.getL1ToL2Messages(checkpointNumber);
|
|
12
13
|
}
|
|
13
14
|
getL1ToL2MessageIndex(_l1ToL2Message) {
|
|
14
15
|
return this.messageSource.getL1ToL2MessageIndex(_l1ToL2Message);
|
|
@@ -17,24 +18,28 @@ import { MockL2BlockSource } from './mock_l2_block_source.js';
|
|
|
17
18
|
/**
|
|
18
19
|
* A mocked implementation of the archiver with a set of precomputed blocks and messages.
|
|
19
20
|
*/ export class MockPrefilledArchiver extends MockArchiver {
|
|
20
|
-
|
|
21
|
-
constructor(
|
|
21
|
+
prefilled = [];
|
|
22
|
+
constructor(prefilled){
|
|
22
23
|
super();
|
|
23
|
-
this.
|
|
24
|
-
messages.forEach((msgs, i)=>this.setL1ToL2Messages(i + 1, msgs));
|
|
24
|
+
this.setPrefilled(prefilled);
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
for (const
|
|
28
|
-
this.
|
|
26
|
+
setPrefilled(prefilled) {
|
|
27
|
+
for (const { checkpoint, messages } of prefilled){
|
|
28
|
+
this.prefilled[checkpoint.number - 1] = checkpoint;
|
|
29
|
+
if (checkpoint.blocks.length !== 1) {
|
|
30
|
+
throw new Error('Prefilled checkpoint must only have 1 block at the moment.');
|
|
31
|
+
}
|
|
32
|
+
this.setL1ToL2Messages(checkpoint.number, messages);
|
|
29
33
|
}
|
|
30
|
-
messages.forEach((msgs, i)=>this.setL1ToL2Messages(blocks[i].number, msgs));
|
|
31
34
|
}
|
|
32
35
|
createBlocks(numBlocks) {
|
|
33
|
-
|
|
36
|
+
const flattenedBlocks = this.prefilled.flatMap((c)=>c.blocks);
|
|
37
|
+
if (this.l2Blocks.length + numBlocks > flattenedBlocks.length) {
|
|
34
38
|
throw new Error(`Not enough precomputed blocks to create ${numBlocks} more blocks (already at ${this.l2Blocks.length})`);
|
|
35
39
|
}
|
|
36
40
|
const fromBlock = this.l2Blocks.length;
|
|
37
|
-
|
|
41
|
+
// TODO: Add L2 blocks and checkpoints separately once archiver has the apis for that.
|
|
42
|
+
this.addBlocks(this.prefilled.slice(fromBlock, fromBlock + numBlocks).map((c)=>L2Block.fromCheckpoint(c)));
|
|
38
43
|
return Promise.resolve();
|
|
39
44
|
}
|
|
40
45
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BlockNumber, type 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvbW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRTs7R0FFRztBQUNILHFCQUFhLHVCQUF3QixZQUFXLG1CQUFtQjtJQUdyRCxPQUFPLENBQUMsV0FBVztJQUYvQixPQUFPLENBQUMscUJBQXFCLENBQXFDO0lBRWxFLFlBQW9CLFdBQVcsRUFBRSxNQUFNLEVBQUk7SUFFcEMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUV0RTtJQUVNLGNBQWMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxRQUV4QztJQUVELGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUVuRTtJQUVELHFCQUFxQixDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FFckU7SUFFRCxjQUFjLHlCQUViO0lBRUQsU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FRM0I7Q0FDRiJ9
|
|
@@ -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,KAAK,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,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,CAQ3B;CACF"}
|
|
@@ -1,32 +1,33 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BlockNumber } 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
29
|
const tip = {
|
|
29
|
-
number,
|
|
30
|
+
number: BlockNumber(number),
|
|
30
31
|
hash: new Fr(number).toString()
|
|
31
32
|
};
|
|
32
33
|
return Promise.resolve({
|