@aztec/cli 0.0.0-test.0

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 (218) hide show
  1. package/README.md +449 -0
  2. package/dest/cmds/contracts/index.d.ts +4 -0
  3. package/dest/cmds/contracts/index.d.ts.map +1 -0
  4. package/dest/cmds/contracts/index.js +12 -0
  5. package/dest/cmds/contracts/inspect_contract.d.ts +3 -0
  6. package/dest/cmds/contracts/inspect_contract.d.ts.map +1 -0
  7. package/dest/cmds/contracts/inspect_contract.js +37 -0
  8. package/dest/cmds/contracts/parse_parameter_struct.d.ts +3 -0
  9. package/dest/cmds/contracts/parse_parameter_struct.d.ts.map +1 -0
  10. package/dest/cmds/contracts/parse_parameter_struct.js +13 -0
  11. package/dest/cmds/devnet/bootstrap_network.d.ts +3 -0
  12. package/dest/cmds/devnet/bootstrap_network.d.ts.map +1 -0
  13. package/dest/cmds/devnet/bootstrap_network.js +196 -0
  14. package/dest/cmds/devnet/faucet.d.ts +4 -0
  15. package/dest/cmds/devnet/faucet.d.ts.map +1 -0
  16. package/dest/cmds/devnet/faucet.js +26 -0
  17. package/dest/cmds/devnet/index.d.ts +4 -0
  18. package/dest/cmds/devnet/index.d.ts.map +1 -0
  19. package/dest/cmds/devnet/index.js +14 -0
  20. package/dest/cmds/infrastructure/index.d.ts +4 -0
  21. package/dest/cmds/infrastructure/index.d.ts.map +1 -0
  22. package/dest/cmds/infrastructure/index.js +24 -0
  23. package/dest/cmds/infrastructure/sequencers.d.ts +13 -0
  24. package/dest/cmds/infrastructure/sequencers.d.ts.map +1 -0
  25. package/dest/cmds/infrastructure/sequencers.js +93 -0
  26. package/dest/cmds/infrastructure/setup_l2_contract.d.ts +3 -0
  27. package/dest/cmds/infrastructure/setup_l2_contract.d.ts.map +1 -0
  28. package/dest/cmds/infrastructure/setup_l2_contract.js +43 -0
  29. package/dest/cmds/l1/advance_epoch.d.ts +3 -0
  30. package/dest/cmds/l1/advance_epoch.d.ts.map +1 -0
  31. package/dest/cmds/l1/advance_epoch.js +10 -0
  32. package/dest/cmds/l1/assume_proven_through.d.ts +3 -0
  33. package/dest/cmds/l1/assume_proven_through.d.ts.map +1 -0
  34. package/dest/cmds/l1/assume_proven_through.js +12 -0
  35. package/dest/cmds/l1/bridge_erc20.d.ts +4 -0
  36. package/dest/cmds/l1/bridge_erc20.d.ts.map +1 -0
  37. package/dest/cmds/l1/bridge_erc20.js +31 -0
  38. package/dest/cmds/l1/create_l1_account.d.ts +3 -0
  39. package/dest/cmds/l1/create_l1_account.d.ts.map +1 -0
  40. package/dest/cmds/l1/create_l1_account.js +15 -0
  41. package/dest/cmds/l1/deploy_l1_contracts.d.ts +4 -0
  42. package/dest/cmds/l1/deploy_l1_contracts.d.ts.map +1 -0
  43. package/dest/cmds/l1/deploy_l1_contracts.js +29 -0
  44. package/dest/cmds/l1/deploy_l1_verifier.d.ts +5 -0
  45. package/dest/cmds/l1/deploy_l1_verifier.d.ts.map +1 -0
  46. package/dest/cmds/l1/deploy_l1_verifier.js +54 -0
  47. package/dest/cmds/l1/deploy_new_rollup.d.ts +4 -0
  48. package/dest/cmds/l1/deploy_new_rollup.d.ts.map +1 -0
  49. package/dest/cmds/l1/deploy_new_rollup.js +19 -0
  50. package/dest/cmds/l1/get_l1_addresses.d.ts +4 -0
  51. package/dest/cmds/l1/get_l1_addresses.d.ts.map +1 -0
  52. package/dest/cmds/l1/get_l1_addresses.js +18 -0
  53. package/dest/cmds/l1/get_l1_balance.d.ts +4 -0
  54. package/dest/cmds/l1/get_l1_balance.d.ts.map +1 -0
  55. package/dest/cmds/l1/get_l1_balance.js +33 -0
  56. package/dest/cmds/l1/governance_utils.d.ts +50 -0
  57. package/dest/cmds/l1/governance_utils.d.ts.map +1 -0
  58. package/dest/cmds/l1/governance_utils.js +85 -0
  59. package/dest/cmds/l1/index.d.ts +4 -0
  60. package/dest/cmds/l1/index.d.ts.map +1 -0
  61. package/dest/cmds/l1/index.js +208 -0
  62. package/dest/cmds/l1/prover_stats.d.ts +14 -0
  63. package/dest/cmds/l1/prover_stats.d.ts.map +1 -0
  64. package/dest/cmds/l1/prover_stats.js +145 -0
  65. package/dest/cmds/l1/update_l1_validators.d.ts +30 -0
  66. package/dest/cmds/l1/update_l1_validators.d.ts.map +1 -0
  67. package/dest/cmds/l1/update_l1_validators.js +186 -0
  68. package/dest/cmds/misc/compute_selector.d.ts +3 -0
  69. package/dest/cmds/misc/compute_selector.d.ts.map +1 -0
  70. package/dest/cmds/misc/compute_selector.js +5 -0
  71. package/dest/cmds/misc/example_contracts.d.ts +3 -0
  72. package/dest/cmds/misc/example_contracts.d.ts.map +1 -0
  73. package/dest/cmds/misc/example_contracts.js +6 -0
  74. package/dest/cmds/misc/generate_bootnode_enr.d.ts +3 -0
  75. package/dest/cmds/misc/generate_bootnode_enr.d.ts.map +1 -0
  76. package/dest/cmds/misc/generate_bootnode_enr.js +5 -0
  77. package/dest/cmds/misc/generate_p2p_private_key.d.ts +3 -0
  78. package/dest/cmds/misc/generate_p2p_private_key.d.ts.map +1 -0
  79. package/dest/cmds/misc/generate_p2p_private_key.js +7 -0
  80. package/dest/cmds/misc/generate_secret_and_hash.d.ts +3 -0
  81. package/dest/cmds/misc/generate_secret_and_hash.d.ts.map +1 -0
  82. package/dest/cmds/misc/generate_secret_and_hash.js +11 -0
  83. package/dest/cmds/misc/generate_secret_key.d.ts +5 -0
  84. package/dest/cmds/misc/generate_secret_key.d.ts.map +1 -0
  85. package/dest/cmds/misc/generate_secret_key.js +6 -0
  86. package/dest/cmds/misc/index.d.ts +4 -0
  87. package/dest/cmds/misc/index.d.ts.map +1 -0
  88. package/dest/cmds/misc/index.js +44 -0
  89. package/dest/cmds/misc/setup_contracts.d.ts +7 -0
  90. package/dest/cmds/misc/setup_contracts.d.ts.map +1 -0
  91. package/dest/cmds/misc/setup_contracts.js +27 -0
  92. package/dest/cmds/misc/update/common.d.ts +17 -0
  93. package/dest/cmds/misc/update/common.d.ts.map +1 -0
  94. package/dest/cmds/misc/update/common.js +3 -0
  95. package/dest/cmds/misc/update/github.d.ts +4 -0
  96. package/dest/cmds/misc/update/github.d.ts.map +1 -0
  97. package/dest/cmds/misc/update/github.js +3 -0
  98. package/dest/cmds/misc/update/noir.d.ts +10 -0
  99. package/dest/cmds/misc/update/noir.d.ts.map +1 -0
  100. package/dest/cmds/misc/update/noir.js +45 -0
  101. package/dest/cmds/misc/update/npm.d.ts +34 -0
  102. package/dest/cmds/misc/update/npm.d.ts.map +1 -0
  103. package/dest/cmds/misc/update/npm.js +127 -0
  104. package/dest/cmds/misc/update/utils.d.ts +14 -0
  105. package/dest/cmds/misc/update/utils.d.ts.map +1 -0
  106. package/dest/cmds/misc/update/utils.js +38 -0
  107. package/dest/cmds/misc/update.d.ts +3 -0
  108. package/dest/cmds/misc/update.d.ts.map +1 -0
  109. package/dest/cmds/misc/update.js +52 -0
  110. package/dest/cmds/pxe/add_contract.d.ts +5 -0
  111. package/dest/cmds/pxe/add_contract.d.ts.map +1 -0
  112. package/dest/cmds/pxe/add_contract.js +29 -0
  113. package/dest/cmds/pxe/block_number.d.ts +3 -0
  114. package/dest/cmds/pxe/block_number.d.ts.map +1 -0
  115. package/dest/cmds/pxe/block_number.js +10 -0
  116. package/dest/cmds/pxe/get_account.d.ts +4 -0
  117. package/dest/cmds/pxe/get_account.d.ts.map +1 -0
  118. package/dest/cmds/pxe/get_account.js +10 -0
  119. package/dest/cmds/pxe/get_accounts.d.ts +3 -0
  120. package/dest/cmds/pxe/get_accounts.d.ts.map +1 -0
  121. package/dest/cmds/pxe/get_accounts.js +25 -0
  122. package/dest/cmds/pxe/get_block.d.ts +3 -0
  123. package/dest/cmds/pxe/get_block.d.ts.map +1 -0
  124. package/dest/cmds/pxe/get_block.js +9 -0
  125. package/dest/cmds/pxe/get_contract_data.d.ts +4 -0
  126. package/dest/cmds/pxe/get_contract_data.d.ts.map +1 -0
  127. package/dest/cmds/pxe/get_contract_data.js +31 -0
  128. package/dest/cmds/pxe/get_current_base_fee.d.ts +3 -0
  129. package/dest/cmds/pxe/get_current_base_fee.d.ts.map +1 -0
  130. package/dest/cmds/pxe/get_current_base_fee.js +7 -0
  131. package/dest/cmds/pxe/get_l1_to_l2_message_witness.d.ts +4 -0
  132. package/dest/cmds/pxe/get_l1_to_l2_message_witness.d.ts.map +1 -0
  133. package/dest/cmds/pxe/get_l1_to_l2_message_witness.js +11 -0
  134. package/dest/cmds/pxe/get_logs.d.ts +4 -0
  135. package/dest/cmds/pxe/get_logs.d.ts.map +1 -0
  136. package/dest/cmds/pxe/get_logs.js +51 -0
  137. package/dest/cmds/pxe/get_node_info.d.ts +3 -0
  138. package/dest/cmds/pxe/get_node_info.d.ts.map +1 -0
  139. package/dest/cmds/pxe/get_node_info.js +61 -0
  140. package/dest/cmds/pxe/get_pxe_info.d.ts +3 -0
  141. package/dest/cmds/pxe/get_pxe_info.d.ts.map +1 -0
  142. package/dest/cmds/pxe/get_pxe_info.js +11 -0
  143. package/dest/cmds/pxe/index.d.ts +4 -0
  144. package/dest/cmds/pxe/index.d.ts.map +1 -0
  145. package/dest/cmds/pxe/index.js +55 -0
  146. package/dest/utils/aztec.d.ts +68 -0
  147. package/dest/utils/aztec.d.ts.map +1 -0
  148. package/dest/utils/aztec.js +174 -0
  149. package/dest/utils/commands.d.ts +143 -0
  150. package/dest/utils/commands.d.ts.map +1 -0
  151. package/dest/utils/commands.js +303 -0
  152. package/dest/utils/encoding.d.ts +15 -0
  153. package/dest/utils/encoding.d.ts.map +1 -0
  154. package/dest/utils/encoding.js +103 -0
  155. package/dest/utils/github.d.ts +4 -0
  156. package/dest/utils/github.d.ts.map +1 -0
  157. package/dest/utils/github.js +3 -0
  158. package/dest/utils/index.d.ts +5 -0
  159. package/dest/utils/index.d.ts.map +1 -0
  160. package/dest/utils/index.js +4 -0
  161. package/dest/utils/inspect.d.ts +17 -0
  162. package/dest/utils/inspect.d.ts.map +1 -0
  163. package/dest/utils/inspect.js +177 -0
  164. package/package.json +125 -0
  165. package/src/cmds/contracts/index.ts +34 -0
  166. package/src/cmds/contracts/inspect_contract.ts +51 -0
  167. package/src/cmds/contracts/parse_parameter_struct.ts +27 -0
  168. package/src/cmds/devnet/bootstrap_network.ts +318 -0
  169. package/src/cmds/devnet/faucet.ts +33 -0
  170. package/src/cmds/devnet/index.ts +60 -0
  171. package/src/cmds/infrastructure/index.ts +55 -0
  172. package/src/cmds/infrastructure/sequencers.ts +103 -0
  173. package/src/cmds/infrastructure/setup_l2_contract.ts +47 -0
  174. package/src/cmds/l1/advance_epoch.ts +12 -0
  175. package/src/cmds/l1/assume_proven_through.ts +19 -0
  176. package/src/cmds/l1/bridge_erc20.ts +52 -0
  177. package/src/cmds/l1/create_l1_account.ts +17 -0
  178. package/src/cmds/l1/deploy_l1_contracts.ts +65 -0
  179. package/src/cmds/l1/deploy_l1_verifier.ts +105 -0
  180. package/src/cmds/l1/deploy_new_rollup.ts +58 -0
  181. package/src/cmds/l1/get_l1_addresses.ts +30 -0
  182. package/src/cmds/l1/get_l1_balance.ts +44 -0
  183. package/src/cmds/l1/governance_utils.ts +187 -0
  184. package/src/cmds/l1/index.ts +558 -0
  185. package/src/cmds/l1/prover_stats.ts +202 -0
  186. package/src/cmds/l1/update_l1_validators.ts +238 -0
  187. package/src/cmds/misc/compute_selector.ts +7 -0
  188. package/src/cmds/misc/example_contracts.ts +12 -0
  189. package/src/cmds/misc/generate_bootnode_enr.ts +12 -0
  190. package/src/cmds/misc/generate_p2p_private_key.ts +10 -0
  191. package/src/cmds/misc/generate_secret_and_hash.ts +15 -0
  192. package/src/cmds/misc/generate_secret_key.ts +5 -0
  193. package/src/cmds/misc/index.ts +92 -0
  194. package/src/cmds/misc/setup_contracts.ts +40 -0
  195. package/src/cmds/misc/update/common.ts +16 -0
  196. package/src/cmds/misc/update/github.ts +3 -0
  197. package/src/cmds/misc/update/noir.ts +57 -0
  198. package/src/cmds/misc/update/npm.ts +154 -0
  199. package/src/cmds/misc/update/utils.ts +50 -0
  200. package/src/cmds/misc/update.ts +78 -0
  201. package/src/cmds/pxe/add_contract.ts +41 -0
  202. package/src/cmds/pxe/block_number.ts +9 -0
  203. package/src/cmds/pxe/get_account.ts +16 -0
  204. package/src/cmds/pxe/get_accounts.ts +35 -0
  205. package/src/cmds/pxe/get_block.ts +10 -0
  206. package/src/cmds/pxe/get_contract_data.ts +51 -0
  207. package/src/cmds/pxe/get_current_base_fee.ts +9 -0
  208. package/src/cmds/pxe/get_l1_to_l2_message_witness.ts +25 -0
  209. package/src/cmds/pxe/get_logs.ts +66 -0
  210. package/src/cmds/pxe/get_node_info.ts +71 -0
  211. package/src/cmds/pxe/get_pxe_info.ts +13 -0
  212. package/src/cmds/pxe/index.ts +170 -0
  213. package/src/utils/aztec.ts +250 -0
  214. package/src/utils/commands.ts +384 -0
  215. package/src/utils/encoding.ts +117 -0
  216. package/src/utils/github.ts +3 -0
  217. package/src/utils/index.ts +4 -0
  218. package/src/utils/inspect.ts +208 -0
@@ -0,0 +1,196 @@
1
+ import { getDeployedTestAccountsWallets } from '@aztec/accounts/testing';
2
+ import { BatchCall, Fr, L1FeeJuicePortalManager, createCompatibleClient, retryUntil } from '@aztec/aztec.js';
3
+ import { FEE_FUNDING_FOR_TESTER_ACCOUNT } from '@aztec/constants';
4
+ import { createEthereumChain, createL1Clients, deployL1Contract } from '@aztec/ethereum';
5
+ import { getContract } from 'viem';
6
+ import { mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
7
+ const waitOpts = {
8
+ timeout: 120,
9
+ provenTimeout: 4800,
10
+ interval: 1
11
+ };
12
+ export async function bootstrapNetwork(pxeUrl, l1Urls, l1ChainId, l1PrivateKey, l1Mnemonic, addressIndex, json, log, debugLog) {
13
+ const pxe = await createCompatibleClient(pxeUrl, debugLog);
14
+ const [wallet] = await getDeployedTestAccountsWallets(pxe);
15
+ const l1Clients = createL1Clients(l1Urls, l1PrivateKey ? privateKeyToAccount(l1PrivateKey) : // Note that this account needs to be funded on L1 !
16
+ mnemonicToAccount(l1Mnemonic, {
17
+ addressIndex
18
+ }), createEthereumChain(l1Urls, +l1ChainId).chainInfo);
19
+ const { erc20Address, portalAddress } = await deployERC20(l1Clients);
20
+ const { token, bridge } = await deployToken(wallet, portalAddress);
21
+ await initPortal(pxe, l1Clients, erc20Address, portalAddress, bridge.address);
22
+ const fpcAdmin = wallet.getAddress();
23
+ const fpc = await deployFPC(wallet, token.address, fpcAdmin);
24
+ const counter = await deployCounter(wallet);
25
+ await fundFPC(counter.address, wallet, l1Clients, fpc.address, debugLog);
26
+ if (json) {
27
+ log(JSON.stringify({
28
+ devCoinL1: erc20Address.toString(),
29
+ devCoinPortalL1: portalAddress.toString(),
30
+ devCoin: {
31
+ address: token.address.toString(),
32
+ initHash: token.initHash.toString(),
33
+ salt: token.salt.toString()
34
+ },
35
+ devCoinBridge: {
36
+ address: bridge.address.toString(),
37
+ initHash: bridge.initHash.toString(),
38
+ salt: bridge.salt.toString()
39
+ },
40
+ devCoinFpc: {
41
+ address: fpc.address.toString(),
42
+ initHash: fpc.initHash.toString(),
43
+ salt: fpc.salt.toString()
44
+ },
45
+ counter: {
46
+ address: counter.address.toString(),
47
+ initHash: counter.initHash.toString(),
48
+ salt: counter.salt.toString()
49
+ }
50
+ }, null, 2));
51
+ } else {
52
+ log(`DevCoin L1: ${erc20Address}`);
53
+ log(`DevCoin L1 Portal: ${portalAddress}`);
54
+ log(`DevCoin L2: ${token.address}`);
55
+ log(`DevCoin L2 init hash: ${token.initHash}`);
56
+ log(`DevCoin L2 salt: ${token.salt}`);
57
+ log(`DevCoin L2 Bridge: ${bridge.address}`);
58
+ log(`DevCoin L2 Bridge init hash: ${bridge.initHash}`);
59
+ log(`DevCoin L2 Bridge salt: ${bridge.salt}`);
60
+ log(`DevCoin FPC: ${fpc.address}`);
61
+ log(`DevCoin FPC init hash: ${fpc.initHash}`);
62
+ log(`DevCoin FPC salt: ${fpc.salt}`);
63
+ log(`Counter: ${counter.address}`);
64
+ log(`Counter init hash: ${counter.initHash}`);
65
+ log(`Counter salt: ${counter.salt}`);
66
+ }
67
+ }
68
+ /**
69
+ * Step 1. Deploy the L1 contracts, but don't initialize
70
+ */ async function deployERC20({ walletClient, publicClient }) {
71
+ const { TestERC20Abi, TestERC20Bytecode, TokenPortalAbi, TokenPortalBytecode } = await import('@aztec/l1-artifacts');
72
+ const erc20 = {
73
+ contractAbi: TestERC20Abi,
74
+ contractBytecode: TestERC20Bytecode
75
+ };
76
+ const portal = {
77
+ contractAbi: TokenPortalAbi,
78
+ contractBytecode: TokenPortalBytecode
79
+ };
80
+ const { address: erc20Address } = await deployL1Contract(walletClient, publicClient, erc20.contractAbi, erc20.contractBytecode, [
81
+ 'DevCoin',
82
+ 'DEV',
83
+ walletClient.account.address
84
+ ]);
85
+ const { address: portalAddress } = await deployL1Contract(walletClient, publicClient, portal.contractAbi, portal.contractBytecode);
86
+ return {
87
+ erc20Address,
88
+ portalAddress
89
+ };
90
+ }
91
+ /**
92
+ * Step 2. Deploy the L2 contracts
93
+ */ async function deployToken(wallet, l1Portal) {
94
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
95
+ // @ts-ignore - Importing noir-contracts.js even in devDeps results in a circular dependency error. Need to ignore because this line doesn't cause an error in a dev environment
96
+ const { TokenContract } = await import('@aztec/noir-contracts.js/Token');
97
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
98
+ // @ts-ignore - Importing noir-contracts.js even in devDeps results in a circular dependency error. Need to ignore because this line doesn't cause an error in a dev environment
99
+ const { TokenBridgeContract } = await import('@aztec/noir-contracts.js/TokenBridge');
100
+ const devCoin = await TokenContract.deploy(wallet, wallet.getAddress(), 'DevCoin', 'DEV', 18).send({
101
+ universalDeploy: true
102
+ }).deployed(waitOpts);
103
+ const bridge = await TokenBridgeContract.deploy(wallet, devCoin.address, l1Portal).send({
104
+ universalDeploy: true
105
+ }).deployed(waitOpts);
106
+ await new BatchCall(wallet, [
107
+ await devCoin.methods.set_minter(bridge.address, true).request(),
108
+ await devCoin.methods.set_admin(bridge.address).request()
109
+ ]).send().wait(waitOpts);
110
+ return {
111
+ token: {
112
+ address: devCoin.address,
113
+ initHash: devCoin.instance.initializationHash,
114
+ salt: devCoin.instance.salt
115
+ },
116
+ bridge: {
117
+ address: bridge.address,
118
+ initHash: bridge.instance.initializationHash,
119
+ salt: bridge.instance.salt
120
+ }
121
+ };
122
+ }
123
+ /**
124
+ * Step 3. Initialize DevCoin's L1 portal
125
+ */ async function initPortal(pxe, { walletClient, publicClient }, erc20, portal, bridge) {
126
+ const { TokenPortalAbi } = await import('@aztec/l1-artifacts');
127
+ const { l1ContractAddresses: { registryAddress } } = await pxe.getNodeInfo();
128
+ const contract = getContract({
129
+ abi: TokenPortalAbi,
130
+ address: portal.toString(),
131
+ client: walletClient
132
+ });
133
+ const hash = await contract.write.initialize([
134
+ registryAddress.toString(),
135
+ erc20.toString(),
136
+ bridge.toString()
137
+ ]);
138
+ await publicClient.waitForTransactionReceipt({
139
+ hash
140
+ });
141
+ }
142
+ async function deployFPC(wallet, tokenAddress, admin) {
143
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
144
+ // @ts-ignore - Importing noir-contracts.js even in devDeps results in a circular dependency error. Need to ignore because this line doesn't cause an error in a dev environment
145
+ const { FPCContract } = await import('@aztec/noir-contracts.js/FPC');
146
+ const fpc = await FPCContract.deploy(wallet, tokenAddress, admin).send({
147
+ universalDeploy: true
148
+ }).deployed(waitOpts);
149
+ const info = {
150
+ address: fpc.address,
151
+ initHash: fpc.instance.initializationHash,
152
+ salt: fpc.instance.salt
153
+ };
154
+ return info;
155
+ }
156
+ async function deployCounter(wallet) {
157
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
158
+ // @ts-ignore - Importing noir-contracts.js even in devDeps results in a circular dependency error. Need to ignore because this line doesn't cause an error in a dev environment
159
+ const { CounterContract } = await import('@aztec/noir-contracts.js/Counter');
160
+ const counter = await CounterContract.deploy(wallet, 1, wallet.getAddress()).send({
161
+ universalDeploy: true
162
+ }).deployed(waitOpts);
163
+ const info = {
164
+ address: counter.address,
165
+ initHash: counter.instance.initializationHash,
166
+ salt: counter.instance.salt
167
+ };
168
+ return info;
169
+ }
170
+ // NOTE: Disabling for now in order to get devnet running
171
+ async function fundFPC(counterAddress, wallet, l1Clients, fpcAddress, debugLog) {
172
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
173
+ // @ts-ignore - Importing noir-contracts.js even in devDeps results in a circular dependency error. Need to ignore because this line doesn't cause an error in a dev environment
174
+ const { FeeJuiceContract } = await import('@aztec/noir-contracts.js/FeeJuice');
175
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
176
+ // @ts-ignore - Importing noir-contracts.js even in devDeps results in a circular dependency error. Need to ignore because this line doesn't cause an error in a dev environment
177
+ const { CounterContract } = await import('@aztec/noir-contracts.js/Counter');
178
+ const { protocolContractAddresses: { feeJuice } } = await wallet.getPXEInfo();
179
+ const feeJuiceContract = await FeeJuiceContract.at(feeJuice, wallet);
180
+ const feeJuicePortal = await L1FeeJuicePortalManager.new(wallet, l1Clients.publicClient, l1Clients.walletClient, debugLog);
181
+ const amount = FEE_FUNDING_FOR_TESTER_ACCOUNT;
182
+ const { claimAmount, claimSecret, messageLeafIndex, messageHash } = await feeJuicePortal.bridgeTokensPublic(fpcAddress, amount, true);
183
+ await retryUntil(async ()=>await wallet.isL1ToL2MessageSynced(Fr.fromHexString(messageHash)), 'message sync', 600, 1);
184
+ const counter = await CounterContract.at(counterAddress, wallet);
185
+ debugLog.info('Incrementing Counter');
186
+ // TODO (alexg) remove this once sequencer builds blocks continuously
187
+ // advance the chain
188
+ await counter.methods.increment(wallet.getAddress(), wallet.getAddress()).send().wait(waitOpts);
189
+ await counter.methods.increment(wallet.getAddress(), wallet.getAddress()).send().wait(waitOpts);
190
+ debugLog.info('Claiming FPC');
191
+ await feeJuiceContract.methods.claim(fpcAddress, claimAmount, claimSecret, messageLeafIndex).send().wait({
192
+ ...waitOpts,
193
+ proven: true
194
+ });
195
+ debugLog.info('Finished claiming FPC');
196
+ }
@@ -0,0 +1,4 @@
1
+ import type { EthAddress } from '@aztec/foundation/eth-address';
2
+ import type { LogFn } from '@aztec/foundation/log';
3
+ export declare function dripFaucet(faucetUrl: string, asset: string, account: EthAddress, json: boolean, log: LogFn): Promise<void>;
4
+ //# sourceMappingURL=faucet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faucet.d.ts","sourceRoot":"","sources":["../../../src/cmds/devnet/faucet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAInD,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,KAAK,GACT,OAAO,CAAC,IAAI,CAAC,CAqBf"}
@@ -0,0 +1,26 @@
1
+ import { prettyPrintJSON } from '../../utils/commands.js';
2
+ export async function dripFaucet(faucetUrl, asset, account, json, log) {
3
+ const url = new URL(`/drip/${account.toString()}`, faucetUrl);
4
+ url.searchParams.set('asset', asset);
5
+ const res = await fetch(url);
6
+ if (res.status === 200) {
7
+ if (json) {
8
+ log(prettyPrintJSON({
9
+ ok: true
10
+ }));
11
+ } else {
12
+ log(`Dripped ${asset} for ${account.toString()}`);
13
+ }
14
+ } else {
15
+ if (json) {
16
+ log(prettyPrintJSON({
17
+ ok: false
18
+ }));
19
+ } else if (res.status === 429) {
20
+ log(`Rate limited when dripping ${asset} for ${account.toString()}`);
21
+ } else {
22
+ log(`Failed to drip ${asset} for ${account.toString()}`);
23
+ }
24
+ process.exit(1);
25
+ }
26
+ }
@@ -0,0 +1,4 @@
1
+ import type { LogFn, Logger } from '@aztec/foundation/log';
2
+ import type { Command } from 'commander';
3
+ export declare function injectCommands(program: Command, log: LogFn, debugLogger: Logger): Command;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmds/devnet/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,WAqD/E"}
@@ -0,0 +1,14 @@
1
+ import { ETHEREUM_HOSTS, l1ChainIdOption, parseEthereumAddress, pxeOption } from '../../utils/commands.js';
2
+ export function injectCommands(program, log, debugLogger) {
3
+ program.command('bootstrap-network').description('Bootstrap a new network').addOption(pxeOption).addOption(l1ChainIdOption).requiredOption('--l1-rpc-urls <string>', 'List of Ethereum host URLs. Chain identifiers localhost and testnet can be used (comma separated)', (arg)=>arg.split(','), [
4
+ ETHEREUM_HOSTS
5
+ ]).option('--l1-private-key <string>', 'The private key to use for deployment', process.env.PRIVATE_KEY).option('-m, --mnemonic <string>', 'The mnemonic to use in deployment', 'test test test test test test test test test test test junk').option('-ai, --address-index <number>', 'The address index to use when calculating an address', (arg)=>BigInt(arg), 0n).option('--json', 'Output the result as JSON').action(async (options)=>{
6
+ const { bootstrapNetwork } = await import('./bootstrap_network.js');
7
+ await bootstrapNetwork(options[pxeOption.attributeName()], options.l1RpcUrls, options[l1ChainIdOption.attributeName()], options.l1PrivateKey, options.mnemonic, options.addressIndex, options.json, log, debugLogger);
8
+ });
9
+ program.command('drip-faucet').description('Drip the faucet').requiredOption('-u, --faucet-url <string>', 'Url of the faucet', 'http://localhost:8082').requiredOption('-t, --token <string>', 'The asset to drip', 'eth').requiredOption('-a, --address <string>', 'The Ethereum address to drip to', parseEthereumAddress).option('--json', 'Output the result as JSON').action(async (options)=>{
10
+ const { dripFaucet } = await import('./faucet.js');
11
+ await dripFaucet(options.faucetUrl, options.token, options.address, options.json, log);
12
+ });
13
+ return program;
14
+ }
@@ -0,0 +1,4 @@
1
+ import type { LogFn, Logger } from '@aztec/foundation/log';
2
+ import type { Command } from 'commander';
3
+ export declare function injectCommands(program: Command, log: LogFn, debugLogger: Logger): Command;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmds/infrastructure/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,WAgD/E"}
@@ -0,0 +1,24 @@
1
+ import { ETHEREUM_HOSTS, l1ChainIdOption, parseOptionalInteger, pxeOption } from '../../utils/commands.js';
2
+ export function injectCommands(program, log, debugLogger) {
3
+ program.command('setup-protocol-contracts').description('Bootstrap the blockchain by initializing all the protocol contracts').addOption(pxeOption).option('--testAccounts', 'Deploy funded test accounts.').option('--json', 'Output the contract addresses in JSON format').option('--skipProofWait', "Don't wait for proofs to land.").action(async (options)=>{
4
+ const { setupL2Contracts } = await import('./setup_l2_contract.js');
5
+ await setupL2Contracts(options.rpcUrl, options.testAccounts, options.json, options.skipProofWait, log);
6
+ });
7
+ program.command('sequencers').argument('<command>', 'Command to run: list, add, remove, who-next').argument('[who]', 'Who to add/remove').description('Manages or queries registered sequencers on the L1 rollup contract.').requiredOption('--l1-rpc-urls <string>', 'List of Ethereum host URLs. Chain identifiers localhost and testnet can be used (comma separated)', (arg)=>arg.split(','), [
8
+ ETHEREUM_HOSTS
9
+ ]).option('-m, --mnemonic <string>', 'The mnemonic for the sender of the tx', 'test test test test test test test test test test test junk').option('--block-number <number>', 'Block number to query next sequencer for', parseOptionalInteger).addOption(pxeOption).addOption(l1ChainIdOption).action(async (command, who, options)=>{
10
+ const { sequencers } = await import('./sequencers.js');
11
+ await sequencers({
12
+ command: command,
13
+ who,
14
+ mnemonic: options.mnemonic,
15
+ rpcUrl: options.rpcUrl,
16
+ l1RpcUrls: options.l1RpcUrls.split(','),
17
+ chainId: options.l1ChainId,
18
+ blockNumber: options.blockNumber,
19
+ log,
20
+ debugLogger
21
+ });
22
+ });
23
+ return program;
24
+ }
@@ -0,0 +1,13 @@
1
+ import type { LogFn, Logger } from '@aztec/foundation/log';
2
+ export declare function sequencers(opts: {
3
+ command: 'list' | 'add' | 'remove' | 'who-next';
4
+ who?: string;
5
+ mnemonic?: string;
6
+ rpcUrl: string;
7
+ l1RpcUrls: string[];
8
+ chainId: number;
9
+ blockNumber?: number;
10
+ log: LogFn;
11
+ debugLogger: Logger;
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=sequencers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequencers.d.ts","sourceRoot":"","sources":["../../../src/cmds/infrastructure/sequencers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAM3D,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,CAAC;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,KAAK,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB,iBAoFA"}
@@ -0,0 +1,93 @@
1
+ import { createCompatibleClient } from '@aztec/aztec.js';
2
+ import { createEthereumChain, getL1ContractsConfigEnvVars } from '@aztec/ethereum';
3
+ import { RollupAbi, TestERC20Abi } from '@aztec/l1-artifacts';
4
+ import { createPublicClient, createWalletClient, fallback, getContract, http } from 'viem';
5
+ import { mnemonicToAccount } from 'viem/accounts';
6
+ export async function sequencers(opts) {
7
+ const { command, who: maybeWho, mnemonic, rpcUrl, l1RpcUrls, chainId, log, debugLogger } = opts;
8
+ const client = await createCompatibleClient(rpcUrl, debugLogger);
9
+ const { l1ContractAddresses } = await client.getNodeInfo();
10
+ const chain = createEthereumChain(l1RpcUrls, chainId);
11
+ const publicClient = createPublicClient({
12
+ chain: chain.chainInfo,
13
+ transport: fallback(l1RpcUrls.map((url)=>http(url)))
14
+ });
15
+ const walletClient = mnemonic ? createWalletClient({
16
+ account: mnemonicToAccount(mnemonic),
17
+ chain: chain.chainInfo,
18
+ transport: fallback(l1RpcUrls.map((url)=>http(url)))
19
+ }) : undefined;
20
+ const rollup = getContract({
21
+ address: l1ContractAddresses.rollupAddress.toString(),
22
+ abi: RollupAbi,
23
+ client: publicClient
24
+ });
25
+ const writeableRollup = walletClient ? getContract({
26
+ address: l1ContractAddresses.rollupAddress.toString(),
27
+ abi: RollupAbi,
28
+ client: walletClient
29
+ }) : undefined;
30
+ const who = maybeWho ?? walletClient?.account.address.toString();
31
+ if (command === 'list') {
32
+ const sequencers = await rollup.read.getAttesters();
33
+ if (sequencers.length === 0) {
34
+ log(`No sequencers registered on rollup`);
35
+ } else {
36
+ log(`Registered sequencers on rollup:`);
37
+ for (const sequencer of sequencers){
38
+ log(' ' + sequencer.toString());
39
+ }
40
+ }
41
+ } else if (command === 'add') {
42
+ if (!who || !writeableRollup || !walletClient) {
43
+ throw new Error(`Missing sequencer address`);
44
+ }
45
+ log(`Adding ${who} as sequencer`);
46
+ const stakingAsset = getContract({
47
+ address: await rollup.read.getStakingAsset(),
48
+ abi: TestERC20Abi,
49
+ client: walletClient
50
+ });
51
+ const config = getL1ContractsConfigEnvVars();
52
+ await Promise.all([
53
+ await stakingAsset.write.mint([
54
+ walletClient.account.address,
55
+ config.minimumStake
56
+ ], {}),
57
+ await stakingAsset.write.approve([
58
+ rollup.address,
59
+ config.minimumStake
60
+ ], {})
61
+ ].map((txHash)=>publicClient.waitForTransactionReceipt({
62
+ hash: txHash
63
+ })));
64
+ const hash = await writeableRollup.write.deposit([
65
+ who,
66
+ who,
67
+ who,
68
+ config.minimumStake
69
+ ]);
70
+ await publicClient.waitForTransactionReceipt({
71
+ hash
72
+ });
73
+ log(`Added in tx ${hash}`);
74
+ } else if (command === 'remove') {
75
+ if (!who || !writeableRollup) {
76
+ throw new Error(`Missing sequencer address`);
77
+ }
78
+ log(`Removing ${who} as sequencer`);
79
+ const hash = await writeableRollup.write.initiateWithdraw([
80
+ who,
81
+ who
82
+ ]);
83
+ await publicClient.waitForTransactionReceipt({
84
+ hash
85
+ });
86
+ log(`Removed in tx ${hash}`);
87
+ } else if (command === 'who-next') {
88
+ const next = await rollup.read.getCurrentProposer();
89
+ log(`Sequencer expected to build is ${next}`);
90
+ } else {
91
+ throw new Error(`Unknown command ${command}`);
92
+ }
93
+ }
@@ -0,0 +1,3 @@
1
+ import type { LogFn } from '@aztec/foundation/log';
2
+ export declare function setupL2Contracts(rpcUrl: string, testAccounts: boolean, json: boolean, skipProofWait: boolean, log: LogFn): Promise<void>;
3
+ //# sourceMappingURL=setup_l2_contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup_l2_contract.d.ts","sourceRoot":"","sources":["../../../src/cmds/infrastructure/setup_l2_contract.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAKnD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,OAAO,EACrB,IAAI,EAAE,OAAO,EACb,aAAa,EAAE,OAAO,EACtB,GAAG,EAAE,KAAK,iBAiCX"}
@@ -0,0 +1,43 @@
1
+ import { deployFundedSchnorrAccounts, getInitialTestAccounts } from '@aztec/accounts/testing';
2
+ import { SignerlessWallet, createPXEClient, makeFetch } from '@aztec/aztec.js';
3
+ import { jsonStringify } from '@aztec/foundation/json-rpc';
4
+ import { ProtocolContractAddress } from '@aztec/protocol-contracts';
5
+ import { setupCanonicalL2FeeJuice } from '../misc/setup_contracts.js';
6
+ export async function setupL2Contracts(rpcUrl, testAccounts, json, skipProofWait, log) {
7
+ const waitOpts = {
8
+ timeout: 180,
9
+ interval: 1,
10
+ proven: !skipProofWait,
11
+ provenTimeout: 600
12
+ };
13
+ log('setupL2Contracts: Wait options' + jsonStringify(waitOpts));
14
+ log('setupL2Contracts: Creating PXE client...');
15
+ const pxe = createPXEClient(rpcUrl, {}, makeFetch([
16
+ 1,
17
+ 1,
18
+ 1,
19
+ 1,
20
+ 1
21
+ ], false));
22
+ const wallet = new SignerlessWallet(pxe);
23
+ log('setupL2Contracts: Getting fee juice portal address...');
24
+ // Deploy Fee Juice
25
+ const feeJuicePortalAddress = (await wallet.getNodeInfo()).l1ContractAddresses.feeJuicePortalAddress;
26
+ log('setupL2Contracts: Setting up fee juice portal...');
27
+ await setupCanonicalL2FeeJuice(wallet, feeJuicePortalAddress, waitOpts, log);
28
+ let deployedAccounts = [];
29
+ if (testAccounts) {
30
+ log('setupL2Contracts: Deploying test accounts...');
31
+ deployedAccounts = await getInitialTestAccounts();
32
+ await deployFundedSchnorrAccounts(pxe, deployedAccounts, waitOpts);
33
+ }
34
+ if (json) {
35
+ const toPrint = {
36
+ ...ProtocolContractAddress
37
+ };
38
+ deployedAccounts.forEach((a, i)=>{
39
+ toPrint[`testAccount${i}`] = a.address;
40
+ });
41
+ log(JSON.stringify(toPrint, null, 2));
42
+ }
43
+ }
@@ -0,0 +1,3 @@
1
+ import type { LogFn } from '@aztec/foundation/log';
2
+ export declare function advanceEpoch(l1RpcUrls: string[], rpcUrl: string, log: LogFn): Promise<void>;
3
+ //# sourceMappingURL=advance_epoch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advance_epoch.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/advance_epoch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,iBAQjF"}
@@ -0,0 +1,10 @@
1
+ import { CheatCodes, createPXEClient, makeFetch } from '@aztec/aztec.js';
2
+ export async function advanceEpoch(l1RpcUrls, rpcUrl, log) {
3
+ const pxe = createPXEClient(rpcUrl, {}, makeFetch([], true));
4
+ const rollupAddress = await pxe.getNodeInfo().then((i)=>i.l1ContractAddresses.rollupAddress);
5
+ const cheat = CheatCodes.createRollup(l1RpcUrls, {
6
+ rollupAddress
7
+ });
8
+ await cheat.advanceToNextEpoch();
9
+ log(`Warped time to advance to next epoch`);
10
+ }
@@ -0,0 +1,3 @@
1
+ import type { LogFn } from '@aztec/foundation/log';
2
+ export declare function assumeProvenThrough(blockNumberOrLatest: number | undefined, l1RpcUrls: string[], rpcUrl: string, log: LogFn): Promise<void>;
3
+ //# sourceMappingURL=assume_proven_through.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assume_proven_through.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/assume_proven_through.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,wBAAsB,mBAAmB,CACvC,mBAAmB,EAAE,MAAM,GAAG,SAAS,EACvC,SAAS,EAAE,MAAM,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,KAAK,iBAWX"}
@@ -0,0 +1,12 @@
1
+ import { EthCheatCodes, RollupCheatCodes, createPXEClient, makeFetch } from '@aztec/aztec.js';
2
+ export async function assumeProvenThrough(blockNumberOrLatest, l1RpcUrls, rpcUrl, log) {
3
+ const pxe = createPXEClient(rpcUrl, {}, makeFetch([], true));
4
+ const rollupAddress = await pxe.getNodeInfo().then((i)=>i.l1ContractAddresses.rollupAddress);
5
+ const blockNumber = blockNumberOrLatest ?? await pxe.getBlockNumber();
6
+ const ethCheatCode = new EthCheatCodes(l1RpcUrls);
7
+ const rollupCheatCodes = new RollupCheatCodes(ethCheatCode, {
8
+ rollupAddress
9
+ });
10
+ await rollupCheatCodes.markAsProven(blockNumber);
11
+ log(`Assumed proven through block ${blockNumber}`);
12
+ }
@@ -0,0 +1,4 @@
1
+ import { type AztecAddress, type EthAddress } from '@aztec/aztec.js';
2
+ import type { LogFn, Logger } from '@aztec/foundation/log';
3
+ export declare function bridgeERC20(amount: bigint, recipient: AztecAddress, l1RpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, tokenAddress: EthAddress, portalAddress: EthAddress, privateTransfer: boolean, mint: boolean, json: boolean, log: LogFn, debugLogger: Logger): Promise<void>;
4
+ //# sourceMappingURL=bridge_erc20.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge_erc20.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/bridge_erc20.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAqC,MAAM,iBAAiB,CAAC;AAExG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI3D,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,UAAU,EACxB,aAAa,EAAE,UAAU,EACzB,eAAe,EAAE,OAAO,EACxB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBAgCpB"}
@@ -0,0 +1,31 @@
1
+ import { L1ToL2TokenPortalManager } from '@aztec/aztec.js';
2
+ import { createEthereumChain, createL1Clients } from '@aztec/ethereum';
3
+ import { prettyPrintJSON } from '../../utils/commands.js';
4
+ export async function bridgeERC20(amount, recipient, l1RpcUrls, chainId, privateKey, mnemonic, tokenAddress, portalAddress, privateTransfer, mint, json, log, debugLogger) {
5
+ // Prepare L1 client
6
+ const chain = createEthereumChain(l1RpcUrls, chainId);
7
+ const { publicClient, walletClient } = createL1Clients(chain.rpcUrls, privateKey ?? mnemonic, chain.chainInfo);
8
+ // Setup portal manager
9
+ const manager = new L1ToL2TokenPortalManager(portalAddress, tokenAddress, publicClient, walletClient, debugLogger);
10
+ let claimSecret;
11
+ let messageHash;
12
+ if (privateTransfer) {
13
+ ({ claimSecret, messageHash } = await manager.bridgeTokensPrivate(recipient, amount, mint));
14
+ } else {
15
+ ({ claimSecret, messageHash } = await manager.bridgeTokensPublic(recipient, amount, mint));
16
+ }
17
+ if (json) {
18
+ log(prettyPrintJSON({
19
+ claimAmount: amount,
20
+ claimSecret: claimSecret
21
+ }));
22
+ } else {
23
+ if (mint) {
24
+ log(`Minted ${amount} tokens on L1 and pushed to L2 portal`);
25
+ } else {
26
+ log(`Bridged ${amount} tokens to L2 portal`);
27
+ }
28
+ log(`claimAmount=${amount},claimSecret=${claimSecret}\n,messageHash=${messageHash}`);
29
+ log(`Note: You need to wait for two L2 blocks before pulling them from the L2 side`);
30
+ }
31
+ }
@@ -0,0 +1,3 @@
1
+ import type { LogFn } from '@aztec/foundation/log';
2
+ export declare function createL1Account(json: boolean, log: LogFn): void;
3
+ //# sourceMappingURL=create_l1_account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_l1_account.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/create_l1_account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAMnD,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,QAUxD"}
@@ -0,0 +1,15 @@
1
+ import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
2
+ import { prettyPrintJSON } from '../../utils/commands.js';
3
+ export function createL1Account(json, log) {
4
+ const privateKey = generatePrivateKey();
5
+ const account = privateKeyToAccount(privateKey);
6
+ if (json) {
7
+ log(prettyPrintJSON({
8
+ privateKey,
9
+ address: account.address
10
+ }));
11
+ } else {
12
+ log(`Private Key: ${privateKey}`);
13
+ log(`Address: ${account.address}`);
14
+ }
15
+ }
@@ -0,0 +1,4 @@
1
+ import type { EthAddress } from '@aztec/foundation/eth-address';
2
+ import type { LogFn, Logger } from '@aztec/foundation/log';
3
+ export declare function deployL1Contracts(rpcUrls: string[], chainId: number, privateKey: string | undefined, mnemonic: string, mnemonicIndex: number, salt: number | undefined, testAccounts: boolean, acceleratedTestDeployments: boolean, json: boolean, initialValidators: EthAddress[], log: LogFn, debugLogger: Logger): Promise<void>;
4
+ //# sourceMappingURL=deploy_l1_contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy_l1_contracts.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/deploy_l1_contracts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAK3D,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,YAAY,EAAE,OAAO,EACrB,0BAA0B,EAAE,OAAO,EACnC,IAAI,EAAE,OAAO,EACb,iBAAiB,EAAE,UAAU,EAAE,EAC/B,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBA4CpB"}
@@ -0,0 +1,29 @@
1
+ import { getInitialTestAccounts } from '@aztec/accounts/testing';
2
+ import { getL1ContractsConfigEnvVars } from '@aztec/ethereum';
3
+ import { getGenesisValues } from '@aztec/world-state/testing';
4
+ import { deployAztecContracts } from '../../utils/aztec.js';
5
+ export async function deployL1Contracts(rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, salt, testAccounts, acceleratedTestDeployments, json, initialValidators, log, debugLogger) {
6
+ const config = getL1ContractsConfigEnvVars();
7
+ const initialFundedAccounts = testAccounts ? await getInitialTestAccounts() : [];
8
+ const { genesisBlockHash, genesisArchiveRoot } = await getGenesisValues(initialFundedAccounts.map((a)=>a.address));
9
+ const { l1ContractAddresses } = await deployAztecContracts(rpcUrls, chainId, privateKey, mnemonic, mnemonicIndex, salt, initialValidators, genesisArchiveRoot, genesisBlockHash, acceleratedTestDeployments, config, debugLogger);
10
+ if (json) {
11
+ log(JSON.stringify(Object.fromEntries(Object.entries(l1ContractAddresses).map(([k, v])=>[
12
+ k,
13
+ v.toString()
14
+ ])), null, 2));
15
+ } else {
16
+ log(`Rollup Address: ${l1ContractAddresses.rollupAddress.toString()}`);
17
+ log(`Registry Address: ${l1ContractAddresses.registryAddress.toString()}`);
18
+ log(`L1 -> L2 Inbox Address: ${l1ContractAddresses.inboxAddress.toString()}`);
19
+ log(`L2 -> L1 Outbox Address: ${l1ContractAddresses.outboxAddress.toString()}`);
20
+ log(`Fee Juice Address: ${l1ContractAddresses.feeJuiceAddress.toString()}`);
21
+ log(`Staking Asset Address: ${l1ContractAddresses.stakingAssetAddress.toString()}`);
22
+ log(`Fee Juice Portal Address: ${l1ContractAddresses.feeJuicePortalAddress.toString()}`);
23
+ log(`CoinIssuer Address: ${l1ContractAddresses.coinIssuerAddress.toString()}`);
24
+ log(`RewardDistributor Address: ${l1ContractAddresses.rewardDistributorAddress.toString()}`);
25
+ log(`GovernanceProposer Address: ${l1ContractAddresses.governanceProposerAddress.toString()}`);
26
+ log(`Governance Address: ${l1ContractAddresses.governanceAddress.toString()}`);
27
+ log(`SlashFactory Address: ${l1ContractAddresses.slashFactoryAddress?.toString()}`);
28
+ }
29
+ }
@@ -0,0 +1,5 @@
1
+ import type { LogFn, Logger } from '@aztec/foundation/log';
2
+ import { type Hex } from 'viem';
3
+ export declare function deployUltraHonkVerifier(rollupAddress: Hex | undefined, ethRpcUrls: string[], l1ChainId: string, privateKey: string | undefined, mnemonic: string, pxeRpcUrl: string, bbBinaryPath: string, bbWorkingDirectory: string, log: LogFn, debugLogger: Logger): Promise<void>;
4
+ export declare function deployMockVerifier(rollupAddress: Hex | undefined, ethRpcUrls: string[], l1ChainId: string, privateKey: string | undefined, mnemonic: string, pxeRpcUrl: string, log: LogFn, debugLogger: Logger): Promise<void>;
5
+ //# sourceMappingURL=deploy_l1_verifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy_l1_verifier.d.ts","sourceRoot":"","sources":["../../../src/cmds/l1/deploy_l1_verifier.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI3D,OAAO,EAAE,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAE7C,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,GAAG,GAAG,SAAS,EAC9B,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,MAAM,EAC1B,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBAyCpB;AAED,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,GAAG,GAAG,SAAS,EAC9B,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,KAAK,EACV,WAAW,EAAE,MAAM,iBAmCpB"}