@aztec/ethereum 0.0.0-test.0 → 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
@@ -1,9 +1,9 @@
1
1
  import { EthAddress } from '@aztec/foundation/eth-address';
2
2
  import { sleep } from '@aztec/foundation/sleep';
3
- import { GovernanceAbi } from '@aztec/l1-artifacts';
4
- import { encodeFunctionData, getContract } from 'viem';
5
- import { L1TxUtils } from '../l1_tx_utils.js';
6
- import { GovernanceProposerContract } from './governance_proposer.js';
3
+ import { GovernanceAbi } from '@aztec/l1-artifacts/GovernanceAbi';
4
+ import { encodeFunctionData, getContract, parseEventLogs } from 'viem';
5
+ import { createL1TxUtilsFromViemWallet } from '../l1_tx_utils/index.js';
6
+ import { isExtendedClient } from '../types.js';
7
7
  // NOTE: Must be kept in sync with DataStructures.ProposalState in l1-contracts
8
8
  export var ProposalState = /*#__PURE__*/ function(ProposalState) {
9
9
  ProposalState[ProposalState["Pending"] = 0] = "Pending";
@@ -16,90 +16,52 @@ export var ProposalState = /*#__PURE__*/ function(ProposalState) {
16
16
  ProposalState[ProposalState["Expired"] = 7] = "Expired";
17
17
  return ProposalState;
18
18
  }({});
19
- export class GovernanceContract {
20
- publicClient;
21
- walletClient;
22
- publicGovernance;
23
- walletGovernance;
24
- constructor(address, publicClient, walletClient){
25
- this.publicClient = publicClient;
26
- this.walletClient = walletClient;
27
- this.publicGovernance = getContract({
19
+ export function extractProposalIdFromLogs(logs) {
20
+ const parsedLogs = parseEventLogs({
21
+ abi: GovernanceAbi,
22
+ logs: logs,
23
+ eventName: 'Proposed'
24
+ });
25
+ if (parsedLogs.length === 0) {
26
+ throw new Error('Proposal log not found');
27
+ }
28
+ return parsedLogs[0].args.proposalId;
29
+ }
30
+ export class ReadOnlyGovernanceContract {
31
+ client;
32
+ governanceContract;
33
+ constructor(address, client){
34
+ this.client = client;
35
+ this.governanceContract = getContract({
28
36
  address,
29
37
  abi: GovernanceAbi,
30
- client: publicClient
38
+ client: client
31
39
  });
32
- this.walletGovernance = walletClient ? getContract({
33
- address,
34
- abi: GovernanceAbi,
35
- client: walletClient
36
- }) : undefined;
37
40
  }
38
41
  get address() {
39
- return EthAddress.fromString(this.publicGovernance.address);
42
+ return EthAddress.fromString(this.governanceContract.address);
40
43
  }
41
- async getProposer() {
42
- const governanceProposerAddress = EthAddress.fromString(await this.publicGovernance.read.governanceProposer());
43
- return new GovernanceProposerContract(this.publicClient, governanceProposerAddress.toString());
44
+ async getGovernanceProposerAddress() {
45
+ return EthAddress.fromString(await this.governanceContract.read.governanceProposer());
44
46
  }
45
- async getGovernanceAddresses() {
46
- const governanceProposer = await this.getProposer();
47
- const [rollupAddress, registryAddress] = await Promise.all([
48
- governanceProposer.getRollupAddress(),
49
- governanceProposer.getRegistryAddress()
50
- ]);
51
- return {
52
- governanceAddress: this.address,
53
- rollupAddress,
54
- registryAddress,
55
- governanceProposerAddress: governanceProposer.address
56
- };
47
+ getConfiguration() {
48
+ return this.governanceContract.read.getConfiguration();
57
49
  }
58
50
  getProposal(proposalId) {
59
- return this.publicGovernance.read.getProposal([
51
+ return this.governanceContract.read.getProposal([
60
52
  proposalId
61
53
  ]);
62
54
  }
63
55
  async getProposalState(proposalId) {
64
- const state = await this.publicGovernance.read.getProposalState([
56
+ const state = await this.governanceContract.read.getProposalState([
65
57
  proposalId
66
58
  ]);
59
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
67
60
  if (state < 0 || state > 7) {
68
61
  throw new Error(`Invalid proposal state: ${state}`);
69
62
  }
70
63
  return state;
71
64
  }
72
- assertWalletGovernance() {
73
- if (!this.walletGovernance) {
74
- throw new Error('Wallet client is required for this operation');
75
- }
76
- return this.walletGovernance;
77
- }
78
- async deposit(onBehalfOf, amount) {
79
- const walletGovernance = this.assertWalletGovernance();
80
- const depositTx = await walletGovernance.write.deposit([
81
- onBehalfOf,
82
- amount
83
- ]);
84
- await this.publicClient.waitForTransactionReceipt({
85
- hash: depositTx
86
- });
87
- }
88
- async proposeWithLock({ payloadAddress, withdrawAddress }) {
89
- const walletGovernance = this.assertWalletGovernance();
90
- const proposeTx = await walletGovernance.write.proposeWithLock([
91
- payloadAddress,
92
- withdrawAddress
93
- ]);
94
- const receipt = await this.publicClient.waitForTransactionReceipt({
95
- hash: proposeTx
96
- });
97
- if (receipt.status !== 'success') {
98
- throw new Error(`Proposal failed: ${receipt.status}`);
99
- }
100
- const proposalId = Number(receipt.logs[1].topics[1]);
101
- return proposalId;
102
- }
103
65
  async awaitProposalActive({ proposalId, logger }) {
104
66
  const state = await this.getProposalState(proposalId);
105
67
  if (state === 1) {
@@ -109,7 +71,7 @@ export class GovernanceContract {
109
71
  } else {
110
72
  const proposal = await this.getProposal(proposalId);
111
73
  const startOfActive = proposal.creation + proposal.config.votingDelay;
112
- const block = await this.publicClient.getBlock();
74
+ const block = await this.client.getBlock();
113
75
  // Add 12 seconds to the time to make sure we don't vote too early
114
76
  const secondsToActive = Number(startOfActive - block.timestamp) + 12;
115
77
  const now = new Date();
@@ -135,7 +97,7 @@ export class GovernanceContract {
135
97
  } else {
136
98
  const proposal = await this.getProposal(proposalId);
137
99
  const startOfExecutable = proposal.creation + proposal.config.votingDelay + proposal.config.votingDuration + proposal.config.executionDelay;
138
- const block = await this.publicClient.getBlock();
100
+ const block = await this.client.getBlock();
139
101
  const secondsToExecutable = Number(startOfExecutable - block.timestamp) + 12;
140
102
  const now = new Date();
141
103
  logger.info(`
@@ -146,17 +108,57 @@ export class GovernanceContract {
146
108
  await sleep(secondsToExecutable * 1000);
147
109
  }
148
110
  }
111
+ }
112
+ export class GovernanceContract extends ReadOnlyGovernanceContract {
113
+ client;
114
+ governanceContract;
115
+ constructor(address, client){
116
+ if (address instanceof EthAddress) {
117
+ address = address.toString();
118
+ }
119
+ super(address, client), this.client = client;
120
+ if (!isExtendedClient(client)) {
121
+ throw new Error('GovernanceContract has to be instantiated with a wallet client.');
122
+ }
123
+ this.governanceContract = getContract({
124
+ address,
125
+ abi: GovernanceAbi,
126
+ client
127
+ });
128
+ }
129
+ async deposit(onBehalfOf, amount) {
130
+ const depositTx = await this.governanceContract.write.deposit([
131
+ onBehalfOf,
132
+ amount
133
+ ]);
134
+ await this.client.waitForTransactionReceipt({
135
+ hash: depositTx
136
+ });
137
+ }
138
+ async proposeWithLock({ payloadAddress, withdrawAddress }) {
139
+ const proposeTx = await this.governanceContract.write.proposeWithLock([
140
+ payloadAddress,
141
+ withdrawAddress
142
+ ]);
143
+ const receipt = await this.client.waitForTransactionReceipt({
144
+ hash: proposeTx
145
+ });
146
+ if (receipt.status !== 'success') {
147
+ throw new Error(`Proposal failed: ${receipt.status}`);
148
+ }
149
+ return extractProposalIdFromLogs(receipt.logs);
150
+ }
149
151
  async getPower() {
150
- const walletGovernance = this.assertWalletGovernance();
151
- const now = await this.publicClient.getBlock();
152
- return walletGovernance.read.powerAt([
153
- this.walletClient.account.address,
152
+ const now = await this.client.getBlock();
153
+ return this.governanceContract.read.powerAt([
154
+ this.client.account.address,
154
155
  now.timestamp
155
156
  ]);
156
157
  }
157
158
  async vote({ proposalId, voteAmount, inFavor, retries = 10, logger }) {
158
- const walletGovernance = this.assertWalletGovernance();
159
- const l1TxUtils = new L1TxUtils(this.publicClient, this.walletClient, logger);
159
+ const l1TxUtils = createL1TxUtilsFromViemWallet(this.client, {
160
+ logger
161
+ });
160
162
  const retryDelaySeconds = 12;
161
163
  voteAmount = voteAmount ?? await this.getPower();
162
164
  let success = false;
@@ -173,7 +175,7 @@ export class GovernanceContract {
173
175
  };
174
176
  const encodedVoteData = encodeFunctionData(voteFunctionData);
175
177
  const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
176
- to: walletGovernance.address,
178
+ to: this.governanceContract.address,
177
179
  data: encodedVoteData
178
180
  });
179
181
  if (receipt.status === 'success') {
@@ -182,7 +184,7 @@ export class GovernanceContract {
182
184
  } else {
183
185
  const args = {
184
186
  ...voteFunctionData,
185
- address: walletGovernance.address
187
+ address: this.governanceContract.address
186
188
  };
187
189
  const errorMsg = await l1TxUtils.tryGetErrorFromRevertedTx(encodedVoteData, args, undefined, []);
188
190
  logger.error(`Error voting on proposal ${proposalId}: ${errorMsg}`);
@@ -198,13 +200,14 @@ export class GovernanceContract {
198
200
  }
199
201
  logger.info(`Voted [${inFavor ? 'yea' : 'nay'}] on proposal [${proposalId}]`);
200
202
  const proposal = await this.getProposal(proposalId);
201
- logger.info(`Proposal [${proposalId}] has state [${proposal.state}]`);
203
+ logger.info(`Proposal [${proposalId}] has cached state [${proposal.cachedState}]`);
202
204
  logger.info(`Proposal [${proposalId}] has summedBallot yea [${proposal.summedBallot.yea}]`);
203
- logger.info(`Proposal [${proposalId}] has summedBallot nea [${proposal.summedBallot.nea}]`);
205
+ logger.info(`Proposal [${proposalId}] has summedBallot nay [${proposal.summedBallot.nay}]`);
204
206
  }
205
207
  async executeProposal({ proposalId, retries = 10, logger }) {
206
- const walletGovernance = this.assertWalletGovernance();
207
- const l1TxUtils = new L1TxUtils(this.publicClient, this.walletClient, logger);
208
+ const l1TxUtils = createL1TxUtilsFromViemWallet(this.client, {
209
+ logger
210
+ });
208
211
  const retryDelaySeconds = 12;
209
212
  let success = false;
210
213
  for(let i = 0; i < retries; i++){
@@ -218,7 +221,7 @@ export class GovernanceContract {
218
221
  };
219
222
  const encodedExecuteData = encodeFunctionData(executeFunctionData);
220
223
  const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
221
- to: walletGovernance.address,
224
+ to: this.governanceContract.address,
222
225
  data: encodedExecuteData
223
226
  });
224
227
  if (receipt.status === 'success') {
@@ -227,7 +230,7 @@ export class GovernanceContract {
227
230
  } else {
228
231
  const args = {
229
232
  ...executeFunctionData,
230
- address: walletGovernance.address
233
+ address: this.governanceContract.address
231
234
  };
232
235
  const errorMsg = await l1TxUtils.tryGetErrorFromRevertedTx(encodedExecuteData, args, undefined, []);
233
236
  logger.error(`Error executing proposal ${proposalId}: ${errorMsg}`);
@@ -1,28 +1,31 @@
1
+ import { SlotNumber } from '@aztec/foundation/branded-types';
1
2
  import { EthAddress } from '@aztec/foundation/eth-address';
2
- import { type Hex, type TransactionReceipt } from 'viem';
3
- import type { GasPrice, L1TxRequest, L1TxUtils } from '../l1_tx_utils.js';
4
- import type { ViemPublicClient } from '../types.js';
3
+ import { type Hex, type TransactionReceipt, type TypedDataDefinition } from 'viem';
4
+ import type { L1TxRequest, L1TxUtils } from '../l1_tx_utils/index.js';
5
+ import type { ViemClient } from '../types.js';
5
6
  import { type IEmpireBase } from './empire_base.js';
6
7
  export declare class GovernanceProposerContract implements IEmpireBase {
7
- readonly client: ViemPublicClient;
8
+ readonly client: ViemClient;
8
9
  private readonly proposer;
9
- constructor(client: ViemPublicClient, address: Hex);
10
+ constructor(client: ViemClient, address: Hex | EthAddress);
10
11
  get address(): EthAddress;
11
12
  getRollupAddress(): Promise<EthAddress>;
12
13
  getRegistryAddress(): Promise<EthAddress>;
13
14
  getQuorumSize(): Promise<bigint>;
14
15
  getRoundSize(): Promise<bigint>;
15
- computeRound(slot: bigint): Promise<bigint>;
16
+ getInstance(): Promise<`0x${string}`>;
17
+ computeRound(slot: SlotNumber): Promise<bigint>;
16
18
  getRoundInfo(rollupAddress: Hex, round: bigint): Promise<{
17
- lastVote: bigint;
18
- leader: Hex;
19
+ lastSignalSlot: SlotNumber;
20
+ payloadWithMostSignals: Hex;
19
21
  executed: boolean;
20
22
  }>;
21
- getProposalVotes(rollupAddress: Hex, round: bigint, proposal: Hex): Promise<bigint>;
22
- createVoteRequest(payload: Hex): L1TxRequest;
23
- executeProposal(round: bigint, l1TxUtils: L1TxUtils): Promise<{
23
+ getPayloadSignals(rollupAddress: Hex, round: bigint, payload: Hex): Promise<bigint>;
24
+ createSignalRequest(payload: Hex): L1TxRequest;
25
+ createSignalRequestWithSignature(payload: Hex, slot: SlotNumber, chainId: number, signerAddress: Hex, signer: (msg: TypedDataDefinition) => Promise<Hex>): Promise<L1TxRequest>;
26
+ submitRoundWinner(round: bigint, l1TxUtils: L1TxUtils): Promise<{
24
27
  receipt: TransactionReceipt;
25
- gasPrice: GasPrice;
28
+ proposalId: bigint;
26
29
  }>;
27
30
  }
28
- //# sourceMappingURL=governance_proposer.d.ts.map
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ292ZXJuYW5jZV9wcm9wb3Nlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9nb3Zlcm5hbmNlX3Byb3Bvc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUVMLEtBQUssR0FBRyxFQUNSLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssbUJBQW1CLEVBR3pCLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQThELE1BQU0sa0JBQWtCLENBQUM7QUFHaEgscUJBQWEsMEJBQTJCLFlBQVcsV0FBVzthQUkxQyxNQUFNLEVBQUUsVUFBVTtJQUhwQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBa0U7SUFFM0YsWUFDa0IsTUFBTSxFQUFFLFVBQVUsRUFDbEMsT0FBTyxFQUFFLEdBQUcsR0FBRyxVQUFVLEVBTTFCO0lBRUQsSUFBVyxPQUFPLGVBRWpCO0lBRVksZ0JBQWdCLHdCQUU1QjtJQUdZLGtCQUFrQix3QkFFOUI7SUFFTSxhQUFhLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUV0QztJQUVNLFlBQVksSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXJDO0lBRU0sV0FBVywyQkFFakI7SUFFTSxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXJEO0lBRVksWUFBWSxDQUN2QixhQUFhLEVBQUUsR0FBRyxFQUNsQixLQUFLLEVBQUUsTUFBTSxHQUNaLE9BQU8sQ0FBQztRQUFFLGNBQWMsRUFBRSxVQUFVLENBQUM7UUFBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUM7UUFBQyxRQUFRLEVBQUUsT0FBTyxDQUFBO0tBQUUsQ0FBQyxDQU96RjtJQUVNLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFekY7SUFFTSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxHQUFHLFdBQVcsQ0FLcEQ7SUFFWSxnQ0FBZ0MsQ0FDM0MsT0FBTyxFQUFFLEdBQUcsRUFDWixJQUFJLEVBQUUsVUFBVSxFQUNoQixPQUFPLEVBQUUsTUFBTSxFQUNmLGFBQWEsRUFBRSxHQUFHLEVBQ2xCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQ2pELE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FhdEI7SUFFWSxpQkFBaUIsQ0FDNUIsS0FBSyxFQUFFLE1BQU0sRUFDYixTQUFTLEVBQUUsU0FBUyxHQUNuQixPQUFPLENBQUM7UUFDVCxPQUFPLEVBQUUsa0JBQWtCLENBQUM7UUFDNUIsVUFBVSxFQUFFLE1BQU0sQ0FBQztLQUNwQixDQUFDLENBV0Q7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"governance_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/governance_proposer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAA8B,KAAK,GAAG,EAAE,KAAK,kBAAkB,EAAmC,MAAM,MAAM,CAAC;AAEtH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,kBAAkB,CAAC;AAEhE,qBAAa,0BAA2B,YAAW,WAAW;aAGhC,MAAM,EAAE,gBAAgB;IAFpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwE;gBAErE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG;IAIlE,IAAW,OAAO,eAEjB;IAEY,gBAAgB;IAKhB,kBAAkB;IAIxB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAIhC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrC,YAAY,CACvB,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IASzD,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAInF,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW;IAO5C,eAAe,CACpB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC;QACT,OAAO,EAAE,kBAAkB,CAAC;QAC5B,QAAQ,EAAE,QAAQ,CAAC;KACpB,CAAC;CAUH"}
1
+ {"version":3,"file":"governance_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/governance_proposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAGzB,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,KAAK,WAAW,EAA8D,MAAM,kBAAkB,CAAC;AAGhH,qBAAa,0BAA2B,YAAW,WAAW;aAI1C,MAAM,EAAE,UAAU;IAHpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkE;IAE3F,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAM1B;IAED,IAAW,OAAO,eAEjB;IAEY,gBAAgB,wBAE5B;IAGY,kBAAkB,wBAE9B;IAEM,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAEtC;IAEM,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAErC;IAEM,WAAW,2BAEjB;IAEM,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAErD;IAEY,YAAY,CACvB,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,cAAc,EAAE,UAAU,CAAC;QAAC,sBAAsB,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAOzF;IAEM,iBAAiB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAEzF;IAEM,mBAAmB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW,CAKpD;IAEY,gCAAgC,CAC3C,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,GAAG,CAAC,GACjD,OAAO,CAAC,WAAW,CAAC,CAatB;IAEY,iBAAiB,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC;QACT,OAAO,EAAE,kBAAkB,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAWD;CACF"}
@@ -4,16 +4,21 @@ function _ts_decorate(decorators, target, key, desc) {
4
4
  else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  }
7
+ import { SlotNumber } from '@aztec/foundation/branded-types';
7
8
  import { memoize } from '@aztec/foundation/decorators';
8
9
  import { EthAddress } from '@aztec/foundation/eth-address';
9
- import { GovernanceProposerAbi } from '@aztec/l1-artifacts';
10
+ import { GovernanceProposerAbi } from '@aztec/l1-artifacts/GovernanceProposerAbi';
10
11
  import { encodeFunctionData, getContract } from 'viem';
11
- import { encodeVote } from './empire_base.js';
12
+ import { encodeSignal, encodeSignalWithSignature, signSignalWithSig } from './empire_base.js';
13
+ import { extractProposalIdFromLogs } from './governance.js';
12
14
  export class GovernanceProposerContract {
13
15
  client;
14
16
  proposer;
15
17
  constructor(client, address){
16
18
  this.client = client;
19
+ if (address instanceof EthAddress) {
20
+ address = address.toString();
21
+ }
17
22
  this.proposer = getContract({
18
23
  address,
19
24
  abi: GovernanceProposerAbi,
@@ -30,51 +35,66 @@ export class GovernanceProposerContract {
30
35
  return EthAddress.fromString(await this.proposer.read.REGISTRY());
31
36
  }
32
37
  getQuorumSize() {
33
- return this.proposer.read.N();
38
+ return this.proposer.read.QUORUM_SIZE();
34
39
  }
35
40
  getRoundSize() {
36
- return this.proposer.read.M();
41
+ return this.proposer.read.ROUND_SIZE();
42
+ }
43
+ getInstance() {
44
+ return this.proposer.read.getInstance();
37
45
  }
38
46
  computeRound(slot) {
39
47
  return this.proposer.read.computeRound([
40
- slot
48
+ BigInt(slot)
41
49
  ]);
42
50
  }
43
51
  async getRoundInfo(rollupAddress, round) {
44
- const roundInfo = await this.proposer.read.rounds([
52
+ const result = await this.proposer.read.getRoundData([
45
53
  rollupAddress,
46
54
  round
47
55
  ]);
48
56
  return {
49
- lastVote: roundInfo[0],
50
- leader: roundInfo[1],
51
- executed: roundInfo[2]
57
+ lastSignalSlot: SlotNumber.fromBigInt(result.lastSignalSlot),
58
+ payloadWithMostSignals: result.payloadWithMostSignals,
59
+ executed: result.executed
52
60
  };
53
61
  }
54
- getProposalVotes(rollupAddress, round, proposal) {
55
- return this.proposer.read.yeaCount([
62
+ getPayloadSignals(rollupAddress, round, payload) {
63
+ return this.proposer.read.signalCount([
56
64
  rollupAddress,
57
65
  round,
58
- proposal
66
+ payload
59
67
  ]);
60
68
  }
61
- createVoteRequest(payload) {
69
+ createSignalRequest(payload) {
62
70
  return {
63
71
  to: this.address.toString(),
64
- data: encodeVote(payload)
72
+ data: encodeSignal(payload)
65
73
  };
66
74
  }
67
- executeProposal(round, l1TxUtils) {
68
- return l1TxUtils.sendAndMonitorTransaction({
75
+ async createSignalRequestWithSignature(payload, slot, chainId, signerAddress, signer) {
76
+ const signature = await signSignalWithSig(signer, payload, slot, await this.getInstance(), this.address.toString(), chainId);
77
+ return {
78
+ to: this.address.toString(),
79
+ data: encodeSignalWithSignature(payload, signature)
80
+ };
81
+ }
82
+ async submitRoundWinner(round, l1TxUtils) {
83
+ const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
69
84
  to: this.address.toString(),
70
85
  data: encodeFunctionData({
71
86
  abi: this.proposer.abi,
72
- functionName: 'executeProposal',
87
+ functionName: 'submitRoundWinner',
73
88
  args: [
74
89
  round
75
90
  ]
76
91
  })
77
92
  });
93
+ const proposalId = extractProposalIdFromLogs(receipt.logs);
94
+ return {
95
+ receipt,
96
+ proposalId
97
+ };
78
98
  }
79
99
  }
80
100
  _ts_decorate([
@@ -0,0 +1,32 @@
1
+ import { EthAddress } from '@aztec/foundation/eth-address';
2
+ import type { ProjPointType } from '@noble/curves/abstract/weierstrass';
3
+ import { type Hex } from 'viem';
4
+ import type { ViemClient } from '../types.js';
5
+ export type RegistrationTuple = {
6
+ publicKeyInG1: {
7
+ x: bigint;
8
+ y: bigint;
9
+ };
10
+ publicKeyInG2: {
11
+ x0: bigint;
12
+ x1: bigint;
13
+ y0: bigint;
14
+ y1: bigint;
15
+ };
16
+ proofOfPossession: {
17
+ x: bigint;
18
+ y: bigint;
19
+ };
20
+ };
21
+ export declare class GSEContract {
22
+ readonly client: ViemClient;
23
+ address: EthAddress;
24
+ private readonly gse;
25
+ constructor(client: ViemClient, address: Hex | EthAddress);
26
+ getOwner(): Promise<EthAddress>;
27
+ getGovernance(): Promise<EthAddress>;
28
+ getAttestersFromIndicesAtTime(instance: Hex | EthAddress, ts: bigint, indices: bigint[]): Promise<readonly `0x${string}`[]>;
29
+ getRegistrationDigest(publicKey: ProjPointType<bigint>): Promise<ProjPointType<bigint>>;
30
+ makeRegistrationTuple(privateKey: bigint): Promise<RegistrationTuple>;
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3NlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL2dzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFeEUsT0FBTyxFQUE4QixLQUFLLEdBQUcsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUV6RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFOUMsTUFBTSxNQUFNLGlCQUFpQixHQUFHO0lBQzlCLGFBQWEsRUFBRTtRQUNiLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDVixDQUFDLEVBQUUsTUFBTSxDQUFDO0tBQ1gsQ0FBQztJQUNGLGFBQWEsRUFBRTtRQUNiLEVBQUUsRUFBRSxNQUFNLENBQUM7UUFDWCxFQUFFLEVBQUUsTUFBTSxDQUFDO1FBQ1gsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNYLEVBQUUsRUFBRSxNQUFNLENBQUM7S0FDWixDQUFDO0lBQ0YsaUJBQWlCLEVBQUU7UUFDakIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUNWLENBQUMsRUFBRSxNQUFNLENBQUM7S0FDWCxDQUFDO0NBQ0gsQ0FBQztBQUVGLHFCQUFhLFdBQVc7YUFLSixNQUFNLEVBQUUsVUFBVTtJQUo3QixPQUFPLEVBQUUsVUFBVSxDQUFDO0lBQzNCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFtRDtJQUV2RSxZQUNrQixNQUFNLEVBQUUsVUFBVSxFQUNsQyxPQUFPLEVBQUUsR0FBRyxHQUFHLFVBQVUsRUFPMUI7SUFFWSxRQUFRLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUUzQztJQUVZLGFBQWEsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBRWhEO0lBRUQsNkJBQTZCLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLHFDQUt0RjtJQUVZLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUluRztJQUVZLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBd0JqRjtDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gse.d.ts","sourceRoot":"","sources":["../../src/contracts/gse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,EAA8B,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE;QACb,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;IACF,aAAa,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,iBAAiB,EAAE;QACjB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;CACH,CAAC;AAEF,qBAAa,WAAW;aAKJ,MAAM,EAAE,UAAU;IAJ7B,OAAO,EAAE,UAAU,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAmD;IAEvE,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAO1B;IAEY,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAE3C;IAEY,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAEhD;IAED,6BAA6B,CAAC,QAAQ,EAAE,GAAG,GAAG,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,qCAKtF;IAEY,qBAAqB,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAInG;IAEY,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwBjF;CACF"}
@@ -0,0 +1,72 @@
1
+ import { EthAddress } from '@aztec/foundation/eth-address';
2
+ import { GSEAbi } from '@aztec/l1-artifacts/GSEAbi';
3
+ import { bn254 } from '@noble/curves/bn254';
4
+ import { getContract } from 'viem';
5
+ export class GSEContract {
6
+ client;
7
+ address;
8
+ gse;
9
+ constructor(client, address){
10
+ this.client = client;
11
+ if (address instanceof EthAddress) {
12
+ address = address.toString();
13
+ }
14
+ this.address = EthAddress.fromString(address);
15
+ this.gse = getContract({
16
+ address,
17
+ abi: GSEAbi,
18
+ client
19
+ });
20
+ }
21
+ async getOwner() {
22
+ return EthAddress.fromString(await this.gse.read.owner());
23
+ }
24
+ async getGovernance() {
25
+ return EthAddress.fromString(await this.gse.read.getGovernance());
26
+ }
27
+ getAttestersFromIndicesAtTime(instance, ts, indices) {
28
+ if (instance instanceof EthAddress) {
29
+ instance = instance.toString();
30
+ }
31
+ return this.gse.read.getAttestersFromIndicesAtTime([
32
+ instance,
33
+ ts,
34
+ indices
35
+ ]);
36
+ }
37
+ async getRegistrationDigest(publicKey) {
38
+ const affinePublicKey = publicKey.toAffine();
39
+ const g1PointDigest = await this.gse.read.getRegistrationDigest([
40
+ {
41
+ x: affinePublicKey.x,
42
+ y: affinePublicKey.y
43
+ }
44
+ ]);
45
+ return bn254.G1.ProjectivePoint.fromAffine(g1PointDigest);
46
+ }
47
+ async makeRegistrationTuple(privateKey) {
48
+ const publicKeyG1 = bn254.G1.ProjectivePoint.BASE.multiply(privateKey);
49
+ const digest = await this.getRegistrationDigest(publicKeyG1);
50
+ const signature = digest.multiply(privateKey);
51
+ const publicKeyG2 = bn254.G2.ProjectivePoint.BASE.multiply(privateKey);
52
+ const publicKeyG1Affine = publicKeyG1.toAffine();
53
+ const signatureAffine = signature.toAffine();
54
+ const publicKeyG2Affine = publicKeyG2.toAffine();
55
+ return {
56
+ publicKeyInG1: {
57
+ x: publicKeyG1Affine.x,
58
+ y: publicKeyG1Affine.y
59
+ },
60
+ publicKeyInG2: {
61
+ x0: publicKeyG2Affine.x.c0,
62
+ x1: publicKeyG2Affine.x.c1,
63
+ y0: publicKeyG2Affine.y.c0,
64
+ y1: publicKeyG2Affine.y.c1
65
+ },
66
+ proofOfPossession: {
67
+ x: signatureAffine.x,
68
+ y: signatureAffine.y
69
+ }
70
+ };
71
+ }
72
+ }
@@ -0,0 +1,26 @@
1
+ import { Buffer16 } from '@aztec/foundation/buffer';
2
+ import { EthAddress } from '@aztec/foundation/eth-address';
3
+ import { InboxAbi } from '@aztec/l1-artifacts/InboxAbi';
4
+ import { type BlockTag, type GetContractReturnType, type Hex } from 'viem';
5
+ import type { DeployL1ContractsReturnType } from '../deploy_l1_contracts.js';
6
+ import type { L1ReaderConfig } from '../l1_reader.js';
7
+ import type { ViemClient } from '../types.js';
8
+ export declare class InboxContract {
9
+ readonly client: ViemClient;
10
+ private readonly inbox;
11
+ static getFromL1ContractsValues(deployL1ContractsValues: DeployL1ContractsReturnType): InboxContract;
12
+ static getFromConfig(config: L1ReaderConfig): InboxContract;
13
+ constructor(client: ViemClient, address: Hex | EthAddress);
14
+ get address(): `0x${string}`;
15
+ getContract(): GetContractReturnType<typeof InboxAbi, ViemClient>;
16
+ getState(opts?: {
17
+ blockTag?: BlockTag;
18
+ blockNumber?: bigint;
19
+ }): Promise<InboxContractState>;
20
+ }
21
+ export type InboxContractState = {
22
+ totalMessagesInserted: bigint;
23
+ messagesRollingHash: Buffer16;
24
+ treeInProgress: bigint;
25
+ };
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5ib3guZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvaW5ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFeEQsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUsscUJBQXFCLEVBQUUsS0FBSyxHQUFHLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFHeEYsT0FBTyxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHOUMscUJBQWEsYUFBYTthQWtCTixNQUFNLEVBQUUsVUFBVTtJQWpCcEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQXFEO0lBRTNFLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyx1QkFBdUIsRUFBRSwyQkFBMkIsaUJBTW5GO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsY0FBYyxpQkFJMUM7SUFFRCxZQUNrQixNQUFNLEVBQUUsVUFBVSxFQUNsQyxPQUFPLEVBQUUsR0FBRyxHQUFHLFVBQVUsRUFNMUI7SUFFRCxJQUFXLE9BQU8sa0JBRWpCO0lBRU0sV0FBVyxJQUFJLHFCQUFxQixDQUFDLE9BQU8sUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUV2RTtJQUVZLFFBQVEsQ0FBQyxJQUFJLEdBQUU7UUFBRSxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUM7UUFBQyxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBTyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQVEzRztDQUNGO0FBRUQsTUFBTSxNQUFNLGtCQUFrQixHQUFHO0lBQy9CLHFCQUFxQixFQUFFLE1BQU0sQ0FBQztJQUM5QixtQkFBbUIsRUFBRSxRQUFRLENBQUM7SUFDOUIsY0FBYyxFQUFFLE1BQU0sQ0FBQztDQUN4QixDQUFDIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/contracts/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,qBAAqB,EAAE,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAGxF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,qBAAa,aAAa;aAkBN,MAAM,EAAE,UAAU;IAjBpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqD;IAE3E,MAAM,CAAC,wBAAwB,CAAC,uBAAuB,EAAE,2BAA2B,iBAMnF;IAED,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,iBAI1C;IAED,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAM1B;IAED,IAAW,OAAO,kBAEjB;IAEM,WAAW,IAAI,qBAAqB,CAAC,OAAO,QAAQ,EAAE,UAAU,CAAC,CAEvE;IAEY,QAAQ,CAAC,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAQ3G;CACF;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,QAAQ,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { Buffer16 } from '@aztec/foundation/buffer';
2
+ import { EthAddress } from '@aztec/foundation/eth-address';
3
+ import { InboxAbi } from '@aztec/l1-artifacts/InboxAbi';
4
+ import { getContract } from 'viem';
5
+ import { getPublicClient } from '../client.js';
6
+ import { checkBlockTag } from './utils.js';
7
+ export class InboxContract {
8
+ client;
9
+ inbox;
10
+ static getFromL1ContractsValues(deployL1ContractsValues) {
11
+ const { l1Client, l1ContractAddresses: { inboxAddress } } = deployL1ContractsValues;
12
+ return new InboxContract(l1Client, inboxAddress.toString());
13
+ }
14
+ static getFromConfig(config) {
15
+ const client = getPublicClient(config);
16
+ const address = config.l1Contracts.inboxAddress.toString();
17
+ return new InboxContract(client, address);
18
+ }
19
+ constructor(client, address){
20
+ this.client = client;
21
+ if (address instanceof EthAddress) {
22
+ address = address.toString();
23
+ }
24
+ this.inbox = getContract({
25
+ address,
26
+ abi: InboxAbi,
27
+ client
28
+ });
29
+ }
30
+ get address() {
31
+ return this.inbox.address;
32
+ }
33
+ getContract() {
34
+ return this.inbox;
35
+ }
36
+ async getState(opts = {}) {
37
+ await checkBlockTag(opts.blockNumber, this.client);
38
+ const state = await this.inbox.read.getState(opts);
39
+ return {
40
+ totalMessagesInserted: state.totalMessagesInserted,
41
+ messagesRollingHash: Buffer16.fromString(state.rollingHash),
42
+ treeInProgress: state.inProgress
43
+ };
44
+ }
45
+ }
@@ -1,9 +1,15 @@
1
1
  export * from './empire_base.js';
2
+ export * from './errors.js';
3
+ export * from './fee_asset_handler.js';
2
4
  export * from './fee_juice.js';
3
- export * from './forwarder.js';
4
5
  export * from './governance.js';
5
6
  export * from './governance_proposer.js';
7
+ export * from './gse.js';
8
+ export * from './inbox.js';
9
+ export * from './multicall.js';
6
10
  export * from './registry.js';
7
11
  export * from './rollup.js';
8
- export * from './slashing_proposer.js';
9
- //# sourceMappingURL=index.d.ts.map
12
+ export * from './empire_slashing_proposer.js';
13
+ export * from './tally_slashing_proposer.js';
14
+ export * from './slasher_contract.js';
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsdUJBQXVCLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC"}