@aztec/ethereum 0.0.1-commit.21caa21 → 0.0.1-commit.21ecf947b

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 (179) hide show
  1. package/dest/client.js +6 -2
  2. package/dest/config.d.ts +19 -68
  3. package/dest/config.d.ts.map +1 -1
  4. package/dest/config.js +52 -379
  5. package/dest/contracts/empire_base.d.ts +2 -1
  6. package/dest/contracts/empire_base.d.ts.map +1 -1
  7. package/dest/contracts/empire_slashing_proposer.d.ts +2 -1
  8. package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -1
  9. package/dest/contracts/empire_slashing_proposer.js +22 -15
  10. package/dest/contracts/fee_asset_handler.d.ts +6 -5
  11. package/dest/contracts/fee_asset_handler.d.ts.map +1 -1
  12. package/dest/contracts/fee_asset_handler.js +11 -9
  13. package/dest/contracts/fee_asset_price_oracle.d.ts +101 -0
  14. package/dest/contracts/fee_asset_price_oracle.d.ts.map +1 -0
  15. package/dest/contracts/fee_asset_price_oracle.js +651 -0
  16. package/dest/contracts/governance.d.ts +3 -1
  17. package/dest/contracts/governance.d.ts.map +1 -1
  18. package/dest/contracts/governance.js +11 -1
  19. package/dest/contracts/governance_proposer.d.ts +2 -1
  20. package/dest/contracts/governance_proposer.d.ts.map +1 -1
  21. package/dest/contracts/governance_proposer.js +395 -9
  22. package/dest/contracts/inbox.d.ts +24 -3
  23. package/dest/contracts/inbox.d.ts.map +1 -1
  24. package/dest/contracts/inbox.js +36 -1
  25. package/dest/contracts/index.d.ts +4 -1
  26. package/dest/contracts/index.d.ts.map +1 -1
  27. package/dest/contracts/index.js +3 -0
  28. package/dest/contracts/log.d.ts +13 -0
  29. package/dest/contracts/log.d.ts.map +1 -0
  30. package/dest/contracts/log.js +1 -0
  31. package/dest/contracts/multicall.d.ts +1 -1
  32. package/dest/contracts/multicall.d.ts.map +1 -1
  33. package/dest/contracts/multicall.js +2 -1
  34. package/dest/contracts/outbox.d.ts +41 -0
  35. package/dest/contracts/outbox.d.ts.map +1 -0
  36. package/dest/contracts/outbox.js +86 -0
  37. package/dest/contracts/rollup.d.ts +177 -96
  38. package/dest/contracts/rollup.d.ts.map +1 -1
  39. package/dest/contracts/rollup.js +707 -144
  40. package/dest/contracts/tally_slashing_proposer.d.ts +3 -2
  41. package/dest/contracts/tally_slashing_proposer.d.ts.map +1 -1
  42. package/dest/contracts/tally_slashing_proposer.js +8 -1
  43. package/dest/deploy_aztec_l1_contracts.d.ts +260 -0
  44. package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -0
  45. package/dest/deploy_aztec_l1_contracts.js +413 -0
  46. package/dest/deploy_l1_contract.d.ts +68 -0
  47. package/dest/deploy_l1_contract.d.ts.map +1 -0
  48. package/dest/deploy_l1_contract.js +312 -0
  49. package/dest/forwarder_proxy.d.ts +32 -0
  50. package/dest/forwarder_proxy.d.ts.map +1 -0
  51. package/dest/forwarder_proxy.js +93 -0
  52. package/dest/generated/l1-contracts-defaults.d.ts +30 -0
  53. package/dest/generated/l1-contracts-defaults.d.ts.map +1 -0
  54. package/dest/generated/l1-contracts-defaults.js +30 -0
  55. package/dest/l1_artifacts.d.ts +5975 -1575
  56. package/dest/l1_artifacts.d.ts.map +1 -1
  57. package/dest/l1_contract_addresses.d.ts +1 -1
  58. package/dest/l1_contract_addresses.d.ts.map +1 -1
  59. package/dest/l1_contract_addresses.js +3 -3
  60. package/dest/l1_reader.d.ts +3 -1
  61. package/dest/l1_reader.d.ts.map +1 -1
  62. package/dest/l1_reader.js +6 -0
  63. package/dest/l1_tx_utils/config.d.ts +3 -3
  64. package/dest/l1_tx_utils/config.d.ts.map +1 -1
  65. package/dest/l1_tx_utils/config.js +17 -3
  66. package/dest/l1_tx_utils/constants.d.ts +8 -2
  67. package/dest/l1_tx_utils/constants.d.ts.map +1 -1
  68. package/dest/l1_tx_utils/constants.js +27 -2
  69. package/dest/l1_tx_utils/fee-strategies/index.d.ts +10 -0
  70. package/dest/l1_tx_utils/fee-strategies/index.d.ts.map +1 -0
  71. package/dest/l1_tx_utils/fee-strategies/index.js +12 -0
  72. package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts +8 -0
  73. package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts.map +1 -0
  74. package/dest/l1_tx_utils/fee-strategies/p75_competitive.js +129 -0
  75. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts +23 -0
  76. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts.map +1 -0
  77. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.js +191 -0
  78. package/dest/l1_tx_utils/fee-strategies/types.d.ts +51 -0
  79. package/dest/l1_tx_utils/fee-strategies/types.d.ts.map +1 -0
  80. package/dest/l1_tx_utils/fee-strategies/types.js +3 -0
  81. package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts +41 -0
  82. package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts.map +1 -0
  83. package/dest/l1_tx_utils/forwarder_l1_tx_utils.js +48 -0
  84. package/dest/l1_tx_utils/index-blobs.d.ts +3 -0
  85. package/dest/l1_tx_utils/index-blobs.d.ts.map +1 -0
  86. package/dest/l1_tx_utils/index-blobs.js +2 -0
  87. package/dest/l1_tx_utils/index.d.ts +3 -1
  88. package/dest/l1_tx_utils/index.d.ts.map +1 -1
  89. package/dest/l1_tx_utils/index.js +2 -0
  90. package/dest/l1_tx_utils/interfaces.d.ts +2 -2
  91. package/dest/l1_tx_utils/interfaces.d.ts.map +1 -1
  92. package/dest/l1_tx_utils/l1_fee_analyzer.d.ts +233 -0
  93. package/dest/l1_tx_utils/l1_fee_analyzer.d.ts.map +1 -0
  94. package/dest/l1_tx_utils/l1_fee_analyzer.js +506 -0
  95. package/dest/l1_tx_utils/l1_tx_utils.d.ts +1 -1
  96. package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -1
  97. package/dest/l1_tx_utils/l1_tx_utils.js +23 -10
  98. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +4 -15
  99. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -1
  100. package/dest/l1_tx_utils/readonly_l1_tx_utils.js +53 -160
  101. package/dest/publisher_manager.d.ts +3 -2
  102. package/dest/publisher_manager.d.ts.map +1 -1
  103. package/dest/publisher_manager.js +2 -2
  104. package/dest/queries.d.ts +2 -2
  105. package/dest/queries.d.ts.map +1 -1
  106. package/dest/queries.js +12 -4
  107. package/dest/test/chain_monitor.d.ts +15 -13
  108. package/dest/test/chain_monitor.d.ts.map +1 -1
  109. package/dest/test/chain_monitor.js +7 -9
  110. package/dest/test/eth_cheat_codes.d.ts +13 -1
  111. package/dest/test/eth_cheat_codes.d.ts.map +1 -1
  112. package/dest/test/eth_cheat_codes.js +4 -2
  113. package/dest/test/rollup_cheat_codes.d.ts +9 -6
  114. package/dest/test/rollup_cheat_codes.d.ts.map +1 -1
  115. package/dest/test/rollup_cheat_codes.js +32 -6
  116. package/dest/test/start_anvil.d.ts +3 -1
  117. package/dest/test/start_anvil.d.ts.map +1 -1
  118. package/dest/test/start_anvil.js +1 -1
  119. package/dest/test/tx_delayer.d.ts +1 -1
  120. package/dest/test/tx_delayer.d.ts.map +1 -1
  121. package/dest/test/tx_delayer.js +4 -3
  122. package/dest/types.d.ts +57 -2
  123. package/dest/types.d.ts.map +1 -1
  124. package/dest/utils.d.ts +16 -3
  125. package/dest/utils.d.ts.map +1 -1
  126. package/dest/utils.js +64 -0
  127. package/package.json +33 -14
  128. package/src/client.ts +2 -2
  129. package/src/config.ts +63 -458
  130. package/src/contracts/README.md +157 -0
  131. package/src/contracts/empire_base.ts +1 -1
  132. package/src/contracts/empire_slashing_proposer.ts +22 -28
  133. package/src/contracts/fee_asset_handler.ts +10 -7
  134. package/src/contracts/fee_asset_price_oracle.ts +280 -0
  135. package/src/contracts/governance.ts +10 -1
  136. package/src/contracts/governance_proposer.ts +10 -2
  137. package/src/contracts/inbox.ts +55 -3
  138. package/src/contracts/index.ts +3 -0
  139. package/src/contracts/log.ts +13 -0
  140. package/src/contracts/multicall.ts +5 -2
  141. package/src/contracts/outbox.ts +98 -0
  142. package/src/contracts/rollup.ts +390 -118
  143. package/src/contracts/tally_slashing_proposer.ts +7 -1
  144. package/src/deploy_aztec_l1_contracts.ts +633 -0
  145. package/src/deploy_l1_contract.ts +362 -0
  146. package/src/forwarder_proxy.ts +108 -0
  147. package/src/generated/l1-contracts-defaults.ts +32 -0
  148. package/src/l1_contract_addresses.ts +22 -20
  149. package/src/l1_reader.ts +8 -0
  150. package/src/l1_tx_utils/config.ts +24 -6
  151. package/src/l1_tx_utils/constants.ts +13 -2
  152. package/src/l1_tx_utils/fee-strategies/index.ts +22 -0
  153. package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +163 -0
  154. package/src/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.ts +245 -0
  155. package/src/l1_tx_utils/fee-strategies/types.ts +56 -0
  156. package/src/l1_tx_utils/forwarder_l1_tx_utils.ts +119 -0
  157. package/src/l1_tx_utils/index-blobs.ts +2 -0
  158. package/src/l1_tx_utils/index.ts +2 -0
  159. package/src/l1_tx_utils/interfaces.ts +1 -1
  160. package/src/l1_tx_utils/l1_fee_analyzer.ts +803 -0
  161. package/src/l1_tx_utils/l1_tx_utils.ts +30 -10
  162. package/src/l1_tx_utils/readonly_l1_tx_utils.ts +67 -206
  163. package/src/publisher_manager.ts +4 -2
  164. package/src/queries.ts +11 -3
  165. package/src/test/chain_monitor.ts +18 -16
  166. package/src/test/eth_cheat_codes.ts +2 -2
  167. package/src/test/rollup_cheat_codes.ts +32 -9
  168. package/src/test/start_anvil.ts +3 -1
  169. package/src/test/tx_delayer.ts +5 -3
  170. package/src/types.ts +62 -0
  171. package/src/utils.ts +83 -1
  172. package/dest/deploy_l1_contracts.d.ts +0 -673
  173. package/dest/deploy_l1_contracts.d.ts.map +0 -1
  174. package/dest/deploy_l1_contracts.js +0 -1491
  175. package/dest/index.d.ts +0 -18
  176. package/dest/index.d.ts.map +0 -1
  177. package/dest/index.js +0 -17
  178. package/src/deploy_l1_contracts.ts +0 -1869
  179. package/src/index.ts +0 -17
@@ -56,9 +56,18 @@ export class EmpireSlashingProposerContract extends EventEmitter {
56
56
  rollupAddress,
57
57
  round
58
58
  ]);
59
+ const [signalCount, quorum] = await Promise.all([
60
+ this.proposer.read.signalCount([
61
+ rollupAddress,
62
+ round,
63
+ result.payloadWithMostSignals
64
+ ]),
65
+ this.getQuorumSize()
66
+ ]);
59
67
  return {
60
68
  lastSignalSlot: SlotNumber.fromBigInt(result.lastSignalSlot),
61
69
  payloadWithMostSignals: result.payloadWithMostSignals,
70
+ quorumReached: signalCount >= quorum,
62
71
  executed: result.executed
63
72
  };
64
73
  }
@@ -72,6 +81,7 @@ export class EmpireSlashingProposerContract extends EventEmitter {
72
81
  createSignalRequest(payload) {
73
82
  return {
74
83
  to: this.address.toString(),
84
+ abi: EmpireSlashingProposerAbi,
75
85
  data: encodeSignal(payload)
76
86
  };
77
87
  }
@@ -79,6 +89,7 @@ export class EmpireSlashingProposerContract extends EventEmitter {
79
89
  const signature = await signSignalWithSig(signer, payload, slot, await this.getInstance(), this.address.toString(), chainId);
80
90
  return {
81
91
  to: this.address.toString(),
92
+ abi: EmpireSlashingProposerAbi,
82
93
  data: encodeSignalWithSignature(payload, signature)
83
94
  };
84
95
  }
@@ -132,6 +143,7 @@ export class EmpireSlashingProposerContract extends EventEmitter {
132
143
  /** Creates an L1TxRequest to submit the round winner for the given round. */ buildExecuteRoundRequest(round) {
133
144
  return {
134
145
  to: this.address.toString(),
146
+ abi: EmpireSlashingProposerAbi,
135
147
  data: encodeFunctionData({
136
148
  abi: EmpireSlashingProposerAbi,
137
149
  functionName: 'submitRoundWinner',
@@ -163,18 +175,8 @@ export class EmpireSlashingProposerContract extends EventEmitter {
163
175
  if (typeof round === 'number') {
164
176
  round = BigInt(round);
165
177
  }
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
+ const request = this.buildExecuteRoundRequest(round);
179
+ const response = await txUtils.sendAndMonitorTransaction(request, {
178
180
  // Gas estimation is way off for this, likely because we are creating the contract/selector to call
179
181
  // for the actual slashing dynamically.
180
182
  gasLimitBufferPercentage: 50
@@ -185,10 +187,15 @@ export class EmpireSlashingProposerContract extends EventEmitter {
185
187
  throw err;
186
188
  });
187
189
  if (response.receipt.status === 'reverted') {
188
- const error = await txUtils.tryGetErrorFromRevertedTx(data, {
189
- ...args,
190
+ const args = {
191
+ abi: EmpireSlashingProposerAbi,
192
+ functionName: 'submitRoundWinner',
193
+ args: [
194
+ round
195
+ ],
190
196
  address: this.address.toString()
191
- }, undefined, []);
197
+ };
198
+ const error = await txUtils.tryGetErrorFromRevertedTx(request.data, args, undefined, []);
192
199
  if (error?.includes('ProposalAlreadyExecuted')) {
193
200
  throw new ProposalAlreadyExecutedError(round);
194
201
  }
@@ -1,19 +1,20 @@
1
1
  import { EthAddress } from '@aztec/foundation/eth-address';
2
2
  import { type Hex } from 'viem';
3
3
  import type { L1TxUtils } from '../l1_tx_utils/index.js';
4
+ import type { ViemClient } from '../types.js';
4
5
  export declare class FeeAssetHandlerContract {
5
- readonly txUtils: L1TxUtils;
6
+ readonly client: ViemClient;
6
7
  address: EthAddress;
7
- constructor(address: Hex | EthAddress, txUtils: L1TxUtils);
8
+ constructor(client: ViemClient, address: Hex | EthAddress);
8
9
  getOwner(): Promise<EthAddress>;
9
10
  getMintAmount(): Promise<bigint>;
10
- mint(recipient: Hex | EthAddress): Promise<{
11
+ mint(txUtils: L1TxUtils, recipient: Hex | EthAddress): Promise<{
11
12
  receipt: import("viem").TransactionReceipt;
12
13
  state: import("../l1_tx_utils/types.js").L1TxState;
13
14
  }>;
14
- setMintAmount(amount: bigint): Promise<{
15
+ setMintAmount(txUtils: L1TxUtils, amount: bigint): Promise<{
15
16
  receipt: import("viem").TransactionReceipt;
16
17
  state: import("../l1_tx_utils/types.js").L1TxState;
17
18
  }>;
18
19
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlX2Fzc2V0X2hhbmRsZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvZmVlX2Fzc2V0X2hhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzNELE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBbUMsTUFBTSxNQUFNLENBQUM7QUFFakUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFekQscUJBQWEsdUJBQXVCO2FBS2hCLE9BQU8sRUFBRSxTQUFTO0lBSjdCLE9BQU8sRUFBRSxVQUFVLENBQUM7SUFFM0IsWUFDRSxPQUFPLEVBQUUsR0FBRyxHQUFHLFVBQVUsRUFDVCxPQUFPLEVBQUUsU0FBUyxFQU1uQztJQUVZLFFBQVEsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBTzNDO0lBRU0sYUFBYSxvQkFPbkI7SUFFTSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxVQUFVOzs7T0FZdEM7SUFFTSxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU07OztPQVNsQztDQUNGIn0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlX2Fzc2V0X2hhbmRsZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvZmVlX2Fzc2V0X2hhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzNELE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBbUMsTUFBTSxNQUFNLENBQUM7QUFFakUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlDLHFCQUFhLHVCQUF1QjthQUloQixNQUFNLEVBQUUsVUFBVTtJQUg3QixPQUFPLEVBQUUsVUFBVSxDQUFDO0lBRTNCLFlBQ2tCLE1BQU0sRUFBRSxVQUFVLEVBQ2xDLE9BQU8sRUFBRSxHQUFHLEdBQUcsVUFBVSxFQU0xQjtJQUVZLFFBQVEsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBTzNDO0lBRU0sYUFBYSxvQkFPbkI7SUFFTSxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLFVBQVU7OztPQWExRDtJQUVNLGFBQWEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNOzs7T0FVdEQ7Q0FDRiJ9
@@ -1 +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"}
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;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,qBAAa,uBAAuB;aAIhB,MAAM,EAAE,UAAU;IAH7B,OAAO,EAAE,UAAU,CAAC;IAE3B,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAM1B;IAEY,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAO3C;IAEM,aAAa,oBAOnB;IAEM,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,GAAG,UAAU;;;OAa1D;IAEM,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM;;;OAUtD;CACF"}
@@ -2,10 +2,10 @@ import { EthAddress } from '@aztec/foundation/eth-address';
2
2
  import { FeeAssetHandlerAbi } from '@aztec/l1-artifacts/FeeAssetHandlerAbi';
3
3
  import { encodeFunctionData, getContract } from 'viem';
4
4
  export class FeeAssetHandlerContract {
5
- txUtils;
5
+ client;
6
6
  address;
7
- constructor(address, txUtils){
8
- this.txUtils = txUtils;
7
+ constructor(client, address){
8
+ this.client = client;
9
9
  if (address instanceof EthAddress) {
10
10
  address = address.toString();
11
11
  }
@@ -15,7 +15,7 @@ export class FeeAssetHandlerContract {
15
15
  const contract = getContract({
16
16
  abi: FeeAssetHandlerAbi,
17
17
  address: this.address.toString(),
18
- client: this.txUtils.client
18
+ client: this.client
19
19
  });
20
20
  return EthAddress.fromString(await contract.read.owner());
21
21
  }
@@ -23,16 +23,17 @@ export class FeeAssetHandlerContract {
23
23
  const contract = getContract({
24
24
  abi: FeeAssetHandlerAbi,
25
25
  address: this.address.toString(),
26
- client: this.txUtils.client
26
+ client: this.client
27
27
  });
28
28
  return contract.read.mintAmount();
29
29
  }
30
- mint(recipient) {
30
+ mint(txUtils, recipient) {
31
31
  if (recipient instanceof EthAddress) {
32
32
  recipient = recipient.toString();
33
33
  }
34
- return this.txUtils.sendAndMonitorTransaction({
34
+ return txUtils.sendAndMonitorTransaction({
35
35
  to: this.address.toString(),
36
+ abi: FeeAssetHandlerAbi,
36
37
  data: encodeFunctionData({
37
38
  abi: FeeAssetHandlerAbi,
38
39
  functionName: 'mint',
@@ -42,9 +43,10 @@ export class FeeAssetHandlerContract {
42
43
  })
43
44
  });
44
45
  }
45
- setMintAmount(amount) {
46
- return this.txUtils.sendAndMonitorTransaction({
46
+ setMintAmount(txUtils, amount) {
47
+ return txUtils.sendAndMonitorTransaction({
47
48
  to: this.address.toString(),
49
+ abi: FeeAssetHandlerAbi,
48
50
  data: encodeFunctionData({
49
51
  abi: FeeAssetHandlerAbi,
50
52
  functionName: 'setMintAmount',
@@ -0,0 +1,101 @@
1
+ import { EthAddress } from '@aztec/foundation/eth-address';
2
+ import { type Logger } from '@aztec/foundation/log';
3
+ import { type Hex } from 'viem';
4
+ import type { ViemClient } from '../types.js';
5
+ import { RollupContract } from './rollup.js';
6
+ /** Maximum price modifier per checkpoint in basis points. ±100 bps = ±1% */
7
+ export declare const MAX_FEE_ASSET_PRICE_MODIFIER_BPS = 100n;
8
+ /**
9
+ * Validates that a fee asset price modifier is within the allowed range.
10
+ * Validators should call this before attesting to a checkpoint proposal.
11
+ *
12
+ * @param modifier - The fee asset price modifier in basis points
13
+ * @returns true if the modifier is valid (between -100 and +100 bps)
14
+ */
15
+ export declare function validateFeeAssetPriceModifier(modifier: bigint): boolean;
16
+ /**
17
+ * Oracle for computing fee asset price modifiers based on Uniswap V4 pool prices.
18
+ * Only active on Ethereum mainnet - returns 0 on other chains.
19
+ */
20
+ export declare class FeeAssetPriceOracle {
21
+ private client;
22
+ private readonly rollupContract;
23
+ private log;
24
+ constructor(client: ViemClient, rollupContract: RollupContract, log?: Logger);
25
+ getUniswapOracle(): Promise<UniswapPriceOracle | undefined>;
26
+ /**
27
+ * Computes the fee asset price modifier to be used in the next checkpoint proposal.
28
+ *
29
+ * The modifier adjusts the on-chain fee asset price toward the oracle price,
30
+ * clamped to ±1% (±100 basis points) per checkpoint.
31
+ *
32
+ * Returns 0 if not on mainnet or if the oracle query fails.
33
+ *
34
+ * @returns The price modifier in basis points (positive to increase price, negative to decrease)
35
+ */
36
+ computePriceModifier(): Promise<bigint>;
37
+ /**
38
+ * Gets the current oracle price (ETH per fee asset, scaled by 1e12).
39
+ * Returns undefined if not on mainnet or if the oracle query fails.
40
+ */
41
+ getOraclePrice(): Promise<bigint | undefined>;
42
+ /**
43
+ * Computes the basis points modifier needed to move from current price toward target price.
44
+ *
45
+ * @param currentPrice - Current ETH per fee asset (E12 scale)
46
+ * @param targetPrice - Target ETH per fee asset (E12 scale)
47
+ * @returns Basis points modifier clamped to ±100 (±1%)
48
+ */
49
+ computePriceModifierBps(currentPrice: bigint, targetPrice: bigint): bigint;
50
+ }
51
+ /** Mainnet Uniswap V4 StateView contract address */
52
+ export declare const STATE_VIEW_ADDRESS: EthAddress;
53
+ /**
54
+ * Converts Uniswap's sqrtPriceX96 directly to ETH per FeeAsset (E12).
55
+ *
56
+ * For an ETH/FeeAsset pool where ETH is currency0 and FeeAsset is currency1:
57
+ * - Uniswap's sqrtPriceX96 = sqrt(FeeAsset/ETH) * 2^96
58
+ * - We need: ETH/FeeAsset with 1e12 precision
59
+ *
60
+ * Math:
61
+ * price = (sqrtPriceX96 / 2^96)^2 = sqrtPriceX96^2 / 2^192 (FeeAsset per ETH)
62
+ * ethPerFeeAsset = 1 / price = 2^192 / sqrtPriceX96^2
63
+ * ethPerFeeAssetE12 = ethPerFeeAsset * 1e12 = 1e12 * 2^192 / sqrtPriceX96^2
64
+ */
65
+ export declare function sqrtPriceX96ToEthPerFeeAssetE12(sqrtPriceX96: bigint): bigint;
66
+ /**
67
+ * Client for querying the ETH/FeeAsset price from Uniswap V4.
68
+ * Returns prices in ETH per FeeAsset format (E12) to match the rollup contract.
69
+ */
70
+ declare class UniswapPriceOracle {
71
+ private readonly client;
72
+ private readonly stateView;
73
+ private readonly poolId;
74
+ private readonly log;
75
+ constructor(client: ViemClient, log?: Logger);
76
+ /**
77
+ * Computes the PoolId from the pool configuration by hashing its components.
78
+ * PoolId = keccak256(abi.encode(currency0, currency1, fee, tickSpacing, hooks))
79
+ * For mainnet, the value is expected to be: 0xce2899b16743cfd5a954d8122d5e07f410305b1aebee39fd73d9f3b9ebf10c2f
80
+ * Derived anyway to make it simpler to change if needed.
81
+ */
82
+ computePoolId(): Hex;
83
+ isPoolInitialized(): Promise<boolean>;
84
+ /**
85
+ * Gets the price as ETH per FeeAsset, scaled by 1e12.
86
+ * This is the format expected by the rollup contract.
87
+ *
88
+ * @param blockNumber - Optional block number to query at (defaults to latest)
89
+ */
90
+ getEthPerFeeAssetE12(blockNumber?: bigint): Promise<bigint>;
91
+ /**
92
+ * Gets the median price over the last N blocks as ETH per FeeAsset (E12).
93
+ * Using median helps protect against single-block manipulation.
94
+ *
95
+ * @param numBlocks - Number of recent blocks to sample (default: 5)
96
+ * @returns Median price as ETH per FeeAsset, scaled by 1e12
97
+ */
98
+ getMeanEthPerFeeAssetE12(numBlocks?: number): Promise<bigint>;
99
+ }
100
+ export {};
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlX2Fzc2V0X3ByaWNlX29yYWNsZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9mZWVfYXNzZXRfcHJpY2Vfb3JhY2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxFQUFFLEtBQUssR0FBRyxFQUFtRSxNQUFNLE1BQU0sQ0FBQztBQUVqRyxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3Qyw4RUFBNEU7QUFDNUUsZUFBTyxNQUFNLGdDQUFnQyxPQUFPLENBQUM7QUFFckQ7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUV2RTtBQUVEOzs7R0FHRztBQUNILHFCQUFhLG1CQUFtQjtJQUU1QixPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYztJQUMvQixPQUFPLENBQUMsR0FBRztJQUhiLFlBQ1UsTUFBTSxFQUFFLFVBQVUsRUFDVCxjQUFjLEVBQUUsY0FBYyxFQUN2QyxHQUFHLEdBQUUsTUFBK0MsRUFDMUQ7SUFHRSxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDLENBb0JoRTtJQUVEOzs7Ozs7Ozs7T0FTRztJQUNHLG9CQUFvQixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0EyQjVDO0lBRUQ7OztPQUdHO0lBQ0csY0FBYyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBWWxEO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsdUJBQXVCLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FrQnpFO0NBQ0Y7QUFFRCxvREFBb0Q7QUFDcEQsZUFBTyxNQUFNLGtCQUFrQixZQUFzRSxDQUFDO0FBSXRHOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsd0JBQWdCLCtCQUErQixDQUFDLFlBQVksRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUs1RTtBQW1CRDs7O0dBR0c7QUFDSCxjQUFNLGtCQUFrQjtJQU1wQixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFMekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDM0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQU07SUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQVM7SUFFN0IsWUFDbUIsTUFBTSxFQUFFLFVBQVUsRUFDbkMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQVViO0lBRUQ7Ozs7O09BS0c7SUFFSCxhQUFhLElBQUksR0FBRyxDQVVuQjtJQUVLLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FHMUM7SUFFRDs7Ozs7T0FLRztJQUNHLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBTWhFO0lBRUQ7Ozs7OztPQU1HO0lBQ0csd0JBQXdCLENBQUMsU0FBUyxHQUFFLE1BQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBMkJyRTtDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fee_asset_price_oracle.d.ts","sourceRoot":"","sources":["../../src/contracts/fee_asset_price_oracle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,KAAK,GAAG,EAAmE,MAAM,MAAM,CAAC;AAEjG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,8EAA4E;AAC5E,eAAO,MAAM,gCAAgC,OAAO,CAAC;AAErD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,GAAG;IAHb,YACU,MAAM,EAAE,UAAU,EACT,cAAc,EAAE,cAAc,EACvC,GAAG,GAAE,MAA+C,EAC1D;IAGE,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAoBhE;IAED;;;;;;;;;OASG;IACG,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CA2B5C;IAED;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAYlD;IAED;;;;;;OAMG;IACH,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAkBzE;CACF;AAED,oDAAoD;AACpD,eAAO,MAAM,kBAAkB,YAAsE,CAAC;AAItG;;;;;;;;;;;GAWG;AACH,wBAAgB,+BAA+B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAK5E;AAmBD;;;GAGG;AACH,cAAM,kBAAkB;IAMpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAM;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAE7B,YACmB,MAAM,EAAE,UAAU,EACnC,GAAG,CAAC,EAAE,MAAM,EAUb;IAED;;;;;OAKG;IAEH,aAAa,IAAI,GAAG,CAUnB;IAEK,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG1C;IAED;;;;;OAKG;IACG,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhE;IAED;;;;;;OAMG;IACG,wBAAwB,CAAC,SAAS,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BrE;CACF"}