@aztec/cli 0.6.7 → 0.7.2
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/Dockerfile +15 -0
- package/README.md +3 -3
- package/package.json +9 -7
- package/src/index.ts +44 -16
- package/src/unbox.ts +303 -0
- package/.tsbuildinfo +0 -1
- package/dest/bin/index.d.ts +0 -3
- package/dest/bin/index.d.ts.map +0 -1
- package/dest/bin/index.js +0 -17
- package/dest/client.d.ts +0 -23
- package/dest/client.d.ts.map +0 -1
- package/dest/client.js +0 -72
- package/dest/client.test.d.ts +0 -2
- package/dest/client.test.d.ts.map +0 -1
- package/dest/client.test.js +0 -23
- package/dest/encoding.d.ts +0 -15
- package/dest/encoding.d.ts.map +0 -1
- package/dest/encoding.js +0 -107
- package/dest/index.d.ts +0 -10
- package/dest/index.d.ts.map +0 -1
- package/dest/index.js +0 -381
- package/dest/test/mocks.d.ts +0 -3
- package/dest/test/mocks.d.ts.map +0 -1
- package/dest/test/mocks.js +0 -63
- package/dest/test/utils.test.d.ts +0 -2
- package/dest/test/utils.test.d.ts.map +0 -1
- package/dest/test/utils.test.js +0 -104
- package/dest/utils.d.ts +0 -59
- package/dest/utils.d.ts.map +0 -1
- package/dest/utils.js +0 -117
package/dest/test/mocks.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { ABIParameterVisibility, FunctionType } from '@aztec/foundation/abi';
|
|
2
|
-
export const mockContractAbi = {
|
|
3
|
-
name: 'MockContract',
|
|
4
|
-
functions: [
|
|
5
|
-
{
|
|
6
|
-
name: 'constructor',
|
|
7
|
-
functionType: FunctionType.SECRET,
|
|
8
|
-
isInternal: false,
|
|
9
|
-
parameters: [
|
|
10
|
-
{
|
|
11
|
-
name: 'constructorParam1',
|
|
12
|
-
type: {
|
|
13
|
-
kind: 'field',
|
|
14
|
-
},
|
|
15
|
-
visibility: ABIParameterVisibility.SECRET,
|
|
16
|
-
},
|
|
17
|
-
],
|
|
18
|
-
returnTypes: [],
|
|
19
|
-
bytecode: 'constructorBytecode',
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
name: 'mockFunction',
|
|
23
|
-
functionType: FunctionType.SECRET,
|
|
24
|
-
isInternal: false,
|
|
25
|
-
parameters: [
|
|
26
|
-
{
|
|
27
|
-
name: 'fieldParam',
|
|
28
|
-
type: { kind: 'field' },
|
|
29
|
-
visibility: ABIParameterVisibility.SECRET,
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
name: 'boolParam',
|
|
33
|
-
type: { kind: 'boolean' },
|
|
34
|
-
visibility: ABIParameterVisibility.SECRET,
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
name: 'integerParam',
|
|
38
|
-
type: { kind: 'integer', sign: 'signed', width: 32 },
|
|
39
|
-
visibility: ABIParameterVisibility.SECRET,
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
name: 'arrayParam',
|
|
43
|
-
type: { kind: 'array', length: 3, type: { kind: 'field' } },
|
|
44
|
-
visibility: ABIParameterVisibility.SECRET,
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
name: 'structParam',
|
|
48
|
-
type: {
|
|
49
|
-
kind: 'struct',
|
|
50
|
-
fields: [
|
|
51
|
-
{ name: 'subField1', type: { kind: 'field' } },
|
|
52
|
-
{ name: 'subField2', type: { kind: 'boolean' } },
|
|
53
|
-
],
|
|
54
|
-
},
|
|
55
|
-
visibility: ABIParameterVisibility.SECRET,
|
|
56
|
-
},
|
|
57
|
-
],
|
|
58
|
-
returnTypes: [{ kind: 'boolean' }],
|
|
59
|
-
bytecode: 'mockBytecode',
|
|
60
|
-
},
|
|
61
|
-
],
|
|
62
|
-
};
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9tb2Nrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQWUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFnQjtJQUMxQyxJQUFJLEVBQUUsY0FBYztJQUNwQixTQUFTLEVBQUU7UUFDVDtZQUNFLElBQUksRUFBRSxhQUFhO1lBQ25CLFlBQVksRUFBRSxZQUFZLENBQUMsTUFBTTtZQUNqQyxVQUFVLEVBQUUsS0FBSztZQUNqQixVQUFVLEVBQUU7Z0JBQ1Y7b0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjtvQkFDekIsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBRSxPQUFPO3FCQUNkO29CQUNELFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNO2lCQUMxQzthQUNGO1lBQ0QsV0FBVyxFQUFFLEVBQUU7WUFDZixRQUFRLEVBQUUscUJBQXFCO1NBQ2hDO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsY0FBYztZQUNwQixZQUFZLEVBQUUsWUFBWSxDQUFDLE1BQU07WUFDakMsVUFBVSxFQUFFLEtBQUs7WUFDakIsVUFBVSxFQUFFO2dCQUNWO29CQUNFLElBQUksRUFBRSxZQUFZO29CQUNsQixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO29CQUN2QixVQUFVLEVBQUUsc0JBQXNCLENBQUMsTUFBTTtpQkFDMUM7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7b0JBQ3pCLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNO2lCQUMxQztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsY0FBYztvQkFDcEIsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7b0JBQ3BELFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNO2lCQUMxQztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRTtvQkFDM0QsVUFBVSxFQUFFLHNCQUFzQixDQUFDLE1BQU07aUJBQzFDO2dCQUNEO29CQUNFLElBQUksRUFBRSxhQUFhO29CQUNuQixJQUFJLEVBQUU7d0JBQ0osSUFBSSxFQUFFLFFBQVE7d0JBQ2QsTUFBTSxFQUFFOzRCQUNOLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUU7NEJBQzlDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUU7eUJBQ2pEO3FCQUNGO29CQUNELFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNO2lCQUMxQzthQUNGO1lBQ0QsV0FBVyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDbEMsUUFBUSxFQUFFLGNBQWM7U0FDekI7S0FDRjtDQUNGLENBQUMifQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../src/test/utils.test.ts"],"names":[],"mappings":""}
|
package/dest/test/utils.test.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
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.getAccounts).toHaveBeenCalledTimes(0);
|
|
28
|
-
expect(result).toEqual(aztecAddress);
|
|
29
|
-
// returns an address found in the aztec client
|
|
30
|
-
const completeAddress = await CompleteAddress.random();
|
|
31
|
-
client.getAccounts.mockResolvedValueOnce([completeAddress]);
|
|
32
|
-
const resultWithoutString = await getTxSender(client);
|
|
33
|
-
expect(client.getAccounts).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.getAccounts.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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
|
package/dest/utils.d.ts
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
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
|
package/dest/utils.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
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.getAccounts();
|
|
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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
|