@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.
Files changed (127) hide show
  1. package/README.md +27 -6
  2. package/dest/archiver/archiver.d.ts +87 -64
  3. package/dest/archiver/archiver.d.ts.map +1 -1
  4. package/dest/archiver/archiver.js +463 -278
  5. package/dest/archiver/archiver_store.d.ts +46 -28
  6. package/dest/archiver/archiver_store.d.ts.map +1 -1
  7. package/dest/archiver/archiver_store_test_suite.d.ts +1 -1
  8. package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -1
  9. package/dest/archiver/archiver_store_test_suite.js +316 -143
  10. package/dest/archiver/config.d.ts +6 -23
  11. package/dest/archiver/config.d.ts.map +1 -1
  12. package/dest/archiver/config.js +19 -12
  13. package/dest/archiver/errors.d.ts +1 -1
  14. package/dest/archiver/errors.d.ts.map +1 -1
  15. package/dest/archiver/index.d.ts +1 -1
  16. package/dest/archiver/instrumentation.d.ts +5 -3
  17. package/dest/archiver/instrumentation.d.ts.map +1 -1
  18. package/dest/archiver/instrumentation.js +14 -0
  19. package/dest/archiver/kv_archiver_store/block_store.d.ts +45 -9
  20. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
  21. package/dest/archiver/kv_archiver_store/block_store.js +99 -12
  22. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +2 -2
  23. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +1 -1
  24. package/dest/archiver/kv_archiver_store/contract_class_store.js +1 -1
  25. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +2 -2
  26. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +1 -1
  27. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +30 -30
  28. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
  29. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +26 -15
  30. package/dest/archiver/kv_archiver_store/log_store.d.ts +3 -10
  31. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +1 -1
  32. package/dest/archiver/kv_archiver_store/log_store.js +4 -26
  33. package/dest/archiver/kv_archiver_store/message_store.d.ts +6 -5
  34. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +1 -1
  35. package/dest/archiver/kv_archiver_store/message_store.js +15 -14
  36. package/dest/archiver/l1/bin/retrieve-calldata.d.ts +3 -0
  37. package/dest/archiver/l1/bin/retrieve-calldata.d.ts.map +1 -0
  38. package/dest/archiver/l1/bin/retrieve-calldata.js +147 -0
  39. package/dest/archiver/l1/calldata_retriever.d.ts +98 -0
  40. package/dest/archiver/l1/calldata_retriever.d.ts.map +1 -0
  41. package/dest/archiver/l1/calldata_retriever.js +403 -0
  42. package/dest/archiver/l1/data_retrieval.d.ts +87 -0
  43. package/dest/archiver/l1/data_retrieval.d.ts.map +1 -0
  44. package/dest/archiver/{data_retrieval.js → l1/data_retrieval.js} +118 -154
  45. package/dest/archiver/l1/debug_tx.d.ts +19 -0
  46. package/dest/archiver/l1/debug_tx.d.ts.map +1 -0
  47. package/dest/archiver/l1/debug_tx.js +73 -0
  48. package/dest/archiver/l1/spire_proposer.d.ts +70 -0
  49. package/dest/archiver/l1/spire_proposer.d.ts.map +1 -0
  50. package/dest/archiver/l1/spire_proposer.js +157 -0
  51. package/dest/archiver/l1/trace_tx.d.ts +97 -0
  52. package/dest/archiver/l1/trace_tx.d.ts.map +1 -0
  53. package/dest/archiver/l1/trace_tx.js +91 -0
  54. package/dest/archiver/l1/types.d.ts +12 -0
  55. package/dest/archiver/l1/types.d.ts.map +1 -0
  56. package/dest/archiver/l1/types.js +3 -0
  57. package/dest/archiver/l1/validate_trace.d.ts +29 -0
  58. package/dest/archiver/l1/validate_trace.d.ts.map +1 -0
  59. package/dest/archiver/l1/validate_trace.js +150 -0
  60. package/dest/archiver/structs/data_retrieval.d.ts +1 -1
  61. package/dest/archiver/structs/inbox_message.d.ts +4 -4
  62. package/dest/archiver/structs/inbox_message.d.ts.map +1 -1
  63. package/dest/archiver/structs/inbox_message.js +6 -5
  64. package/dest/archiver/structs/published.d.ts +3 -2
  65. package/dest/archiver/structs/published.d.ts.map +1 -1
  66. package/dest/archiver/validation.d.ts +10 -4
  67. package/dest/archiver/validation.d.ts.map +1 -1
  68. package/dest/archiver/validation.js +66 -44
  69. package/dest/factory.d.ts +3 -11
  70. package/dest/factory.d.ts.map +1 -1
  71. package/dest/factory.js +5 -17
  72. package/dest/index.d.ts +2 -2
  73. package/dest/index.d.ts.map +1 -1
  74. package/dest/index.js +1 -1
  75. package/dest/rpc/index.d.ts +2 -2
  76. package/dest/test/index.d.ts +1 -1
  77. package/dest/test/mock_archiver.d.ts +16 -8
  78. package/dest/test/mock_archiver.d.ts.map +1 -1
  79. package/dest/test/mock_archiver.js +19 -14
  80. package/dest/test/mock_l1_to_l2_message_source.d.ts +7 -6
  81. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  82. package/dest/test/mock_l1_to_l2_message_source.js +10 -9
  83. package/dest/test/mock_l2_block_source.d.ts +24 -20
  84. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  85. package/dest/test/mock_l2_block_source.js +79 -13
  86. package/dest/test/mock_structs.d.ts +3 -2
  87. package/dest/test/mock_structs.d.ts.map +1 -1
  88. package/dest/test/mock_structs.js +9 -8
  89. package/package.json +18 -17
  90. package/src/archiver/archiver.ts +610 -363
  91. package/src/archiver/archiver_store.ts +55 -28
  92. package/src/archiver/archiver_store_test_suite.ts +369 -143
  93. package/src/archiver/config.ts +26 -51
  94. package/src/archiver/instrumentation.ts +19 -2
  95. package/src/archiver/kv_archiver_store/block_store.ts +139 -21
  96. package/src/archiver/kv_archiver_store/contract_class_store.ts +1 -1
  97. package/src/archiver/kv_archiver_store/contract_instance_store.ts +1 -1
  98. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +48 -33
  99. package/src/archiver/kv_archiver_store/log_store.ts +4 -30
  100. package/src/archiver/kv_archiver_store/message_store.ts +21 -18
  101. package/src/archiver/l1/README.md +98 -0
  102. package/src/archiver/l1/bin/retrieve-calldata.ts +182 -0
  103. package/src/archiver/l1/calldata_retriever.ts +531 -0
  104. package/src/archiver/{data_retrieval.ts → l1/data_retrieval.ts} +198 -242
  105. package/src/archiver/l1/debug_tx.ts +99 -0
  106. package/src/archiver/l1/spire_proposer.ts +160 -0
  107. package/src/archiver/l1/trace_tx.ts +128 -0
  108. package/src/archiver/l1/types.ts +13 -0
  109. package/src/archiver/l1/validate_trace.ts +211 -0
  110. package/src/archiver/structs/inbox_message.ts +8 -8
  111. package/src/archiver/structs/published.ts +2 -1
  112. package/src/archiver/validation.ts +86 -32
  113. package/src/factory.ts +6 -26
  114. package/src/index.ts +1 -1
  115. package/src/test/fixtures/debug_traceTransaction-multicall3.json +88 -0
  116. package/src/test/fixtures/debug_traceTransaction-multiplePropose.json +153 -0
  117. package/src/test/fixtures/debug_traceTransaction-proxied.json +122 -0
  118. package/src/test/fixtures/trace_transaction-multicall3.json +65 -0
  119. package/src/test/fixtures/trace_transaction-multiplePropose.json +319 -0
  120. package/src/test/fixtures/trace_transaction-proxied.json +128 -0
  121. package/src/test/fixtures/trace_transaction-randomRevert.json +216 -0
  122. package/src/test/mock_archiver.ts +22 -16
  123. package/src/test/mock_l1_to_l2_message_source.ts +10 -9
  124. package/src/test/mock_l2_block_source.ts +110 -27
  125. package/src/test/mock_structs.ts +10 -9
  126. package/dest/archiver/data_retrieval.d.ts +0 -78
  127. 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/fields';
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
- l2BlockNumber: UInt32;
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=inbox_message.d.ts.map
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,QAAQ,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,EAAE,CAAC;IACT,aAAa,EAAE,MAAM,CAAC;IACtB,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
+ {"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/fields';
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.l2BlockNumber),
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 l2BlockNumber = reader.readNumber();
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
- l2BlockNumber,
36
+ checkpointNumber,
36
37
  rollingHash
37
38
  };
38
39
  }
@@ -1,2 +1,3 @@
1
- export type { PublishedL2Block, L1PublishedData } from '@aztec/stdlib/block';
2
- //# sourceMappingURL=published.d.ts.map
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,qBAAqB,CAAC"}
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 PublishedL2Block, type ValidateBlockResult } from '@aztec/stdlib/block';
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
- * Validates the attestations submitted for the given block.
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 validateBlockAttestations(publishedBlock: PublishedL2Block, epochCache: EpochCache, constants: Pick<L1RollupConstants, 'epochDuration'>, logger?: Logger): Promise<ValidateBlockResult>;
11
- //# sourceMappingURL=validation.d.ts.map
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;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EAEzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,iBAAiB,EAAkB,MAAM,6BAA6B,CAAC;AAErF,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,cAAc,EAAE,gBAAgB,EAChC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,EACnD,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,CAAC,CAiD9B"}
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 { getAttestationsFromPublishedL2Block } from '@aztec/stdlib/block';
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
- * Validates the attestations submitted for the given block.
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 validateBlockAttestations(publishedBlock, epochCache, constants, logger) {
7
- const attestations = getAttestationsFromPublishedL2Block(publishedBlock);
8
- const { block } = publishedBlock;
9
- const blockHash = await block.hash().then((hash)=>hash.toString());
10
- const archiveRoot = block.archive.root.toString();
11
- const slot = block.header.getSlot();
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
- blockNumber: block.number,
25
+ checkpointNumber: checkpoint.number,
16
26
  slot,
17
27
  epoch,
18
- blockHash,
28
+ headerHash,
19
29
  archiveRoot
20
30
  };
21
- logger?.debug(`Validating attestations for block ${block.number} at slot ${slot} in epoch ${epoch}`, {
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: attestations.map((a)=>a.getSender().toString()),
24
- postedAttestations: publishedBlock.attestations.map((a)=>a.address.isZero() ? a.signature.toString() : a.address.toString()),
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 block without validation.`, logData);
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
- for(let i = 0; i < attestations.length; i++){
36
- const attestation = attestations[i];
37
- const signer = attestation.getSender().toString();
38
- if (!committeeSet.has(signer)) {
39
- logger?.warn(`Attestation from non-committee member ${signer} at slot ${slot}`, {
40
- committee
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
- valid: false,
45
- reason,
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
- if (attestations.length < requiredAttestationCount) {
56
- logger?.warn(`Insufficient attestations for block at slot ${slot}`, {
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: attestations.length,
89
+ actualAttestations: validAttestationCount,
59
90
  ...logData
60
91
  });
61
- const reason = 'insufficient-attestations';
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(`Block attestations validated successfully for block ${block.number} at slot ${slot}`, logData);
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 { L2BlockSourceEventEmitter } from '@aztec/stdlib/block';
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<ArchiverApi & Service & L2BlockSourceEventEmitter>;
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=
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAG5E,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAuB,mBAAmB,EAAE,MAAM,mDAAmD,CAAC;AAG7G,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,WAAW,GAAG,OAAO,GAAG,yBAAyB,CAAC,CAI5D;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,CASxE"}
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 { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
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
- dataStoreMapSizeKB: userConfig.archiverStoreMapSizeKb ?? userConfig.dataStoreMapSizeKB
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 { retrieveBlocksFromRollup, retrieveL2ProofVerifiedEvents } from './archiver/data_retrieval.js';
5
- //# sourceMappingURL=index.d.ts.map
4
+ export { retrieveCheckpointsFromRollup, retrieveL2ProofVerifiedEvents } from './archiver/l1/data_retrieval.js';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFFL0IsT0FBTyxFQUFFLDZCQUE2QixFQUFFLDZCQUE2QixFQUFFLE1BQU0saUNBQWlDLENBQUMifQ==
@@ -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,wBAAwB,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC"}
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 { retrieveBlocksFromRollup, retrieveL2ProofVerifiedEvents } from './archiver/data_retrieval.js';
4
+ export { retrieveCheckpointsFromRollup, retrieveL2ProofVerifiedEvents } from './archiver/l1/data_retrieval.js';
@@ -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>, noRetry?: boolean) => Promise<{
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=index.d.ts.map
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ycGMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssV0FBVyxFQUFxQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUFnQyxNQUFNLDBCQUEwQixDQUFDO0FBR2pHLHdCQUFnQixvQkFBb0IsQ0FDbEMsR0FBRyxFQUFFLE1BQU0sRUFDWCxRQUFRLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ3JDLEtBQUs7Ozs7O0VBQW1DLEdBQ3ZDLFdBQVcsQ0FNYiJ9
@@ -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=index.d.ts.map
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLG9CQUFvQixDQUFDIn0=
@@ -1,5 +1,7 @@
1
- import type { Fr } from '@aztec/foundation/fields';
2
- import type { L2Block, L2BlockSource } from '@aztec/stdlib/block';
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(blockNumber: number, msgs: Fr[]): void;
11
- getL1ToL2Messages(blockNumber: number): Promise<Fr[]>;
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 precomputed;
19
- constructor(precomputed: L2Block[], messages: Fr[][]);
20
- setPrefilledBlocks(blocks: L2Block[], messages: Fr[][]): void;
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=mock_archiver.d.ts.map
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,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,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,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;IAIxD,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAIrD,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAGvE;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,OAAO,CAAC,WAAW,CAAY;gBAEnB,WAAW,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE;IAM7C,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE;IAO7C,YAAY,CAAC,SAAS,EAAE,MAAM;CAW/C"}
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(blockNumber, msgs) {
8
- this.messageSource.setL1ToL2Messages(blockNumber, msgs);
8
+ setL1ToL2Messages(checkpointNumber, msgs) {
9
+ this.messageSource.setL1ToL2Messages(checkpointNumber, msgs);
9
10
  }
10
- getL1ToL2Messages(blockNumber) {
11
- return this.messageSource.getL1ToL2Messages(blockNumber);
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
- precomputed;
21
- constructor(precomputed, messages){
21
+ prefilled = [];
22
+ constructor(prefilled){
22
23
  super();
23
- this.precomputed = precomputed.slice();
24
- messages.forEach((msgs, i)=>this.setL1ToL2Messages(i + 1, msgs));
24
+ this.setPrefilled(prefilled);
25
25
  }
26
- setPrefilledBlocks(blocks, messages) {
27
- for (const block of blocks){
28
- this.precomputed[block.number - 1] = block;
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
- if (this.l2Blocks.length + numBlocks > this.precomputed.length) {
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
- this.addBlocks(this.precomputed.slice(fromBlock, fromBlock + numBlocks));
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 { Fr } from '@aztec/foundation/fields';
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 messagesPerBlock;
10
+ private messagesPerCheckpoint;
10
11
  constructor(blockNumber: number);
11
- setL1ToL2Messages(blockNumber: number, msgs: Fr[]): void;
12
+ setL1ToL2Messages(checkpointNumber: CheckpointNumber, msgs: Fr[]): void;
12
13
  setBlockNumber(blockNumber: number): void;
13
- getL1ToL2Messages(blockNumber: number): Promise<Fr[]>;
14
+ getL1ToL2Messages(checkpointNumber: CheckpointNumber): Promise<Fr[]>;
14
15
  getL1ToL2MessageIndex(_l1ToL2Message: Fr): Promise<bigint | undefined>;
15
- getBlockNumber(): Promise<number>;
16
+ getBlockNumber(): Promise<BlockNumber>;
16
17
  getL2Tips(): Promise<L2Tips>;
17
18
  }
18
- //# sourceMappingURL=mock_l1_to_l2_message_source.d.ts.map
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,0BAA0B,CAAC;AAC9C,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,gBAAgB,CAA2B;gBAE/B,WAAW,EAAE,MAAM;IAEhC,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;IAIjD,cAAc,CAAC,WAAW,EAAE,MAAM;IAIzC,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAIrD,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAItE,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAIjC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;CAS7B"}
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 { Fr } from '@aztec/foundation/fields';
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
- messagesPerBlock;
7
+ messagesPerCheckpoint;
7
8
  constructor(blockNumber){
8
9
  this.blockNumber = blockNumber;
9
- this.messagesPerBlock = new Map();
10
+ this.messagesPerCheckpoint = new Map();
10
11
  }
11
- setL1ToL2Messages(blockNumber, msgs) {
12
- this.messagesPerBlock.set(blockNumber, msgs);
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(blockNumber) {
18
- return Promise.resolve(this.messagesPerBlock.get(blockNumber) ?? []);
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({