@aztec/cli 0.1.0-alpha37 → 0.1.0-alpha39
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.
- package/.tsbuildinfo +1 -1
- package/README.md +8 -8
- package/dest/bin/index.d.ts +3 -0
- package/dest/bin/index.d.ts.map +1 -0
- package/dest/bin/index.js +17 -0
- package/dest/{cli_encoder.d.ts → encoding.d.ts} +1 -1
- package/dest/encoding.d.ts.map +1 -0
- package/dest/encoding.js +87 -0
- package/dest/index.d.ts +9 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +134 -100
- package/dest/utils.d.ts +1 -1
- package/dest/utils.js +4 -4
- package/package.json +8 -7
- package/src/bin/index.ts +20 -0
- package/src/index.ts +150 -122
- package/src/utils.ts +4 -4
- package/tsconfig.json +3 -0
- package/dest/cli_encoder.d.ts.map +0 -1
- package/dest/cli_encoder.js +0 -87
- /package/src/{cli_encoder.ts → encoding.ts} +0 -0
package/dest/index.js
CHANGED
|
@@ -1,29 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
import { AztecAddress, Contract, ContractDeployer, Fr, Point, createAccounts, createAztecRpcClient, generatePublicKey, getAccountWallet, isContractDeployed, } from '@aztec/aztec.js';
|
|
1
|
+
import { AztecAddress, Contract, ContractDeployer, Fr, Point, createAztecRpcClient, generatePublicKey, getAccountWallets, getSchnorrAccount, isContractDeployed, } from '@aztec/aztec.js';
|
|
3
2
|
import { JsonStringify } from '@aztec/foundation/json-rpc';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { L2BlockL2Logs, PrivateKey, TxHash } from '@aztec/types';
|
|
3
|
+
import { compileContract } from '@aztec/noir-compiler/cli';
|
|
4
|
+
import { SchnorrAccountContractAbi } from '@aztec/noir-contracts/artifacts';
|
|
5
|
+
import { CompleteAddress, L2BlockL2Logs, PrivateKey, TxHash } from '@aztec/types';
|
|
7
6
|
import { Command } from 'commander';
|
|
7
|
+
import { readFileSync } from 'fs';
|
|
8
|
+
import { dirname, resolve } from 'path';
|
|
9
|
+
import { fileURLToPath } from 'url';
|
|
8
10
|
import { mnemonicToAccount } from 'viem/accounts';
|
|
9
|
-
import { encodeArgs, parseStructString } from './
|
|
11
|
+
import { encodeArgs, parseStructString } from './encoding.js';
|
|
10
12
|
import { deployAztecContracts, getAbiFunction, getContractAbi, getExampleContractArtifacts, getTxSender, prepTx, } from './utils.js';
|
|
11
13
|
const accountCreationSalt = Fr.ZERO;
|
|
12
|
-
const debugLogger = createDebugLogger('aztec:cli');
|
|
13
|
-
const log = createConsoleLogger();
|
|
14
14
|
const stripLeadingHex = (hex) => {
|
|
15
15
|
if (hex.length > 2 && hex.startsWith('0x')) {
|
|
16
16
|
return hex.substring(2);
|
|
17
17
|
}
|
|
18
18
|
return hex;
|
|
19
19
|
};
|
|
20
|
-
const
|
|
21
|
-
program.name('aztec-cli').description('CLI for interacting with Aztec.').version('0.1.0');
|
|
22
|
-
const { ETHEREUM_HOST, AZTEC_RPC_HOST, PRIVATE_KEY, PUBLIC_KEY, API_KEY } = process.env;
|
|
20
|
+
const { ETHEREUM_HOST, AZTEC_RPC_HOST, PRIVATE_KEY, API_KEY } = process.env;
|
|
23
21
|
/**
|
|
24
|
-
*
|
|
22
|
+
* Returns commander program that defines the CLI.
|
|
23
|
+
* @param log - Console logger.
|
|
24
|
+
* @param debugLogger - Debug logger.
|
|
25
|
+
* @returns The CLI.
|
|
25
26
|
*/
|
|
26
|
-
|
|
27
|
+
export function getProgram(log, debugLogger) {
|
|
28
|
+
const program = new Command();
|
|
29
|
+
const packageJsonPath = resolve(dirname(fileURLToPath(import.meta.url)), '../package.json');
|
|
30
|
+
const version = JSON.parse(readFileSync(packageJsonPath).toString()).version;
|
|
31
|
+
program.name('aztec-cli').description('CLI for interacting with Aztec.').version(version);
|
|
27
32
|
program
|
|
28
33
|
.command('deploy-l1-contracts')
|
|
29
34
|
.description('Deploys all necessary Ethereum contracts for Aztec.')
|
|
@@ -44,7 +49,7 @@ async function main() {
|
|
|
44
49
|
program
|
|
45
50
|
.command('generate-private-key')
|
|
46
51
|
.description('Generates a 32-byte private key.')
|
|
47
|
-
.option('-m, --mnemonic', '
|
|
52
|
+
.option('-m, --mnemonic', 'An optional mnemonic string used for the private key generation. If not provided, random private key will be generated.')
|
|
48
53
|
.action(async (options) => {
|
|
49
54
|
let privKey;
|
|
50
55
|
let publicKey;
|
|
@@ -56,72 +61,78 @@ async function main() {
|
|
|
56
61
|
}
|
|
57
62
|
else {
|
|
58
63
|
const key = PrivateKey.random();
|
|
59
|
-
privKey =
|
|
64
|
+
privKey = key.toString();
|
|
60
65
|
publicKey = await generatePublicKey(key);
|
|
61
66
|
}
|
|
62
67
|
log(`\nPrivate Key: ${privKey}\nPublic Key: ${publicKey.toString()}\n`);
|
|
63
68
|
});
|
|
64
69
|
program
|
|
65
70
|
.command('create-account')
|
|
66
|
-
.description('Creates an aztec account that can be used for transactions.')
|
|
67
|
-
.
|
|
71
|
+
.description('Creates an aztec account that can be used for sending transactions. Registers the account on the RPC server and deploys an account contract. Uses a Schnorr single-key account which uses the same key for encryption and authentication (not secure for production usage).')
|
|
72
|
+
.summary('Creates an aztec account that can be used for sending transactions.')
|
|
73
|
+
.option('-k, --private-key <string>', 'Private key for note encryption and transaction signing. Uses random by default.', PRIVATE_KEY)
|
|
68
74
|
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
69
75
|
.action(async (options) => {
|
|
70
76
|
const client = createAztecRpcClient(options.rpcUrl);
|
|
71
|
-
const privateKey = options.privateKey
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
const privateKey = options.privateKey
|
|
78
|
+
? new PrivateKey(Buffer.from(stripLeadingHex(options.privateKey), 'hex'))
|
|
79
|
+
: PrivateKey.random();
|
|
80
|
+
const account = getSchnorrAccount(client, privateKey, privateKey, accountCreationSalt);
|
|
81
|
+
const wallet = await account.waitDeploy();
|
|
82
|
+
const { address, publicKey, partialAddress } = wallet.getCompleteAddress();
|
|
83
|
+
log(`\nCreated new account:\n`);
|
|
84
|
+
log(`Address: ${address.toString()}`);
|
|
85
|
+
log(`Public key: ${publicKey.toString()}`);
|
|
86
|
+
if (!options.privateKey)
|
|
87
|
+
log(`Private key: ${privateKey.toString()}`);
|
|
88
|
+
log(`Partial address: ${partialAddress.toString()}`);
|
|
77
89
|
});
|
|
78
90
|
program
|
|
79
91
|
.command('deploy')
|
|
80
92
|
.description('Deploys a compiled Noir contract to Aztec.')
|
|
81
|
-
.
|
|
93
|
+
.requiredOption('-c, --contract-abi <file>', "A compiled Noir contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts")
|
|
82
94
|
.option('-a, --args <constructorArgs...>', 'Contract constructor arguments', [])
|
|
83
95
|
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
84
|
-
.option('-k, --public-key <string>', '
|
|
96
|
+
.option('-k, --public-key <string>', 'Optional encryption public key for this address. Set this value only if this contract is expected to receive private notes, which will be encrypted using this public key.')
|
|
97
|
+
.option('-s, --salt <string>', 'Optional deployment salt as a hex string for generating the deployment address.')
|
|
85
98
|
.action(async (options) => {
|
|
86
99
|
const contractAbi = await getContractAbi(options.contractAbi, log);
|
|
87
100
|
const constructorAbi = contractAbi.functions.find(({ name }) => name === 'constructor');
|
|
88
101
|
const client = createAztecRpcClient(options.rpcUrl);
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
const accounts = await client.getAccounts();
|
|
95
|
-
if (!accounts) {
|
|
96
|
-
throw new Error('No public key provided or found in Aztec RPC.');
|
|
97
|
-
}
|
|
98
|
-
publicKey = (await client.getPublicKeyAndPartialAddress(accounts[0]))[0];
|
|
99
|
-
}
|
|
100
|
-
log(`Using Public Key: ${publicKey.toString()}`);
|
|
101
|
-
const deployer = new ContractDeployer(contractAbi, client);
|
|
102
|
+
const publicKey = options.publicKey ? Point.fromString(options.publicKey) : undefined;
|
|
103
|
+
const salt = options.salt ? Fr.fromBuffer(Buffer.from(stripLeadingHex(options.salt), 'hex')) : undefined;
|
|
104
|
+
const deployer = new ContractDeployer(contractAbi, client, publicKey);
|
|
102
105
|
const constructor = getAbiFunction(contractAbi, 'constructor');
|
|
106
|
+
if (!constructor)
|
|
107
|
+
throw new Error(`Constructor not found in contract ABI`);
|
|
103
108
|
if (constructor.parameters.length !== options.args.length) {
|
|
104
|
-
throw Error(`Invalid number of args passed
|
|
109
|
+
throw new Error(`Invalid number of args passed (expected ${constructor.parameters.length} but got ${options.args.length})`);
|
|
105
110
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
debugLogger(`Input arguments: ${options.args.map((x) => `"${x}"`).join(', ')}`);
|
|
112
|
+
const args = encodeArgs(options.args, constructorAbi.parameters);
|
|
113
|
+
debugLogger(`Encoded arguments: ${args.join(', ')}`);
|
|
114
|
+
const tx = deployer.deploy(...args).send({ contractAddressSalt: salt });
|
|
115
|
+
debugLogger(`Deploy tx sent with hash ${await tx.getTxHash()}`);
|
|
116
|
+
const deployed = await tx.wait();
|
|
117
|
+
log(`\nContract deployed at ${deployed.contractAddress.toString()}\n`);
|
|
110
118
|
});
|
|
111
119
|
program
|
|
112
120
|
.command('check-deploy')
|
|
113
121
|
.description('Checks if a contract is deployed to the specified Aztec address.')
|
|
114
|
-
.
|
|
122
|
+
.requiredOption('-ca, --contract-address <address>', 'An Aztec address to check if contract has been deployed to.')
|
|
115
123
|
.option('-u, --rpc-url <url>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
116
124
|
.action(async (options) => {
|
|
117
125
|
const client = createAztecRpcClient(options.rpcUrl);
|
|
118
126
|
const address = AztecAddress.fromString(options.contractAddress);
|
|
119
127
|
const isDeployed = await isContractDeployed(client, address);
|
|
120
|
-
|
|
128
|
+
if (isDeployed)
|
|
129
|
+
log(`\nContract found at ${address.toString()}\n`);
|
|
130
|
+
else
|
|
131
|
+
log(`\nNo contract found at ${address.toString()}\n`);
|
|
121
132
|
});
|
|
122
133
|
program
|
|
123
134
|
.command('get-tx-receipt')
|
|
124
|
-
.argument('<txHash>', 'A
|
|
135
|
+
.argument('<txHash>', 'A transaction hash to get the receipt for.')
|
|
125
136
|
.description('Gets the receipt for the specified transaction hash.')
|
|
126
137
|
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
127
138
|
.action(async (_txHash, options) => {
|
|
@@ -129,10 +140,10 @@ async function main() {
|
|
|
129
140
|
const txHash = TxHash.fromString(_txHash);
|
|
130
141
|
const receipt = await client.getTxReceipt(txHash);
|
|
131
142
|
if (!receipt) {
|
|
132
|
-
log(`No receipt found for
|
|
143
|
+
log(`No receipt found for transaction hash ${_txHash}`);
|
|
133
144
|
}
|
|
134
145
|
else {
|
|
135
|
-
log(`\
|
|
146
|
+
log(`\nTransaction receipt: \n${JsonStringify(receipt, true)}\n`);
|
|
136
147
|
}
|
|
137
148
|
});
|
|
138
149
|
program
|
|
@@ -140,7 +151,7 @@ async function main() {
|
|
|
140
151
|
.description('Gets information about the Aztec contract deployed at the specified address.')
|
|
141
152
|
.argument('<contractAddress>', 'Aztec address of the contract.')
|
|
142
153
|
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
143
|
-
.option('-b, --include-bytecode', "Include the contract's public function bytecode, if any.")
|
|
154
|
+
.option('-b, --include-bytecode <boolean>', "Include the contract's public function bytecode, if any.", false)
|
|
144
155
|
.action(async (contractAddress, options) => {
|
|
145
156
|
const client = createAztecRpcClient(options.rpcUrl);
|
|
146
157
|
const address = AztecAddress.fromString(contractAddress);
|
|
@@ -159,7 +170,7 @@ async function main() {
|
|
|
159
170
|
contractData = contractDataWithOrWithoutBytecode;
|
|
160
171
|
}
|
|
161
172
|
log(`\nContract Data: \nAddress: ${contractData.contractAddress.toString()}`);
|
|
162
|
-
log(`Portal:
|
|
173
|
+
log(`Portal: ${contractData.portalContractAddress.toString()}`);
|
|
163
174
|
if ('bytecode' in contractDataWithOrWithoutBytecode) {
|
|
164
175
|
log(`Bytecode: ${contractDataWithOrWithoutBytecode.bytecode}`);
|
|
165
176
|
}
|
|
@@ -168,24 +179,17 @@ async function main() {
|
|
|
168
179
|
program
|
|
169
180
|
.command('get-logs')
|
|
170
181
|
.description('Gets all the unencrypted logs from L2 blocks in the range specified.')
|
|
171
|
-
.
|
|
172
|
-
.
|
|
182
|
+
.option('-f, --from <blockNum>', 'Initial block number for getting logs (defaults to 1).')
|
|
183
|
+
.option('-l, --limit <blockCount>', 'How many blocks to fetch (defaults to 100).')
|
|
173
184
|
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
174
|
-
.action(async (
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
from = parseInt(_from);
|
|
179
|
-
limit = parseInt(_take);
|
|
180
|
-
}
|
|
181
|
-
catch {
|
|
182
|
-
log(`Invalid integer value(s) passed: ${_from}, ${_take}`);
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
+
.action(async (options) => {
|
|
186
|
+
const { from, limit } = options;
|
|
187
|
+
const fromBlock = from ? parseInt(from) : 1;
|
|
188
|
+
const limitCount = limit ? parseInt(limit) : 100;
|
|
185
189
|
const client = createAztecRpcClient(options.rpcUrl);
|
|
186
|
-
const logs = await client.getUnencryptedLogs(
|
|
190
|
+
const logs = await client.getUnencryptedLogs(fromBlock, limitCount);
|
|
187
191
|
if (!logs.length) {
|
|
188
|
-
log(`No logs found in blocks ${
|
|
192
|
+
log(`No logs found in blocks ${fromBlock} to ${fromBlock + limitCount}`);
|
|
189
193
|
}
|
|
190
194
|
else {
|
|
191
195
|
log('Logs found: \n');
|
|
@@ -193,18 +197,18 @@ async function main() {
|
|
|
193
197
|
}
|
|
194
198
|
});
|
|
195
199
|
program
|
|
196
|
-
.command('register-
|
|
197
|
-
.description(
|
|
198
|
-
.
|
|
199
|
-
.
|
|
200
|
-
.
|
|
200
|
+
.command('register-recipient')
|
|
201
|
+
.description('Register a recipient in the Aztec RPC.')
|
|
202
|
+
.requiredOption('-a, --address <aztecAddress>', "The account's Aztec address.")
|
|
203
|
+
.requiredOption('-p, --public-key <publicKey>', 'The account public key.')
|
|
204
|
+
.requiredOption('-pa, --partial-address <partialAddress', 'The partially computed address of the account contract.')
|
|
201
205
|
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
202
206
|
.action(async (options) => {
|
|
203
207
|
const client = createAztecRpcClient(options.rpcUrl);
|
|
204
208
|
const address = AztecAddress.fromString(options.address);
|
|
205
209
|
const publicKey = Point.fromString(options.publicKey);
|
|
206
210
|
const partialAddress = Fr.fromString(options.partialAddress);
|
|
207
|
-
await client.
|
|
211
|
+
await client.registerRecipient(await CompleteAddress.create(address, publicKey, partialAddress));
|
|
208
212
|
log(`\nRegistered details for Address: ${options.address}\n`);
|
|
209
213
|
});
|
|
210
214
|
program
|
|
@@ -219,26 +223,58 @@ async function main() {
|
|
|
219
223
|
}
|
|
220
224
|
else {
|
|
221
225
|
log(`Accounts found: \n`);
|
|
222
|
-
for (const
|
|
223
|
-
|
|
224
|
-
log(`Address: ${address}\nPublic Key: ${pk.toString()}\nPartial Address: ${partialAddress.toString()}\n`);
|
|
226
|
+
for (const account of accounts) {
|
|
227
|
+
log(account.toReadableString());
|
|
225
228
|
}
|
|
226
229
|
}
|
|
227
230
|
});
|
|
228
231
|
program
|
|
229
|
-
.command('get-account
|
|
230
|
-
.description(
|
|
231
|
-
.argument('<address>', 'The Aztec address to get
|
|
232
|
+
.command('get-account')
|
|
233
|
+
.description('Gets an account given its Aztec address.')
|
|
234
|
+
.argument('<address>', 'The Aztec address to get account for')
|
|
232
235
|
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
233
236
|
.action(async (_address, options) => {
|
|
234
237
|
const client = createAztecRpcClient(options.rpcUrl);
|
|
235
238
|
const address = AztecAddress.fromString(_address);
|
|
236
|
-
const
|
|
237
|
-
if (!
|
|
239
|
+
const account = await client.getAccount(address);
|
|
240
|
+
if (!account) {
|
|
238
241
|
log(`Unknown account ${_address}`);
|
|
239
242
|
}
|
|
240
243
|
else {
|
|
241
|
-
log(
|
|
244
|
+
log(account.toReadableString());
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
program
|
|
248
|
+
.command('get-recipients')
|
|
249
|
+
.description('Gets all the recipients stored in the Aztec RPC.')
|
|
250
|
+
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
251
|
+
.action(async (options) => {
|
|
252
|
+
const client = createAztecRpcClient(options.rpcUrl);
|
|
253
|
+
const recipients = await client.getRecipients();
|
|
254
|
+
if (!recipients.length) {
|
|
255
|
+
log('No recipients found.');
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
log(`Recipients found: \n`);
|
|
259
|
+
for (const recipient of recipients) {
|
|
260
|
+
log(recipient.toReadableString());
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
program
|
|
265
|
+
.command('get-recipient')
|
|
266
|
+
.description('Gets a recipient given its Aztec address.')
|
|
267
|
+
.argument('<address>', 'The Aztec address to get recipient for')
|
|
268
|
+
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
269
|
+
.action(async (_address, options) => {
|
|
270
|
+
const client = createAztecRpcClient(options.rpcUrl);
|
|
271
|
+
const address = AztecAddress.fromString(_address);
|
|
272
|
+
const recipient = await client.getRecipient(address);
|
|
273
|
+
if (!recipient) {
|
|
274
|
+
log(`Unknown recipient ${_address}`);
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
log(recipient.toReadableString());
|
|
242
278
|
}
|
|
243
279
|
});
|
|
244
280
|
program
|
|
@@ -246,8 +282,8 @@ async function main() {
|
|
|
246
282
|
.description('Calls a function on an Aztec contract.')
|
|
247
283
|
.argument('<functionName>', 'Name of Function to view')
|
|
248
284
|
.option('-a, --args [functionArgs...]', 'Function arguments', [])
|
|
249
|
-
.
|
|
250
|
-
.
|
|
285
|
+
.requiredOption('-c, --contract-abi <fileLocation>', "A compiled Noir contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts")
|
|
286
|
+
.requiredOption('-ca, --contract-address <address>', 'Aztec address of the contract.')
|
|
251
287
|
.option('-k, --private-key <string>', "The sender's private key.", PRIVATE_KEY)
|
|
252
288
|
.option('-u, --rpcUrl <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
253
289
|
.action(async (functionName, options) => {
|
|
@@ -256,25 +292,26 @@ async function main() {
|
|
|
256
292
|
if (fnAbi.parameters.length !== options.args.length) {
|
|
257
293
|
throw Error(`Invalid number of args passed. Expected ${fnAbi.parameters.length}; Received: ${options.args.length}`);
|
|
258
294
|
}
|
|
295
|
+
const privateKey = new PrivateKey(Buffer.from(stripLeadingHex(options.privateKey), 'hex'));
|
|
259
296
|
const client = createAztecRpcClient(options.rpcUrl);
|
|
260
|
-
const wallet = await
|
|
261
|
-
const contract = await Contract.
|
|
297
|
+
const wallet = await getAccountWallets(client, SchnorrAccountContractAbi, [privateKey], [privateKey], [accountCreationSalt]);
|
|
298
|
+
const contract = await Contract.at(contractAddress, contractAbi, wallet);
|
|
262
299
|
const tx = contract.methods[functionName](...functionArgs).send();
|
|
263
300
|
await tx.isMined();
|
|
264
|
-
log('\
|
|
301
|
+
log('\nTransaction has been mined');
|
|
265
302
|
const receipt = await tx.getReceipt();
|
|
266
|
-
log(`
|
|
267
|
-
log(`
|
|
268
|
-
log(`Block
|
|
269
|
-
log(`
|
|
303
|
+
log(`Transaction hash: ${(await tx.getTxHash()).toString()}`);
|
|
304
|
+
log(`Status: ${receipt.status}\n`);
|
|
305
|
+
log(`Block number: ${receipt.blockNumber}`);
|
|
306
|
+
log(`Block hash: ${receipt.blockHash?.toString('hex')}`);
|
|
270
307
|
});
|
|
271
308
|
program
|
|
272
309
|
.command('call')
|
|
273
310
|
.description('Simulates the execution of a view (read-only) function on a deployed contract, without modifying state.')
|
|
274
311
|
.argument('<functionName>', 'Name of Function to view')
|
|
275
312
|
.option('-a, --args [functionArgs...]', 'Function arguments', [])
|
|
276
|
-
.
|
|
277
|
-
.
|
|
313
|
+
.requiredOption('-c, --contract-abi <fileLocation>', "A compiled Noir contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts")
|
|
314
|
+
.requiredOption('-ca, --contract-address <address>', 'Aztec address of the contract.')
|
|
278
315
|
.option('-f, --from <string>', 'Public key of the TX viewer. If empty, will try to find account in RPC.')
|
|
279
316
|
.option('-u, --rpcUrl <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
280
317
|
.action(async (functionName, options) => {
|
|
@@ -286,15 +323,15 @@ async function main() {
|
|
|
286
323
|
const client = createAztecRpcClient(options.rpcUrl);
|
|
287
324
|
const from = await getTxSender(client, options.from);
|
|
288
325
|
const result = await client.viewTx(functionName, functionArgs, contractAddress, from);
|
|
289
|
-
log('\nView
|
|
326
|
+
log('\nView result: ', JsonStringify(result, true), '\n');
|
|
290
327
|
});
|
|
291
328
|
// Helper for users to decode hex strings into structs if needed
|
|
292
329
|
program
|
|
293
330
|
.command('parse-parameter-struct')
|
|
294
331
|
.description("Helper for parsing an encoded string into a contract's parameter struct.")
|
|
295
332
|
.argument('<encodedString>', 'The encoded hex string')
|
|
296
|
-
.
|
|
297
|
-
.
|
|
333
|
+
.requiredOption('-c, --contract-abi <fileLocation>', "A compiled Noir contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts")
|
|
334
|
+
.requiredOption('-p, --parameter <parameterName>', 'The name of the struct parameter to decode into')
|
|
298
335
|
.action(async (encodedString, options) => {
|
|
299
336
|
const contractAbi = await getContractAbi(options.contractAbi, log);
|
|
300
337
|
const parameterAbitype = contractAbi.functions
|
|
@@ -325,10 +362,7 @@ async function main() {
|
|
|
325
362
|
const names = Object.keys(abisList);
|
|
326
363
|
names.forEach(name => log(name));
|
|
327
364
|
});
|
|
328
|
-
|
|
365
|
+
compileContract(program, 'compile', log);
|
|
366
|
+
return program;
|
|
329
367
|
}
|
|
330
|
-
main().catch(err => {
|
|
331
|
-
log(`Error thrown: ${err}`);
|
|
332
|
-
process.exit(1);
|
|
333
|
-
});
|
|
334
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFDTCxZQUFZLEVBQ1osUUFBUSxFQUNSLGdCQUFnQixFQUNoQixFQUFFLEVBQ0YsS0FBSyxFQUNMLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixrQkFBa0IsR0FDbkIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckYsT0FBTyxFQUFnQixhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsY0FBYyxFQUNkLDJCQUEyQixFQUMzQixXQUFXLEVBQ1gsTUFBTSxHQUNQLE1BQU0sWUFBWSxDQUFDO0FBRXBCLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUVwQyxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNuRCxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7SUFDdEMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFB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
|
|
368
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2hCLEVBQUUsRUFDRixLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGtCQUFrQixHQUNuQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFaEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsY0FBYyxFQUNkLDJCQUEyQixFQUMzQixXQUFXLEVBQ1gsTUFBTSxHQUNQLE1BQU0sWUFBWSxDQUFDO0FBRXBCLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUVwQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQVcsRUFBRSxF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
|
package/dest/utils.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { AztecAddress, AztecRPC } from '@aztec/aztec.js';
|
|
|
2
2
|
import { ContractAbi } from '@aztec/foundation/abi';
|
|
3
3
|
import { DebugLogger, LogFn } from '@aztec/foundation/log';
|
|
4
4
|
/**
|
|
5
|
-
* Helper type to dynamically import
|
|
5
|
+
* Helper type to dynamically import contracts.
|
|
6
6
|
*/
|
|
7
7
|
interface ArtifactsType {
|
|
8
8
|
[key: string]: ContractAbi;
|
package/dest/utils.js
CHANGED
|
@@ -2,7 +2,7 @@ import { AztecAddress } from '@aztec/aztec.js';
|
|
|
2
2
|
import { createEthereumChain, deployL1Contracts } from '@aztec/ethereum';
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import { mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
|
|
5
|
-
import { encodeArgs } from './
|
|
5
|
+
import { encodeArgs } from './encoding.js';
|
|
6
6
|
/**
|
|
7
7
|
* Helper to get an ABI function or throw error if it doesn't exist.
|
|
8
8
|
* @param abi - Contract's ABI in JSON format.
|
|
@@ -85,9 +85,9 @@ export async function getTxSender(client, _from) {
|
|
|
85
85
|
else {
|
|
86
86
|
const accounts = await client.getAccounts();
|
|
87
87
|
if (!accounts.length) {
|
|
88
|
-
throw new Error('No accounts found in Aztec RPC
|
|
88
|
+
throw new Error('No accounts found in Aztec RPC instance.');
|
|
89
89
|
}
|
|
90
|
-
from = accounts[0];
|
|
90
|
+
from = accounts[0].address;
|
|
91
91
|
}
|
|
92
92
|
return from;
|
|
93
93
|
}
|
|
@@ -113,4 +113,4 @@ export async function prepTx(contractFile, _contractAddress, functionName, _func
|
|
|
113
113
|
const functionArgs = encodeArgs(_functionArgs, functionAbi.parameters);
|
|
114
114
|
return { contractAddress, functionArgs, contractAbi };
|
|
115
115
|
}
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSXpFLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVMzQzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBZ0IsRUFBRSxNQUFjO0lBQzdELE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDUCxNQUFNLEtBQUssQ0FBQyxZQUFZLE1BQU0sNkJBQTZCLENBQUMsQ0FBQztLQUM5RDtJQUNELE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLE1BQWMsRUFDZCxNQUFjLEVBQ2QsVUFBa0IsRUFDbEIsUUFBZ0IsRUFDaEIsV0FBd0I7SUFFeEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFFBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDcEcsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELE9BQU8sTUFBTSxp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
|
package/package.json
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/cli",
|
|
3
|
-
"version": "0.1.0-
|
|
3
|
+
"version": "0.1.0-alpha39",
|
|
4
4
|
"main": "./dest/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@aztec/aztec.js": "0.1.0-
|
|
8
|
-
"@aztec/ethereum": "0.1.0-
|
|
9
|
-
"@aztec/foundation": "0.1.0-
|
|
10
|
-
"@aztec/noir-
|
|
11
|
-
"@aztec/
|
|
7
|
+
"@aztec/aztec.js": "0.1.0-alpha39",
|
|
8
|
+
"@aztec/ethereum": "0.1.0-alpha39",
|
|
9
|
+
"@aztec/foundation": "0.1.0-alpha39",
|
|
10
|
+
"@aztec/noir-compiler": "0.1.0-alpha39",
|
|
11
|
+
"@aztec/noir-contracts": "0.1.0-alpha39",
|
|
12
|
+
"@aztec/types": "0.1.0-alpha39",
|
|
12
13
|
"commander": "^9.0.0",
|
|
13
14
|
"tslib": "^2.4.0",
|
|
14
15
|
"viem": "^1.2.5"
|
|
15
16
|
},
|
|
16
17
|
"bin": {
|
|
17
|
-
"aztec-cli": "./dest/index.js"
|
|
18
|
+
"aztec-cli": "./dest/bin/index.js"
|
|
18
19
|
}
|
|
19
20
|
}
|
package/src/bin/index.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings
|
|
2
|
+
import { createDebugLogger } from '@aztec/aztec.js';
|
|
3
|
+
import { createConsoleLogger } from '@aztec/foundation/log';
|
|
4
|
+
|
|
5
|
+
import { getProgram } from '../index.js';
|
|
6
|
+
|
|
7
|
+
const debugLogger = createDebugLogger('aztec:cli');
|
|
8
|
+
const log = createConsoleLogger();
|
|
9
|
+
|
|
10
|
+
/** CLI main entrypoint */
|
|
11
|
+
async function main() {
|
|
12
|
+
const program = getProgram(log, debugLogger);
|
|
13
|
+
await program.parseAsync(process.argv);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
main().catch(err => {
|
|
17
|
+
log(`Error in command execution`);
|
|
18
|
+
log(err);
|
|
19
|
+
process.exit(1);
|
|
20
|
+
});
|