@aztec/stdlib 0.0.1-commit.d1da697d6 → 0.0.1-commit.d20b825a7

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 (257) hide show
  1. package/dest/abi/authorization_selector.d.ts +3 -6
  2. package/dest/abi/authorization_selector.d.ts.map +1 -1
  3. package/dest/abi/encoder.d.ts +1 -1
  4. package/dest/abi/encoder.d.ts.map +1 -1
  5. package/dest/abi/encoder.js +32 -6
  6. package/dest/abi/event_selector.d.ts +3 -6
  7. package/dest/abi/event_selector.d.ts.map +1 -1
  8. package/dest/abi/function_selector.d.ts +3 -6
  9. package/dest/abi/function_selector.d.ts.map +1 -1
  10. package/dest/abi/function_selector.js +1 -3
  11. package/dest/abi/note_selector.d.ts +3 -6
  12. package/dest/abi/note_selector.d.ts.map +1 -1
  13. package/dest/abi/note_selector.js +1 -3
  14. package/dest/avm/avm.d.ts +300 -300
  15. package/dest/aztec-address/index.d.ts +3 -6
  16. package/dest/aztec-address/index.d.ts.map +1 -1
  17. package/dest/aztec-address/index.js +2 -4
  18. package/dest/block/block_data.d.ts +8 -8
  19. package/dest/block/block_data.d.ts.map +1 -1
  20. package/dest/block/block_data.js +2 -2
  21. package/dest/block/block_hash.d.ts +11 -10
  22. package/dest/block/block_hash.d.ts.map +1 -1
  23. package/dest/block/block_hash.js +10 -9
  24. package/dest/block/l2_block_info.d.ts +6 -5
  25. package/dest/block/l2_block_info.d.ts.map +1 -1
  26. package/dest/block/l2_block_info.js +6 -5
  27. package/dest/block/l2_block_stream/interfaces.d.ts +6 -3
  28. package/dest/block/l2_block_stream/interfaces.d.ts.map +1 -1
  29. package/dest/block/l2_block_stream/l2_tips_store_base.d.ts +1 -1
  30. package/dest/block/l2_block_stream/l2_tips_store_base.d.ts.map +1 -1
  31. package/dest/block/l2_block_stream/l2_tips_store_base.js +1 -1
  32. package/dest/block/test/l2_tips_store_test_suite.js +1 -1
  33. package/dest/config/chain-config.d.ts +1 -1
  34. package/dest/config/chain-config.d.ts.map +1 -1
  35. package/dest/config/chain-config.js +7 -1
  36. package/dest/config/sequencer-config.d.ts +2 -2
  37. package/dest/config/sequencer-config.d.ts.map +1 -1
  38. package/dest/config/sequencer-config.js +10 -3
  39. package/dest/contract/contract_address.d.ts +1 -1
  40. package/dest/contract/contract_address.js +2 -2
  41. package/dest/contract/private_function.d.ts +1 -1
  42. package/dest/contract/private_function.d.ts.map +1 -1
  43. package/dest/contract/private_function.js +2 -4
  44. package/dest/gas/fee_math.d.ts +49 -0
  45. package/dest/gas/fee_math.d.ts.map +1 -0
  46. package/dest/gas/fee_math.js +80 -0
  47. package/dest/gas/gas_fees.d.ts +5 -1
  48. package/dest/gas/gas_fees.d.ts.map +1 -1
  49. package/dest/gas/gas_fees.js +10 -1
  50. package/dest/gas/index.d.ts +2 -1
  51. package/dest/gas/index.d.ts.map +1 -1
  52. package/dest/gas/index.js +1 -0
  53. package/dest/ha-signing/config.d.ts +6 -6
  54. package/dest/ha-signing/config.d.ts.map +1 -1
  55. package/dest/ha-signing/config.js +4 -3
  56. package/dest/ha-signing/index.d.ts +2 -2
  57. package/dest/ha-signing/index.d.ts.map +1 -1
  58. package/dest/ha-signing/index.js +1 -1
  59. package/dest/ha-signing/local_config.js +1 -1
  60. package/dest/ha-signing/types.d.ts +37 -32
  61. package/dest/ha-signing/types.d.ts.map +1 -1
  62. package/dest/ha-signing/types.js +13 -6
  63. package/dest/hash/hash.d.ts +16 -1
  64. package/dest/hash/hash.d.ts.map +1 -1
  65. package/dest/hash/hash.js +32 -0
  66. package/dest/interfaces/archiver.d.ts +11 -1
  67. package/dest/interfaces/archiver.d.ts.map +1 -1
  68. package/dest/interfaces/archiver.js +3 -1
  69. package/dest/interfaces/aztec-node-admin.d.ts +8 -14
  70. package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
  71. package/dest/interfaces/aztec-node-admin.js +1 -2
  72. package/dest/interfaces/aztec-node-debug.d.ts +21 -0
  73. package/dest/interfaces/aztec-node-debug.d.ts.map +1 -0
  74. package/dest/interfaces/aztec-node-debug.js +18 -0
  75. package/dest/interfaces/aztec-node.d.ts +10 -1
  76. package/dest/interfaces/aztec-node.d.ts.map +1 -1
  77. package/dest/interfaces/aztec-node.js +2 -0
  78. package/dest/interfaces/client.d.ts +2 -1
  79. package/dest/interfaces/client.d.ts.map +1 -1
  80. package/dest/interfaces/client.js +1 -0
  81. package/dest/interfaces/merkle_tree_operations.d.ts +4 -3
  82. package/dest/interfaces/merkle_tree_operations.d.ts.map +1 -1
  83. package/dest/interfaces/prover-client.d.ts +1 -1
  84. package/dest/interfaces/prover-client.d.ts.map +1 -1
  85. package/dest/interfaces/prover-client.js +0 -3
  86. package/dest/interfaces/slasher.d.ts +1 -10
  87. package/dest/interfaces/slasher.d.ts.map +1 -1
  88. package/dest/interfaces/slasher.js +0 -2
  89. package/dest/interfaces/validator.d.ts +14 -17
  90. package/dest/interfaces/validator.d.ts.map +1 -1
  91. package/dest/l1-contracts/index.d.ts +2 -2
  92. package/dest/l1-contracts/index.d.ts.map +1 -1
  93. package/dest/l1-contracts/index.js +1 -1
  94. package/dest/logs/log_id.d.ts +1 -1
  95. package/dest/logs/log_id.d.ts.map +1 -1
  96. package/dest/logs/log_id.js +1 -2
  97. package/dest/logs/siloed_tag.d.ts +5 -7
  98. package/dest/logs/siloed_tag.d.ts.map +1 -1
  99. package/dest/logs/siloed_tag.js +4 -0
  100. package/dest/logs/tag.d.ts +5 -6
  101. package/dest/logs/tag.d.ts.map +1 -1
  102. package/dest/logs/tag.js +4 -0
  103. package/dest/p2p/block_proposal.d.ts +6 -8
  104. package/dest/p2p/block_proposal.d.ts.map +1 -1
  105. package/dest/p2p/block_proposal.js +4 -9
  106. package/dest/p2p/checkpoint_attestation.d.ts +4 -6
  107. package/dest/p2p/checkpoint_attestation.d.ts.map +1 -1
  108. package/dest/p2p/checkpoint_attestation.js +2 -7
  109. package/dest/p2p/checkpoint_proposal.d.ts +8 -10
  110. package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
  111. package/dest/p2p/checkpoint_proposal.js +5 -24
  112. package/dest/p2p/gossipable.d.ts +4 -4
  113. package/dest/p2p/gossipable.d.ts.map +1 -1
  114. package/dest/parity/parity_base_private_inputs.d.ts +7 -3
  115. package/dest/parity/parity_base_private_inputs.d.ts.map +1 -1
  116. package/dest/parity/parity_base_private_inputs.js +7 -5
  117. package/dest/parity/parity_public_inputs.d.ts +7 -3
  118. package/dest/parity/parity_public_inputs.d.ts.map +1 -1
  119. package/dest/parity/parity_public_inputs.js +6 -3
  120. package/dest/rollup/block_headers_hash.d.ts +1 -1
  121. package/dest/rollup/block_headers_hash.d.ts.map +1 -1
  122. package/dest/rollup/block_headers_hash.js +8 -2
  123. package/dest/slashing/index.d.ts +2 -3
  124. package/dest/slashing/index.d.ts.map +1 -1
  125. package/dest/slashing/index.js +1 -2
  126. package/dest/slashing/serialization.d.ts +2 -6
  127. package/dest/slashing/serialization.d.ts.map +1 -1
  128. package/dest/slashing/serialization.js +0 -60
  129. package/dest/slashing/types.d.ts +4 -90
  130. package/dest/slashing/types.d.ts.map +1 -1
  131. package/dest/slashing/types.js +0 -14
  132. package/dest/slashing/{tally.d.ts → votes.d.ts} +1 -1
  133. package/dest/slashing/{tally.d.ts.map → votes.d.ts.map} +1 -1
  134. package/dest/slashing/{tally.js → votes.js} +1 -1
  135. package/dest/tests/factories.d.ts +2 -7
  136. package/dest/tests/factories.d.ts.map +1 -1
  137. package/dest/tests/factories.js +8 -18
  138. package/dest/tests/mocks.d.ts +1 -1
  139. package/dest/tests/mocks.d.ts.map +1 -1
  140. package/dest/tests/mocks.js +12 -17
  141. package/dest/timetable/index.d.ts +51 -1
  142. package/dest/timetable/index.d.ts.map +1 -1
  143. package/dest/timetable/index.js +204 -14
  144. package/dest/trees/nullifier_leaf.d.ts +2 -1
  145. package/dest/trees/nullifier_leaf.d.ts.map +1 -1
  146. package/dest/trees/nullifier_leaf.js +3 -0
  147. package/dest/tx/block_header.d.ts +2 -2
  148. package/dest/tx/block_header.d.ts.map +1 -1
  149. package/dest/tx/block_header.js +1 -1
  150. package/dest/tx/fee_provider.d.ts +10 -0
  151. package/dest/tx/fee_provider.d.ts.map +1 -0
  152. package/dest/tx/fee_provider.js +1 -0
  153. package/dest/tx/global_variable_builder.d.ts +3 -16
  154. package/dest/tx/global_variable_builder.d.ts.map +1 -1
  155. package/dest/tx/index.d.ts +2 -1
  156. package/dest/tx/index.d.ts.map +1 -1
  157. package/dest/tx/index.js +1 -0
  158. package/dest/tx/indexed_tx_effect.d.ts +1 -1
  159. package/dest/tx/indexed_tx_effect.d.ts.map +1 -1
  160. package/dest/tx/indexed_tx_effect.js +1 -2
  161. package/dest/tx/simulated_tx.d.ts +1 -1
  162. package/dest/tx/simulated_tx.js +1 -1
  163. package/dest/tx/tx.d.ts +3 -3
  164. package/dest/tx/tx.d.ts.map +1 -1
  165. package/dest/types/shared.d.ts +1 -10
  166. package/dest/types/shared.d.ts.map +1 -1
  167. package/dest/types/shared.js +0 -9
  168. package/dest/vks/verification_key.d.ts +2 -137
  169. package/dest/vks/verification_key.d.ts.map +1 -1
  170. package/dest/vks/verification_key.js +5 -126
  171. package/dest/world-state/genesis_data.d.ts +11 -0
  172. package/dest/world-state/genesis_data.d.ts.map +1 -0
  173. package/dest/world-state/genesis_data.js +4 -0
  174. package/dest/world-state/index.d.ts +2 -1
  175. package/dest/world-state/index.d.ts.map +1 -1
  176. package/dest/world-state/index.js +1 -0
  177. package/dest/world-state/world_state_revision.d.ts +8 -1
  178. package/dest/world-state/world_state_revision.d.ts.map +1 -1
  179. package/dest/world-state/world_state_revision.js +7 -1
  180. package/package.json +8 -8
  181. package/src/abi/authorization_selector.ts +2 -8
  182. package/src/abi/encoder.ts +42 -6
  183. package/src/abi/event_selector.ts +2 -8
  184. package/src/abi/function_selector.ts +3 -12
  185. package/src/abi/note_selector.ts +3 -12
  186. package/src/aztec-address/index.ts +4 -10
  187. package/src/block/block_data.ts +3 -4
  188. package/src/block/block_hash.ts +21 -14
  189. package/src/block/l2_block_info.ts +8 -6
  190. package/src/block/l2_block_stream/interfaces.ts +6 -2
  191. package/src/block/l2_block_stream/l2_tips_store_base.ts +1 -1
  192. package/src/block/test/l2_tips_store_test_suite.ts +1 -1
  193. package/src/config/chain-config.ts +7 -1
  194. package/src/config/sequencer-config.ts +14 -4
  195. package/src/contract/contract_address.ts +2 -2
  196. package/src/contract/private_function.ts +3 -1
  197. package/src/gas/README.md +31 -0
  198. package/src/gas/fee_math.ts +120 -0
  199. package/src/gas/gas_fees.ts +17 -4
  200. package/src/gas/index.ts +1 -0
  201. package/src/ha-signing/config.ts +5 -2
  202. package/src/ha-signing/index.ts +3 -1
  203. package/src/ha-signing/local_config.ts +1 -1
  204. package/src/ha-signing/types.ts +48 -34
  205. package/src/hash/hash.ts +27 -0
  206. package/src/interfaces/archiver.ts +8 -0
  207. package/src/interfaces/aztec-node-admin.ts +3 -6
  208. package/src/interfaces/aztec-node-debug.ts +40 -0
  209. package/src/interfaces/aztec-node.ts +15 -0
  210. package/src/interfaces/client.ts +1 -0
  211. package/src/interfaces/merkle_tree_operations.ts +3 -2
  212. package/src/interfaces/prover-client.ts +2 -5
  213. package/src/interfaces/slasher.ts +0 -6
  214. package/src/interfaces/validator.ts +15 -8
  215. package/src/l1-contracts/index.ts +1 -1
  216. package/src/logs/log_id.ts +1 -2
  217. package/src/logs/siloed_tag.ts +8 -9
  218. package/src/logs/tag.ts +8 -8
  219. package/src/p2p/block_proposal.ts +13 -9
  220. package/src/p2p/checkpoint_attestation.ts +5 -9
  221. package/src/p2p/checkpoint_proposal.ts +21 -36
  222. package/src/p2p/gossipable.ts +4 -4
  223. package/src/parity/parity_base_private_inputs.ts +10 -4
  224. package/src/parity/parity_public_inputs.ts +9 -2
  225. package/src/rollup/block_headers_hash.ts +11 -2
  226. package/src/slashing/index.ts +1 -2
  227. package/src/slashing/serialization.ts +1 -81
  228. package/src/slashing/types.ts +3 -35
  229. package/src/slashing/{tally.ts → votes.ts} +1 -1
  230. package/src/tests/factories.ts +14 -20
  231. package/src/tests/mocks.ts +14 -10
  232. package/src/timetable/index.ts +293 -13
  233. package/src/trees/nullifier_leaf.ts +4 -0
  234. package/src/tx/block_header.ts +2 -2
  235. package/src/tx/fee_provider.ts +10 -0
  236. package/src/tx/global_variable_builder.ts +2 -18
  237. package/src/tx/index.ts +1 -0
  238. package/src/tx/indexed_tx_effect.ts +1 -2
  239. package/src/tx/simulated_tx.ts +1 -1
  240. package/src/tx/tx.ts +2 -2
  241. package/src/types/shared.ts +0 -10
  242. package/src/vks/verification_key.ts +5 -184
  243. package/src/world-state/genesis_data.ts +15 -0
  244. package/src/world-state/index.ts +1 -0
  245. package/src/world-state/world_state_revision.ts +9 -1
  246. package/dest/abi/mocked_keys.d.ts +0 -2
  247. package/dest/abi/mocked_keys.d.ts.map +0 -1
  248. package/dest/abi/mocked_keys.js +0 -1
  249. package/dest/l1-contracts/slash_factory.d.ts +0 -45
  250. package/dest/l1-contracts/slash_factory.d.ts.map +0 -1
  251. package/dest/l1-contracts/slash_factory.js +0 -158
  252. package/dest/slashing/empire.d.ts +0 -31
  253. package/dest/slashing/empire.d.ts.map +0 -1
  254. package/dest/slashing/empire.js +0 -87
  255. package/src/abi/mocked_keys.ts +0 -2
  256. package/src/l1-contracts/slash_factory.ts +0 -180
  257. package/src/slashing/empire.ts +0 -104
@@ -1,81 +1,11 @@
1
1
  import { ULTRA_VK_LENGTH_IN_FIELDS } from '@aztec/constants';
2
2
  import { makeTuple } from '@aztec/foundation/array';
3
- import { times } from '@aztec/foundation/collection';
4
- import { Fq, Fr } from '@aztec/foundation/curves/bn254';
3
+ import { Fr } from '@aztec/foundation/curves/bn254';
5
4
  import { bufferSchemaFor } from '@aztec/foundation/schemas';
6
5
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
7
6
  import { bufferToHex, hexToBuffer } from '@aztec/foundation/string';
8
7
 
9
8
  import { hashVK } from '../hash/index.js';
10
- import { CircuitType } from '../types/shared.js';
11
-
12
- /**
13
- * Curve data.
14
- */
15
- export class G1AffineElement {
16
- /**
17
- * Element's x coordinate.
18
- */
19
- public x: Fq;
20
- /**
21
- * Element's y coordinate.
22
- */
23
- public y: Fq;
24
-
25
- constructor(x: Fq | bigint, y: Fq | bigint) {
26
- this.x = typeof x === 'bigint' ? new Fq(x) : x;
27
- this.y = typeof y === 'bigint' ? new Fq(y) : y;
28
- }
29
- /**
30
- * Serialize as a buffer.
31
- * @returns The buffer.
32
- */
33
- toBuffer() {
34
- return serializeToBuffer(this.x, this.y);
35
- }
36
-
37
- /**
38
- * Deserializes from a buffer or reader, corresponding to a write in cpp.
39
- * @param buffer - Buffer or BufferReader to read from.
40
- * @returns The G1AffineElement.
41
- */
42
- static fromBuffer(buffer: Buffer | BufferReader): G1AffineElement {
43
- const reader = BufferReader.asReader(buffer);
44
- return new G1AffineElement(Fq.fromBuffer(reader), Fq.fromBuffer(reader));
45
- }
46
- }
47
-
48
- /**
49
- * Used store and serialize a key-value map of commitments where key is the name of the commitment and value is
50
- * the commitment itself. The name can be e.g. Q_1, Q_2, SIGMA_1 etc.
51
- */
52
- export class CommitmentMap {
53
- constructor(
54
- /**
55
- * An object used to store the commitments.
56
- */
57
- public record: { [name: string]: G1AffineElement },
58
- ) {}
59
-
60
- /**
61
- * Serialize as a buffer.
62
- * @returns The buffer.
63
- */
64
- toBuffer() {
65
- const values = Object.entries(this.record);
66
- return serializeToBuffer(values.length, ...values.flat());
67
- }
68
-
69
- /**
70
- * Deserializes from a buffer or reader, corresponding to a write in cpp.
71
- * @param buffer - Buffer or BufferReader to read from.
72
- * @returns The CommitmentMap.
73
- */
74
- static fromBuffer(buffer: Buffer | BufferReader): CommitmentMap {
75
- const reader = BufferReader.asReader(buffer);
76
- return new CommitmentMap(reader.readMap(G1AffineElement));
77
- }
78
- }
79
9
 
80
10
  // TODO: find better home for these constants
81
11
  export const CIRCUIT_SIZE_INDEX = 0;
@@ -169,110 +99,6 @@ export class VerificationKeyAsFields {
169
99
  }
170
100
  }
171
101
 
172
- export class VerificationKey {
173
- constructor(
174
- /**
175
- * For Plonk, this is equivalent to the proving system used to prove and verify.
176
- */
177
- public circuitType: CircuitType,
178
- /**
179
- * The number of gates in this circuit.
180
- */
181
- public circuitSize: number,
182
- /**
183
- * The number of public inputs in this circuit.
184
- */
185
- public numPublicInputs: number,
186
- /**
187
- * The commitments for this circuit.
188
- */
189
- public commitments: Record<string, G1AffineElement>,
190
- /**
191
- * Contains a recursive proof?
192
- */
193
- public containsRecursiveProof: boolean,
194
- /**
195
- * Recursion stack.
196
- */
197
- public recursiveProofPublicInputIndices: number[],
198
- ) {}
199
-
200
- /**
201
- * Serialize as a buffer.
202
- * @returns The buffer.
203
- */
204
- toBuffer() {
205
- return serializeToBuffer(
206
- this.circuitType,
207
- this.circuitSize,
208
- this.numPublicInputs,
209
- new CommitmentMap(this.commitments),
210
- this.containsRecursiveProof,
211
- serializeToBuffer(this.recursiveProofPublicInputIndices.length, this.recursiveProofPublicInputIndices),
212
- );
213
- }
214
-
215
- /**
216
- * Deserializes class from a buffer.
217
- * @returns A VerificationKey instance.
218
- */
219
- static fromBuffer(buffer: Buffer | BufferReader): VerificationKey {
220
- const reader = BufferReader.asReader(buffer);
221
- return new VerificationKey(
222
- reader.readNumber(),
223
- reader.readNumber(),
224
- reader.readNumber(),
225
- reader.readObject(CommitmentMap).record,
226
- reader.readBoolean(),
227
- reader.readNumberVector(),
228
- );
229
- }
230
-
231
- /**
232
- * Builds a fake Rollup Honk verification key that should be accepted by circuits.
233
- * @returns A fake verification key.
234
- */
235
- static makeRollupFake(): VerificationKey {
236
- return new VerificationKey(
237
- CircuitType.ULTRA, // This is entirely arbitrary
238
- 2048,
239
- 116,
240
- {}, // Empty set of commitments
241
- false,
242
- times(16, i => i),
243
- );
244
- }
245
-
246
- /**
247
- * Builds a fake verification key that should be accepted by circuits.
248
- * @returns A fake verification key.
249
- */
250
- static makeFake(): VerificationKey {
251
- return new VerificationKey(
252
- CircuitType.ULTRA, // This is entirely arbitrary
253
- 2048,
254
- 116,
255
- {}, // Empty set of commitments
256
- false,
257
- times(16, i => i),
258
- );
259
- }
260
-
261
- /**
262
- * Builds a fake MegaHonk verification key buffer for testing.
263
- * Uses a real VK from a compiled contract to ensure proper format.
264
- *
265
- * @returns A valid MegaHonk VK buffer (4064 bytes)
266
- */
267
- static makeFakeMegaHonk(): Buffer {
268
- // This is a real MegaFlavor VK from token_contract, base64-encoded
269
- // Size: 4064 bytes (127 fields × 32 bytes)
270
- const vk =
271
- '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';
272
- return Buffer.from(vk, 'base64');
273
- }
274
- }
275
-
276
102
  export class VerificationKeyData {
277
103
  constructor(
278
104
  public readonly keyAsFields: VerificationKeyAsFields,
@@ -292,18 +118,13 @@ export class VerificationKeyData {
292
118
  }
293
119
 
294
120
  static makeFakeHonk(): VerificationKeyData {
295
- return new VerificationKeyData(VerificationKeyAsFields.makeFakeHonk(), VerificationKey.makeFake().toBuffer());
121
+ const keyAsFields = VerificationKeyAsFields.makeFakeHonk();
122
+ return new VerificationKeyData(keyAsFields, keyAsFields.toBuffer());
296
123
  }
297
124
 
298
125
  static makeFakeRollupHonk(): VerificationKeyData {
299
- return new VerificationKeyData(
300
- VerificationKeyAsFields.makeFakeRollupHonk(),
301
- VerificationKey.makeRollupFake().toBuffer(),
302
- );
303
- }
304
-
305
- static makeFake(len = ULTRA_VK_LENGTH_IN_FIELDS): VerificationKeyData {
306
- return new VerificationKeyData(VerificationKeyAsFields.makeFake(len), VerificationKey.makeFake().toBuffer());
126
+ const keyAsFields = VerificationKeyAsFields.makeFakeRollupHonk();
127
+ return new VerificationKeyData(keyAsFields, keyAsFields.toBuffer());
307
128
  }
308
129
 
309
130
  /**
@@ -0,0 +1,15 @@
1
+ import type { PublicDataTreeLeaf } from '../trees/index.js';
2
+
3
+ /** Data used to initialize the genesis block, including prefilled public state and an optional timestamp. */
4
+ export type GenesisData = {
5
+ /** Public data tree leaves to pre-populate in the genesis state (e.g. fee juice balances). */
6
+ prefilledPublicData: PublicDataTreeLeaf[];
7
+ /** Timestamp for the genesis block header. Defaults to 0 (canonical empty genesis) in production. */
8
+ genesisTimestamp: bigint;
9
+ };
10
+
11
+ /** An empty genesis data with no prefilled state and a zero timestamp. */
12
+ export const EMPTY_GENESIS_DATA: GenesisData = {
13
+ prefilledPublicData: [],
14
+ genesisTimestamp: 0n,
15
+ };
@@ -1 +1,2 @@
1
+ export * from './genesis_data.js';
1
2
  export * from './world_state_revision.js';
@@ -1,6 +1,14 @@
1
1
  import { z } from 'zod';
2
2
 
3
3
  export class WorldStateRevision {
4
+ /**
5
+ * Sentinel `blockNumber` meaning "not pinned to any historical block; use the latest committed
6
+ * state of the underlying tree". Mirrors the `WorldStateRevision::LATEST` constant on the C++
7
+ * side (defined as `std::numeric_limits<uint32_t>::max()`). Distinct from `blockNumber === 0`,
8
+ * which pins to the initial / genesis state.
9
+ */
10
+ public static readonly LATEST = 0xffffffff;
11
+
4
12
  constructor(
5
13
  public readonly forkId: number,
6
14
  public readonly blockNumber: number,
@@ -12,7 +20,7 @@ export class WorldStateRevision {
12
20
  }
13
21
 
14
22
  static empty() {
15
- return new WorldStateRevision(0, 0, false);
23
+ return new WorldStateRevision(0, WorldStateRevision.LATEST, false);
16
24
  }
17
25
 
18
26
  static get schema() {
@@ -1,2 +0,0 @@
1
- export declare const mockVerificationKey = "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja2VkX2tleXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hYmkvbW9ja2VkX2tleXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBTyxNQUFNLG1CQUFtQixxMUVBQ296RSxDQUFDIn0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"mocked_keys.d.ts","sourceRoot":"","sources":["../../src/abi/mocked_keys.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,q1EACozE,CAAC"}
@@ -1 +0,0 @@
1
- export const mockVerificationKey = '0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f';
@@ -1,45 +0,0 @@
1
- import type { L1TxRequest } from '@aztec/ethereum/l1-tx-utils';
2
- import type { ViemClient } from '@aztec/ethereum/types';
3
- import { EthAddress } from '@aztec/foundation/eth-address';
4
- import { type Hex, type Log } from 'viem';
5
- import type { L1RollupConstants } from '../epoch-helpers/index.js';
6
- import { type SlashPayload, type ValidatorSlash, type ValidatorSlashOffense } from '../slashing/index.js';
7
- export declare class SlashFactoryContract {
8
- readonly client: ViemClient;
9
- private readonly logger;
10
- private readonly contract;
11
- constructor(client: ViemClient, address: Hex | EthAddress);
12
- get address(): EthAddress;
13
- buildCreatePayloadRequest(slashes: ValidatorSlash[]): L1TxRequest;
14
- /** Tries to extract a SlashPayloadCreated event from the given logs. */
15
- tryExtractSlashPayloadCreatedEvent(logs: Log[]): {
16
- eventName: "SlashPayloadCreated";
17
- args: {
18
- amounts: readonly bigint[];
19
- offenses: readonly (readonly bigint[])[];
20
- payloadAddress: `0x${string}`;
21
- validators: readonly `0x${string}`[];
22
- };
23
- } | undefined;
24
- getSlashPayloadCreatedEvents(): Promise<SlashPayload[]>;
25
- /**
26
- * Searches for a slash payload in the events emitted by the contract.
27
- * This method cannot query for historical payload events, it queries for payloads that have not yet expired.
28
- * @param payloadAddress The address of the payload to search for.
29
- * @param constants The L1 rollup constants needed for time calculations.
30
- */
31
- getSlashPayloadFromEvents(payloadAddress: EthAddress, settings: {
32
- logsBatchSize?: number;
33
- slashingRoundSize: number;
34
- slashingPayloadLifetimeInRounds: number;
35
- } & Pick<L1RollupConstants, 'slotDuration' | 'ethereumSlotDuration'>): Promise<Omit<SlashPayload, 'votes'> | undefined>;
36
- getAddressAndIsDeployed(slashes: ValidatorSlash[]): Promise<{
37
- address: EthAddress;
38
- salt: Hex;
39
- isDeployed: boolean;
40
- }>;
41
- private sortSlashes;
42
- }
43
- export declare function packValidatorSlashOffense(offense: ValidatorSlashOffense): bigint;
44
- export declare function unpackValidatorSlashOffense(packed: bigint): ValidatorSlashOffense;
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhc2hfZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2wxLWNvbnRyYWN0cy9zbGFzaF9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUkzRCxPQUFPLEVBQThCLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFtQyxNQUFNLE1BQU0sQ0FBQztBQUV2RyxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFFTCxLQUFLLFlBQVksRUFDakIsS0FBSyxjQUFjLEVBQ25CLEtBQUsscUJBQXFCLEVBRTNCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIscUJBQWEsb0JBQW9CO2FBS2IsTUFBTSxFQUFFLFVBQVU7SUFKcEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQTJDO0lBQ2xFLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUE0RDtJQUVyRixZQUNrQixNQUFNLEVBQUUsVUFBVSxFQUNsQyxPQUFPLEVBQUUsR0FBRyxHQUFHLFVBQVUsRUFPMUI7SUFFRCxJQUFXLE9BQU8sZUFFakI7SUFFTSx5QkFBeUIsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLEdBQUcsV0FBVyxDQWdCdkU7SUFFRCx3RUFBd0U7SUFDakUsa0NBQWtDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTs7Ozs7Ozs7a0JBRXBEO0lBRVksNEJBQTRCLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBZW5FO0lBRUQ7Ozs7O09BS0c7SUFDVSx5QkFBeUIsQ0FDcEMsY0FBYyxFQUFFLFVBQVUsRUFDMUIsUUFBUSxFQUFFO1FBQ1IsYUFBYSxDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ3ZCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUMxQiwrQkFBK0IsRUFBRSxNQUFNLENBQUM7S0FDekMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxHQUFHLHNCQUFzQixDQUFDLEdBQ25FLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQW1EbEQ7SUFFWSx1QkFBdUIsQ0FDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxHQUN4QixPQUFPLENBQUM7UUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDO1FBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztRQUFDLFVBQVUsRUFBRSxPQUFPLENBQUE7S0FBRSxDQUFDLENBUWxFO0lBRUQsT0FBTyxDQUFDLFdBQVc7Q0FRcEI7QUFFRCx3QkFBZ0IseUJBQXlCLENBQUMsT0FBTyxFQUFFLHFCQUFxQixHQUFHLE1BQU0sQ0FNaEY7QUFFRCx3QkFBZ0IsMkJBQTJCLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxxQkFBcUIsQ0FLakYifQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"slash_factory.d.ts","sourceRoot":"","sources":["../../src/l1-contracts/slash_factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAI3D,OAAO,EAA8B,KAAK,GAAG,EAAE,KAAK,GAAG,EAAmC,MAAM,MAAM,CAAC;AAEvG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAE3B,MAAM,sBAAsB,CAAC;AAE9B,qBAAa,oBAAoB;aAKb,MAAM,EAAE,UAAU;IAJpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;IAClE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4D;IAErF,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAO1B;IAED,IAAW,OAAO,eAEjB;IAEM,yBAAyB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,WAAW,CAgBvE;IAED,wEAAwE;IACjE,kCAAkC,CAAC,IAAI,EAAE,GAAG,EAAE;;;;;;;;kBAEpD;IAEY,4BAA4B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAenE;IAED;;;;;OAKG;IACU,yBAAyB,CACpC,cAAc,EAAE,UAAU,EAC1B,QAAQ,EAAE;QACR,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,+BAA+B,EAAE,MAAM,CAAC;KACzC,GAAG,IAAI,CAAC,iBAAiB,EAAE,cAAc,GAAG,sBAAsB,CAAC,GACnE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAmDlD;IAEY,uBAAuB,CAClC,OAAO,EAAE,cAAc,EAAE,GACxB,OAAO,CAAC;QAAE,OAAO,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,GAAG,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC,CAQlE;IAED,OAAO,CAAC,WAAW;CAQpB;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAMhF;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,CAKjF"}
@@ -1,158 +0,0 @@
1
- import { tryExtractEvent } from '@aztec/ethereum/utils';
2
- import { maxBigint } from '@aztec/foundation/bigint';
3
- import { EthAddress } from '@aztec/foundation/eth-address';
4
- import { createLogger } from '@aztec/foundation/log';
5
- import { SlashFactoryAbi } from '@aztec/l1-artifacts/SlashFactoryAbi';
6
- import { encodeFunctionData, getContract } from 'viem';
7
- import { OffenseToBigInt, bigIntToOffense } from '../slashing/index.js';
8
- export class SlashFactoryContract {
9
- client;
10
- logger;
11
- contract;
12
- constructor(client, address){
13
- this.client = client;
14
- this.logger = createLogger('contracts:slash_factory');
15
- this.contract = getContract({
16
- address: typeof address === 'string' ? address : address.toString(),
17
- abi: SlashFactoryAbi,
18
- client
19
- });
20
- }
21
- get address() {
22
- return EthAddress.fromString(this.contract.address);
23
- }
24
- buildCreatePayloadRequest(slashes) {
25
- const sorted = this.sortSlashes(slashes);
26
- return {
27
- to: this.contract.address,
28
- abi: SlashFactoryAbi,
29
- data: encodeFunctionData({
30
- abi: SlashFactoryAbi,
31
- functionName: 'createSlashPayload',
32
- args: [
33
- sorted.map((d)=>d.validator.toString()),
34
- sorted.map((d)=>d.amount),
35
- sorted.map((d)=>d.offenses.map(packValidatorSlashOffense))
36
- ]
37
- })
38
- };
39
- }
40
- /** Tries to extract a SlashPayloadCreated event from the given logs. */ tryExtractSlashPayloadCreatedEvent(logs) {
41
- return tryExtractEvent(logs, this.address.toString(), SlashFactoryAbi, 'SlashPayloadCreated');
42
- }
43
- async getSlashPayloadCreatedEvents() {
44
- const events = await this.contract.getEvents.SlashPayloadCreated();
45
- return Promise.all(events.map(async (event)=>{
46
- const { validators, amounts, offenses } = event.args;
47
- const slashes = validators.map((validator, i)=>({
48
- validator: EthAddress.fromString(validator),
49
- amount: amounts[i],
50
- offenses: offenses[i].map(unpackValidatorSlashOffense)
51
- }));
52
- const block = await this.client.getBlock({
53
- blockNumber: event.blockNumber,
54
- includeTransactions: false
55
- });
56
- return {
57
- address: EthAddress.fromString(event.args.payloadAddress),
58
- slashes,
59
- timestamp: block.timestamp
60
- };
61
- }));
62
- }
63
- /**
64
- * Searches for a slash payload in the events emitted by the contract.
65
- * This method cannot query for historical payload events, it queries for payloads that have not yet expired.
66
- * @param payloadAddress The address of the payload to search for.
67
- * @param constants The L1 rollup constants needed for time calculations.
68
- */ async getSlashPayloadFromEvents(payloadAddress, settings) {
69
- // We query for the log where the payload was emitted walking backwards until we go past payload expiration time
70
- // Note that all log queries require a block range, and RPC providers cap the max range (eg quicknode is 10k blocks).
71
- const { slashingRoundSize, slashingPayloadLifetimeInRounds, slotDuration, ethereumSlotDuration } = settings;
72
- const currentBlockNumber = await this.client.getBlockNumber({
73
- cacheTime: 0
74
- });
75
- // Why the +1 below? Just for good measure. Better err on the safe side.
76
- const earliestBlockNumber = maxBigint(0n, currentBlockNumber - (BigInt(slashingPayloadLifetimeInRounds) + 1n) * BigInt(slashingRoundSize) * BigInt(slotDuration) / BigInt(ethereumSlotDuration));
77
- this.logger.trace(`Starting search for slash payload ${payloadAddress} from block ${currentBlockNumber} with earliest block ${earliestBlockNumber}`);
78
- const batchSize = BigInt(settings.logsBatchSize ?? 10000);
79
- let toBlock = currentBlockNumber;
80
- do {
81
- const fromBlock = maxBigint(earliestBlockNumber, toBlock - batchSize);
82
- this.logger.trace(`Searching for slash payload ${payloadAddress} in blocks ${fromBlock} to ${toBlock}`);
83
- const logs = await this.contract.getEvents.SlashPayloadCreated({
84
- payloadAddress: payloadAddress.toString()
85
- }, {
86
- fromBlock,
87
- toBlock,
88
- strict: true
89
- });
90
- // We found the payload, return it
91
- if (logs.length > 0) {
92
- const log = logs[0];
93
- const { validators, amounts, offenses } = log.args;
94
- // Convert the data to our internal types
95
- const slashes = validators.map((validator, i)=>({
96
- validator: EthAddress.fromString(validator),
97
- amount: amounts[i],
98
- offenses: offenses[i].map(unpackValidatorSlashOffense)
99
- }));
100
- // Get the timestamp from the block
101
- const block = await this.client.getBlock({
102
- blockNumber: log.blockNumber,
103
- includeTransactions: false
104
- });
105
- return {
106
- address: payloadAddress,
107
- slashes,
108
- timestamp: block.timestamp
109
- };
110
- }
111
- // If not found, we go back one batch
112
- toBlock -= batchSize;
113
- }while (toBlock > earliestBlockNumber)
114
- return undefined;
115
- }
116
- async getAddressAndIsDeployed(slashes) {
117
- const sortedSlashes = this.sortSlashes(slashes);
118
- const [address, salt, isDeployed] = await this.contract.read.getAddressAndIsDeployed([
119
- sortedSlashes.map((s)=>s.validator.toString()),
120
- sortedSlashes.map((s)=>s.amount),
121
- sortedSlashes.map((s)=>s.offenses.map(packValidatorSlashOffense))
122
- ]);
123
- return {
124
- address: EthAddress.fromString(address),
125
- salt,
126
- isDeployed
127
- };
128
- }
129
- sortSlashes(slashes) {
130
- const offenseSorter = (a, b)=>{
131
- return a.epochOrSlot === b.epochOrSlot ? a.offenseType - b.offenseType : Number(a.epochOrSlot - b.epochOrSlot);
132
- };
133
- return [
134
- ...slashes
135
- ].map((slash)=>({
136
- ...slash,
137
- offenses: [
138
- ...slash.offenses
139
- ].sort(offenseSorter)
140
- })).sort((a, b)=>a.validator.toString().localeCompare(b.validator.toString()));
141
- }
142
- }
143
- export function packValidatorSlashOffense(offense) {
144
- const offenseId = OffenseToBigInt[offense.offenseType];
145
- if (offenseId > (1 << 8) - 1) {
146
- throw new Error(`Offense type ${offense.offenseType} cannot be packed into 8 bits`);
147
- }
148
- return (offenseId << 120n) + offense.epochOrSlot;
149
- }
150
- export function unpackValidatorSlashOffense(packed) {
151
- const offenseId = packed >> 120n & 0xffn;
152
- const epochOrSlot = packed & (1n << 120n) - 1n;
153
- const offenseType = bigIntToOffense(offenseId);
154
- return {
155
- epochOrSlot,
156
- offenseType
157
- };
158
- }
@@ -1,31 +0,0 @@
1
- import type { Offense, OffenseIdentifier, SlashPayload, SlashPayloadRound, ValidatorSlash } from './types.js';
2
- import { OffenseType } from './types.js';
3
- /**
4
- * Returns true if the offense is uncontroversial as in it can be verified via L1 data alone,
5
- * and does not depend on the local view of the node of the L2 p2p network.
6
- * @param offense - The offense type to check
7
- */
8
- export declare function isOffenseUncontroversial(offense: OffenseType): boolean;
9
- /** Extracts offense identifiers (validator, epoch, offense type) from an Empire-based SlashPayload */
10
- export declare function getOffenseIdentifiersFromPayload(payload: SlashPayload | SlashPayloadRound): OffenseIdentifier[];
11
- /** Creates ValidatorSlashes used to create an Empire-based SlashPayload from a set of Offenses */
12
- export declare function offensesToValidatorSlash(offenses: Offense[]): ValidatorSlash[];
13
- /**
14
- * Sorts offense data by:
15
- * - Uncontroversial offenses first
16
- * - Slash amount (descending)
17
- * - Epoch or slot (ascending, ie oldest first)
18
- * - Validator address (ascending)
19
- * - Offense type (descending)
20
- */
21
- export declare function offenseDataComparator(a: Offense, b: Offense): number;
22
- /**
23
- * Returns the first round in which the offense is eligible for being included in an Empire-based slash payload.
24
- * Should be equal to to the first round that starts strictly after the offense becomes detectable.
25
- */
26
- export declare function getFirstEligibleRoundForOffense(offense: OffenseIdentifier, constants: {
27
- slashingRoundSize: number;
28
- epochDuration: number;
29
- proofSubmissionEpochs: number;
30
- }): bigint;
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1waXJlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2xhc2hpbmcvZW1waXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFekM7Ozs7R0FJRztBQUNILHdCQUFnQix3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FNdEU7QUFFRCxzR0FBc0c7QUFDdEcsd0JBQWdCLGdDQUFnQyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUcsaUJBQWlCLEdBQUcsaUJBQWlCLEVBQUUsQ0FRL0c7QUFFRCxrR0FBa0c7QUFDbEcsd0JBQWdCLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FNOUU7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsd0JBQWdCLHFCQUFxQixDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sR0FBRyxNQUFNLENBUXBFO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQWdCLCtCQUErQixDQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQzFCLFNBQVMsRUFBRTtJQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztJQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUE7Q0FBRSxHQUM3RixNQUFNLENBdUNSIn0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"empire.d.ts","sourceRoot":"","sources":["../../src/slashing/empire.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9G,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAMtE;AAED,sGAAsG;AACtG,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,YAAY,GAAG,iBAAiB,GAAG,iBAAiB,EAAE,CAQ/G;AAED,kGAAkG;AAClG,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAM9E;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAQpE;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,qBAAqB,EAAE,MAAM,CAAA;CAAE,GAC7F,MAAM,CAuCR"}
@@ -1,87 +0,0 @@
1
- import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
- import { getRoundForSlot, getRoundsForEpoch } from './helpers.js';
3
- import { OffenseType } from './types.js';
4
- /**
5
- * Returns true if the offense is uncontroversial as in it can be verified via L1 data alone,
6
- * and does not depend on the local view of the node of the L2 p2p network.
7
- * @param offense - The offense type to check
8
- */ export function isOffenseUncontroversial(offense) {
9
- return offense === OffenseType.PROPOSED_INSUFFICIENT_ATTESTATIONS || offense === OffenseType.PROPOSED_INCORRECT_ATTESTATIONS || offense === OffenseType.ATTESTED_DESCENDANT_OF_INVALID;
10
- }
11
- /** Extracts offense identifiers (validator, epoch, offense type) from an Empire-based SlashPayload */ export function getOffenseIdentifiersFromPayload(payload) {
12
- return payload.slashes.flatMap((slash)=>slash.offenses.map((o)=>({
13
- validator: slash.validator,
14
- offenseType: o.offenseType,
15
- epochOrSlot: o.epochOrSlot
16
- })));
17
- }
18
- /** Creates ValidatorSlashes used to create an Empire-based SlashPayload from a set of Offenses */ export function offensesToValidatorSlash(offenses) {
19
- return offenses.map((offense)=>({
20
- validator: offense.validator,
21
- amount: offense.amount,
22
- offenses: [
23
- {
24
- epochOrSlot: offense.epochOrSlot,
25
- offenseType: offense.offenseType
26
- }
27
- ]
28
- }));
29
- }
30
- /**
31
- * Sorts offense data by:
32
- * - Uncontroversial offenses first
33
- * - Slash amount (descending)
34
- * - Epoch or slot (ascending, ie oldest first)
35
- * - Validator address (ascending)
36
- * - Offense type (descending)
37
- */ export function offenseDataComparator(a, b) {
38
- return Number(isOffenseUncontroversial(b.offenseType)) - Number(isOffenseUncontroversial(a.offenseType)) || Number(b.amount - a.amount) || Number(a.epochOrSlot - b.epochOrSlot) || a.validator.toString().localeCompare(b.validator.toString()) || Number(b.offenseType) - Number(a.offenseType);
39
- }
40
- /**
41
- * Returns the first round in which the offense is eligible for being included in an Empire-based slash payload.
42
- * Should be equal to to the first round that starts strictly after the offense becomes detectable.
43
- */ export function getFirstEligibleRoundForOffense(offense, constants) {
44
- // TODO(palla/slash): Check for off-by-ones
45
- switch(offense.offenseType){
46
- // Inactivity is detected at the end of the epoch, so we flag it as detected in the first fresh round for the next epoch
47
- case OffenseType.INACTIVITY:
48
- {
49
- const epoch = offense.epochOrSlot;
50
- const detectedEpoch = EpochNumber.fromBigInt(epoch + 1n);
51
- return getRoundsForEpoch(detectedEpoch, constants)[0] + 1n;
52
- }
53
- // These offenses are detected once an epoch is pruned, which happens after the proof submission window
54
- case OffenseType.VALID_EPOCH_PRUNED:
55
- case OffenseType.DATA_WITHHOLDING:
56
- {
57
- // TODO(palla/slash): Check for off-by-ones especially here
58
- const epoch = offense.epochOrSlot;
59
- const detectedEpoch = EpochNumber.fromBigInt(epoch + BigInt(constants.proofSubmissionEpochs));
60
- return getRoundsForEpoch(detectedEpoch, constants)[0] + 1n;
61
- }
62
- // These offenses are detected immediately in the slot they occur, so we assume they are detected in the first round for the following slot
63
- case OffenseType.PROPOSED_INSUFFICIENT_ATTESTATIONS:
64
- case OffenseType.PROPOSED_INCORRECT_ATTESTATIONS:
65
- case OffenseType.ATTESTED_DESCENDANT_OF_INVALID:
66
- case OffenseType.BROADCASTED_INVALID_BLOCK_PROPOSAL:
67
- case OffenseType.DUPLICATE_PROPOSAL:
68
- case OffenseType.DUPLICATE_ATTESTATION:
69
- {
70
- const slot = offense.epochOrSlot;
71
- const detectedSlot = SlotNumber.fromBigInt(slot + 1n);
72
- return getRoundForSlot(detectedSlot, constants).round + 1n;
73
- }
74
- // Assume these are epoch-based offenses, even though we should never have to process these
75
- case OffenseType.UNKNOWN:
76
- {
77
- const epoch = offense.epochOrSlot;
78
- const detectedEpoch = EpochNumber.fromBigInt(epoch + 1n);
79
- return getRoundsForEpoch(detectedEpoch, constants)[0] + 1n;
80
- }
81
- default:
82
- {
83
- const _ = offense.offenseType;
84
- throw new Error(`Unknown offense type: ${offense.offenseType}`);
85
- }
86
- }
87
- }
@@ -1,2 +0,0 @@
1
- export const mockVerificationKey =
2
- '0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f';