@aztec/archiver 0.0.0-test.1 → 0.0.1-commit.0b941701

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 (219) hide show
  1. package/README.md +164 -9
  2. package/dest/archiver.d.ts +135 -0
  3. package/dest/archiver.d.ts.map +1 -0
  4. package/dest/archiver.js +768 -0
  5. package/dest/config.d.ts +30 -0
  6. package/dest/config.d.ts.map +1 -0
  7. package/dest/config.js +71 -0
  8. package/dest/errors.d.ts +41 -0
  9. package/dest/errors.d.ts.map +1 -0
  10. package/dest/errors.js +62 -0
  11. package/dest/factory.d.ts +11 -16
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +102 -53
  14. package/dest/index.d.ts +10 -4
  15. package/dest/index.d.ts.map +1 -1
  16. package/dest/index.js +8 -3
  17. package/dest/interfaces.d.ts +9 -0
  18. package/dest/interfaces.d.ts.map +1 -0
  19. package/dest/interfaces.js +3 -0
  20. package/dest/l1/bin/retrieve-calldata.d.ts +3 -0
  21. package/dest/l1/bin/retrieve-calldata.d.ts.map +1 -0
  22. package/dest/l1/bin/retrieve-calldata.js +149 -0
  23. package/dest/l1/calldata_retriever.d.ts +112 -0
  24. package/dest/l1/calldata_retriever.d.ts.map +1 -0
  25. package/dest/l1/calldata_retriever.js +471 -0
  26. package/dest/l1/data_retrieval.d.ts +88 -0
  27. package/dest/l1/data_retrieval.d.ts.map +1 -0
  28. package/dest/l1/data_retrieval.js +312 -0
  29. package/dest/l1/debug_tx.d.ts +19 -0
  30. package/dest/l1/debug_tx.d.ts.map +1 -0
  31. package/dest/l1/debug_tx.js +73 -0
  32. package/dest/l1/spire_proposer.d.ts +70 -0
  33. package/dest/l1/spire_proposer.d.ts.map +1 -0
  34. package/dest/l1/spire_proposer.js +157 -0
  35. package/dest/l1/trace_tx.d.ts +97 -0
  36. package/dest/l1/trace_tx.d.ts.map +1 -0
  37. package/dest/l1/trace_tx.js +91 -0
  38. package/dest/l1/types.d.ts +12 -0
  39. package/dest/l1/types.d.ts.map +1 -0
  40. package/dest/l1/types.js +3 -0
  41. package/dest/l1/validate_trace.d.ts +29 -0
  42. package/dest/l1/validate_trace.d.ts.map +1 -0
  43. package/dest/l1/validate_trace.js +150 -0
  44. package/dest/modules/data_source_base.d.ts +84 -0
  45. package/dest/modules/data_source_base.d.ts.map +1 -0
  46. package/dest/modules/data_source_base.js +260 -0
  47. package/dest/modules/data_store_updater.d.ts +73 -0
  48. package/dest/modules/data_store_updater.d.ts.map +1 -0
  49. package/dest/modules/data_store_updater.js +302 -0
  50. package/dest/modules/instrumentation.d.ts +37 -0
  51. package/dest/modules/instrumentation.d.ts.map +1 -0
  52. package/dest/{archiver → modules}/instrumentation.js +45 -41
  53. package/dest/modules/l1_synchronizer.d.ts +75 -0
  54. package/dest/modules/l1_synchronizer.d.ts.map +1 -0
  55. package/dest/modules/l1_synchronizer.js +1113 -0
  56. package/dest/modules/validation.d.ts +17 -0
  57. package/dest/modules/validation.d.ts.map +1 -0
  58. package/dest/modules/validation.js +104 -0
  59. package/dest/store/block_store.d.ts +192 -0
  60. package/dest/store/block_store.d.ts.map +1 -0
  61. package/dest/store/block_store.js +721 -0
  62. package/dest/store/contract_class_store.d.ts +18 -0
  63. package/dest/store/contract_class_store.d.ts.map +1 -0
  64. package/dest/{archiver/kv_archiver_store → store}/contract_class_store.js +14 -20
  65. package/dest/store/contract_instance_store.d.ts +24 -0
  66. package/dest/store/contract_instance_store.d.ts.map +1 -0
  67. package/dest/store/contract_instance_store.js +77 -0
  68. package/dest/store/kv_archiver_store.d.ts +340 -0
  69. package/dest/store/kv_archiver_store.d.ts.map +1 -0
  70. package/dest/store/kv_archiver_store.js +447 -0
  71. package/dest/store/log_store.d.ts +54 -0
  72. package/dest/store/log_store.d.ts.map +1 -0
  73. package/dest/store/log_store.js +436 -0
  74. package/dest/store/message_store.d.ts +40 -0
  75. package/dest/store/message_store.d.ts.map +1 -0
  76. package/dest/store/message_store.js +188 -0
  77. package/dest/structs/data_retrieval.d.ts +27 -0
  78. package/dest/structs/data_retrieval.d.ts.map +1 -0
  79. package/dest/structs/inbox_message.d.ts +15 -0
  80. package/dest/structs/inbox_message.d.ts.map +1 -0
  81. package/dest/structs/inbox_message.js +39 -0
  82. package/dest/structs/published.d.ts +2 -0
  83. package/dest/structs/published.d.ts.map +1 -0
  84. package/dest/structs/published.js +1 -0
  85. package/dest/test/fake_l1_state.d.ts +190 -0
  86. package/dest/test/fake_l1_state.d.ts.map +1 -0
  87. package/dest/test/fake_l1_state.js +383 -0
  88. package/dest/test/index.d.ts +2 -1
  89. package/dest/test/index.d.ts.map +1 -1
  90. package/dest/test/index.js +1 -0
  91. package/dest/test/mock_archiver.d.ts +16 -8
  92. package/dest/test/mock_archiver.d.ts.map +1 -1
  93. package/dest/test/mock_archiver.js +18 -14
  94. package/dest/test/mock_l1_to_l2_message_source.d.ts +9 -6
  95. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  96. package/dest/test/mock_l1_to_l2_message_source.js +30 -7
  97. package/dest/test/mock_l2_block_source.d.ts +62 -16
  98. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  99. package/dest/test/mock_l2_block_source.js +263 -32
  100. package/dest/test/mock_structs.d.ts +84 -0
  101. package/dest/test/mock_structs.d.ts.map +1 -0
  102. package/dest/test/mock_structs.js +169 -0
  103. package/package.json +30 -33
  104. package/src/archiver.ts +523 -0
  105. package/src/config.ts +95 -0
  106. package/src/errors.ts +102 -0
  107. package/src/factory.ts +142 -69
  108. package/src/index.ts +10 -3
  109. package/src/interfaces.ts +9 -0
  110. package/src/l1/README.md +98 -0
  111. package/src/l1/bin/retrieve-calldata.ts +187 -0
  112. package/src/l1/calldata_retriever.ts +641 -0
  113. package/src/l1/data_retrieval.ts +495 -0
  114. package/src/l1/debug_tx.ts +99 -0
  115. package/src/l1/spire_proposer.ts +160 -0
  116. package/src/l1/trace_tx.ts +128 -0
  117. package/src/l1/types.ts +13 -0
  118. package/src/l1/validate_trace.ts +211 -0
  119. package/src/modules/data_source_base.ts +367 -0
  120. package/src/modules/data_store_updater.ts +423 -0
  121. package/src/{archiver → modules}/instrumentation.ts +63 -43
  122. package/src/modules/l1_synchronizer.ts +931 -0
  123. package/src/modules/validation.ts +129 -0
  124. package/src/store/block_store.ts +966 -0
  125. package/src/{archiver/kv_archiver_store → store}/contract_class_store.ts +15 -25
  126. package/src/{archiver/kv_archiver_store → store}/contract_instance_store.ts +37 -29
  127. package/src/store/kv_archiver_store.ts +639 -0
  128. package/src/store/log_store.ts +575 -0
  129. package/src/store/message_store.ts +261 -0
  130. package/src/structs/inbox_message.ts +41 -0
  131. package/src/structs/published.ts +1 -0
  132. package/src/test/fake_l1_state.ts +599 -0
  133. package/src/test/fixtures/debug_traceTransaction-multicall3.json +88 -0
  134. package/src/test/fixtures/debug_traceTransaction-multiplePropose.json +153 -0
  135. package/src/test/fixtures/debug_traceTransaction-proxied.json +122 -0
  136. package/src/test/fixtures/trace_transaction-multicall3.json +65 -0
  137. package/src/test/fixtures/trace_transaction-multiplePropose.json +319 -0
  138. package/src/test/fixtures/trace_transaction-proxied.json +128 -0
  139. package/src/test/fixtures/trace_transaction-randomRevert.json +216 -0
  140. package/src/test/index.ts +1 -0
  141. package/src/test/mock_archiver.ts +22 -16
  142. package/src/test/mock_l1_to_l2_message_source.ts +26 -8
  143. package/src/test/mock_l2_block_source.ts +312 -41
  144. package/src/test/mock_structs.ts +295 -0
  145. package/dest/archiver/archiver.d.ts +0 -197
  146. package/dest/archiver/archiver.d.ts.map +0 -1
  147. package/dest/archiver/archiver.js +0 -900
  148. package/dest/archiver/archiver_store.d.ts +0 -220
  149. package/dest/archiver/archiver_store.d.ts.map +0 -1
  150. package/dest/archiver/archiver_store.js +0 -4
  151. package/dest/archiver/archiver_store_test_suite.d.ts +0 -8
  152. package/dest/archiver/archiver_store_test_suite.d.ts.map +0 -1
  153. package/dest/archiver/archiver_store_test_suite.js +0 -794
  154. package/dest/archiver/config.d.ts +0 -37
  155. package/dest/archiver/config.d.ts.map +0 -1
  156. package/dest/archiver/config.js +0 -46
  157. package/dest/archiver/data_retrieval.d.ts +0 -74
  158. package/dest/archiver/data_retrieval.d.ts.map +0 -1
  159. package/dest/archiver/data_retrieval.js +0 -283
  160. package/dest/archiver/errors.d.ts +0 -4
  161. package/dest/archiver/errors.d.ts.map +0 -1
  162. package/dest/archiver/errors.js +0 -5
  163. package/dest/archiver/index.d.ts +0 -8
  164. package/dest/archiver/index.d.ts.map +0 -1
  165. package/dest/archiver/index.js +0 -5
  166. package/dest/archiver/instrumentation.d.ts +0 -29
  167. package/dest/archiver/instrumentation.d.ts.map +0 -1
  168. package/dest/archiver/kv_archiver_store/block_store.d.ts +0 -87
  169. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
  170. package/dest/archiver/kv_archiver_store/block_store.js +0 -217
  171. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +0 -18
  172. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +0 -1
  173. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +0 -21
  174. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
  175. package/dest/archiver/kv_archiver_store/contract_instance_store.js +0 -63
  176. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -153
  177. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +0 -1
  178. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +0 -254
  179. package/dest/archiver/kv_archiver_store/log_store.d.ts +0 -49
  180. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +0 -1
  181. package/dest/archiver/kv_archiver_store/log_store.js +0 -364
  182. package/dest/archiver/kv_archiver_store/message_store.d.ts +0 -33
  183. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
  184. package/dest/archiver/kv_archiver_store/message_store.js +0 -85
  185. package/dest/archiver/kv_archiver_store/nullifier_store.d.ts +0 -12
  186. package/dest/archiver/kv_archiver_store/nullifier_store.d.ts.map +0 -1
  187. package/dest/archiver/kv_archiver_store/nullifier_store.js +0 -73
  188. package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts +0 -23
  189. package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts.map +0 -1
  190. package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.js +0 -49
  191. package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts +0 -175
  192. package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts.map +0 -1
  193. package/dest/archiver/memory_archiver_store/memory_archiver_store.js +0 -636
  194. package/dest/archiver/structs/data_retrieval.d.ts +0 -27
  195. package/dest/archiver/structs/data_retrieval.d.ts.map +0 -1
  196. package/dest/archiver/structs/published.d.ts +0 -11
  197. package/dest/archiver/structs/published.d.ts.map +0 -1
  198. package/dest/archiver/structs/published.js +0 -1
  199. package/dest/rpc/index.d.ts +0 -10
  200. package/dest/rpc/index.d.ts.map +0 -1
  201. package/dest/rpc/index.js +0 -18
  202. package/src/archiver/archiver.ts +0 -1181
  203. package/src/archiver/archiver_store.ts +0 -263
  204. package/src/archiver/archiver_store_test_suite.ts +0 -810
  205. package/src/archiver/config.ts +0 -92
  206. package/src/archiver/data_retrieval.ts +0 -422
  207. package/src/archiver/errors.ts +0 -5
  208. package/src/archiver/index.ts +0 -7
  209. package/src/archiver/kv_archiver_store/block_store.ts +0 -283
  210. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +0 -358
  211. package/src/archiver/kv_archiver_store/log_store.ts +0 -444
  212. package/src/archiver/kv_archiver_store/message_store.ts +0 -102
  213. package/src/archiver/kv_archiver_store/nullifier_store.ts +0 -97
  214. package/src/archiver/memory_archiver_store/l1_to_l2_message_store.ts +0 -61
  215. package/src/archiver/memory_archiver_store/memory_archiver_store.ts +0 -801
  216. package/src/archiver/structs/published.ts +0 -11
  217. package/src/rpc/index.ts +0 -20
  218. /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
  219. /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
@@ -0,0 +1,129 @@
1
+ import type { EpochCache } from '@aztec/epoch-cache';
2
+ import { EpochNumber } from '@aztec/foundation/branded-types';
3
+ import { compactArray } from '@aztec/foundation/collection';
4
+ import type { Logger } from '@aztec/foundation/log';
5
+ import {
6
+ type AttestationInfo,
7
+ type ValidateCheckpointNegativeResult,
8
+ type ValidateCheckpointResult,
9
+ getAttestationInfoFromPayload,
10
+ } from '@aztec/stdlib/block';
11
+ import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
12
+ import { type L1RollupConstants, getEpochAtSlot } from '@aztec/stdlib/epoch-helpers';
13
+ import { ConsensusPayload } from '@aztec/stdlib/p2p';
14
+
15
+ export type { ValidateCheckpointResult };
16
+
17
+ /**
18
+ * Extracts attestation information from a published checkpoint.
19
+ * Returns info for each attestation, preserving array indices.
20
+ */
21
+ export function getAttestationInfoFromPublishedCheckpoint({
22
+ checkpoint,
23
+ attestations,
24
+ }: PublishedCheckpoint): AttestationInfo[] {
25
+ const payload = ConsensusPayload.fromCheckpoint(checkpoint);
26
+ return getAttestationInfoFromPayload(payload, attestations);
27
+ }
28
+
29
+ /**
30
+ * Validates the attestations submitted for the given checkpoint.
31
+ * Returns true if the attestations are valid and sufficient, false otherwise.
32
+ */
33
+ export async function validateCheckpointAttestations(
34
+ publishedCheckpoint: PublishedCheckpoint,
35
+ epochCache: EpochCache,
36
+ constants: Pick<L1RollupConstants, 'epochDuration'>,
37
+ logger?: Logger,
38
+ ): Promise<ValidateCheckpointResult> {
39
+ const attestorInfos = getAttestationInfoFromPublishedCheckpoint(publishedCheckpoint);
40
+ const attestors = compactArray(attestorInfos.map(info => ('address' in info ? info.address : undefined)));
41
+ const { checkpoint, attestations } = publishedCheckpoint;
42
+ const headerHash = checkpoint.header.hash();
43
+ const archiveRoot = checkpoint.archive.root.toString();
44
+ const slot = checkpoint.header.slotNumber;
45
+ const epoch: EpochNumber = getEpochAtSlot(slot, constants);
46
+ const { committee, seed } = await epochCache.getCommitteeForEpoch(epoch);
47
+ const logData = { checkpointNumber: checkpoint.number, slot, epoch, headerHash, archiveRoot };
48
+
49
+ logger?.debug(`Validating attestations for checkpoint ${checkpoint.number} at slot ${slot} in epoch ${epoch}`, {
50
+ committee: (committee ?? []).map(member => member.toString()),
51
+ recoveredAttestors: attestorInfos,
52
+ postedAttestations: attestations.map(a => (a.address.isZero() ? a.signature : a.address).toString()),
53
+ ...logData,
54
+ });
55
+
56
+ if (!committee || committee.length === 0) {
57
+ logger?.warn(
58
+ `No committee found for epoch ${epoch} at slot ${slot}. Accepting checkpoint without validation.`,
59
+ logData,
60
+ );
61
+ return { valid: true };
62
+ }
63
+
64
+ if (await epochCache.isEscapeHatchOpen(epoch)) {
65
+ logger?.warn(`Escape hatch open for epoch ${epoch} at slot ${slot}, skipping checkpoint validation`);
66
+ return { valid: true };
67
+ }
68
+
69
+ const requiredAttestationCount = Math.floor((committee.length * 2) / 3) + 1;
70
+
71
+ const failedValidationResult = <TReason extends ValidateCheckpointNegativeResult['reason']>(reason: TReason) => ({
72
+ valid: false as const,
73
+ reason,
74
+ checkpoint: checkpoint.toCheckpointInfo(),
75
+ committee,
76
+ seed,
77
+ epoch,
78
+ attestors,
79
+ attestations,
80
+ });
81
+
82
+ for (let i = 0; i < attestorInfos.length; i++) {
83
+ const info = attestorInfos[i];
84
+
85
+ // Fail on invalid signatures (no address recovered)
86
+ if (info.status === 'invalid-signature' || info.status === 'empty') {
87
+ logger?.warn(`Attestation with empty or invalid signature at slot ${slot}`, {
88
+ committee,
89
+ invalidIndex: i,
90
+ ...logData,
91
+ });
92
+ return { ...failedValidationResult('invalid-attestation'), invalidIndex: i };
93
+ }
94
+
95
+ // Check if the attestor at this index matches the committee member at the same index
96
+ if (info.status === 'recovered-from-signature' || info.status === 'provided-as-address') {
97
+ const signer = info.address.toString();
98
+ const expectedCommitteeMember = committee[i]?.toString();
99
+
100
+ if (!expectedCommitteeMember || signer !== expectedCommitteeMember) {
101
+ logger?.warn(
102
+ `Attestation at index ${i} from ${signer} does not match expected committee member ${expectedCommitteeMember} at slot ${slot}`,
103
+ {
104
+ committee,
105
+ invalidIndex: i,
106
+ ...logData,
107
+ },
108
+ );
109
+ return { ...failedValidationResult('invalid-attestation'), invalidIndex: i };
110
+ }
111
+ }
112
+ }
113
+
114
+ const validAttestationCount = attestorInfos.filter(info => info.status === 'recovered-from-signature').length;
115
+ if (validAttestationCount < requiredAttestationCount) {
116
+ logger?.warn(`Insufficient attestations for checkpoint at slot ${slot}`, {
117
+ requiredAttestations: requiredAttestationCount,
118
+ actualAttestations: validAttestationCount,
119
+ ...logData,
120
+ });
121
+ return failedValidationResult('insufficient-attestations');
122
+ }
123
+
124
+ logger?.debug(
125
+ `Checkpoint attestations validated successfully for checkpoint ${checkpoint.number} at slot ${slot}`,
126
+ logData,
127
+ );
128
+ return { valid: true };
129
+ }