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

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 (229) 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/client.d.ts +5 -3
  5. package/dest/client.d.ts.map +1 -1
  6. package/dest/client.js +16 -2
  7. package/dest/config.d.ts +107 -16
  8. package/dest/config.d.ts.map +1 -1
  9. package/dest/config.js +456 -22
  10. package/dest/contracts/empire_base.d.ts +21 -6
  11. package/dest/contracts/empire_base.d.ts.map +1 -1
  12. package/dest/contracts/empire_base.js +75 -2
  13. package/dest/contracts/empire_slashing_proposer.d.ts +65 -0
  14. package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -0
  15. package/dest/contracts/empire_slashing_proposer.js +194 -0
  16. package/dest/contracts/errors.d.ts +7 -0
  17. package/dest/contracts/errors.d.ts.map +1 -0
  18. package/dest/contracts/errors.js +12 -0
  19. package/dest/contracts/fee_asset_handler.d.ts +19 -0
  20. package/dest/contracts/fee_asset_handler.d.ts.map +1 -0
  21. package/dest/contracts/fee_asset_handler.js +57 -0
  22. package/dest/contracts/fee_juice.d.ts +5 -6
  23. package/dest/contracts/fee_juice.d.ts.map +1 -1
  24. package/dest/contracts/fee_juice.js +27 -20
  25. package/dest/contracts/governance.d.ts +36 -25
  26. package/dest/contracts/governance.d.ts.map +1 -1
  27. package/dest/contracts/governance.js +87 -84
  28. package/dest/contracts/governance_proposer.d.ts +13 -11
  29. package/dest/contracts/governance_proposer.d.ts.map +1 -1
  30. package/dest/contracts/governance_proposer.js +32 -18
  31. package/dest/contracts/gse.d.ts +32 -0
  32. package/dest/contracts/gse.d.ts.map +1 -0
  33. package/dest/contracts/gse.js +72 -0
  34. package/dest/contracts/inbox.d.ts +26 -0
  35. package/dest/contracts/inbox.d.ts.map +1 -0
  36. package/dest/contracts/inbox.js +45 -0
  37. package/dest/contracts/index.d.ts +8 -2
  38. package/dest/contracts/index.d.ts.map +1 -1
  39. package/dest/contracts/index.js +8 -2
  40. package/dest/contracts/multicall.d.ts +21 -0
  41. package/dest/contracts/multicall.d.ts.map +1 -0
  42. package/dest/contracts/multicall.js +156 -0
  43. package/dest/contracts/registry.d.ts +9 -4
  44. package/dest/contracts/registry.d.ts.map +1 -1
  45. package/dest/contracts/registry.js +44 -16
  46. package/dest/contracts/rollup.d.ts +202 -29
  47. package/dest/contracts/rollup.d.ts.map +1 -1
  48. package/dest/contracts/rollup.js +500 -55
  49. package/dest/contracts/slasher_contract.d.ts +44 -0
  50. package/dest/contracts/slasher_contract.d.ts.map +1 -0
  51. package/dest/contracts/slasher_contract.js +75 -0
  52. package/dest/contracts/tally_slashing_proposer.d.ts +138 -0
  53. package/dest/contracts/tally_slashing_proposer.d.ts.map +1 -0
  54. package/dest/contracts/tally_slashing_proposer.js +313 -0
  55. package/dest/contracts/utils.d.ts +3 -0
  56. package/dest/contracts/utils.d.ts.map +1 -0
  57. package/dest/contracts/utils.js +11 -0
  58. package/dest/deploy_l1_contracts.d.ts +128 -21112
  59. package/dest/deploy_l1_contracts.d.ts.map +1 -1
  60. package/dest/deploy_l1_contracts.js +1204 -418
  61. package/dest/eth-signer/eth-signer.d.ts +21 -0
  62. package/dest/eth-signer/eth-signer.d.ts.map +1 -0
  63. package/dest/eth-signer/eth-signer.js +5 -0
  64. package/dest/eth-signer/index.d.ts +2 -0
  65. package/dest/eth-signer/index.d.ts.map +1 -0
  66. package/dest/eth-signer/index.js +1 -0
  67. package/dest/index.d.ts +6 -2
  68. package/dest/index.d.ts.map +1 -1
  69. package/dest/index.js +6 -2
  70. package/dest/l1_artifacts.d.ts +76184 -0
  71. package/dest/l1_artifacts.d.ts.map +1 -0
  72. package/dest/l1_artifacts.js +166 -0
  73. package/dest/l1_contract_addresses.d.ts +21 -1
  74. package/dest/l1_contract_addresses.d.ts.map +1 -1
  75. package/dest/l1_contract_addresses.js +22 -18
  76. package/dest/l1_reader.d.ts +1 -1
  77. package/dest/l1_reader.d.ts.map +1 -1
  78. package/dest/l1_reader.js +8 -8
  79. package/dest/l1_tx_utils/config.d.ts +59 -0
  80. package/dest/l1_tx_utils/config.d.ts.map +1 -0
  81. package/dest/l1_tx_utils/config.js +73 -0
  82. package/dest/l1_tx_utils/constants.d.ts +6 -0
  83. package/dest/l1_tx_utils/constants.d.ts.map +1 -0
  84. package/dest/l1_tx_utils/constants.js +14 -0
  85. package/dest/l1_tx_utils/factory.d.ts +24 -0
  86. package/dest/l1_tx_utils/factory.d.ts.map +1 -0
  87. package/dest/l1_tx_utils/factory.js +12 -0
  88. package/dest/l1_tx_utils/index.d.ts +10 -0
  89. package/dest/l1_tx_utils/index.d.ts.map +1 -0
  90. package/dest/l1_tx_utils/index.js +10 -0
  91. package/dest/l1_tx_utils/interfaces.d.ts +76 -0
  92. package/dest/l1_tx_utils/interfaces.d.ts.map +1 -0
  93. package/dest/l1_tx_utils/interfaces.js +4 -0
  94. package/dest/l1_tx_utils/l1_tx_utils.d.ts +95 -0
  95. package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -0
  96. package/dest/l1_tx_utils/l1_tx_utils.js +610 -0
  97. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts +26 -0
  98. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts.map +1 -0
  99. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.js +26 -0
  100. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +94 -0
  101. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -0
  102. package/dest/l1_tx_utils/readonly_l1_tx_utils.js +431 -0
  103. package/dest/l1_tx_utils/signer.d.ts +4 -0
  104. package/dest/l1_tx_utils/signer.d.ts.map +1 -0
  105. package/dest/l1_tx_utils/signer.js +16 -0
  106. package/dest/l1_tx_utils/types.d.ts +67 -0
  107. package/dest/l1_tx_utils/types.d.ts.map +1 -0
  108. package/dest/l1_tx_utils/types.js +26 -0
  109. package/dest/l1_tx_utils/utils.d.ts +4 -0
  110. package/dest/l1_tx_utils/utils.d.ts.map +1 -0
  111. package/dest/l1_tx_utils/utils.js +14 -0
  112. package/dest/l1_types.d.ts +6 -0
  113. package/dest/l1_types.d.ts.map +1 -0
  114. package/dest/l1_types.js +1 -0
  115. package/dest/publisher_manager.d.ts +15 -0
  116. package/dest/publisher_manager.d.ts.map +1 -0
  117. package/dest/publisher_manager.js +88 -0
  118. package/dest/queries.d.ts +3 -1
  119. package/dest/queries.d.ts.map +1 -1
  120. package/dest/queries.js +51 -12
  121. package/dest/test/chain_monitor.d.ts +72 -0
  122. package/dest/test/chain_monitor.d.ts.map +1 -0
  123. package/dest/test/chain_monitor.js +216 -0
  124. package/dest/test/delayed_tx_utils.d.ts +7 -2
  125. package/dest/test/delayed_tx_utils.d.ts.map +1 -1
  126. package/dest/test/delayed_tx_utils.js +13 -6
  127. package/dest/{eth_cheat_codes.d.ts → test/eth_cheat_codes.d.ts} +87 -13
  128. package/dest/test/eth_cheat_codes.d.ts.map +1 -0
  129. package/dest/test/eth_cheat_codes.js +552 -0
  130. package/dest/test/eth_cheat_codes_with_state.d.ts +1 -1
  131. package/dest/test/eth_cheat_codes_with_state.d.ts.map +1 -1
  132. package/dest/test/eth_cheat_codes_with_state.js +1 -1
  133. package/dest/test/index.d.ts +3 -0
  134. package/dest/test/index.d.ts.map +1 -1
  135. package/dest/test/index.js +3 -0
  136. package/dest/test/rollup_cheat_codes.d.ts +86 -0
  137. package/dest/test/rollup_cheat_codes.d.ts.map +1 -0
  138. package/dest/test/rollup_cheat_codes.js +268 -0
  139. package/dest/test/start_anvil.d.ts +5 -0
  140. package/dest/test/start_anvil.d.ts.map +1 -1
  141. package/dest/test/start_anvil.js +15 -7
  142. package/dest/test/tx_delayer.d.ts +17 -6
  143. package/dest/test/tx_delayer.d.ts.map +1 -1
  144. package/dest/test/tx_delayer.js +95 -19
  145. package/dest/test/upgrade_utils.d.ts +5 -4
  146. package/dest/test/upgrade_utils.d.ts.map +1 -1
  147. package/dest/test/upgrade_utils.js +23 -16
  148. package/dest/types.d.ts +6 -7
  149. package/dest/types.d.ts.map +1 -1
  150. package/dest/types.js +3 -1
  151. package/dest/utils.d.ts +1 -0
  152. package/dest/utils.d.ts.map +1 -1
  153. package/dest/utils.js +43 -88
  154. package/dest/zkPassportVerifierAddress.d.ts +15 -0
  155. package/dest/zkPassportVerifierAddress.d.ts.map +1 -0
  156. package/dest/zkPassportVerifierAddress.js +11 -0
  157. package/package.json +24 -16
  158. package/src/account.ts +5 -0
  159. package/src/client.ts +42 -4
  160. package/src/config.ts +584 -31
  161. package/src/contracts/empire_base.ts +75 -6
  162. package/src/contracts/empire_slashing_proposer.ts +259 -0
  163. package/src/contracts/errors.ts +13 -0
  164. package/src/contracts/fee_asset_handler.ts +63 -0
  165. package/src/contracts/fee_juice.ts +29 -15
  166. package/src/contracts/governance.ts +80 -77
  167. package/src/contracts/governance_proposer.ts +60 -24
  168. package/src/contracts/gse.ts +88 -0
  169. package/src/contracts/inbox.ts +63 -0
  170. package/src/contracts/index.ts +8 -2
  171. package/src/contracts/multicall.ts +155 -0
  172. package/src/contracts/registry.ts +51 -26
  173. package/src/contracts/rollup.ts +585 -56
  174. package/src/contracts/slasher_contract.ts +89 -0
  175. package/src/contracts/tally_slashing_proposer.ts +315 -0
  176. package/src/contracts/utils.ts +14 -0
  177. package/src/deploy_l1_contracts.ts +1467 -566
  178. package/src/eth-signer/eth-signer.ts +25 -0
  179. package/src/eth-signer/index.ts +1 -0
  180. package/src/index.ts +6 -2
  181. package/src/l1_artifacts.ts +254 -0
  182. package/src/l1_contract_addresses.ts +32 -19
  183. package/src/l1_reader.ts +9 -9
  184. package/src/l1_tx_utils/README.md +177 -0
  185. package/src/l1_tx_utils/config.ts +140 -0
  186. package/src/l1_tx_utils/constants.ts +18 -0
  187. package/src/l1_tx_utils/factory.ts +64 -0
  188. package/src/l1_tx_utils/index.ts +12 -0
  189. package/src/l1_tx_utils/interfaces.ts +86 -0
  190. package/src/l1_tx_utils/l1_tx_utils.ts +718 -0
  191. package/src/l1_tx_utils/l1_tx_utils_with_blobs.ts +77 -0
  192. package/src/l1_tx_utils/readonly_l1_tx_utils.ts +559 -0
  193. package/src/l1_tx_utils/signer.ts +28 -0
  194. package/src/l1_tx_utils/types.ts +85 -0
  195. package/src/l1_tx_utils/utils.ts +16 -0
  196. package/src/l1_types.ts +6 -0
  197. package/src/publisher_manager.ts +106 -0
  198. package/src/queries.ts +70 -15
  199. package/src/test/chain_monitor.ts +243 -0
  200. package/src/test/delayed_tx_utils.ts +34 -6
  201. package/src/test/eth_cheat_codes.ts +582 -0
  202. package/src/test/eth_cheat_codes_with_state.ts +1 -1
  203. package/src/test/index.ts +3 -0
  204. package/src/test/rollup_cheat_codes.ts +310 -0
  205. package/src/test/start_anvil.ts +20 -5
  206. package/src/test/tx_delayer.ts +127 -26
  207. package/src/test/upgrade_utils.ts +30 -21
  208. package/src/types.ts +10 -8
  209. package/src/utils.ts +49 -90
  210. package/src/zkPassportVerifierAddress.ts +15 -0
  211. package/dest/contracts/forwarder.d.ts +0 -24
  212. package/dest/contracts/forwarder.d.ts.map +0 -1
  213. package/dest/contracts/forwarder.js +0 -101
  214. package/dest/contracts/slashing_proposer.d.ts +0 -21
  215. package/dest/contracts/slashing_proposer.d.ts.map +0 -1
  216. package/dest/contracts/slashing_proposer.js +0 -47
  217. package/dest/eth_cheat_codes.d.ts.map +0 -1
  218. package/dest/eth_cheat_codes.js +0 -303
  219. package/dest/l1_tx_utils.d.ts +0 -192
  220. package/dest/l1_tx_utils.d.ts.map +0 -1
  221. package/dest/l1_tx_utils.js +0 -641
  222. package/dest/l1_tx_utils_with_blobs.d.ts +0 -12
  223. package/dest/l1_tx_utils_with_blobs.d.ts.map +0 -1
  224. package/dest/l1_tx_utils_with_blobs.js +0 -64
  225. package/src/contracts/forwarder.ts +0 -132
  226. package/src/contracts/slashing_proposer.ts +0 -51
  227. package/src/eth_cheat_codes.ts +0 -314
  228. package/src/l1_tx_utils.ts +0 -847
  229. package/src/l1_tx_utils_with_blobs.ts +0 -86
@@ -0,0 +1,21 @@
1
+ import type { Logger } from '@aztec/foundation/log';
2
+ import { type Hex } from 'viem';
3
+ import type { L1BlobInputs, L1TxConfig, L1TxRequest, L1TxUtils } from '../l1_tx_utils/index.js';
4
+ import type { ExtendedViemWalletClient } from '../types.js';
5
+ import { FormattedViemError } from '../utils.js';
6
+ export declare const MULTI_CALL_3_ADDRESS: "0xcA11bde05977b3631167028862bE2a173976CA11";
7
+ export declare class Multicall3 {
8
+ static forward(requests: L1TxRequest[], l1TxUtils: L1TxUtils, gasConfig: L1TxConfig | undefined, blobConfig: L1BlobInputs | undefined, rollupAddress: Hex, logger: Logger, opts?: {
9
+ revertOnFailure?: boolean;
10
+ }): Promise<FormattedViemError | {
11
+ receipt: import("viem").TransactionReceipt;
12
+ stats: import("../l1_tx_utils/types.js").TransactionStats | undefined;
13
+ errorMsg?: undefined;
14
+ } | {
15
+ receipt: import("viem").TransactionReceipt;
16
+ errorMsg: string | undefined;
17
+ stats?: undefined;
18
+ }>;
19
+ }
20
+ export declare function deployMulticall3(l1Client: ExtendedViemWalletClient, logger: Logger): Promise<void>;
21
+ //# sourceMappingURL=multicall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../../src/contracts/multicall.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAqC,KAAK,GAAG,EAAqC,MAAM,MAAM,CAAC;AAEtG,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAmB,MAAM,aAAa,CAAC;AAGlE,eAAO,MAAM,oBAAoB,EAAG,4CAAqD,CAAC;AAE1F,qBAAa,UAAU;WACR,OAAO,CAClB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,UAAU,GAAG,SAAS,EACjC,UAAU,EAAE,YAAY,GAAG,SAAS,EACpC,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO;;;;;;;;;CAoG3C;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,iBA+BxF"}
@@ -0,0 +1,156 @@
1
+ import { toHex as toPaddedHex } from '@aztec/foundation/bigint-buffer';
2
+ import { TimeoutError } from '@aztec/foundation/error';
3
+ import { encodeFunctionData, multicall3Abi } from 'viem';
4
+ import { FormattedViemError, formatViemError } from '../utils.js';
5
+ import { RollupContract } from './rollup.js';
6
+ export const MULTI_CALL_3_ADDRESS = '0xcA11bde05977b3631167028862bE2a173976CA11';
7
+ export class Multicall3 {
8
+ static async forward(requests, l1TxUtils, gasConfig, blobConfig, rollupAddress, logger, opts = {}) {
9
+ requests = requests.filter((request)=>request.to !== null);
10
+ const args = requests.map((r)=>({
11
+ target: r.to,
12
+ callData: r.data,
13
+ allowFailure: !opts.revertOnFailure
14
+ }));
15
+ const forwarderFunctionData = {
16
+ abi: multicall3Abi,
17
+ functionName: 'aggregate3',
18
+ args: [
19
+ args
20
+ ]
21
+ };
22
+ const encodedForwarderData = encodeFunctionData(forwarderFunctionData);
23
+ try {
24
+ const { receipt, state } = await l1TxUtils.sendAndMonitorTransaction({
25
+ to: MULTI_CALL_3_ADDRESS,
26
+ data: encodedForwarderData
27
+ }, gasConfig, blobConfig);
28
+ if (receipt.status === 'success') {
29
+ const stats = await l1TxUtils.getTransactionStats(receipt.transactionHash);
30
+ return {
31
+ receipt,
32
+ stats
33
+ };
34
+ } else {
35
+ logger.error('Forwarder transaction failed', undefined, {
36
+ receipt
37
+ });
38
+ const args = {
39
+ ...forwarderFunctionData,
40
+ address: MULTI_CALL_3_ADDRESS
41
+ };
42
+ let errorMsg;
43
+ if (blobConfig) {
44
+ const maxFeePerBlobGas = blobConfig.maxFeePerBlobGas ?? state.gasPrice.maxFeePerBlobGas;
45
+ if (maxFeePerBlobGas === undefined) {
46
+ errorMsg = 'maxFeePerBlobGas is required to get the error message';
47
+ } else {
48
+ logger.debug('Trying to get error from reverted tx with blob config');
49
+ errorMsg = await l1TxUtils.tryGetErrorFromRevertedTx(encodedForwarderData, args, {
50
+ blobs: blobConfig.blobs,
51
+ kzg: blobConfig.kzg,
52
+ maxFeePerBlobGas
53
+ }, [
54
+ {
55
+ address: rollupAddress,
56
+ stateDiff: [
57
+ {
58
+ slot: toPaddedHex(RollupContract.checkBlobStorageSlot, true),
59
+ value: toPaddedHex(0n, true)
60
+ }
61
+ ]
62
+ }
63
+ ]);
64
+ }
65
+ } else {
66
+ logger.debug('Trying to get error from reverted tx without blob config');
67
+ errorMsg = await l1TxUtils.tryGetErrorFromRevertedTx(encodedForwarderData, args, undefined, []);
68
+ }
69
+ return {
70
+ receipt,
71
+ errorMsg
72
+ };
73
+ }
74
+ } catch (err) {
75
+ if (err instanceof TimeoutError) {
76
+ throw err;
77
+ }
78
+ for (const request of requests){
79
+ logger.debug('Simulating request', {
80
+ request
81
+ });
82
+ const result = await l1TxUtils.simulate(request, undefined, [
83
+ {
84
+ address: rollupAddress,
85
+ stateDiff: [
86
+ {
87
+ slot: toPaddedHex(RollupContract.checkBlobStorageSlot, true),
88
+ value: toPaddedHex(0n, true)
89
+ }
90
+ ]
91
+ }
92
+ ]).catch((err)=>formatViemError(err, request.abi));
93
+ if (result instanceof FormattedViemError) {
94
+ logger.error('Found error in simulation', result, {
95
+ to: request.to ?? 'null',
96
+ data: request.data
97
+ });
98
+ return result;
99
+ }
100
+ }
101
+ logger.warn('Failed to get error from reverted tx', {
102
+ err
103
+ });
104
+ throw err;
105
+ }
106
+ }
107
+ }
108
+ export async function deployMulticall3(l1Client, logger) {
109
+ const existing = await l1Client.getCode({
110
+ address: MULTI_CALL_3_ADDRESS
111
+ });
112
+ if (existing && existing !== '0x') {
113
+ logger.verbose('Multicall3 already deployed', {
114
+ address: MULTI_CALL_3_ADDRESS
115
+ });
116
+ return;
117
+ }
118
+ const deployer = '0x05f32b3cc3888453ff71b01135b34ff8e41263f2';
119
+ const sendEth = await l1Client.sendTransaction({
120
+ to: deployer,
121
+ value: 10n ** 17n
122
+ });
123
+ logger.info('Sent 0.1 ETH to deployer', {
124
+ deployer,
125
+ value: 10n ** 17n
126
+ });
127
+ const sendEthReceipt = await l1Client.waitForTransactionReceipt({
128
+ hash: sendEth
129
+ });
130
+ if (sendEthReceipt.status !== 'success') {
131
+ logger.error('Failed to send ETH to deployer', undefined, {
132
+ sendEthReceipt
133
+ });
134
+ throw new Error('Failed to send ETH to deployer');
135
+ } else {
136
+ logger.info('Sent 0.1 ETH to deployer', {
137
+ deployer,
138
+ value: 10n ** 17n
139
+ });
140
+ }
141
+ const tx = '0xf90f538085174876e800830f42408080b90f00608060405234801561001057600080fd5b50610ee0806100206000396000f3fe6080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e1461025a578063bce38bd714610275578063c3077fa914610288578063ee82ac5e1461029b57600080fd5b80634d2301cc146101ec57806372425d9d1461022157806382ad56cb1461023457806386d516e81461024757600080fd5b80633408e470116100c65780633408e47014610191578063399542e9146101a45780633e64a696146101c657806342cbb15c146101d957600080fd5b80630f28c97d146100f8578063174dea711461011a578063252dba421461013a57806327e86d6e1461015b575b600080fd5b34801561010457600080fd5b50425b6040519081526020015b60405180910390f35b61012d610128366004610a85565b6102ba565b6040516101119190610bbe565b61014d610148366004610a85565b6104ef565b604051610111929190610bd8565b34801561016757600080fd5b50437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0140610107565b34801561019d57600080fd5b5046610107565b6101b76101b2366004610c60565b610690565b60405161011193929190610cba565b3480156101d257600080fd5b5048610107565b3480156101e557600080fd5b5043610107565b3480156101f857600080fd5b50610107610207366004610ce2565b73ffffffffffffffffffffffffffffffffffffffff163190565b34801561022d57600080fd5b5044610107565b61012d610242366004610a85565b6106ab565b34801561025357600080fd5b5045610107565b34801561026657600080fd5b50604051418152602001610111565b61012d610283366004610c60565b61085a565b6101b7610296366004610a85565b610a1a565b3480156102a757600080fd5b506101076102b6366004610d18565b4090565b60606000828067ffffffffffffffff8111156102d8576102d8610d31565b60405190808252806020026020018201604052801561031e57816020015b6040805180820190915260008152606060208201528152602001906001900390816102f65790505b5092503660005b8281101561047757600085828151811061034157610341610d60565b6020026020010151905087878381811061035d5761035d610d60565b905060200281019061036f9190610d8f565b6040810135958601959093506103886020850185610ce2565b73ffffffffffffffffffffffffffffffffffffffff16816103ac6060870187610dcd565b6040516103ba929190610e32565b60006040518083038185875af1925050503d80600081146103f7576040519150601f19603f3d011682016040523d82523d6000602084013e6103fc565b606091505b50602080850191909152901515808452908501351761046d577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b5050600101610325565b508234146104e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d756c746963616c6c333a2076616c7565206d69736d6174636800000000000060448201526064015b60405180910390fd5b50505092915050565b436060828067ffffffffffffffff81111561050c5761050c610d31565b60405190808252806020026020018201604052801561053f57816020015b606081526020019060019003908161052a5790505b5091503660005b8281101561068657600087878381811061056257610562610d60565b90506020028101906105749190610e42565b92506105836020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166105a66020850185610dcd565b6040516105b4929190610e32565b6000604051808303816000865af19150503d80600081146105f1576040519150601f19603f3d011682016040523d82523d6000602084013e6105f6565b606091505b5086848151811061060957610609610d60565b602090810291909101015290508061067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b50600101610546565b5050509250929050565b43804060606106a086868661085a565b905093509350939050565b6060818067ffffffffffffffff8111156106c7576106c7610d31565b60405190808252806020026020018201604052801561070d57816020015b6040805180820190915260008152606060208201528152602001906001900390816106e55790505b5091503660005b828110156104e657600084828151811061073057610730610d60565b6020026020010151905086868381811061074c5761074c610d60565b905060200281019061075e9190610e76565b925061076d6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166107906040850185610dcd565b60405161079e929190610e32565b6000604051808303816000865af19150503d80600081146107db576040519150601f19603f3d011682016040523d82523d6000602084013e6107e0565b606091505b506020808401919091529015158083529084013517610851577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b50600101610714565b6060818067ffffffffffffffff81111561087657610876610d31565b6040519080825280602002602001820160405280156108bc57816020015b6040805180820190915260008152606060208201528152602001906001900390816108945790505b5091503660005b82811015610a105760008482815181106108df576108df610d60565b602002602001015190508686838181106108fb576108fb610d60565b905060200281019061090d9190610e42565b925061091c6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff1661093f6020850185610dcd565b60405161094d929190610e32565b6000604051808303816000865af19150503d806000811461098a576040519150601f19603f3d011682016040523d82523d6000602084013e61098f565b606091505b506020830152151581528715610a07578051610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b506001016108c3565b5050509392505050565b6000806060610a2b60018686610690565b919790965090945092505050565b60008083601f840112610a4b57600080fd5b50813567ffffffffffffffff811115610a6357600080fd5b6020830191508360208260051b8501011115610a7e57600080fd5b9250929050565b60008060208385031215610a9857600080fd5b823567ffffffffffffffff811115610aaf57600080fd5b610abb85828601610a39565b90969095509350505050565b6000815180845260005b81811015610aed57602081850181015186830182015201610ad1565b81811115610aff576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b84811015610bb1578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051151584528401516040858501819052610b9d81860183610ac7565b9a86019a9450505090830190600101610b4f565b5090979650505050505050565b602081526000610bd16020830184610b32565b9392505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610c52577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610c40868351610ac7565b95509284019290840190600101610c06565b509398975050505050505050565b600080600060408486031215610c7557600080fd5b83358015158114610c8557600080fd5b9250602084013567ffffffffffffffff811115610ca157600080fd5b610cad86828701610a39565b9497909650939450505050565b838152826020820152606060408201526000610cd96060830184610b32565b95945050505050565b600060208284031215610cf457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610bd157600080fd5b600060208284031215610d2a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112610dc357600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610e0257600080fd5b83018035915067ffffffffffffffff821115610e1d57600080fd5b602001915036819003821315610a7e57600080fd5b8183823760009101908152919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610dc357600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610dc357600080fdfea2646970667358221220bb2b5c71a328032f97c676ae39a1ec2148d3e5d6f73d95e9b17910152d61f16264736f6c634300080c00331ca0edce47092c0f398cebf3ffc267f05c8e7076e3b89445e0fe50f6332273d4569ba01b0b9d000e19b24c5869b0fc3b22b0d6fa47cd63316875cbbd577d76e6fde086';
142
+ const deployTx = await l1Client.sendRawTransaction({
143
+ serializedTransaction: tx
144
+ });
145
+ const deployTxReceipt = await l1Client.waitForTransactionReceipt({
146
+ hash: deployTx
147
+ });
148
+ if (deployTxReceipt.status !== 'success') {
149
+ logger.error('Failed to deploy Multicall3', undefined, {
150
+ deployTxReceipt
151
+ });
152
+ throw new Error('Failed to deploy Multicall3');
153
+ } else {
154
+ logger.info('Deployed Multicall3');
155
+ }
156
+ }
@@ -1,12 +1,14 @@
1
1
  import { EthAddress } from '@aztec/foundation/eth-address';
2
2
  import { type Hex } from 'viem';
3
3
  import type { L1ContractAddresses } from '../l1_contract_addresses.js';
4
- import type { L1Clients, ViemPublicClient } from '../types.js';
4
+ import type { ViemClient } from '../types.js';
5
5
  export declare class RegistryContract {
6
- readonly client: L1Clients['publicClient'];
6
+ readonly client: ViemClient;
7
7
  address: EthAddress;
8
+ private readonly log;
8
9
  private readonly registry;
9
- constructor(client: L1Clients['publicClient'], address: Hex | EthAddress);
10
+ constructor(client: ViemClient, address: Hex | EthAddress);
11
+ getOwner(): Promise<EthAddress>;
10
12
  /**
11
13
  * Returns the address of the rollup for a given version.
12
14
  * @param version - The version of the rollup. 'canonical' can be used to get the canonical address (i.e. the latest version).
@@ -19,6 +21,9 @@ export declare class RegistryContract {
19
21
  */
20
22
  getCanonicalAddress(): Promise<EthAddress>;
21
23
  getGovernanceAddresses(): Promise<Pick<L1ContractAddresses, 'governanceProposerAddress' | 'governanceAddress'>>;
22
- static collectAddresses(client: ViemPublicClient, registryAddress: Hex | EthAddress, rollupVersion: number | bigint | 'canonical'): Promise<L1ContractAddresses>;
24
+ static collectAddresses(client: ViemClient, registryAddress: Hex | EthAddress, rollupVersion: number | bigint | 'canonical'): Promise<L1ContractAddresses>;
25
+ getNumberOfVersions(): Promise<number>;
26
+ getRollupVersions(): Promise<bigint[]>;
27
+ getRewardDistributor(): Promise<EthAddress>;
23
28
  }
24
29
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/contracts/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAI3D,OAAO,EAGL,KAAK,GAAG,EAIT,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI/D,qBAAa,gBAAgB;aAIC,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC;IAHtD,OAAO,EAAE,UAAU,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgF;gBAE7E,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,UAAU;IAQxF;;;;OAIG;IACU,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAiB1F;;;OAGG;IACU,mBAAmB,IAAI,OAAO,CAAC,UAAU,CAAC;IAS1C,sBAAsB,IAAI,OAAO,CAC5C,IAAI,CAAC,mBAAmB,EAAE,2BAA2B,GAAG,mBAAmB,CAAC,CAC7E;WAUmB,gBAAgB,CAClC,MAAM,EAAE,gBAAgB,EACxB,eAAe,EAAE,GAAG,GAAG,UAAU,EACjC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAC3C,OAAO,CAAC,mBAAmB,CAAC;CAwBhC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/contracts/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAK3D,OAAO,EAA8B,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAEzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,qBAAa,gBAAgB;aAOT,MAAM,EAAE,UAAU;IAN7B,OAAO,EAAE,UAAU,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA+C;IACnE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwD;gBAG/D,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU;IASd,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAI5C;;;;OAIG;IACU,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAwB1F;;;OAGG;IACU,mBAAmB,IAAI,OAAO,CAAC,UAAU,CAAC;IAI1C,sBAAsB,IAAI,OAAO,CAC5C,IAAI,CAAC,mBAAmB,EAAE,2BAA2B,GAAG,mBAAmB,CAAC,CAC7E;WAUmB,gBAAgB,CAClC,MAAM,EAAE,UAAU,EAClB,eAAe,EAAE,GAAG,GAAG,UAAU,EACjC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAC3C,OAAO,CAAC,mBAAmB,CAAC;IAyBlB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKtC,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAWtC,oBAAoB,IAAI,OAAO,CAAC,UAAU,CAAC;CAGzD"}
@@ -1,15 +1,18 @@
1
1
  import { EthAddress } from '@aztec/foundation/eth-address';
2
+ import { createLogger } from '@aztec/foundation/log';
2
3
  import { RegistryAbi } from '@aztec/l1-artifacts/RegistryAbi';
3
4
  import { TestERC20Abi } from '@aztec/l1-artifacts/TestERC20Abi';
4
5
  import { getContract } from 'viem';
5
- import { GovernanceContract } from './governance.js';
6
+ import { ReadOnlyGovernanceContract } from './governance.js';
6
7
  import { RollupContract } from './rollup.js';
7
8
  export class RegistryContract {
8
9
  client;
9
10
  address;
11
+ log;
10
12
  registry;
11
13
  constructor(client, address){
12
14
  this.client = client;
15
+ this.log = createLogger('ethereum:contracts:registry');
13
16
  if (address instanceof EthAddress) {
14
17
  address = address.toString();
15
18
  }
@@ -20,6 +23,9 @@ export class RegistryContract {
20
23
  client
21
24
  });
22
25
  }
26
+ async getOwner() {
27
+ return EthAddress.fromString(await this.registry.read.owner());
28
+ }
23
29
  /**
24
30
  * Returns the address of the rollup for a given version.
25
31
  * @param version - The version of the rollup. 'canonical' can be used to get the canonical address (i.e. the latest version).
@@ -31,33 +37,38 @@ export class RegistryContract {
31
37
  if (typeof version === 'number') {
32
38
  version = BigInt(version);
33
39
  }
34
- const snapshot = await this.registry.read.getSnapshot([
35
- version
36
- ]);
37
- const address = EthAddress.fromString(snapshot.rollup);
38
- if (address.equals(EthAddress.ZERO)) {
40
+ try {
41
+ return EthAddress.fromString(await this.registry.read.getRollup([
42
+ version
43
+ ]));
44
+ } catch {
45
+ this.log.warn(`Failed fetching rollup address for version ${version}. Retrying as index.`);
46
+ }
47
+ try {
48
+ const actualVersion = await this.registry.read.getVersion([
49
+ version
50
+ ]);
51
+ const rollupAddress = await this.registry.read.getRollup([
52
+ actualVersion
53
+ ]);
54
+ return EthAddress.fromString(rollupAddress);
55
+ } catch {
39
56
  throw new Error('Rollup address is undefined');
40
57
  }
41
- return address;
42
58
  }
43
59
  /**
44
60
  * Returns the canonical address of the rollup.
45
61
  * @returns The canonical address of the rollup. If the rollup is not set, throws an error.
46
62
  */ async getCanonicalAddress() {
47
- const snapshot = await this.registry.read.getCurrentSnapshot();
48
- const address = EthAddress.fromString(snapshot.rollup);
49
- if (address.equals(EthAddress.ZERO)) {
50
- throw new Error('Rollup address is undefined');
51
- }
52
- return address;
63
+ return EthAddress.fromString(await this.registry.read.getCanonicalRollup());
53
64
  }
54
65
  async getGovernanceAddresses() {
55
66
  const governanceAddress = await this.registry.read.getGovernance();
56
- const governance = new GovernanceContract(governanceAddress, this.client, undefined);
57
- const governanceProposer = await governance.getProposer();
67
+ const governance = new ReadOnlyGovernanceContract(governanceAddress, this.client);
68
+ const governanceProposerAddress = await governance.getGovernanceProposerAddress();
58
69
  return {
59
70
  governanceAddress: governance.address,
60
- governanceProposerAddress: governanceProposer.address
71
+ governanceProposerAddress: governanceProposerAddress
61
72
  };
62
73
  }
63
74
  static async collectAddresses(client, registryAddress, rollupVersion) {
@@ -82,4 +93,21 @@ export class RegistryContract {
82
93
  coinIssuerAddress: EthAddress.fromString(coinIssuer)
83
94
  };
84
95
  }
96
+ async getNumberOfVersions() {
97
+ const version = await this.registry.read.numberOfVersions();
98
+ return Number(version);
99
+ }
100
+ async getRollupVersions() {
101
+ const count = await this.getNumberOfVersions();
102
+ const versions = [];
103
+ for(let i = 0; i < count; i++){
104
+ versions.push(await this.registry.read.getVersion([
105
+ BigInt(i)
106
+ ]));
107
+ }
108
+ return versions;
109
+ }
110
+ async getRewardDistributor() {
111
+ return EthAddress.fromString(await this.registry.read.getRewardDistributor());
112
+ }
85
113
  }
@@ -1,75 +1,167 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
1
  import { EthAddress } from '@aztec/foundation/eth-address';
4
2
  import type { ViemSignature } from '@aztec/foundation/eth-signature';
5
- import { type Account, type Hex } from 'viem';
3
+ import { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
4
+ import { type Account, type GetContractReturnType, type Hex, type StateOverride, type WatchContractEventReturnType } from 'viem';
6
5
  import type { DeployL1ContractsReturnType } from '../deploy_l1_contracts.js';
7
6
  import type { L1ContractAddresses } from '../l1_contract_addresses.js';
8
7
  import type { L1ReaderConfig } from '../l1_reader.js';
9
- import type { ViemPublicClient } from '../types.js';
10
- import { SlashingProposerContract } from './slashing_proposer.js';
11
- export type L1RollupContractAddresses = Pick<L1ContractAddresses, 'rollupAddress' | 'inboxAddress' | 'outboxAddress' | 'feeJuicePortalAddress' | 'feeJuiceAddress' | 'stakingAssetAddress' | 'rewardDistributorAddress' | 'slashFactoryAddress'>;
8
+ import type { L1TxRequest, L1TxUtils } from '../l1_tx_utils/index.js';
9
+ import type { ViemClient } from '../types.js';
10
+ import { EmpireSlashingProposerContract } from './empire_slashing_proposer.js';
11
+ import { SlasherContract } from './slasher_contract.js';
12
+ import { TallySlashingProposerContract } from './tally_slashing_proposer.js';
13
+ export type ViemCommitteeAttestation = {
14
+ addr: `0x${string}`;
15
+ signature: ViemSignature;
16
+ };
17
+ export type ViemCommitteeAttestations = {
18
+ signatureIndices: `0x${string}`;
19
+ signaturesOrAddresses: `0x${string}`;
20
+ };
21
+ export type L1RollupContractAddresses = Pick<L1ContractAddresses, 'rollupAddress' | 'inboxAddress' | 'outboxAddress' | 'feeJuicePortalAddress' | 'feeJuiceAddress' | 'stakingAssetAddress' | 'rewardDistributorAddress' | 'slashFactoryAddress' | 'gseAddress'>;
12
22
  export type EpochProofPublicInputArgs = {
13
23
  previousArchive: `0x${string}`;
14
24
  endArchive: `0x${string}`;
15
- previousBlockHash: `0x${string}`;
16
- endBlockHash: `0x${string}`;
17
- endTimestamp: bigint;
18
- outHash: `0x${string}`;
19
25
  proverId: `0x${string}`;
20
26
  };
27
+ export type ViemHeader = {
28
+ lastArchiveRoot: `0x${string}`;
29
+ contentCommitment: ViemContentCommitment;
30
+ slotNumber: bigint;
31
+ timestamp: bigint;
32
+ coinbase: `0x${string}`;
33
+ feeRecipient: `0x${string}`;
34
+ gasFees: ViemGasFees;
35
+ totalManaUsed: bigint;
36
+ };
37
+ export type ViemContentCommitment = {
38
+ blobsHash: `0x${string}`;
39
+ inHash: `0x${string}`;
40
+ outHash: `0x${string}`;
41
+ };
42
+ export type ViemGasFees = {
43
+ feePerDaGas: bigint;
44
+ feePerL2Gas: bigint;
45
+ };
46
+ export type ViemStateReference = {
47
+ l1ToL2MessageTree: ViemAppendOnlyTreeSnapshot;
48
+ partialStateReference: ViemPartialStateReference;
49
+ };
50
+ export type ViemPartialStateReference = {
51
+ noteHashTree: ViemAppendOnlyTreeSnapshot;
52
+ nullifierTree: ViemAppendOnlyTreeSnapshot;
53
+ publicDataTree: ViemAppendOnlyTreeSnapshot;
54
+ };
55
+ export type ViemAppendOnlyTreeSnapshot = {
56
+ root: `0x${string}`;
57
+ nextAvailableLeafIndex: number;
58
+ };
59
+ export declare enum SlashingProposerType {
60
+ None = 0,
61
+ Tally = 1,
62
+ Empire = 2
63
+ }
21
64
  export declare class RollupContract {
22
- readonly client: ViemPublicClient;
65
+ readonly client: ViemClient;
23
66
  private readonly rollup;
67
+ private static cachedStfStorageSlot;
24
68
  static get checkBlobStorageSlot(): bigint;
69
+ static get stfStorageSlot(): Hex;
25
70
  static getFromL1ContractsValues(deployL1ContractsValues: DeployL1ContractsReturnType): RollupContract;
26
71
  static getFromConfig(config: L1ReaderConfig): RollupContract;
27
- constructor(client: ViemPublicClient, address: Hex | EthAddress);
72
+ constructor(client: ViemClient, address: Hex | EthAddress);
73
+ getGSE(): Promise<`0x${string}`>;
28
74
  get address(): `0x${string}`;
29
- getSlashingProposer(): Promise<SlashingProposerContract>;
75
+ getContract(): GetContractReturnType<typeof RollupAbi, ViemClient>;
76
+ getSlashingProposer(): Promise<EmpireSlashingProposerContract | TallySlashingProposerContract | undefined>;
30
77
  getL1StartBlock(): Promise<bigint>;
31
78
  getL1GenesisTime(): Promise<bigint>;
32
- getProofSubmissionWindow(): Promise<bigint>;
79
+ getProofSubmissionEpochs(): Promise<bigint>;
33
80
  getEpochDuration(): Promise<bigint>;
34
81
  getSlotDuration(): Promise<bigint>;
35
82
  getTargetCommitteeSize(): Promise<bigint>;
36
- getMinimumStake(): Promise<bigint>;
83
+ getEjectionThreshold(): Promise<bigint>;
84
+ getLocalEjectionThreshold(): Promise<bigint>;
85
+ getLagInEpochs(): Promise<bigint>;
86
+ getActivationThreshold(): Promise<bigint>;
87
+ getExitDelay(): Promise<bigint>;
88
+ getManaTarget(): Promise<bigint>;
89
+ getProvingCostPerMana(): Promise<bigint>;
90
+ getProvingCostPerManaInFeeAsset(): Promise<bigint>;
91
+ getManaLimit(): Promise<bigint>;
92
+ getVersion(): Promise<bigint>;
93
+ getGenesisArchiveTreeRoot(): Promise<`0x${string}`>;
94
+ /**
95
+ * Returns rollup constants used for epoch queries.
96
+ * Return type is `L1RollupConstants` which is defined in stdlib,
97
+ * so we cant reference it until we move this contract to that package.
98
+ */
99
+ getRollupConstants(): Promise<{
100
+ l1StartBlock: bigint;
101
+ l1GenesisTime: bigint;
102
+ slotDuration: number;
103
+ epochDuration: number;
104
+ proofSubmissionEpochs: number;
105
+ }>;
106
+ getSlasherAddress(): Promise<`0x${string}`>;
107
+ /**
108
+ * Returns a SlasherContract instance for interacting with the slasher contract.
109
+ */
110
+ getSlasherContract(): Promise<SlasherContract | undefined>;
111
+ getOwner(): Promise<`0x${string}`>;
112
+ getActiveAttesterCount(): Promise<bigint>;
37
113
  getSlashingProposerAddress(): Promise<EthAddress>;
114
+ getBlockReward(): Promise<bigint>;
38
115
  getBlockNumber(): Promise<bigint>;
39
116
  getProvenBlockNumber(): Promise<bigint>;
40
117
  getSlotNumber(): Promise<bigint>;
41
- getCommitteeAt(timestamp: bigint): Promise<readonly `0x${string}`[]>;
118
+ getL1FeesAt(timestamp: bigint): Promise<{
119
+ baseFee: bigint;
120
+ blobFee: bigint;
121
+ }>;
122
+ getFeeAssetPerEth(): Promise<bigint>;
123
+ getCommitteeAt(timestamp: bigint): Promise<readonly `0x${string}`[] | undefined>;
42
124
  getSampleSeedAt(timestamp: bigint): Promise<bigint>;
43
125
  getCurrentSampleSeed(): Promise<bigint>;
44
- getCurrentEpochCommittee(): Promise<readonly `0x${string}`[]>;
126
+ getCurrentEpoch(): Promise<bigint>;
127
+ getCurrentEpochCommittee(): Promise<readonly `0x${string}`[] | undefined>;
45
128
  getCurrentProposer(): Promise<`0x${string}`>;
46
129
  getProposerAt(timestamp: bigint): Promise<`0x${string}`>;
47
- getBlock(blockNumber: bigint): Promise<{
130
+ getBlock(blockNumber: bigint | number): Promise<{
131
+ archive: `0x${string}`;
132
+ headerHash: `0x${string}`;
133
+ blobCommitmentsHash: `0x${string}`;
134
+ attestationsHash: `0x${string}`;
135
+ payloadDigest: `0x${string}`;
136
+ slotNumber: bigint;
48
137
  feeHeader: {
49
138
  excessMana: bigint;
50
139
  manaUsed: bigint;
51
140
  feeAssetPriceNumerator: bigint;
52
141
  congestionCost: bigint;
53
- provingCost: bigint;
142
+ proverCost: bigint;
54
143
  };
55
- archive: `0x${string}`;
56
- blockHash: `0x${string}`;
57
- slotNumber: bigint;
58
144
  }>;
59
145
  getTips(): Promise<{
60
146
  pendingBlockNumber: bigint;
61
147
  provenBlockNumber: bigint;
62
148
  }>;
63
149
  getTimestampForSlot(slot: bigint): Promise<bigint>;
64
- getEpochNumber(blockNumber?: bigint): Promise<bigint>;
150
+ getEntryQueueLength(): Promise<bigint>;
151
+ getAvailableValidatorFlushes(): Promise<bigint>;
152
+ getNextFlushableEpoch(): Promise<bigint>;
153
+ getCurrentEpochNumber(): Promise<bigint>;
154
+ getEpochNumberForBlock(blockNumber: bigint): Promise<bigint>;
65
155
  getRollupAddresses(): Promise<L1RollupContractAddresses>;
156
+ getFeeJuicePortal(): Promise<EthAddress>;
66
157
  getEpochNumberForSlotNumber(slotNumber: bigint): Promise<bigint>;
67
- getEpochProofPublicInputs(args: readonly [bigint, bigint, EpochProofPublicInputArgs, readonly `0x${string}`[], `0x${string}`, `0x${string}`]): Promise<readonly `0x${string}`[]>;
158
+ getEpochProofPublicInputs(args: readonly [bigint, bigint, EpochProofPublicInputArgs, readonly `0x${string}`[], `0x${string}`]): Promise<readonly `0x${string}`[]>;
68
159
  validateHeader(args: readonly [
160
+ ViemHeader,
161
+ ViemCommitteeAttestations,
162
+ `0x${string}`[],
163
+ ViemSignature,
69
164
  `0x${string}`,
70
- ViemSignature[],
71
- `0x${string}`,
72
- bigint,
73
165
  `0x${string}`,
74
166
  {
75
167
  ignoreDA: boolean;
@@ -85,8 +177,89 @@ export declare class RollupContract {
85
177
  * @return [slot, blockNumber] - If you can propose, the L2 slot number and L2 block number of the next Ethereum block,
86
178
  * @throws otherwise
87
179
  */
88
- canProposeAtNextEthBlock(archive: Buffer, account: `0x${string}` | Account, slotDuration: bigint | number): Promise<[bigint, bigint]>;
180
+ canProposeAtNextEthBlock(archive: Buffer, account: `0x${string}` | Account, slotDuration: bigint | number, opts?: {
181
+ forcePendingBlockNumber?: number;
182
+ }): Promise<{
183
+ slot: bigint;
184
+ blockNumber: bigint;
185
+ timeOfNextL1Slot: bigint;
186
+ }>;
187
+ /**
188
+ * Returns a state override that sets the pending block number to the specified value. Useful for simulations.
189
+ * Requires querying the current state of the contract to get the current proven block number, as they are both
190
+ * stored in the same slot. If the argument is undefined, it returns an empty override.
191
+ */
192
+ makePendingBlockNumberOverride(forcePendingBlockNumber: number | undefined): Promise<StateOverride>;
193
+ /** Creates a request to Rollup#invalidateBadAttestation to be simulated or sent */
194
+ buildInvalidateBadAttestationRequest(blockNumber: number, attestationsAndSigners: ViemCommitteeAttestations, committee: EthAddress[], invalidIndex: number): L1TxRequest;
195
+ /** Creates a request to Rollup#invalidateInsufficientAttestations to be simulated or sent */
196
+ buildInvalidateInsufficientAttestationsRequest(blockNumber: number, attestationsAndSigners: ViemCommitteeAttestations, committee: EthAddress[]): L1TxRequest;
89
197
  /** Calls getHasSubmitted directly. Returns whether the given prover has submitted a proof with the given length for the given epoch. */
90
- getHasSubmittedProof(epochNumber: number, numberOfBlocksInEpoch: number, prover: EthAddress): Promise<boolean>;
198
+ getHasSubmittedProof(epochNumber: number, numberOfBlocksInEpoch: number, prover: Hex | EthAddress): Promise<boolean>;
199
+ getManaBaseFeeAt(timestamp: bigint, inFeeAsset: boolean): Promise<bigint>;
200
+ getSlotAt(timestamp: bigint): Promise<bigint>;
201
+ status(blockNumber: bigint, options?: {
202
+ blockNumber?: bigint;
203
+ }): Promise<readonly [bigint, `0x${string}`, bigint, `0x${string}`, `0x${string}`, bigint]>;
204
+ canPruneAtTime(timestamp: bigint, options?: {
205
+ blockNumber?: bigint;
206
+ }): Promise<boolean>;
207
+ archive(): Promise<`0x${string}`>;
208
+ archiveAt(blockNumber: bigint): Promise<`0x${string}`>;
209
+ getSequencerRewards(address: Hex | EthAddress): Promise<bigint>;
210
+ getSpecificProverRewardsForEpoch(epoch: bigint, prover: Hex | EthAddress): Promise<bigint>;
211
+ getAttesters(): Promise<`0x${string}`[]>;
212
+ getAttesterView(address: Hex | EthAddress): Promise<{
213
+ status: number;
214
+ effectiveBalance: bigint;
215
+ exit: {
216
+ withdrawalId: bigint;
217
+ amount: bigint;
218
+ exitableAt: bigint;
219
+ recipientOrWithdrawer: `0x${string}`;
220
+ isRecipient: boolean;
221
+ exists: boolean;
222
+ };
223
+ config: {
224
+ publicKey: {
225
+ x: bigint;
226
+ y: bigint;
227
+ };
228
+ withdrawer: `0x${string}`;
229
+ };
230
+ }>;
231
+ getStatus(address: Hex | EthAddress): Promise<number>;
232
+ getBlobCommitmentsHash(blockNumber: bigint): Promise<`0x${string}`>;
233
+ getCurrentBlobCommitmentsHash(): Promise<`0x${string}`>;
234
+ getStakingAsset(): Promise<`0x${string}`>;
235
+ getRewardConfig(): Promise<{
236
+ rewardDistributor: `0x${string}`;
237
+ sequencerBps: number;
238
+ booster: `0x${string}`;
239
+ blockReward: bigint;
240
+ }>;
241
+ setupEpoch(l1TxUtils: L1TxUtils): Promise<{
242
+ receipt: import("viem").TransactionReceipt;
243
+ state: import("../l1_tx_utils/types.js").L1TxState;
244
+ }>;
245
+ vote(l1TxUtils: L1TxUtils, proposalId: bigint): Promise<{
246
+ receipt: import("viem").TransactionReceipt;
247
+ state: import("../l1_tx_utils/types.js").L1TxState;
248
+ }>;
249
+ listenToSlasherChanged(callback: (args: {
250
+ oldSlasher: `0x${string}`;
251
+ newSlasher: `0x${string}`;
252
+ }) => unknown): WatchContractEventReturnType;
253
+ listenToBlockInvalidated(callback: (args: {
254
+ blockNumber: bigint;
255
+ }) => unknown): WatchContractEventReturnType;
256
+ getSlashEvents(l1BlockHash: Hex): Promise<{
257
+ amount: bigint;
258
+ attester: EthAddress;
259
+ }[]>;
260
+ listenToSlash(callback: (args: {
261
+ amount: bigint;
262
+ attester: EthAddress;
263
+ }) => unknown): WatchContractEventReturnType;
91
264
  }
92
265
  //# sourceMappingURL=rollup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/contracts/rollup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/contracts/rollup.ts"],"names":[],"mappings":"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"}