@aztec/ethereum 0.0.0-test.1 → 0.0.1-commit.21caa21

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 (232) hide show
  1. package/dest/account.d.ts +2 -0
  2. package/dest/account.d.ts.map +1 -0
  3. package/dest/account.js +4 -0
  4. package/dest/chain.d.ts +1 -1
  5. package/dest/client.d.ts +6 -4
  6. package/dest/client.d.ts.map +1 -1
  7. package/dest/client.js +16 -2
  8. package/dest/config.d.ts +111 -17
  9. package/dest/config.d.ts.map +1 -1
  10. package/dest/config.js +462 -22
  11. package/dest/constants.d.ts +1 -1
  12. package/dest/contracts/empire_base.d.ts +24 -8
  13. package/dest/contracts/empire_base.d.ts.map +1 -1
  14. package/dest/contracts/empire_base.js +75 -2
  15. package/dest/contracts/empire_slashing_proposer.d.ts +66 -0
  16. package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -0
  17. package/dest/contracts/empire_slashing_proposer.js +200 -0
  18. package/dest/contracts/errors.d.ts +7 -0
  19. package/dest/contracts/errors.d.ts.map +1 -0
  20. package/dest/contracts/errors.js +12 -0
  21. package/dest/contracts/fee_asset_handler.d.ts +19 -0
  22. package/dest/contracts/fee_asset_handler.d.ts.map +1 -0
  23. package/dest/contracts/fee_asset_handler.js +57 -0
  24. package/dest/contracts/fee_juice.d.ts +6 -7
  25. package/dest/contracts/fee_juice.d.ts.map +1 -1
  26. package/dest/contracts/fee_juice.js +27 -20
  27. package/dest/contracts/governance.d.ts +43 -32
  28. package/dest/contracts/governance.d.ts.map +1 -1
  29. package/dest/contracts/governance.js +87 -84
  30. package/dest/contracts/governance_proposer.d.ts +16 -13
  31. package/dest/contracts/governance_proposer.d.ts.map +1 -1
  32. package/dest/contracts/governance_proposer.js +37 -17
  33. package/dest/contracts/gse.d.ts +32 -0
  34. package/dest/contracts/gse.d.ts.map +1 -0
  35. package/dest/contracts/gse.js +72 -0
  36. package/dest/contracts/inbox.d.ts +26 -0
  37. package/dest/contracts/inbox.d.ts.map +1 -0
  38. package/dest/contracts/inbox.js +45 -0
  39. package/dest/contracts/index.d.ts +9 -3
  40. package/dest/contracts/index.d.ts.map +1 -1
  41. package/dest/contracts/index.js +8 -2
  42. package/dest/contracts/multicall.d.ts +21 -0
  43. package/dest/contracts/multicall.d.ts.map +1 -0
  44. package/dest/contracts/multicall.js +156 -0
  45. package/dest/contracts/registry.d.ts +10 -5
  46. package/dest/contracts/registry.d.ts.map +1 -1
  47. package/dest/contracts/registry.js +44 -16
  48. package/dest/contracts/rollup.d.ts +204 -40
  49. package/dest/contracts/rollup.d.ts.map +1 -1
  50. package/dest/contracts/rollup.js +529 -79
  51. package/dest/contracts/slasher_contract.d.ts +44 -0
  52. package/dest/contracts/slasher_contract.d.ts.map +1 -0
  53. package/dest/contracts/slasher_contract.js +75 -0
  54. package/dest/contracts/tally_slashing_proposer.d.ts +139 -0
  55. package/dest/contracts/tally_slashing_proposer.d.ts.map +1 -0
  56. package/dest/contracts/tally_slashing_proposer.js +313 -0
  57. package/dest/contracts/utils.d.ts +3 -0
  58. package/dest/contracts/utils.d.ts.map +1 -0
  59. package/dest/contracts/utils.js +11 -0
  60. package/dest/deploy_l1_contracts.d.ts +577 -21114
  61. package/dest/deploy_l1_contracts.d.ts.map +1 -1
  62. package/dest/deploy_l1_contracts.js +1225 -421
  63. package/dest/eth-signer/eth-signer.d.ts +21 -0
  64. package/dest/eth-signer/eth-signer.d.ts.map +1 -0
  65. package/dest/eth-signer/eth-signer.js +5 -0
  66. package/dest/eth-signer/index.d.ts +2 -0
  67. package/dest/eth-signer/index.d.ts.map +1 -0
  68. package/dest/eth-signer/index.js +1 -0
  69. package/dest/index.d.ts +7 -3
  70. package/dest/index.d.ts.map +1 -1
  71. package/dest/index.js +6 -2
  72. package/dest/l1_artifacts.d.ts +77344 -0
  73. package/dest/l1_artifacts.d.ts.map +1 -0
  74. package/dest/l1_artifacts.js +166 -0
  75. package/dest/l1_contract_addresses.d.ts +24 -4
  76. package/dest/l1_contract_addresses.d.ts.map +1 -1
  77. package/dest/l1_contract_addresses.js +22 -18
  78. package/dest/l1_reader.d.ts +2 -2
  79. package/dest/l1_reader.d.ts.map +1 -1
  80. package/dest/l1_reader.js +8 -8
  81. package/dest/l1_tx_utils/config.d.ts +59 -0
  82. package/dest/l1_tx_utils/config.d.ts.map +1 -0
  83. package/dest/l1_tx_utils/config.js +82 -0
  84. package/dest/l1_tx_utils/constants.d.ts +6 -0
  85. package/dest/l1_tx_utils/constants.d.ts.map +1 -0
  86. package/dest/l1_tx_utils/constants.js +14 -0
  87. package/dest/l1_tx_utils/factory.d.ts +24 -0
  88. package/dest/l1_tx_utils/factory.d.ts.map +1 -0
  89. package/dest/l1_tx_utils/factory.js +12 -0
  90. package/dest/l1_tx_utils/index.d.ts +10 -0
  91. package/dest/l1_tx_utils/index.d.ts.map +1 -0
  92. package/dest/l1_tx_utils/index.js +10 -0
  93. package/dest/l1_tx_utils/interfaces.d.ts +76 -0
  94. package/dest/l1_tx_utils/interfaces.d.ts.map +1 -0
  95. package/dest/l1_tx_utils/interfaces.js +4 -0
  96. package/dest/l1_tx_utils/l1_tx_utils.d.ts +94 -0
  97. package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -0
  98. package/dest/l1_tx_utils/l1_tx_utils.js +610 -0
  99. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts +26 -0
  100. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts.map +1 -0
  101. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.js +26 -0
  102. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +94 -0
  103. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -0
  104. package/dest/l1_tx_utils/readonly_l1_tx_utils.js +430 -0
  105. package/dest/l1_tx_utils/signer.d.ts +4 -0
  106. package/dest/l1_tx_utils/signer.d.ts.map +1 -0
  107. package/dest/l1_tx_utils/signer.js +16 -0
  108. package/dest/l1_tx_utils/types.d.ts +67 -0
  109. package/dest/l1_tx_utils/types.d.ts.map +1 -0
  110. package/dest/l1_tx_utils/types.js +26 -0
  111. package/dest/l1_tx_utils/utils.d.ts +4 -0
  112. package/dest/l1_tx_utils/utils.d.ts.map +1 -0
  113. package/dest/l1_tx_utils/utils.js +14 -0
  114. package/dest/l1_types.d.ts +6 -0
  115. package/dest/l1_types.d.ts.map +1 -0
  116. package/dest/l1_types.js +1 -0
  117. package/dest/publisher_manager.d.ts +15 -0
  118. package/dest/publisher_manager.d.ts.map +1 -0
  119. package/dest/publisher_manager.js +88 -0
  120. package/dest/queries.d.ts +4 -2
  121. package/dest/queries.d.ts.map +1 -1
  122. package/dest/queries.js +53 -12
  123. package/dest/test/chain_monitor.d.ts +73 -0
  124. package/dest/test/chain_monitor.d.ts.map +1 -0
  125. package/dest/test/chain_monitor.js +215 -0
  126. package/dest/test/delayed_tx_utils.d.ts +8 -3
  127. package/dest/test/delayed_tx_utils.d.ts.map +1 -1
  128. package/dest/test/delayed_tx_utils.js +13 -6
  129. package/dest/test/eth_cheat_codes.d.ts +217 -0
  130. package/dest/test/eth_cheat_codes.d.ts.map +1 -0
  131. package/dest/test/eth_cheat_codes.js +558 -0
  132. package/dest/test/eth_cheat_codes_with_state.d.ts +2 -2
  133. package/dest/test/eth_cheat_codes_with_state.d.ts.map +1 -1
  134. package/dest/test/eth_cheat_codes_with_state.js +1 -1
  135. package/dest/test/index.d.ts +4 -1
  136. package/dest/test/index.d.ts.map +1 -1
  137. package/dest/test/index.js +3 -0
  138. package/dest/test/rollup_cheat_codes.d.ts +87 -0
  139. package/dest/test/rollup_cheat_codes.d.ts.map +1 -0
  140. package/dest/test/rollup_cheat_codes.js +266 -0
  141. package/dest/test/start_anvil.d.ts +7 -1
  142. package/dest/test/start_anvil.d.ts.map +1 -1
  143. package/dest/test/start_anvil.js +16 -7
  144. package/dest/test/tx_delayer.d.ts +18 -7
  145. package/dest/test/tx_delayer.d.ts.map +1 -1
  146. package/dest/test/tx_delayer.js +95 -19
  147. package/dest/test/upgrade_utils.d.ts +6 -5
  148. package/dest/test/upgrade_utils.d.ts.map +1 -1
  149. package/dest/test/upgrade_utils.js +23 -16
  150. package/dest/types.d.ts +7 -8
  151. package/dest/types.d.ts.map +1 -1
  152. package/dest/types.js +3 -1
  153. package/dest/utils.d.ts +2 -1
  154. package/dest/utils.d.ts.map +1 -1
  155. package/dest/utils.js +43 -88
  156. package/dest/zkPassportVerifierAddress.d.ts +15 -0
  157. package/dest/zkPassportVerifierAddress.d.ts.map +1 -0
  158. package/dest/zkPassportVerifierAddress.js +11 -0
  159. package/package.json +28 -19
  160. package/src/account.ts +5 -0
  161. package/src/client.ts +42 -4
  162. package/src/config.ts +592 -31
  163. package/src/contracts/empire_base.ts +77 -7
  164. package/src/contracts/empire_slashing_proposer.ts +265 -0
  165. package/src/contracts/errors.ts +13 -0
  166. package/src/contracts/fee_asset_handler.ts +63 -0
  167. package/src/contracts/fee_juice.ts +29 -15
  168. package/src/contracts/governance.ts +80 -77
  169. package/src/contracts/governance_proposer.ts +66 -24
  170. package/src/contracts/gse.ts +88 -0
  171. package/src/contracts/inbox.ts +63 -0
  172. package/src/contracts/index.ts +8 -2
  173. package/src/contracts/multicall.ts +155 -0
  174. package/src/contracts/registry.ts +51 -26
  175. package/src/contracts/rollup.ts +596 -74
  176. package/src/contracts/slasher_contract.ts +89 -0
  177. package/src/contracts/tally_slashing_proposer.ts +316 -0
  178. package/src/contracts/utils.ts +14 -0
  179. package/src/deploy_l1_contracts.ts +1459 -538
  180. package/src/eth-signer/eth-signer.ts +25 -0
  181. package/src/eth-signer/index.ts +1 -0
  182. package/src/index.ts +6 -2
  183. package/src/l1_artifacts.ts +254 -0
  184. package/src/l1_contract_addresses.ts +32 -19
  185. package/src/l1_reader.ts +9 -9
  186. package/src/l1_tx_utils/README.md +177 -0
  187. package/src/l1_tx_utils/config.ts +143 -0
  188. package/src/l1_tx_utils/constants.ts +18 -0
  189. package/src/l1_tx_utils/factory.ts +64 -0
  190. package/src/l1_tx_utils/index.ts +12 -0
  191. package/src/l1_tx_utils/interfaces.ts +86 -0
  192. package/src/l1_tx_utils/l1_tx_utils.ts +718 -0
  193. package/src/l1_tx_utils/l1_tx_utils_with_blobs.ts +77 -0
  194. package/src/l1_tx_utils/readonly_l1_tx_utils.ts +558 -0
  195. package/src/l1_tx_utils/signer.ts +28 -0
  196. package/src/l1_tx_utils/types.ts +85 -0
  197. package/src/l1_tx_utils/utils.ts +16 -0
  198. package/src/l1_types.ts +6 -0
  199. package/src/publisher_manager.ts +106 -0
  200. package/src/queries.ts +73 -15
  201. package/src/test/chain_monitor.ts +243 -0
  202. package/src/test/delayed_tx_utils.ts +34 -6
  203. package/src/test/eth_cheat_codes.ts +588 -0
  204. package/src/test/eth_cheat_codes_with_state.ts +1 -1
  205. package/src/test/index.ts +3 -0
  206. package/src/test/rollup_cheat_codes.ts +307 -0
  207. package/src/test/start_anvil.ts +22 -5
  208. package/src/test/tx_delayer.ts +127 -26
  209. package/src/test/upgrade_utils.ts +30 -21
  210. package/src/types.ts +10 -8
  211. package/src/utils.ts +49 -90
  212. package/src/zkPassportVerifierAddress.ts +15 -0
  213. package/dest/contracts/forwarder.d.ts +0 -24
  214. package/dest/contracts/forwarder.d.ts.map +0 -1
  215. package/dest/contracts/forwarder.js +0 -101
  216. package/dest/contracts/slashing_proposer.d.ts +0 -21
  217. package/dest/contracts/slashing_proposer.d.ts.map +0 -1
  218. package/dest/contracts/slashing_proposer.js +0 -47
  219. package/dest/eth_cheat_codes.d.ts +0 -147
  220. package/dest/eth_cheat_codes.d.ts.map +0 -1
  221. package/dest/eth_cheat_codes.js +0 -303
  222. package/dest/l1_tx_utils.d.ts +0 -192
  223. package/dest/l1_tx_utils.d.ts.map +0 -1
  224. package/dest/l1_tx_utils.js +0 -641
  225. package/dest/l1_tx_utils_with_blobs.d.ts +0 -12
  226. package/dest/l1_tx_utils_with_blobs.d.ts.map +0 -1
  227. package/dest/l1_tx_utils_with_blobs.js +0 -64
  228. package/src/contracts/forwarder.ts +0 -132
  229. package/src/contracts/slashing_proposer.ts +0 -51
  230. package/src/eth_cheat_codes.ts +0 -314
  231. package/src/l1_tx_utils.ts +0 -847
  232. package/src/l1_tx_utils_with_blobs.ts +0 -86
@@ -0,0 +1,66 @@
1
+ import { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { EthAddress } from '@aztec/foundation/eth-address';
3
+ import EventEmitter from 'events';
4
+ import { type Hex, type Log, type TypedDataDefinition } from 'viem';
5
+ import type { L1TxRequest, L1TxUtils } from '../l1_tx_utils/index.js';
6
+ import type { ViemClient } from '../types.js';
7
+ import { type IEmpireBase } from './empire_base.js';
8
+ export declare class ProposalAlreadyExecutedError extends Error {
9
+ constructor(round: bigint);
10
+ }
11
+ export declare class EmpireSlashingProposerContract extends EventEmitter implements IEmpireBase {
12
+ readonly client: ViemClient;
13
+ private readonly logger;
14
+ private readonly proposer;
15
+ readonly type: "empire";
16
+ constructor(client: ViemClient, address: Hex | EthAddress);
17
+ get address(): EthAddress;
18
+ getQuorumSize(): Promise<bigint>;
19
+ getRoundSize(): Promise<bigint>;
20
+ getLifetimeInRounds(): Promise<bigint>;
21
+ getExecutionDelayInRounds(): Promise<bigint>;
22
+ getCurrentRound(): Promise<bigint>;
23
+ computeRound(slot: SlotNumber): Promise<bigint>;
24
+ getInstance(): Promise<`0x${string}`>;
25
+ getRoundInfo(rollupAddress: Hex, round: bigint): Promise<{
26
+ lastSignalSlot: SlotNumber;
27
+ payloadWithMostSignals: Hex;
28
+ executed: boolean;
29
+ }>;
30
+ getPayloadSignals(rollupAddress: Hex, round: bigint, payload: Hex): Promise<bigint>;
31
+ createSignalRequest(payload: Hex): L1TxRequest;
32
+ createSignalRequestWithSignature(payload: Hex, slot: SlotNumber, chainId: number, signerAddress: Hex, signer: (msg: TypedDataDefinition) => Promise<Hex>): Promise<L1TxRequest>;
33
+ listenToSubmittablePayloads(callback: (args: {
34
+ payload: `0x${string}`;
35
+ round: bigint;
36
+ }) => unknown): import("viem").WatchContractEventReturnType;
37
+ listenToPayloadSubmitted(callback: (args: {
38
+ round: bigint;
39
+ payload: `0x${string}`;
40
+ }) => unknown): import("viem").WatchContractEventReturnType;
41
+ listenToSignalCasted(callback: (args: {
42
+ round: bigint;
43
+ payload: `0x${string}`;
44
+ signaler: `0x${string}`;
45
+ }) => unknown): import("viem").WatchContractEventReturnType;
46
+ /** Creates an L1TxRequest to submit the round winner for the given round. */
47
+ buildExecuteRoundRequest(round: bigint): L1TxRequest;
48
+ /** Tries to extract a PayloadSubmitted event from the given logs. */
49
+ tryExtractPayloadSubmittedEvent(logs: Log[]): {
50
+ eventName: "PayloadSubmitted";
51
+ args: {
52
+ payload: `0x${string}`;
53
+ round: bigint;
54
+ };
55
+ } | undefined;
56
+ /**
57
+ * Wait for a round to be reached.
58
+ *
59
+ * @param round - The round to wait for.
60
+ * @param pollingIntervalSeconds - The interval in seconds to poll for the round.
61
+ * @returns True if the round was reached, false otherwise.
62
+ */
63
+ waitForRound(round: bigint, pollingIntervalSeconds?: number): Promise<boolean>;
64
+ executeRound(txUtils: L1TxUtils, round: bigint | number): ReturnType<typeof txUtils.sendAndMonitorTransaction>;
65
+ }
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1waXJlX3NsYXNoaW5nX3Byb3Bvc2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL2VtcGlyZV9zbGFzaGluZ19wcm9wb3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSzNELE9BQU8sWUFBWSxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLEVBR0wsS0FBSyxHQUFHLEVBQ1IsS0FBSyxHQUFHLEVBQ1IsS0FBSyxtQkFBbUIsRUFHekIsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxLQUFLLFdBQVcsRUFBOEQsTUFBTSxrQkFBa0IsQ0FBQztBQUVoSCxxQkFBYSw0QkFBNkIsU0FBUSxLQUFLO0lBQ3JELFlBQVksS0FBSyxFQUFFLE1BQU0sRUFFeEI7Q0FDRjtBQUVELHFCQUFhLDhCQUErQixTQUFRLFlBQWEsWUFBVyxXQUFXO2FBT25FLE1BQU0sRUFBRSxVQUFVO0lBTnBDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUErRDtJQUN0RixPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBc0U7SUFFL0YsU0FBZ0IsSUFBSSxXQUFxQjtJQUV6QyxZQUNrQixNQUFNLEVBQUUsVUFBVSxFQUNsQyxPQUFPLEVBQUUsR0FBRyxHQUFHLFVBQVUsRUFRMUI7SUFFRCxJQUFXLE9BQU8sZUFFakI7SUFFTSxhQUFhLG9CQUVuQjtJQUVNLFlBQVksb0JBRWxCO0lBRU0sbUJBQW1CLG9CQUV6QjtJQUVNLHlCQUF5QixvQkFFL0I7SUFFTSxlQUFlLG9CQUVyQjtJQUVNLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFckQ7SUFFTSxXQUFXLDJCQUVqQjtJQUVZLFlBQVksQ0FDdkIsYUFBYSxFQUFFLEdBQUcsRUFDbEIsS0FBSyxFQUFFLE1BQU0sR0FDWixPQUFPLENBQUM7UUFBRSxjQUFjLEVBQUUsVUFBVSxDQUFDO1FBQUMsc0JBQXNCLEVBQUUsR0FBRyxDQUFDO1FBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQTtLQUFFLENBQUMsQ0FPekY7SUFFTSxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXpGO0lBRU0sbUJBQW1CLENBQUMsT0FBTyxFQUFFLEdBQUcsR0FBRyxXQUFXLENBS3BEO0lBRVksZ0NBQWdDLENBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQ1osSUFBSSxFQUFFLFVBQVUsRUFDaEIsT0FBTyxFQUFFLE1BQU0sRUFDZixhQUFhLEVBQUUsR0FBRyxFQUNsQixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLEtBQUssT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUNqRCxPQUFPLENBQUMsV0FBVyxDQUFDLENBYXRCO0lBRU0sMkJBQTJCLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFO1FBQUUsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7UUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFBO0tBQUUsS0FBSyxPQUFPLCtDQWV4RztJQUVNLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRTtRQUFFLEtBQUssRUFBRSxNQUFNLENBQUM7UUFBQyxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQTtLQUFFLEtBQUssT0FBTywrQ0Fjckc7SUFFTSxvQkFBb0IsQ0FDekIsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFO1FBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQztRQUFDLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUE7S0FBRSxLQUFLLE9BQU8sK0NBZWhHO0lBRUQsNkVBQTZFO0lBQ3RFLHdCQUF3QixDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsV0FBVyxDQVMxRDtJQUVELHFFQUFxRTtJQUM5RCwrQkFBK0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFOzs7Ozs7a0JBRWpEO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsc0JBQXNCLEdBQUUsTUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FhdkY7SUFFWSxZQUFZLENBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQ2xCLEtBQUssRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUNyQixVQUFVLENBQUMsT0FBTyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FnRHREO0NBQ0YifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empire_slashing_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/empire_slashing_proposer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,200 @@
1
+ import { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { EthAddress } from '@aztec/foundation/eth-address';
3
+ import { createLogger } from '@aztec/foundation/log';
4
+ import { retryUntil } from '@aztec/foundation/retry';
5
+ import { EmpireSlashingProposerAbi } from '@aztec/l1-artifacts/EmpireSlashingProposerAbi';
6
+ import EventEmitter from 'events';
7
+ import { encodeFunctionData, getContract } from 'viem';
8
+ import { FormattedViemError, tryExtractEvent } from '../utils.js';
9
+ import { encodeSignal, encodeSignalWithSignature, signSignalWithSig } from './empire_base.js';
10
+ export class ProposalAlreadyExecutedError extends Error {
11
+ constructor(round){
12
+ super(`Proposal already executed: ${round}`);
13
+ }
14
+ }
15
+ export class EmpireSlashingProposerContract extends EventEmitter {
16
+ client;
17
+ logger;
18
+ proposer;
19
+ type;
20
+ constructor(client, address){
21
+ super(), this.client = client, this.logger = createLogger('ethereum:contracts:empire_slashing_proposer'), this.type = 'empire';
22
+ this.proposer = getContract({
23
+ address: typeof address === 'string' ? address : address.toString(),
24
+ abi: EmpireSlashingProposerAbi,
25
+ client
26
+ });
27
+ }
28
+ get address() {
29
+ return EthAddress.fromString(this.proposer.address);
30
+ }
31
+ getQuorumSize() {
32
+ return this.proposer.read.QUORUM_SIZE();
33
+ }
34
+ getRoundSize() {
35
+ return this.proposer.read.ROUND_SIZE();
36
+ }
37
+ getLifetimeInRounds() {
38
+ return this.proposer.read.LIFETIME_IN_ROUNDS();
39
+ }
40
+ getExecutionDelayInRounds() {
41
+ return this.proposer.read.EXECUTION_DELAY_IN_ROUNDS();
42
+ }
43
+ getCurrentRound() {
44
+ return this.proposer.read.getCurrentRound();
45
+ }
46
+ computeRound(slot) {
47
+ return this.proposer.read.computeRound([
48
+ BigInt(slot)
49
+ ]);
50
+ }
51
+ getInstance() {
52
+ return this.proposer.read.getInstance();
53
+ }
54
+ async getRoundInfo(rollupAddress, round) {
55
+ const result = await this.proposer.read.getRoundData([
56
+ rollupAddress,
57
+ round
58
+ ]);
59
+ return {
60
+ lastSignalSlot: SlotNumber.fromBigInt(result.lastSignalSlot),
61
+ payloadWithMostSignals: result.payloadWithMostSignals,
62
+ executed: result.executed
63
+ };
64
+ }
65
+ getPayloadSignals(rollupAddress, round, payload) {
66
+ return this.proposer.read.signalCount([
67
+ rollupAddress,
68
+ round,
69
+ payload
70
+ ]);
71
+ }
72
+ createSignalRequest(payload) {
73
+ return {
74
+ to: this.address.toString(),
75
+ data: encodeSignal(payload)
76
+ };
77
+ }
78
+ async createSignalRequestWithSignature(payload, slot, chainId, signerAddress, signer) {
79
+ const signature = await signSignalWithSig(signer, payload, slot, await this.getInstance(), this.address.toString(), chainId);
80
+ return {
81
+ to: this.address.toString(),
82
+ data: encodeSignalWithSignature(payload, signature)
83
+ };
84
+ }
85
+ listenToSubmittablePayloads(callback) {
86
+ return this.proposer.watchEvent.PayloadSubmittable({}, {
87
+ strict: true,
88
+ onLogs: (logs)=>{
89
+ for (const log of logs){
90
+ const { payload, round } = log.args;
91
+ if (payload && round) {
92
+ callback({
93
+ payload,
94
+ round
95
+ });
96
+ }
97
+ }
98
+ }
99
+ });
100
+ }
101
+ listenToPayloadSubmitted(callback) {
102
+ return this.proposer.watchEvent.PayloadSubmitted({}, {
103
+ onLogs: (logs)=>{
104
+ for (const log of logs){
105
+ const { payload, round } = log.args;
106
+ if (round && payload) {
107
+ callback({
108
+ round,
109
+ payload
110
+ });
111
+ }
112
+ }
113
+ }
114
+ });
115
+ }
116
+ listenToSignalCasted(callback) {
117
+ return this.proposer.watchEvent.SignalCast({}, {
118
+ onLogs: (logs)=>{
119
+ for (const log of logs){
120
+ const { round, payload, signaler } = log.args;
121
+ if (round && payload && signaler) {
122
+ callback({
123
+ round,
124
+ payload,
125
+ signaler
126
+ });
127
+ }
128
+ }
129
+ }
130
+ });
131
+ }
132
+ /** Creates an L1TxRequest to submit the round winner for the given round. */ buildExecuteRoundRequest(round) {
133
+ return {
134
+ to: this.address.toString(),
135
+ data: encodeFunctionData({
136
+ abi: EmpireSlashingProposerAbi,
137
+ functionName: 'submitRoundWinner',
138
+ args: [
139
+ round
140
+ ]
141
+ })
142
+ };
143
+ }
144
+ /** Tries to extract a PayloadSubmitted event from the given logs. */ tryExtractPayloadSubmittedEvent(logs) {
145
+ return tryExtractEvent(logs, this.address.toString(), EmpireSlashingProposerAbi, 'PayloadSubmitted');
146
+ }
147
+ /**
148
+ * Wait for a round to be reached.
149
+ *
150
+ * @param round - The round to wait for.
151
+ * @param pollingIntervalSeconds - The interval in seconds to poll for the round.
152
+ * @returns True if the round was reached, false otherwise.
153
+ */ waitForRound(round, pollingIntervalSeconds = 1) {
154
+ return retryUntil(async ()=>{
155
+ const currentRound = await this.proposer.read.getCurrentRound().catch((e)=>{
156
+ this.logger.error('Error getting current round', e);
157
+ return undefined;
158
+ });
159
+ return currentRound !== undefined && currentRound >= round;
160
+ }, `Waiting for round ${round} to be reached`, 0, pollingIntervalSeconds).catch(()=>false);
161
+ }
162
+ async executeRound(txUtils, round) {
163
+ if (typeof round === 'number') {
164
+ round = BigInt(round);
165
+ }
166
+ const args = {
167
+ abi: EmpireSlashingProposerAbi,
168
+ functionName: 'submitRoundWinner',
169
+ args: [
170
+ round
171
+ ]
172
+ };
173
+ const data = encodeFunctionData(args);
174
+ const response = await txUtils.sendAndMonitorTransaction({
175
+ to: this.address.toString(),
176
+ data
177
+ }, {
178
+ // Gas estimation is way off for this, likely because we are creating the contract/selector to call
179
+ // for the actual slashing dynamically.
180
+ gasLimitBufferPercentage: 50
181
+ }).catch((err)=>{
182
+ if (err instanceof FormattedViemError && err.message.includes('ProposalAlreadyExecuted')) {
183
+ throw new ProposalAlreadyExecutedError(round);
184
+ }
185
+ throw err;
186
+ });
187
+ if (response.receipt.status === 'reverted') {
188
+ const error = await txUtils.tryGetErrorFromRevertedTx(data, {
189
+ ...args,
190
+ address: this.address.toString()
191
+ }, undefined, []);
192
+ if (error?.includes('ProposalAlreadyExecuted')) {
193
+ throw new ProposalAlreadyExecutedError(round);
194
+ }
195
+ const errorMessage = `Failed to execute round ${round}, TxHash: ${response.receipt.transactionHash}, Error: ${error ?? 'Unknown error'}`;
196
+ throw new Error(errorMessage);
197
+ }
198
+ return response;
199
+ }
200
+ }
@@ -0,0 +1,7 @@
1
+ export declare class BlockTagTooOldError extends Error {
2
+ constructor(blockTag: bigint | number, latestBlock: bigint | number);
3
+ }
4
+ export declare class NoCommitteeError extends Error {
5
+ constructor();
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQkFBYSxtQkFBb0IsU0FBUSxLQUFLO0lBQzVDLFlBQVksUUFBUSxFQUFFLE1BQU0sR0FBRyxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sR0FBRyxNQUFNLEVBR2xFO0NBQ0Y7QUFFRCxxQkFBYSxnQkFBaUIsU0FBUSxLQUFLO0lBQ3pDLGNBR0M7Q0FDRiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/contracts/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAGlE;CACF;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,cAGC;CACF"}
@@ -0,0 +1,12 @@
1
+ export class BlockTagTooOldError extends Error {
2
+ constructor(blockTag, latestBlock){
3
+ super(`Block tag ${blockTag} is more than 128 blocks behind the latest block ${latestBlock}`);
4
+ this.name = 'BlockTagTooOldError';
5
+ }
6
+ }
7
+ export class NoCommitteeError extends Error {
8
+ constructor(){
9
+ super('The committee does not exist on L1');
10
+ this.name = 'NoCommitteeError';
11
+ }
12
+ }
@@ -0,0 +1,19 @@
1
+ import { EthAddress } from '@aztec/foundation/eth-address';
2
+ import { type Hex } from 'viem';
3
+ import type { L1TxUtils } from '../l1_tx_utils/index.js';
4
+ export declare class FeeAssetHandlerContract {
5
+ readonly txUtils: L1TxUtils;
6
+ address: EthAddress;
7
+ constructor(address: Hex | EthAddress, txUtils: L1TxUtils);
8
+ getOwner(): Promise<EthAddress>;
9
+ getMintAmount(): Promise<bigint>;
10
+ mint(recipient: Hex | EthAddress): Promise<{
11
+ receipt: import("viem").TransactionReceipt;
12
+ state: import("../l1_tx_utils/types.js").L1TxState;
13
+ }>;
14
+ setMintAmount(amount: bigint): Promise<{
15
+ receipt: import("viem").TransactionReceipt;
16
+ state: import("../l1_tx_utils/types.js").L1TxState;
17
+ }>;
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlX2Fzc2V0X2hhbmRsZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvZmVlX2Fzc2V0X2hhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzNELE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBbUMsTUFBTSxNQUFNLENBQUM7QUFFakUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFekQscUJBQWEsdUJBQXVCO2FBS2hCLE9BQU8sRUFBRSxTQUFTO0lBSjdCLE9BQU8sRUFBRSxVQUFVLENBQUM7SUFFM0IsWUFDRSxPQUFPLEVBQUUsR0FBRyxHQUFHLFVBQVUsRUFDVCxPQUFPLEVBQUUsU0FBUyxFQU1uQztJQUVZLFFBQVEsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBTzNDO0lBRU0sYUFBYSxvQkFPbkI7SUFFTSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxVQUFVOzs7T0FZdEM7SUFFTSxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU07OztPQVNsQztDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fee_asset_handler.d.ts","sourceRoot":"","sources":["../../src/contracts/fee_asset_handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAAE,KAAK,GAAG,EAAmC,MAAM,MAAM,CAAC;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,qBAAa,uBAAuB;aAKhB,OAAO,EAAE,SAAS;IAJ7B,OAAO,EAAE,UAAU,CAAC;IAE3B,YACE,OAAO,EAAE,GAAG,GAAG,UAAU,EACT,OAAO,EAAE,SAAS,EAMnC;IAEY,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAO3C;IAEM,aAAa,oBAOnB;IAEM,IAAI,CAAC,SAAS,EAAE,GAAG,GAAG,UAAU;;;OAYtC;IAEM,aAAa,CAAC,MAAM,EAAE,MAAM;;;OASlC;CACF"}
@@ -0,0 +1,57 @@
1
+ import { EthAddress } from '@aztec/foundation/eth-address';
2
+ import { FeeAssetHandlerAbi } from '@aztec/l1-artifacts/FeeAssetHandlerAbi';
3
+ import { encodeFunctionData, getContract } from 'viem';
4
+ export class FeeAssetHandlerContract {
5
+ txUtils;
6
+ address;
7
+ constructor(address, txUtils){
8
+ this.txUtils = txUtils;
9
+ if (address instanceof EthAddress) {
10
+ address = address.toString();
11
+ }
12
+ this.address = EthAddress.fromString(address);
13
+ }
14
+ async getOwner() {
15
+ const contract = getContract({
16
+ abi: FeeAssetHandlerAbi,
17
+ address: this.address.toString(),
18
+ client: this.txUtils.client
19
+ });
20
+ return EthAddress.fromString(await contract.read.owner());
21
+ }
22
+ getMintAmount() {
23
+ const contract = getContract({
24
+ abi: FeeAssetHandlerAbi,
25
+ address: this.address.toString(),
26
+ client: this.txUtils.client
27
+ });
28
+ return contract.read.mintAmount();
29
+ }
30
+ mint(recipient) {
31
+ if (recipient instanceof EthAddress) {
32
+ recipient = recipient.toString();
33
+ }
34
+ return this.txUtils.sendAndMonitorTransaction({
35
+ to: this.address.toString(),
36
+ data: encodeFunctionData({
37
+ abi: FeeAssetHandlerAbi,
38
+ functionName: 'mint',
39
+ args: [
40
+ recipient
41
+ ]
42
+ })
43
+ });
44
+ }
45
+ setMintAmount(amount) {
46
+ return this.txUtils.sendAndMonitorTransaction({
47
+ to: this.address.toString(),
48
+ data: encodeFunctionData({
49
+ abi: FeeAssetHandlerAbi,
50
+ functionName: 'setMintAmount',
51
+ args: [
52
+ amount
53
+ ]
54
+ })
55
+ });
56
+ }
57
+ }
@@ -1,15 +1,14 @@
1
1
  import { EthAddress } from '@aztec/foundation/eth-address';
2
2
  import { type Hex } from 'viem';
3
- import type { L1Clients } from '../types.js';
3
+ import { type ViemClient } from '../types.js';
4
4
  export declare class FeeJuiceContract {
5
- readonly publicClient: L1Clients['publicClient'];
6
- readonly walletClient: L1Clients['walletClient'] | undefined;
7
- private readonly publicFeeJuice;
8
- private readonly walletFeeJuice;
9
- constructor(address: Hex, publicClient: L1Clients['publicClient'], walletClient: L1Clients['walletClient'] | undefined);
5
+ readonly client: ViemClient;
6
+ private readonly feeJuiceContract;
7
+ constructor(address: Hex | EthAddress, client: ViemClient);
10
8
  get address(): EthAddress;
9
+ getOwner(): Promise<EthAddress>;
11
10
  private assertWalletFeeJuice;
12
11
  mint(to: Hex, amount: bigint): Promise<void>;
13
12
  approve(spender: Hex, amount: bigint): Promise<void>;
14
13
  }
15
- //# sourceMappingURL=fee_juice.d.ts.map
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlX2p1aWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL2ZlZV9qdWljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUE4QixLQUFLLEdBQUcsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUV6RSxPQUFPLEVBQWlDLEtBQUssVUFBVSxFQUFvQixNQUFNLGFBQWEsQ0FBQztBQUUvRixxQkFBYSxnQkFBZ0I7YUFLVCxNQUFNLEVBQUUsVUFBVTtJQUpwQyxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUF3RDtJQUV6RixZQUNFLE9BQU8sRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUNULE1BQU0sRUFBRSxVQUFVLEVBTW5DO0lBRUQsSUFBVyxPQUFPLGVBRWpCO0lBRVksUUFBUSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FFM0M7SUFFRCxPQUFPLENBQUMsb0JBQW9CO0lBT2YsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBU3hDO0lBRVksT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBU2hEO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"fee_juice.d.ts","sourceRoot":"","sources":["../../src/contracts/fee_juice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAA8B,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAEzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,gBAAgB;aAMT,YAAY,EAAE,SAAS,CAAC,cAAc,CAAC;aACvC,YAAY,EAAE,SAAS,CAAC,cAAc,CAAC,GAAG,SAAS;IANrE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuE;IACtG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmF;gBAGhH,OAAO,EAAE,GAAG,EACI,YAAY,EAAE,SAAS,CAAC,cAAc,CAAC,EACvC,YAAY,EAAE,SAAS,CAAC,cAAc,CAAC,GAAG,SAAS;IAMrE,IAAW,OAAO,eAEjB;IAED,OAAO,CAAC,oBAAoB;IAOf,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;IAM5B,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;CAKlD"}
1
+ {"version":3,"file":"fee_juice.d.ts","sourceRoot":"","sources":["../../src/contracts/fee_juice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAA8B,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAEzE,OAAO,EAAiC,KAAK,UAAU,EAAoB,MAAM,aAAa,CAAC;AAE/F,qBAAa,gBAAgB;aAKT,MAAM,EAAE,UAAU;IAJpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwD;IAEzF,YACE,OAAO,EAAE,GAAG,GAAG,UAAU,EACT,MAAM,EAAE,UAAU,EAMnC;IAED,IAAW,OAAO,eAEjB;IAEY,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAE3C;IAED,OAAO,CAAC,oBAAoB;IAOf,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,iBASxC;IAEY,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,iBAShD;CACF"}
@@ -1,33 +1,32 @@
1
1
  import { EthAddress } from '@aztec/foundation/eth-address';
2
- import { TestERC20Abi as FeeJuiceAbi } from '@aztec/l1-artifacts';
2
+ import { TestERC20Abi as FeeJuiceAbi } from '@aztec/l1-artifacts/TestERC20Abi';
3
3
  import { getContract } from 'viem';
4
+ import { isExtendedClient } from '../types.js';
4
5
  export class FeeJuiceContract {
5
- publicClient;
6
- walletClient;
7
- publicFeeJuice;
8
- walletFeeJuice;
9
- constructor(address, publicClient, walletClient){
10
- this.publicClient = publicClient;
11
- this.walletClient = walletClient;
12
- this.publicFeeJuice = getContract({
6
+ client;
7
+ feeJuiceContract;
8
+ constructor(address, client){
9
+ this.client = client;
10
+ if (address instanceof EthAddress) {
11
+ address = address.toString();
12
+ }
13
+ this.feeJuiceContract = getContract({
13
14
  address,
14
15
  abi: FeeJuiceAbi,
15
- client: publicClient
16
+ client
16
17
  });
17
- this.walletFeeJuice = walletClient ? getContract({
18
- address,
19
- abi: FeeJuiceAbi,
20
- client: walletClient
21
- }) : undefined;
22
18
  }
23
19
  get address() {
24
- return EthAddress.fromString(this.publicFeeJuice.address);
20
+ return EthAddress.fromString(this.feeJuiceContract.address);
21
+ }
22
+ async getOwner() {
23
+ return EthAddress.fromString(await this.feeJuiceContract.read.owner());
25
24
  }
26
25
  assertWalletFeeJuice() {
27
- if (!this.walletFeeJuice) {
26
+ if (!isExtendedClient(this.client)) {
28
27
  throw new Error('Wallet client is required for this operation');
29
28
  }
30
- return this.walletFeeJuice;
29
+ return this.feeJuiceContract;
31
30
  }
32
31
  async mint(to, amount) {
33
32
  const walletFeeJuice = this.assertWalletFeeJuice();
@@ -35,9 +34,13 @@ export class FeeJuiceContract {
35
34
  to,
36
35
  amount
37
36
  ]);
38
- await this.publicClient.waitForTransactionReceipt({
37
+ const receipt = await this.client.waitForTransactionReceipt({
39
38
  hash: tx
40
39
  });
40
+ if (receipt.status === 'success') {
41
+ return;
42
+ }
43
+ throw new Error('Mint failed');
41
44
  }
42
45
  async approve(spender, amount) {
43
46
  const walletFeeJuice = this.assertWalletFeeJuice();
@@ -45,8 +48,12 @@ export class FeeJuiceContract {
45
48
  spender,
46
49
  amount
47
50
  ]);
48
- await this.publicClient.waitForTransactionReceipt({
51
+ const receipt = await this.client.waitForTransactionReceipt({
49
52
  hash: tx
50
53
  });
54
+ if (receipt.status === 'success') {
55
+ return;
56
+ }
57
+ throw new Error('Approve failed');
51
58
  }
52
59
  }
@@ -1,9 +1,9 @@
1
1
  import { EthAddress } from '@aztec/foundation/eth-address';
2
2
  import type { Logger } from '@aztec/foundation/log';
3
- import { type Hex } from 'viem';
3
+ import { GovernanceAbi } from '@aztec/l1-artifacts/GovernanceAbi';
4
+ import { type GetContractReturnType, type Hex, type Log } from 'viem';
4
5
  import type { L1ContractAddresses } from '../l1_contract_addresses.js';
5
- import type { ViemPublicClient, ViemWalletClient } from '../types.js';
6
- import { GovernanceProposerContract } from './governance_proposer.js';
6
+ import { type ExtendedViemWalletClient, type ViemClient } from '../types.js';
7
7
  export type L1GovernanceContractAddresses = Pick<L1ContractAddresses, 'governanceAddress' | 'rollupAddress' | 'registryAddress' | 'governanceProposerAddress'>;
8
8
  export declare enum ProposalState {
9
9
  Pending = 0,
@@ -15,45 +15,46 @@ export declare enum ProposalState {
15
15
  Dropped = 6,
16
16
  Expired = 7
17
17
  }
18
- export declare class GovernanceContract {
19
- readonly publicClient: ViemPublicClient;
20
- readonly walletClient: ViemWalletClient | undefined;
21
- private readonly publicGovernance;
22
- private readonly walletGovernance;
23
- constructor(address: Hex, publicClient: ViemPublicClient, walletClient: ViemWalletClient | undefined);
18
+ export declare function extractProposalIdFromLogs(logs: Log[]): bigint;
19
+ export declare class ReadOnlyGovernanceContract {
20
+ readonly client: ViemClient;
21
+ protected readonly governanceContract: GetContractReturnType<typeof GovernanceAbi, ViemClient>;
22
+ constructor(address: Hex, client: ViemClient);
24
23
  get address(): EthAddress;
25
- getProposer(): Promise<GovernanceProposerContract>;
26
- getGovernanceAddresses(): Promise<L1GovernanceContractAddresses>;
24
+ getGovernanceProposerAddress(): Promise<EthAddress>;
25
+ getConfiguration(): Promise<{
26
+ executionDelay: bigint;
27
+ gracePeriod: bigint;
28
+ minimumVotes: bigint;
29
+ proposeConfig: {
30
+ lockAmount: bigint;
31
+ lockDelay: bigint;
32
+ };
33
+ quorum: bigint;
34
+ requiredYeaMargin: bigint;
35
+ votingDelay: bigint;
36
+ votingDuration: bigint;
37
+ }>;
27
38
  getProposal(proposalId: bigint): Promise<{
39
+ cachedState: number;
28
40
  config: {
29
- proposeConfig: {
30
- lockDelay: bigint;
31
- lockAmount: bigint;
32
- };
33
- votingDelay: bigint;
34
- votingDuration: bigint;
35
41
  executionDelay: bigint;
36
42
  gracePeriod: bigint;
37
- quorum: bigint;
38
- voteDifferential: bigint;
39
43
  minimumVotes: bigint;
44
+ quorum: bigint;
45
+ requiredYeaMargin: bigint;
46
+ votingDelay: bigint;
47
+ votingDuration: bigint;
40
48
  };
41
- state: number;
42
- payload: `0x${string}`;
43
- governanceProposer: `0x${string}`;
44
49
  creation: bigint;
50
+ payload: `0x${string}`;
51
+ proposer: `0x${string}`;
45
52
  summedBallot: {
53
+ nay: bigint;
46
54
  yea: bigint;
47
- nea: bigint;
48
55
  };
49
56
  }>;
50
57
  getProposalState(proposalId: bigint): Promise<ProposalState>;
51
- private assertWalletGovernance;
52
- deposit(onBehalfOf: Hex, amount: bigint): Promise<void>;
53
- proposeWithLock({ payloadAddress, withdrawAddress, }: {
54
- payloadAddress: Hex;
55
- withdrawAddress: Hex;
56
- }): Promise<number>;
57
58
  awaitProposalActive({ proposalId, logger }: {
58
59
  proposalId: bigint;
59
60
  logger: Logger;
@@ -62,18 +63,28 @@ export declare class GovernanceContract {
62
63
  proposalId: bigint;
63
64
  logger: Logger;
64
65
  }): Promise<void>;
66
+ }
67
+ export declare class GovernanceContract extends ReadOnlyGovernanceContract {
68
+ readonly client: ExtendedViemWalletClient;
69
+ protected readonly governanceContract: GetContractReturnType<typeof GovernanceAbi, ExtendedViemWalletClient>;
70
+ constructor(address: Hex | EthAddress, client: ExtendedViemWalletClient);
71
+ deposit(onBehalfOf: Hex, amount: bigint): Promise<void>;
72
+ proposeWithLock({ payloadAddress, withdrawAddress }: {
73
+ payloadAddress: Hex;
74
+ withdrawAddress: Hex;
75
+ }): Promise<bigint>;
65
76
  getPower(): Promise<bigint>;
66
- vote({ proposalId, voteAmount, inFavor, retries, logger, }: {
77
+ vote({ proposalId, voteAmount, inFavor, retries, logger }: {
67
78
  proposalId: bigint;
68
79
  voteAmount: bigint | undefined;
69
80
  inFavor: boolean;
70
81
  retries: number;
71
82
  logger: Logger;
72
83
  }): Promise<void>;
73
- executeProposal({ proposalId, retries, logger, }: {
84
+ executeProposal({ proposalId, retries, logger }: {
74
85
  proposalId: bigint;
75
86
  retries: number;
76
87
  logger: Logger;
77
88
  }): Promise<void>;
78
89
  }
79
- //# sourceMappingURL=governance.d.ts.map
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ292ZXJuYW5jZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9nb3Zlcm5hbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbEUsT0FBTyxFQUVMLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssR0FBRyxFQUNSLEtBQUssR0FBRyxFQUlULE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsS0FBSyx3QkFBd0IsRUFBRSxLQUFLLFVBQVUsRUFBb0IsTUFBTSxhQUFhLENBQUM7QUFFL0YsTUFBTSxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FDOUMsbUJBQW1CLEVBQ25CLG1CQUFtQixHQUFHLGVBQWUsR0FBRyxpQkFBaUIsR0FBRywyQkFBMkIsQ0FDeEYsQ0FBQztBQUdGLG9CQUFZLGFBQWE7SUFDdkIsT0FBTyxJQUFBO0lBQ1AsTUFBTSxJQUFBO0lBQ04sTUFBTSxJQUFBO0lBQ04sVUFBVSxJQUFBO0lBQ1YsUUFBUSxJQUFBO0lBQ1IsUUFBUSxJQUFBO0lBQ1IsT0FBTyxJQUFBO0lBQ1AsT0FBTyxJQUFBO0NBQ1I7QUFFRCx3QkFBZ0IseUJBQXlCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FXN0Q7QUFFRCxxQkFBYSwwQkFBMEI7YUFLbkIsTUFBTSxFQUFFLFVBQVU7SUFKcEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUUvRixZQUNFLE9BQU8sRUFBRSxHQUFHLEVBQ0ksTUFBTSxFQUFFLFVBQVUsRUFHbkM7SUFFRCxJQUFXLE9BQU8sZUFFakI7SUFFWSw0QkFBNEIsd0JBRXhDO0lBRU0sZ0JBQWdCOzs7Ozs7Ozs7Ozs7T0FFdEI7SUFFTSxXQUFXLENBQUMsVUFBVSxFQUFFLE1BQU07Ozs7Ozs7Ozs7Ozs7Ozs7OztPQUVwQztJQUVZLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQU94RTtJQUVZLG1CQUFtQixDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQztRQUFDLE1BQU0sRUFBRSxNQUFNLENBQUE7S0FBRSxpQkFvQjlGO0lBRVksdUJBQXVCLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDO1FBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQTtLQUFFLGlCQXlCbEc7Q0FDRjtBQUVELHFCQUFhLGtCQUFtQixTQUFRLDBCQUEwQjthQUtyQyxNQUFNLEVBQUUsd0JBQXdCO0lBSjNELG1CQUE0QixrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLGFBQWEsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBRXRILFlBQ0UsT0FBTyxFQUFFLEdBQUcsR0FBRyxVQUFVLEVBQ0EsTUFBTSxFQUFFLHdCQUF3QixFQVUxRDtJQUVZLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUduRDtJQUVZLGVBQWUsQ0FBQyxFQUMzQixjQUFjLEVBQ2QsZUFBZSxFQUNoQixFQUFFO1FBQ0QsY0FBYyxFQUFFLEdBQUcsQ0FBQztRQUNwQixlQUFlLEVBQUUsR0FBRyxDQUFDO0tBQ3RCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQU9sQjtJQUVZLFFBQVEsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBR3ZDO0lBRVksSUFBSSxDQUFDLEVBQ2hCLFVBQVUsRUFDVixVQUFVLEVBQ1YsT0FBTyxFQUNQLE9BQVksRUFDWixNQUFNLEVBQ1AsRUFBRTtRQUNELFVBQVUsRUFBRSxNQUFNLENBQUM7UUFDbkIsVUFBVSxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDL0IsT0FBTyxFQUFFLE9BQU8sQ0FBQztRQUNqQixPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQ2hCLE1BQU0sRUFBRSxNQUFNLENBQUM7S0FDaEIsaUJBK0NBO0lBRVksZUFBZSxDQUFDLEVBQzNCLFVBQVUsRUFDVixPQUFZLEVBQ1osTUFBTSxFQUNQLEVBQUU7UUFDRCxVQUFVLEVBQUUsTUFBTSxDQUFDO1FBQ25CLE9BQU8sRUFBRSxNQUFNLENBQUM7UUFDaEIsTUFBTSxFQUFFLE1BQU0sQ0FBQztLQUNoQixpQkF5Q0E7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../src/contracts/governance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAIpD,OAAO,EAGL,KAAK,GAAG,EAGT,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAC9C,mBAAmB,EACnB,mBAAmB,GAAG,eAAe,GAAG,iBAAiB,GAAG,2BAA2B,CACxF,CAAC;AAGF,oBAAY,aAAa;IACvB,OAAO,IAAA;IACP,MAAM,IAAA;IACN,MAAM,IAAA;IACN,UAAU,IAAA;IACV,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,OAAO,IAAA;IACP,OAAO,IAAA;CACR;AAED,qBAAa,kBAAkB;aAMX,YAAY,EAAE,gBAAgB;aAC9B,YAAY,EAAE,gBAAgB,GAAG,SAAS;IAN5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgE;IACjG,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA4E;gBAG3G,OAAO,EAAE,GAAG,EACI,YAAY,EAAE,gBAAgB,EAC9B,YAAY,EAAE,gBAAgB,GAAG,SAAS;IAQ5D,IAAW,OAAO,eAEjB;IAEY,WAAW;IAKX,sBAAsB,IAAI,OAAO,CAAC,6BAA6B,CAAC;IActE,WAAW,CAAC,UAAU,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;IAIxB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAQzE,OAAO,CAAC,sBAAsB;IAOjB,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;IAMvC,eAAe,CAAC,EAC3B,cAAc,EACd,eAAe,GAChB,EAAE;QACD,cAAc,EAAE,GAAG,CAAC;QACpB,eAAe,EAAE,GAAG,CAAC;KACtB,GAAG,OAAO,CAAC,MAAM,CAAC;IAYN,mBAAmB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAsBlF,uBAAuB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IA2BtF,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAM3B,IAAI,CAAC,EAChB,UAAU,EACV,UAAU,EACV,OAAO,EACP,OAAY,EACZ,MAAM,GACP,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB;IAkDY,eAAe,CAAC,EAC3B,UAAU,EACV,OAAY,EACZ,MAAM,GACP,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB;CA2CF"}
1
+ {"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../src/contracts/governance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,GAAG,EACR,KAAK,GAAG,EAIT,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,UAAU,EAAoB,MAAM,aAAa,CAAC;AAE/F,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAC9C,mBAAmB,EACnB,mBAAmB,GAAG,eAAe,GAAG,iBAAiB,GAAG,2BAA2B,CACxF,CAAC;AAGF,oBAAY,aAAa;IACvB,OAAO,IAAA;IACP,MAAM,IAAA;IACN,MAAM,IAAA;IACN,UAAU,IAAA;IACV,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,OAAO,IAAA;IACP,OAAO,IAAA;CACR;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAW7D;AAED,qBAAa,0BAA0B;aAKnB,MAAM,EAAE,UAAU;IAJpC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,OAAO,aAAa,EAAE,UAAU,CAAC,CAAC;IAE/F,YACE,OAAO,EAAE,GAAG,EACI,MAAM,EAAE,UAAU,EAGnC;IAED,IAAW,OAAO,eAEjB;IAEY,4BAA4B,wBAExC;IAEM,gBAAgB;;;;;;;;;;;;OAEtB;IAEM,WAAW,CAAC,UAAU,EAAE,MAAM;;;;;;;;;;;;;;;;;;OAEpC;IAEY,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAOxE;IAEY,mBAAmB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,iBAoB9F;IAEY,uBAAuB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,iBAyBlG;CACF;AAED,qBAAa,kBAAmB,SAAQ,0BAA0B;aAKrC,MAAM,EAAE,wBAAwB;IAJ3D,mBAA4B,kBAAkB,EAAE,qBAAqB,CAAC,OAAO,aAAa,EAAE,wBAAwB,CAAC,CAAC;IAEtH,YACE,OAAO,EAAE,GAAG,GAAG,UAAU,EACA,MAAM,EAAE,wBAAwB,EAU1D;IAEY,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,iBAGnD;IAEY,eAAe,CAAC,EAC3B,cAAc,EACd,eAAe,EAChB,EAAE;QACD,cAAc,EAAE,GAAG,CAAC;QACpB,eAAe,EAAE,GAAG,CAAC;KACtB,GAAG,OAAO,CAAC,MAAM,CAAC,CAOlB;IAEY,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAGvC;IAEY,IAAI,CAAC,EAChB,UAAU,EACV,UAAU,EACV,OAAO,EACP,OAAY,EACZ,MAAM,EACP,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,iBA+CA;IAEY,eAAe,CAAC,EAC3B,UAAU,EACV,OAAY,EACZ,MAAM,EACP,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,iBAyCA;CACF"}