@aztec/cli 0.7.2 → 0.7.4

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.
@@ -0,0 +1,104 @@
1
+ import { AztecAddress, Fr } from '@aztec/aztec.js';
2
+ import { CompleteAddress } from '@aztec/types';
3
+ import { mock } from 'jest-mock-extended';
4
+ import { encodeArgs } from '../encoding.js';
5
+ import { getTxSender } from '../utils.js';
6
+ import { mockContractAbi } from './mocks.js';
7
+ describe('CLI Utils', () => {
8
+ let client;
9
+ // test values
10
+ const addr1 = AztecAddress.random();
11
+ const addr2 = AztecAddress.random();
12
+ const addr3 = AztecAddress.random();
13
+ const fieldArray = [addr1.toString(), addr2.toString(), addr3.toString()];
14
+ const num = 33;
15
+ const field = Fr.random();
16
+ const struct = {
17
+ subField1: field.toString(),
18
+ subField2: 'true',
19
+ };
20
+ beforeEach(() => {
21
+ client = mock();
22
+ });
23
+ it('Gets a txSender correctly or throw error', async () => {
24
+ // returns a parsed Aztec Address
25
+ const aztecAddress = AztecAddress.random();
26
+ const result = await getTxSender(client, aztecAddress.toString());
27
+ expect(client.getRegisteredAccounts).toHaveBeenCalledTimes(0);
28
+ expect(result).toEqual(aztecAddress);
29
+ // returns an address found in the aztec client
30
+ const completeAddress = await CompleteAddress.random();
31
+ client.getRegisteredAccounts.mockResolvedValueOnce([completeAddress]);
32
+ const resultWithoutString = await getTxSender(client);
33
+ expect(client.getRegisteredAccounts).toHaveBeenCalled();
34
+ expect(resultWithoutString).toEqual(completeAddress.address);
35
+ // throws when invalid parameter passed
36
+ const errorAddr = 'foo';
37
+ await expect((async () => {
38
+ await getTxSender(client, errorAddr);
39
+ })()).rejects.toThrow(`Invalid option 'from' passed: ${errorAddr}`);
40
+ // Throws error when no string is passed & no accounts found in RPC
41
+ client.getRegisteredAccounts.mockResolvedValueOnce([]);
42
+ await expect((async () => {
43
+ await getTxSender(client);
44
+ })()).rejects.toThrow('No accounts found in Aztec RPC instance.');
45
+ });
46
+ it('Encodes args correctly', () => {
47
+ const args = [addr1.toString(), 'false', num.toString(), `${JSON.stringify(fieldArray)}`, JSON.stringify(struct)];
48
+ const result = encodeArgs(args, mockContractAbi.functions[1].parameters);
49
+ const exp = [
50
+ addr1.toBigInt(),
51
+ false,
52
+ 33n,
53
+ addr1.toBigInt(),
54
+ addr2.toBigInt(),
55
+ addr3.toBigInt(),
56
+ field.toBigInt(),
57
+ true,
58
+ ];
59
+ expect(result).toEqual(exp);
60
+ });
61
+ it('Errors on invalid inputs', () => {
62
+ // invalid number of args
63
+ const args1 = [field.toString(), 'false'];
64
+ expect(() => encodeArgs(args1, mockContractAbi.functions[1].parameters)).toThrow('Invalid number of args provided. Expected: 5, received: 2');
65
+ // invalid array length
66
+ const invalidArray = fieldArray.concat([Fr.random().toString()]);
67
+ const args2 = [
68
+ addr1.toString(),
69
+ 'false',
70
+ num.toString(),
71
+ `${JSON.stringify(invalidArray)}`,
72
+ JSON.stringify(struct),
73
+ ];
74
+ expect(() => encodeArgs(args2, mockContractAbi.functions[1].parameters)).toThrow('Invalid array length passed for arrayParam. Expected 3, received 4.');
75
+ // invalid struct
76
+ const invalidStruct = {
77
+ subField1: Fr.random().toString(),
78
+ };
79
+ const args3 = [
80
+ addr1.toString(),
81
+ 'false',
82
+ num.toString(),
83
+ `${JSON.stringify(fieldArray)}`,
84
+ JSON.stringify(invalidStruct),
85
+ ];
86
+ expect(() => encodeArgs(args3, mockContractAbi.functions[1].parameters)).toThrow('Expected field subField2 not found in struct structParam.');
87
+ // invalid bool
88
+ const args4 = [
89
+ addr1.toString(),
90
+ 'foo',
91
+ num.toString(),
92
+ `${JSON.stringify(fieldArray)}`,
93
+ JSON.stringify(invalidStruct),
94
+ ];
95
+ expect(() => encodeArgs(args4, mockContractAbi.functions[1].parameters)).toThrow('Invalid boolean value passed for boolParam: foo.');
96
+ // invalid field
97
+ const args5 = ['foo', 'false', num.toString(), `${JSON.stringify(fieldArray)}`, JSON.stringify(invalidStruct)];
98
+ expect(() => encodeArgs(args5, mockContractAbi.functions[1].parameters)).toThrow('Invalid value passed for fieldParam. Could not parse foo as a field.');
99
+ // invalid int
100
+ const args6 = [addr1.toString(), 'false', 'foo', `${JSON.stringify(fieldArray)}`, JSON.stringify(invalidStruct)];
101
+ expect(() => encodeArgs(args6, mockContractAbi.functions[1].parameters)).toThrow('Invalid value passed for integerParam. Could not parse foo as an integer.');
102
+ });
103
+ });
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3V0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQVksZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXpELE9BQU8sRUFBYSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTdDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO0lBQ3pCLElBQUksTUFBMkIsQ0FBQztJQUVoQyxjQUFjO0lBQ2QsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDcEMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNmLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMxQixNQUFNLE1BQU0sR0FBRztRQUNiLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFO1FBQzNCLFNBQVMsRUFBRSxNQUFNO0tBQ2xCLENBQUM7SUFDRixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsTUFBTSxHQUFHLElBQUks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
@@ -0,0 +1,14 @@
1
+ import { LogFn } from '@aztec/foundation/log';
2
+ /**
3
+ * Unboxes a contract from `@aztec/boxes` by performing the following operations:
4
+ * 1. Copies the frontend template from `@aztec/boxes/{contract_name}` to the outputDirectory
5
+ * 2. Checks if the contract source was copied over from `@aztec/boxes/{contract_name}/src/contracts`
6
+ * 3. If not, copies the contract from the appropriate `@aztec/noir-contracts/src/contracts/...` folder.
7
+ *
8
+ * The box provides a simple React app which parses the contract ABI
9
+ * and generates a UI to deploy + interact with the contract on a local aztec testnet.
10
+ * @param contractName - name of contract from `@aztec/noir-contracts`, in a format like "PrivateToken" (rather than "private_token", as it appears in the noir-contracts repo)
11
+ * @param log - Logger instance that will output to the CLI
12
+ */
13
+ export declare function unboxContract(contractName: string, outputDirectoryName: string, packageVersion: string, log: LogFn): Promise<void>;
14
+ //# sourceMappingURL=unbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unbox.d.ts","sourceRoot":"","sources":["../src/unbox.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAiQ9C;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,mBAAmB,EAAE,MAAM,EAC3B,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,KAAK,iBAqBX"}
package/dest/unbox.js ADDED
@@ -0,0 +1,247 @@
1
+ import { promises as fs } from 'fs';
2
+ import JSZip from 'jszip';
3
+ import fetch from 'node-fetch';
4
+ import * as path from 'path';
5
+ const GITHUB_OWNER = 'AztecProtocol';
6
+ const GITHUB_REPO = 'aztec-packages';
7
+ const NOIR_CONTRACTS_PATH = 'yarn-project/noir-contracts/src/contracts';
8
+ const BOXES_PATH = 'yarn-project/boxes';
9
+ /**
10
+ * Converts a contract name in "upper camel case" to a folder name in snake case.
11
+ * @param contractName - The contract name.
12
+ * @returns The folder name.
13
+ * */
14
+ function contractNameToFolder(contractName) {
15
+ return contractName.replace(/[\w]([A-Z])/g, m => m[0] + '_' + m[1]).toLowerCase();
16
+ }
17
+ /**
18
+ * If the box contains the noir contract source code, we don't need to download it from github.
19
+ * Otherwise, we download the contract source code from the `noir-contracts` and `noir-libs` subpackages.
20
+ */
21
+ async function isDirectoryNonEmpty(directoryPath) {
22
+ const files = await fs.readdir(directoryPath);
23
+ return files.length > 0;
24
+ }
25
+ /**
26
+ *
27
+ * @param data - in memory unzipped clone of a github repo
28
+ * @param repositoryFolderPath - folder to copy from github repo
29
+ * @param localOutputPath - local path to copy to
30
+ */
31
+ async function copyFolderFromGithub(data, repositoryFolderPath, localOutputPath, log) {
32
+ log('downloading from github:', repositoryFolderPath);
33
+ const repositoryDirectories = Object.values(data.files).filter(file => {
34
+ return file.dir && file.name.startsWith(repositoryFolderPath);
35
+ });
36
+ for (const directory of repositoryDirectories) {
37
+ const relativePath = directory.name.replace(repositoryFolderPath, '');
38
+ const targetPath = `${localOutputPath}/${relativePath}`;
39
+ await fs.mkdir(targetPath, { recursive: true });
40
+ }
41
+ const starterFiles = Object.values(data.files).filter(file => {
42
+ return !file.dir && file.name.startsWith(repositoryFolderPath);
43
+ });
44
+ for (const file of starterFiles) {
45
+ const relativePath = file.name.replace(repositoryFolderPath, '');
46
+ const targetPath = `${localOutputPath}/${relativePath}`;
47
+ const content = await file.async('nodebuffer');
48
+ await fs.writeFile(targetPath, content);
49
+ }
50
+ }
51
+ /**
52
+ * Not flexible at at all, but quick fix to download a noir smart contract from our
53
+ * monorepo on github. this will copy over the `yarn-projects/boxes/{contract_name}` folder
54
+ * as well as the specified `directoryPath` if the box doesn't include source code
55
+ * `directoryPath` should point to a single noir contract in `yarn-projects/noir-contracts/src/contracts/...`
56
+ * @param tagVersion - the version of the CLI that is running. we pull from the corresponding tag in the monorepo
57
+ * @param directoryPath - path to a noir contract's source code (folder) in the github repo
58
+ * @param outputPath - local path that we will copy the noir contracts and web3 starter kit to
59
+ * @returns
60
+ */
61
+ async function downloadContractAndBoxFromGithub(tagVersion, contractName, outputPath, log) {
62
+ // small string conversion, in the ABI the contract name looks like PrivateToken
63
+ // but in the repostory it looks like private_token
64
+ const snakeCaseContractName = contractNameToFolder(contractName);
65
+ log(`Downloaded '@aztex/boxes/${snakeCaseContractName}' to ${outputPath}`);
66
+ // Step 1: Fetch the monorepo ZIP from GitHub, matching the CLI version
67
+ const url = `https://github.com/${GITHUB_OWNER}/${GITHUB_REPO}/archive/refs/tags/aztec-packages-v${tagVersion}.zip`;
68
+ const response = await fetch(url);
69
+ const buffer = await response.arrayBuffer();
70
+ const zip = new JSZip();
71
+ const data = await zip.loadAsync(buffer);
72
+ // Step 2: copy the '@aztec/boxes/{contract-name}' subpackage to the output directory
73
+ // this is currently only implemented for PrivateToken under 'boxes/private-token/'
74
+ const repoDirectoryPrefix = `${GITHUB_REPO}-v${tagVersion}/`;
75
+ const boxPath = `${repoDirectoryPrefix}${BOXES_PATH}/${snakeCaseContractName}`;
76
+ await copyFolderFromGithub(data, boxPath, outputPath, log);
77
+ const boxContainsNoirSource = await isDirectoryNonEmpty(`${outputPath}/src/contracts`);
78
+ if (boxContainsNoirSource) {
79
+ return;
80
+ }
81
+ // this remaining logic only kicks in if the box doesn't already have a src/contracts folder
82
+ // in which case we optimistically grab the noir source files from the
83
+ // noir-contracts and noir-libs subpackages and pray that the versions are compatible
84
+ // source noir files for the contract are in this folder
85
+ const contractFolder = `${NOIR_CONTRACTS_PATH}/${snakeCaseContractName}_contract`;
86
+ // copy the noir contracts to the output directory under subdir /src/contracts/
87
+ const contractDirectoryPath = `${repoDirectoryPrefix}${contractFolder}/`;
88
+ const contractFiles = Object.values(data.files).filter(file => {
89
+ return !file.dir && file.name.startsWith(contractDirectoryPath);
90
+ });
91
+ const contractTargetDirectory = path.join(outputPath, 'src', 'contracts');
92
+ await fs.mkdir(contractTargetDirectory, { recursive: true });
93
+ // Nargo.toml file needs to be in the root of the contracts directory,
94
+ // and noir files in the src/ subdirectory
95
+ await fs.mkdir(path.join(contractTargetDirectory, 'src'), { recursive: true });
96
+ for (const file of contractFiles) {
97
+ const targetPath = path.join(contractTargetDirectory, file.name.replace(contractDirectoryPath, ''));
98
+ log(`Copying ${file.name} to ${targetPath}`);
99
+ const content = await file.async('nodebuffer');
100
+ await fs.writeFile(targetPath, content);
101
+ log(`Copied ${file.name} to ${targetPath}`);
102
+ }
103
+ }
104
+ /**
105
+ * Does some conversion from the package/build configurations in the monorepo to the
106
+ * something usable by the copied standalone unboxed folder. Adjusts relative paths
107
+ * and package versions.
108
+ * @param packageVersion - CLI npm version, which determines what npm version to grab
109
+ * @param outputPath - relative path where we are copying everything
110
+ * @param log - logger
111
+ */
112
+ async function updatePackagingConfigurations(packageVersion, outputPath, log) {
113
+ await updatePackageJsonVersions(packageVersion, outputPath, log);
114
+ await updateTsConfig(outputPath, log);
115
+ await updateNargoToml(packageVersion, outputPath, log);
116
+ }
117
+ /**
118
+ * adjust the contract Nargo.toml file to use the same repository version as the npm packages
119
+ * @param packageVersion - CLI npm version, which determines what npm version to grab
120
+ * @param outputPath - relative path where we are copying everything
121
+ * @param log - logger
122
+ */
123
+ async function updateNargoToml(packageVersion, outputPath, log) {
124
+ const nargoTomlPath = path.join(outputPath, 'src', 'contracts', 'Nargo.toml');
125
+ const fileContent = await fs.readFile(nargoTomlPath, 'utf-8');
126
+ const lines = fileContent.split('\n');
127
+ const updatedLines = lines.map(line => line.replace(/tag="master"/g, `tag="v${packageVersion}"`));
128
+ const updatedContent = updatedLines.join('\n');
129
+ await fs.writeFile(nargoTomlPath, updatedContent);
130
+ log(`Updated Nargo.toml to point to local copy of noir-libs`);
131
+ }
132
+ /**
133
+ * The `tsconfig.json` also needs to be updated to remove the "references" section, which
134
+ * points to the monorepo's subpackages. Those are unavailable in the cloned subpackage,
135
+ * so we remove the entries to install the the workspace packages from npm.
136
+ * @param outputPath - directory we are unboxing to
137
+ */
138
+ async function updateTsConfig(outputPath, log) {
139
+ try {
140
+ const tsconfigJsonPath = path.join(outputPath, 'tsconfig.json');
141
+ const data = await fs.readFile(tsconfigJsonPath, 'utf8');
142
+ const config = JSON.parse(data);
143
+ delete config.references;
144
+ const updatedData = JSON.stringify(config, null, 2);
145
+ await fs.writeFile(tsconfigJsonPath, updatedData, 'utf8');
146
+ log('tsconfig.json has been updated');
147
+ }
148
+ catch (error) {
149
+ log('Error updating tsconfig.json:', error);
150
+ throw error;
151
+ }
152
+ }
153
+ /**
154
+ * We pin to "workspace:^" in the package.json for subpackages, but we need to replace it with
155
+ * an the actual version number in the cloned starter kit
156
+ * We modify the copied package.json and pin to the version of the package that was downloaded
157
+ * @param packageVersion - CLI npm version, which determines what npm version to grab
158
+ * @param outputPath - directory we are unboxing to
159
+ * @param log - logger
160
+ */
161
+ async function updatePackageJsonVersions(packageVersion, outputPath, log) {
162
+ const packageJsonPath = path.join(outputPath, 'package.json');
163
+ const fileContent = await fs.readFile(packageJsonPath, 'utf-8');
164
+ const packageData = JSON.parse(fileContent);
165
+ // Check and replace "workspace^" pins in dependencies, which are monorepo yarn workspace references
166
+ if (packageData.dependencies) {
167
+ for (const [key, value] of Object.entries(packageData.dependencies)) {
168
+ if (value === 'workspace:^') {
169
+ packageData.dependencies[key] = `^${packageVersion}`;
170
+ }
171
+ }
172
+ }
173
+ // Check and replace in devDependencies
174
+ if (packageData.devDependencies) {
175
+ for (const [key, value] of Object.entries(packageData.devDependencies)) {
176
+ if (value === 'workspace:^') {
177
+ // TODO: check if this right post landing. the package.json version looks like 0.1.0
178
+ // but the npm versions look like v0.1.0-alpha63 so we are not fully pinned
179
+ packageData.devDependencies[key] = `^${packageVersion}`;
180
+ }
181
+ }
182
+ }
183
+ // modify the version of the sandbox to pull - it's set to "latest" version in the monorepo,
184
+ // but we need to replace with the same tagVersion as the cli and the other aztec npm packages
185
+ // similarly, make sure we spinup the sandbox with the same version.
186
+ packageData.scripts['install:sandbox'] = packageData.scripts['install:sandbox'].replace('latest', `v${packageVersion}`);
187
+ packageData.scripts['start:sandbox'] = packageData.scripts['start:sandbox'].replace('latest', `v${packageVersion}`);
188
+ // Convert back to a string and write back to the package.json file
189
+ const updatedContent = JSON.stringify(packageData, null, 2);
190
+ await fs.writeFile(packageJsonPath, updatedContent);
191
+ log(`Updated package.json versions to ${packageVersion}`);
192
+ }
193
+ /**
194
+ *
195
+ * @param outputDirectoryName - user specified directory we are "unboxing" files into
196
+ * @param log - logger
197
+ * @returns
198
+ */
199
+ async function createDirectory(outputDirectoryName, log) {
200
+ const absolutePath = path.resolve(outputDirectoryName);
201
+ try {
202
+ // Checking if the path exists and if it is a directory
203
+ const stats = await fs.stat(absolutePath);
204
+ if (!stats.isDirectory()) {
205
+ throw new Error(`The specified path ${outputDirectoryName} is not a directory/folder.`);
206
+ }
207
+ }
208
+ catch (error) {
209
+ if (error.code === 'ENOENT') {
210
+ await fs.mkdir(absolutePath, { recursive: true });
211
+ log(`The directory did not exist and has been created: ${absolutePath}`);
212
+ }
213
+ else {
214
+ throw error;
215
+ }
216
+ }
217
+ return absolutePath;
218
+ }
219
+ /**
220
+ * Unboxes a contract from `@aztec/boxes` by performing the following operations:
221
+ * 1. Copies the frontend template from `@aztec/boxes/{contract_name}` to the outputDirectory
222
+ * 2. Checks if the contract source was copied over from `@aztec/boxes/{contract_name}/src/contracts`
223
+ * 3. If not, copies the contract from the appropriate `@aztec/noir-contracts/src/contracts/...` folder.
224
+ *
225
+ * The box provides a simple React app which parses the contract ABI
226
+ * and generates a UI to deploy + interact with the contract on a local aztec testnet.
227
+ * @param contractName - name of contract from `@aztec/noir-contracts`, in a format like "PrivateToken" (rather than "private_token", as it appears in the noir-contracts repo)
228
+ * @param log - Logger instance that will output to the CLI
229
+ */
230
+ export async function unboxContract(contractName, outputDirectoryName, packageVersion, log) {
231
+ const contractNames = ['PrivateToken'];
232
+ if (!contractNames.includes(contractName)) {
233
+ log(`The noir contract named "${contractName}" was not found in "@aztec/boxes" package. Valid options are:
234
+ ${contractNames.join('\n\t')}
235
+ We recommend "PrivateToken" as a default.`);
236
+ return;
237
+ }
238
+ const outputPath = await createDirectory(outputDirectoryName, log);
239
+ // downloads the selected contract's relevant folder in @aztec/boxes/{contract_name}
240
+ // and the noir source code from `noir-contracts` into `${outputDirectoryName}/src/contracts`
241
+ // if not present in the box
242
+ await downloadContractAndBoxFromGithub(packageVersion, contractName, outputPath, log);
243
+ // make adjustments for packaging to work as a standalone, as opposed to part of yarn workspace
244
+ // as in the monorepo source files
245
+ await updatePackagingConfigurations(packageVersion, outputPath, log);
246
+ }
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5ib3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdW5ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsT0FBTyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUM7QUFDckMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7QUFDckMsTUFBTSxtQkFBbUIsR0FBRywyQ0FBMkMsQ0FBQztBQUN4RSxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQztBQUV4Qzs7OztLQUlLO0FBQ0wsU0FBUyxvQkFBb0IsQ0FBQyxZQUFvQjtJQUNoRCxPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNwRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsS0FBSyxVQUFVLG1CQUFtQixDQUFDLGFBQXFCO0lBQ3RELE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM5QyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxJQUFXLEVBQUUsb0JBQTRCLEVBQUUsZUFBdUIsRUFBRSxHQUFVO0lBQ2hILEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3RELE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJ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
@@ -0,0 +1,59 @@
1
+ import { AztecAddress, AztecRPC } from '@aztec/aztec.js';
2
+ import { ContractAbi } from '@aztec/foundation/abi';
3
+ import { DebugLogger, LogFn } from '@aztec/foundation/log';
4
+ export { createClient } from './client.js';
5
+ /**
6
+ * Helper type to dynamically import contracts.
7
+ */
8
+ interface ArtifactsType {
9
+ [key: string]: ContractAbi;
10
+ }
11
+ /**
12
+ * Helper to get an ABI function or throw error if it doesn't exist.
13
+ * @param abi - Contract's ABI in JSON format.
14
+ * @param fnName - Function name to be found.
15
+ * @returns The function's ABI.
16
+ */
17
+ export declare function getAbiFunction(abi: ContractAbi, fnName: string): import("@aztec/foundation/abi").FunctionAbi;
18
+ /**
19
+ * Function to execute the 'deployRollupContracts' command.
20
+ * @param rpcUrl - The RPC URL of the ethereum node.
21
+ * @param apiKey - The api key of the ethereum node endpoint.
22
+ * @param privateKey - The private key to be used in contract deployment.
23
+ * @param mnemonic - The mnemonic to be used in contract deployment.
24
+ */
25
+ export declare function deployAztecContracts(rpcUrl: string, apiKey: string, privateKey: string, mnemonic: string, debugLogger: DebugLogger): Promise<import("@aztec/ethereum").DeployL1Contracts>;
26
+ /**
27
+ * Gets all contracts available in \@aztec/noir-contracts.
28
+ * @returns The contract ABIs.
29
+ */
30
+ export declare function getExampleContractArtifacts(): Promise<ArtifactsType>;
31
+ /**
32
+ * Reads a file and converts it to an Aztec Contract ABI.
33
+ * @param fileDir - The directory of the compiled contract ABI.
34
+ * @returns The parsed ContractABI.
35
+ */
36
+ export declare function getContractAbi(fileDir: string, log: LogFn): Promise<ContractAbi>;
37
+ /**
38
+ * Utility to select a TX sender either from user input
39
+ * or from the first account that is found in an Aztec RPC instance.
40
+ * @param client - The Aztec RPC instance that will be checked for an account.
41
+ * @param _from - The user input.
42
+ * @returns An Aztec address. Will throw if one can't be found in either options.
43
+ */
44
+ export declare function getTxSender(client: AztecRPC, _from?: string): Promise<AztecAddress>;
45
+ /**
46
+ * Performs necessary checks, conversions & operations to call a contract fn from the CLI.
47
+ * @param contractFile - Directory of the compiled contract ABI.
48
+ * @param _contractAddress - Aztec Address of the contract.
49
+ * @param functionName - Name of the function to be called.
50
+ * @param _functionArgs - Arguments to call the function with.
51
+ * @param log - Logger instance that will output to the CLI
52
+ * @returns Formatted contract address, function arguments and caller's aztec address.
53
+ */
54
+ export declare function prepTx(contractFile: string, _contractAddress: string, functionName: string, _functionArgs: string[], log: LogFn): Promise<{
55
+ contractAddress: AztecAddress;
56
+ functionArgs: any[];
57
+ contractAbi: ContractAbi;
58
+ }>;
59
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAO3D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C;;GAEG;AACH,UAAU,aAAa;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,+CAM9D;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,wDAKzB;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,2BAGhD;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,wBAuB/D;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,yBAgBjE;AAED;;;;;;;;GAQG;AACH,wBAAsB,MAAM,CAC1B,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EAAE,EACvB,GAAG,EAAE,KAAK;;;;GAaX"}
package/dest/utils.js ADDED
@@ -0,0 +1,117 @@
1
+ import { AztecAddress } from '@aztec/aztec.js';
2
+ import { createEthereumChain, deployL1Contracts } from '@aztec/ethereum';
3
+ import fs from 'fs';
4
+ import { mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
5
+ import { encodeArgs } from './encoding.js';
6
+ export { createClient } from './client.js';
7
+ /**
8
+ * Helper to get an ABI function or throw error if it doesn't exist.
9
+ * @param abi - Contract's ABI in JSON format.
10
+ * @param fnName - Function name to be found.
11
+ * @returns The function's ABI.
12
+ */
13
+ export function getAbiFunction(abi, fnName) {
14
+ const fn = abi.functions.find(({ name }) => name === fnName);
15
+ if (!fn) {
16
+ throw Error(`Function ${fnName} not found in contract ABI.`);
17
+ }
18
+ return fn;
19
+ }
20
+ /**
21
+ * Function to execute the 'deployRollupContracts' command.
22
+ * @param rpcUrl - The RPC URL of the ethereum node.
23
+ * @param apiKey - The api key of the ethereum node endpoint.
24
+ * @param privateKey - The private key to be used in contract deployment.
25
+ * @param mnemonic - The mnemonic to be used in contract deployment.
26
+ */
27
+ export async function deployAztecContracts(rpcUrl, apiKey, privateKey, mnemonic, debugLogger) {
28
+ const account = !privateKey ? mnemonicToAccount(mnemonic) : privateKeyToAccount(`0x${privateKey}`);
29
+ const chain = createEthereumChain(rpcUrl, apiKey);
30
+ return await deployL1Contracts(chain.rpcUrl, account, chain.chainInfo, debugLogger);
31
+ }
32
+ /**
33
+ * Gets all contracts available in \@aztec/noir-contracts.
34
+ * @returns The contract ABIs.
35
+ */
36
+ export async function getExampleContractArtifacts() {
37
+ const artifacts = await import('@aztec/noir-contracts/artifacts');
38
+ return artifacts;
39
+ }
40
+ /**
41
+ * Reads a file and converts it to an Aztec Contract ABI.
42
+ * @param fileDir - The directory of the compiled contract ABI.
43
+ * @returns The parsed ContractABI.
44
+ */
45
+ export async function getContractAbi(fileDir, log) {
46
+ // first check if it's a noir-contracts example
47
+ let contents;
48
+ const artifacts = await getExampleContractArtifacts();
49
+ if (artifacts[fileDir]) {
50
+ return artifacts[fileDir];
51
+ }
52
+ try {
53
+ contents = fs.readFileSync(fileDir, 'utf8');
54
+ }
55
+ catch {
56
+ throw Error(`Contract ${fileDir} not found`);
57
+ }
58
+ // if not found, try reading as path directly
59
+ let contractAbi;
60
+ try {
61
+ contractAbi = JSON.parse(contents);
62
+ }
63
+ catch (err) {
64
+ log('Invalid file used. Please try again.');
65
+ throw err;
66
+ }
67
+ return contractAbi;
68
+ }
69
+ /**
70
+ * Utility to select a TX sender either from user input
71
+ * or from the first account that is found in an Aztec RPC instance.
72
+ * @param client - The Aztec RPC instance that will be checked for an account.
73
+ * @param _from - The user input.
74
+ * @returns An Aztec address. Will throw if one can't be found in either options.
75
+ */
76
+ export async function getTxSender(client, _from) {
77
+ let from;
78
+ if (_from) {
79
+ try {
80
+ from = AztecAddress.fromString(_from);
81
+ }
82
+ catch {
83
+ throw new Error(`Invalid option 'from' passed: ${_from}`);
84
+ }
85
+ }
86
+ else {
87
+ const accounts = await client.getRegisteredAccounts();
88
+ if (!accounts.length) {
89
+ throw new Error('No accounts found in Aztec RPC instance.');
90
+ }
91
+ from = accounts[0].address;
92
+ }
93
+ return from;
94
+ }
95
+ /**
96
+ * Performs necessary checks, conversions & operations to call a contract fn from the CLI.
97
+ * @param contractFile - Directory of the compiled contract ABI.
98
+ * @param _contractAddress - Aztec Address of the contract.
99
+ * @param functionName - Name of the function to be called.
100
+ * @param _functionArgs - Arguments to call the function with.
101
+ * @param log - Logger instance that will output to the CLI
102
+ * @returns Formatted contract address, function arguments and caller's aztec address.
103
+ */
104
+ export async function prepTx(contractFile, _contractAddress, functionName, _functionArgs, log) {
105
+ let contractAddress;
106
+ try {
107
+ contractAddress = AztecAddress.fromString(_contractAddress);
108
+ }
109
+ catch {
110
+ throw new Error(`Unable to parse contract address ${_contractAddress}.`);
111
+ }
112
+ const contractAbi = await getContractAbi(contractFile, log);
113
+ const functionAbi = getAbiFunction(contractAbi, functionName);
114
+ const functionArgs = encodeArgs(_functionArgs, functionAbi.parameters);
115
+ return { contractAddress, functionArgs, contractAbi };
116
+ }
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSXpFLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBUTNDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxHQUFnQixFQUFFLE1BQWM7SUFDN0QsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDN0QsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNQLE1BQU0sS0FBSyxDQUFDLFlBQVksTUFBTSw2QkFBNkIsQ0FBQyxDQUFDO0tBQzlEO0lBQ0QsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FDeEMsTUFBYyxFQUNkLE1BQWMsRUFDZCxVQUFrQixFQUNsQixRQUFnQixFQUNoQixXQUF3QjtJQUV4QixNQUFNLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsUUFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEtBQUssVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNwRyxNQUFNLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxN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
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@aztec/cli",
3
- "version": "0.7.2",
3
+ "version": "0.7.4",
4
4
  "main": "./dest/index.js",
5
5
  "type": "module",
6
6
  "dependencies": {
7
- "@aztec/aztec.js": "0.7.2",
8
- "@aztec/ethereum": "0.7.2",
9
- "@aztec/foundation": "0.7.2",
10
- "@aztec/noir-compiler": "0.7.2",
11
- "@aztec/noir-contracts": "0.7.2",
12
- "@aztec/types": "0.7.2",
7
+ "@aztec/aztec.js": "0.7.4",
8
+ "@aztec/ethereum": "0.7.4",
9
+ "@aztec/foundation": "0.7.4",
10
+ "@aztec/noir-compiler": "0.7.4",
11
+ "@aztec/noir-contracts": "0.7.4",
12
+ "@aztec/types": "0.7.4",
13
13
  "commander": "^9.0.0",
14
14
  "jszip": "^3.10.1",
15
15
  "lodash.startcase": "^4.4.0",
package/src/index.ts CHANGED
@@ -292,7 +292,7 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command {
292
292
  .option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
293
293
  .action(async (options: any) => {
294
294
  const client = await createCompatibleClient(options.rpcUrl, debugLogger);
295
- const accounts = await client.getAccounts();
295
+ const accounts = await client.getRegisteredAccounts();
296
296
  if (!accounts.length) {
297
297
  log('No accounts found.');
298
298
  } else {
@@ -311,7 +311,7 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command {
311
311
  .action(async (_address, options) => {
312
312
  const client = await createCompatibleClient(options.rpcUrl, debugLogger);
313
313
  const address = AztecAddress.fromString(_address);
314
- const account = await client.getAccount(address);
314
+ const account = await client.getRegisteredAccount(address);
315
315
 
316
316
  if (!account) {
317
317
  log(`Unknown account ${_address}`);