@aztec/cli 0.7.0 → 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 +18 -5
- 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 -398
- 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/client.test.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { mock } from 'jest-mock-extended';
|
|
2
|
-
import { checkServerVersion } from './client.js';
|
|
3
|
-
describe('client', () => {
|
|
4
|
-
describe('checkServerVersion', () => {
|
|
5
|
-
let rpc;
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
rpc = mock();
|
|
8
|
-
});
|
|
9
|
-
it('checks versions match', async () => {
|
|
10
|
-
rpc.getNodeInfo.mockResolvedValue({ client: 'rpc@0.1.0-alpha47' });
|
|
11
|
-
await checkServerVersion(rpc, '0.1.0-alpha47');
|
|
12
|
-
});
|
|
13
|
-
it('reports mismatch on older rpc version', async () => {
|
|
14
|
-
rpc.getNodeInfo.mockResolvedValue({ client: 'rpc@0.1.0-alpha47' });
|
|
15
|
-
await expect(checkServerVersion(rpc, '0.1.0-alpha48')).rejects.toThrowError(/is older than the expected by this CLI/);
|
|
16
|
-
});
|
|
17
|
-
it('reports mismatch on newer rpc version', async () => {
|
|
18
|
-
rpc.getNodeInfo.mockResolvedValue({ client: 'rpc@0.1.0-alpha48' });
|
|
19
|
-
await expect(checkServerVersion(rpc, '0.1.0-alpha47')).rejects.toThrowError(/is newer than the expected by this CLI/);
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xpZW50LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFhLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVqRCxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtJQUN0QixRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLElBQUksR0FBd0IsQ0FBQztRQUU3QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsR0FBRyxHQUFHLElBQUksRUFBWSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVCQUF1QixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JDLEdBQUcsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQWMsQ0FBQyxDQUFDO1lBQy9FLE1BQU0sa0JBQWtCLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JELEdBQUcsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQWMsQ0FBQyxDQUFDO1lBQy9FLE1BQU0sTUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQ3pFLHdDQUF3QyxDQUN6QyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdUNBQXVDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDckQsR0FBRyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBYyxDQUFDLENBQUM7WUFDL0UsTUFBTSxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FDekUsd0NBQXdDLENBQ3pDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMifQ==
|
package/dest/encoding.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { ABIParameter, StructType } from '@aztec/foundation/abi';
|
|
2
|
-
/**
|
|
3
|
-
* Parses a hex string into an ABI struct type.
|
|
4
|
-
* @param str - The encoded hex string.
|
|
5
|
-
* @param abiType - The ABI Struct type.
|
|
6
|
-
* @returns An object in the ABI struct type's format.
|
|
7
|
-
*/
|
|
8
|
-
export declare function parseStructString(str: string, abiType: StructType): any;
|
|
9
|
-
/**
|
|
10
|
-
* Tries to encode function args to their equivalent TS type.
|
|
11
|
-
* @param args - An array of function's / constructor's args.
|
|
12
|
-
* @returns The encoded array.
|
|
13
|
-
*/
|
|
14
|
-
export declare function encodeArgs(args: any[], params: ABIParameter[]): any[];
|
|
15
|
-
//# sourceMappingURL=encoding.d.ts.map
|
package/dest/encoding.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../src/encoding.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAW,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE1E;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,OAcjE;AA8DD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,SAY7D"}
|
package/dest/encoding.js
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { Fr } from '@aztec/aztec.js';
|
|
2
|
-
/**
|
|
3
|
-
* Parses a hex string into an ABI struct type.
|
|
4
|
-
* @param str - The encoded hex string.
|
|
5
|
-
* @param abiType - The ABI Struct type.
|
|
6
|
-
* @returns An object in the ABI struct type's format.
|
|
7
|
-
*/
|
|
8
|
-
export function parseStructString(str, abiType) {
|
|
9
|
-
// Assing string bytes to struct fields.
|
|
10
|
-
const buf = Buffer.from(str.replace(/^0x/i, ''), 'hex');
|
|
11
|
-
const struct = {};
|
|
12
|
-
let byteIndex = 0;
|
|
13
|
-
let argIndex = 0;
|
|
14
|
-
while (byteIndex < buf.length) {
|
|
15
|
-
const { name } = abiType.fields[argIndex];
|
|
16
|
-
struct[name] = Fr.fromBuffer(buf.subarray(byteIndex, byteIndex + 32));
|
|
17
|
-
byteIndex += 32;
|
|
18
|
-
argIndex += 1;
|
|
19
|
-
}
|
|
20
|
-
return struct;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Helper function to encode CLI string args to an appropriate JS type.
|
|
24
|
-
* @param arg - The CLI argument.
|
|
25
|
-
* @param abiType - The type as described by the contract's ABI.
|
|
26
|
-
* @returns The encoded argument.
|
|
27
|
-
*/
|
|
28
|
-
function encodeArg(arg, abiType, name) {
|
|
29
|
-
const { kind } = abiType;
|
|
30
|
-
if (kind === 'field' || kind === 'integer') {
|
|
31
|
-
let res;
|
|
32
|
-
try {
|
|
33
|
-
res = BigInt(arg);
|
|
34
|
-
}
|
|
35
|
-
catch (err) {
|
|
36
|
-
throw new Error(`Invalid value passed for ${name}. Could not parse ${arg} as a${kind === 'integer' ? 'n' : ''} ${kind}.`);
|
|
37
|
-
}
|
|
38
|
-
return res;
|
|
39
|
-
}
|
|
40
|
-
else if (kind === 'boolean') {
|
|
41
|
-
if (arg === 'true')
|
|
42
|
-
return true;
|
|
43
|
-
if (arg === 'false')
|
|
44
|
-
return false;
|
|
45
|
-
else
|
|
46
|
-
throw Error(`Invalid boolean value passed for ${name}: ${arg}.`);
|
|
47
|
-
}
|
|
48
|
-
else if (kind === 'array') {
|
|
49
|
-
let arr;
|
|
50
|
-
const res = [];
|
|
51
|
-
try {
|
|
52
|
-
arr = JSON.parse(arg);
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
throw new Error(`Unable to parse arg ${arg} as array for ${name} parameter`);
|
|
56
|
-
}
|
|
57
|
-
if (!Array.isArray(arr))
|
|
58
|
-
throw Error(`Invalid argument ${arg} passed for array parameter ${name}.`);
|
|
59
|
-
if (arr.length !== abiType.length)
|
|
60
|
-
throw Error(`Invalid array length passed for ${name}. Expected ${abiType.length}, received ${arr.length}.`);
|
|
61
|
-
for (let i = 0; i < abiType.length; i += 1) {
|
|
62
|
-
res.push(encodeArg(arr[i], abiType.type, name));
|
|
63
|
-
}
|
|
64
|
-
return res;
|
|
65
|
-
}
|
|
66
|
-
else if (kind === 'struct') {
|
|
67
|
-
// check if input is encoded long string
|
|
68
|
-
if (arg.startsWith('0x')) {
|
|
69
|
-
return parseStructString(arg, abiType);
|
|
70
|
-
}
|
|
71
|
-
let obj;
|
|
72
|
-
try {
|
|
73
|
-
obj = JSON.parse(arg);
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
throw new Error(`Unable to parse arg ${arg} as struct`);
|
|
77
|
-
}
|
|
78
|
-
if (Array.isArray(obj))
|
|
79
|
-
throw Error(`Array passed for arg ${name}. Expected a struct.`);
|
|
80
|
-
const res = [];
|
|
81
|
-
for (const field of abiType.fields) {
|
|
82
|
-
// Remove field name from list as it's present
|
|
83
|
-
const arg = obj[field.name];
|
|
84
|
-
if (!arg)
|
|
85
|
-
throw Error(`Expected field ${field.name} not found in struct ${name}.`);
|
|
86
|
-
res.push(encodeArg(obj[field.name], field.type, field.name));
|
|
87
|
-
}
|
|
88
|
-
return res;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Tries to encode function args to their equivalent TS type.
|
|
93
|
-
* @param args - An array of function's / constructor's args.
|
|
94
|
-
* @returns The encoded array.
|
|
95
|
-
*/
|
|
96
|
-
export function encodeArgs(args, params) {
|
|
97
|
-
if (args.length !== params.length) {
|
|
98
|
-
throw new Error(`Invalid number of args provided. Expected: ${params.length}, received: ${args.length}\nReceived args: ${args}`);
|
|
99
|
-
}
|
|
100
|
-
return args
|
|
101
|
-
.map((arg, index) => {
|
|
102
|
-
const { type, name } = params[index];
|
|
103
|
-
return encodeArg(arg, type, name);
|
|
104
|
-
})
|
|
105
|
-
.flat();
|
|
106
|
-
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZW5jb2RpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3JDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEdBQVcsRUFBRSxPQUFtQjtJQUNoRSx3Q0FBd0M7SUFDeEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4RCxNQUFNLE1BQU0sR0FBUSxFQUFFLENBQUM7SUFDdkIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNqQixPQUFPLFNBQVMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFO1FBQzdCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDaEIsUUFBUSxJQUFJLENBQUMsQ0FBQztLQUNmO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxTQUFTLENBQUMsR0FBVyxFQUFFLE9BQWdCLEVBQUUsSUFBWTtJQUM1RCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLElBQUksSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1FBQzFDLElBQUksR0FBVyxDQUFDO1FBQ2hCLElB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
|
package/dest/index.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { DebugLogger, LogFn } from '@aztec/foundation/log';
|
|
2
|
-
import { Command } from 'commander';
|
|
3
|
-
/**
|
|
4
|
-
* Returns commander program that defines the CLI.
|
|
5
|
-
* @param log - Console logger.
|
|
6
|
-
* @param debugLogger - Debug logger.
|
|
7
|
-
* @returns The CLI.
|
|
8
|
-
*/
|
|
9
|
-
export declare function getProgram(log: LogFn, debugLogger: DebugLogger): Command;
|
|
10
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dest/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAK3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CA6cxE"}
|
package/dest/index.js
DELETED
|
@@ -1,398 +0,0 @@
|
|
|
1
|
-
import { AztecAddress, Contract, ContractDeployer, Fr, GrumpkinScalar, Point, generatePublicKey, getSchnorrAccount, isContractDeployed, } from '@aztec/aztec.js';
|
|
2
|
-
import { decodeFunctionSignatureWithParameterNames } from '@aztec/foundation/abi';
|
|
3
|
-
import { JsonStringify } from '@aztec/foundation/json-rpc';
|
|
4
|
-
import { fileURLToPath } from '@aztec/foundation/url';
|
|
5
|
-
import { compileContract, generateNoirInterface, generateTypescriptInterface } from '@aztec/noir-compiler/cli';
|
|
6
|
-
import { CompleteAddress, L2BlockL2Logs, TxHash } from '@aztec/types';
|
|
7
|
-
import { Command } from 'commander';
|
|
8
|
-
import { readFileSync } from 'fs';
|
|
9
|
-
import startCase from 'lodash.startcase';
|
|
10
|
-
import { dirname, resolve } from 'path';
|
|
11
|
-
import { mnemonicToAccount } from 'viem/accounts';
|
|
12
|
-
import { createCompatibleClient } from './client.js';
|
|
13
|
-
import { encodeArgs, parseStructString } from './encoding.js';
|
|
14
|
-
import { deployAztecContracts, getAbiFunction, getContractAbi, getExampleContractArtifacts, getTxSender, prepTx, } from './utils.js';
|
|
15
|
-
const accountCreationSalt = Fr.ZERO;
|
|
16
|
-
const stripLeadingHex = (hex) => {
|
|
17
|
-
if (hex.length > 2 && hex.startsWith('0x')) {
|
|
18
|
-
return hex.substring(2);
|
|
19
|
-
}
|
|
20
|
-
return hex;
|
|
21
|
-
};
|
|
22
|
-
const { ETHEREUM_HOST, AZTEC_RPC_HOST, PRIVATE_KEY, API_KEY } = process.env;
|
|
23
|
-
/**
|
|
24
|
-
* Returns commander program that defines the CLI.
|
|
25
|
-
* @param log - Console logger.
|
|
26
|
-
* @param debugLogger - Debug logger.
|
|
27
|
-
* @returns The CLI.
|
|
28
|
-
*/
|
|
29
|
-
export function getProgram(log, debugLogger) {
|
|
30
|
-
const program = new Command();
|
|
31
|
-
const packageJsonPath = resolve(dirname(fileURLToPath(import.meta.url)), '../package.json');
|
|
32
|
-
const version = JSON.parse(readFileSync(packageJsonPath).toString()).version;
|
|
33
|
-
program.name('aztec-cli').description('CLI for interacting with Aztec.').version(version);
|
|
34
|
-
program
|
|
35
|
-
.command('deploy-l1-contracts')
|
|
36
|
-
.description('Deploys all necessary Ethereum contracts for Aztec.')
|
|
37
|
-
.option('-u, --rpc-url <string>', 'Url of the ethereum host. Chain identifiers localhost and testnet can be used', ETHEREUM_HOST || 'http://localhost:8545')
|
|
38
|
-
.option('-a, --api-key <string>', 'Api key for the ethereum host', API_KEY)
|
|
39
|
-
.option('-p, --private-key <string>', 'The private key to use for deployment', PRIVATE_KEY)
|
|
40
|
-
.option('-m, --mnemonic <string>', 'The mnemonic to use in deployment', 'test test test test test test test test test test test junk')
|
|
41
|
-
.action(async (options) => {
|
|
42
|
-
const { rollupAddress, registryAddress, inboxAddress, outboxAddress, contractDeploymentEmitterAddress } = await deployAztecContracts(options.rpcUrl, options.apiKey ?? '', options.privateKey, options.mnemonic, debugLogger);
|
|
43
|
-
log('\n');
|
|
44
|
-
log(`Rollup Address: ${rollupAddress.toString()}`);
|
|
45
|
-
log(`Registry Address: ${registryAddress.toString()}`);
|
|
46
|
-
log(`L1 -> L2 Inbox Address: ${inboxAddress.toString()}`);
|
|
47
|
-
log(`L2 -> L1 Outbox address: ${outboxAddress.toString()}`);
|
|
48
|
-
log(`Contract Deployment Emitter Address: ${contractDeploymentEmitterAddress.toString()}`);
|
|
49
|
-
log('\n');
|
|
50
|
-
});
|
|
51
|
-
program
|
|
52
|
-
.command('generate-private-key')
|
|
53
|
-
.summary('Generates an encryption private key.')
|
|
54
|
-
.description('Generates a private key which fits into the scalar field used by Grumpkin curve, can be used as an encryption private key.')
|
|
55
|
-
.option('-m, --mnemonic', 'An optional mnemonic string used for the private key generation. If not provided, random private key will be generated.')
|
|
56
|
-
.action(async (options) => {
|
|
57
|
-
let privKey;
|
|
58
|
-
let publicKey;
|
|
59
|
-
if (options.mnemonic) {
|
|
60
|
-
const acc = mnemonicToAccount(options.mnemonic);
|
|
61
|
-
// TODO(#2052): This reduction is not secure enough. TACKLE THIS ISSUE BEFORE MAINNET.
|
|
62
|
-
const key = GrumpkinScalar.fromBufferWithReduction(Buffer.from(acc.getHdKey().privateKey));
|
|
63
|
-
publicKey = await generatePublicKey(key);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
const key = GrumpkinScalar.random();
|
|
67
|
-
privKey = key.toString(true);
|
|
68
|
-
publicKey = await generatePublicKey(key);
|
|
69
|
-
}
|
|
70
|
-
log(`\nPrivate Key: ${privKey}\nPublic Key: ${publicKey.toString()}\n`);
|
|
71
|
-
});
|
|
72
|
-
program
|
|
73
|
-
.command('create-account')
|
|
74
|
-
.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).')
|
|
75
|
-
.summary('Creates an aztec account that can be used for sending transactions.')
|
|
76
|
-
.option('-k, --private-key <string>', 'Private key for note encryption and transaction signing. Uses random by default.', PRIVATE_KEY)
|
|
77
|
-
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
78
|
-
.action(async (options) => {
|
|
79
|
-
const client = await createCompatibleClient(options.rpcUrl, debugLogger);
|
|
80
|
-
const privateKey = options.privateKey
|
|
81
|
-
? GrumpkinScalar.fromString(stripLeadingHex(options.privateKey))
|
|
82
|
-
: GrumpkinScalar.random();
|
|
83
|
-
const account = getSchnorrAccount(client, privateKey, privateKey, accountCreationSalt);
|
|
84
|
-
const wallet = await account.waitDeploy();
|
|
85
|
-
const { address, publicKey, partialAddress } = wallet.getCompleteAddress();
|
|
86
|
-
log(`\nCreated new account:\n`);
|
|
87
|
-
log(`Address: ${address.toString()}`);
|
|
88
|
-
log(`Public key: ${publicKey.toString()}`);
|
|
89
|
-
if (!options.privateKey)
|
|
90
|
-
log(`Private key: ${privateKey.toString(true)}`);
|
|
91
|
-
log(`Partial address: ${partialAddress.toString()}`);
|
|
92
|
-
});
|
|
93
|
-
program
|
|
94
|
-
.command('deploy')
|
|
95
|
-
.description('Deploys a compiled Noir contract to Aztec.')
|
|
96
|
-
.argument('<abi>', "A compiled Noir contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts")
|
|
97
|
-
.option('-a, --args <constructorArgs...>', 'Contract constructor arguments', [])
|
|
98
|
-
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
99
|
-
.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.')
|
|
100
|
-
.option('-s, --salt <string>', 'Optional deployment salt as a hex string for generating the deployment address.')
|
|
101
|
-
.action(async (abiPath, options) => {
|
|
102
|
-
const contractAbi = await getContractAbi(abiPath, log);
|
|
103
|
-
const constructorAbi = contractAbi.functions.find(({ name }) => name === 'constructor');
|
|
104
|
-
const client = await createCompatibleClient(options.rpcUrl, debugLogger);
|
|
105
|
-
const publicKey = options.publicKey ? Point.fromString(options.publicKey) : undefined;
|
|
106
|
-
const salt = options.salt ? Fr.fromBuffer(Buffer.from(stripLeadingHex(options.salt), 'hex')) : undefined;
|
|
107
|
-
const deployer = new ContractDeployer(contractAbi, client, publicKey);
|
|
108
|
-
const constructor = getAbiFunction(contractAbi, 'constructor');
|
|
109
|
-
if (!constructor)
|
|
110
|
-
throw new Error(`Constructor not found in contract ABI`);
|
|
111
|
-
if (constructor.parameters.length !== options.args.length) {
|
|
112
|
-
throw new Error(`Invalid number of args passed (expected ${constructor.parameters.length} but got ${options.args.length})`);
|
|
113
|
-
}
|
|
114
|
-
debugLogger(`Input arguments: ${options.args.map((x) => `"${x}"`).join(', ')}`);
|
|
115
|
-
const args = encodeArgs(options.args, constructorAbi.parameters);
|
|
116
|
-
debugLogger(`Encoded arguments: ${args.join(', ')}`);
|
|
117
|
-
const tx = deployer.deploy(...args).send({ contractAddressSalt: salt });
|
|
118
|
-
debugLogger(`Deploy tx sent with hash ${await tx.getTxHash()}`);
|
|
119
|
-
const deployed = await tx.wait();
|
|
120
|
-
log(`\nContract deployed at ${deployed.contractAddress.toString()}\n`);
|
|
121
|
-
});
|
|
122
|
-
program
|
|
123
|
-
.command('check-deploy')
|
|
124
|
-
.description('Checks if a contract is deployed to the specified Aztec address.')
|
|
125
|
-
.requiredOption('-ca, --contract-address <address>', 'An Aztec address to check if contract has been deployed to.')
|
|
126
|
-
.option('-u, --rpc-url <url>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
127
|
-
.action(async (options) => {
|
|
128
|
-
const client = await createCompatibleClient(options.rpcUrl, debugLogger);
|
|
129
|
-
const address = AztecAddress.fromString(options.contractAddress);
|
|
130
|
-
const isDeployed = await isContractDeployed(client, address);
|
|
131
|
-
if (isDeployed)
|
|
132
|
-
log(`\nContract found at ${address.toString()}\n`);
|
|
133
|
-
else
|
|
134
|
-
log(`\nNo contract found at ${address.toString()}\n`);
|
|
135
|
-
});
|
|
136
|
-
program
|
|
137
|
-
.command('get-tx-receipt')
|
|
138
|
-
.description('Gets the receipt for the specified transaction hash.')
|
|
139
|
-
.argument('<txHash>', 'A transaction hash to get the receipt for.')
|
|
140
|
-
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
141
|
-
.action(async (_txHash, options) => {
|
|
142
|
-
const client = await createCompatibleClient(options.rpcUrl, debugLogger);
|
|
143
|
-
const txHash = TxHash.fromString(_txHash);
|
|
144
|
-
const receipt = await client.getTxReceipt(txHash);
|
|
145
|
-
if (!receipt) {
|
|
146
|
-
log(`No receipt found for transaction hash ${_txHash}`);
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
log(`\nTransaction receipt: \n${JsonStringify(receipt, true)}\n`);
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
program
|
|
153
|
-
.command('get-contract-data')
|
|
154
|
-
.description('Gets information about the Aztec contract deployed at the specified address.')
|
|
155
|
-
.argument('<contractAddress>', 'Aztec address of the contract.')
|
|
156
|
-
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
157
|
-
.option('-b, --include-bytecode <boolean>', "Include the contract's public function bytecode, if any.", false)
|
|
158
|
-
.action(async (contractAddress, options) => {
|
|
159
|
-
const client = await createCompatibleClient(options.rpcUrl, debugLogger);
|
|
160
|
-
const address = AztecAddress.fromString(contractAddress);
|
|
161
|
-
const contractDataWithOrWithoutBytecode = options.includeBytecode
|
|
162
|
-
? await client.getExtendedContractData(address)
|
|
163
|
-
: await client.getContractData(address);
|
|
164
|
-
if (!contractDataWithOrWithoutBytecode) {
|
|
165
|
-
log(`No contract data found at ${contractAddress}`);
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
let contractData;
|
|
169
|
-
if ('contractData' in contractDataWithOrWithoutBytecode) {
|
|
170
|
-
contractData = contractDataWithOrWithoutBytecode.contractData;
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
contractData = contractDataWithOrWithoutBytecode;
|
|
174
|
-
}
|
|
175
|
-
log(`\nContract Data: \nAddress: ${contractData.contractAddress.toString()}`);
|
|
176
|
-
log(`Portal: ${contractData.portalContractAddress.toString()}`);
|
|
177
|
-
if ('bytecode' in contractDataWithOrWithoutBytecode) {
|
|
178
|
-
log(`Bytecode: ${contractDataWithOrWithoutBytecode.bytecode}`);
|
|
179
|
-
}
|
|
180
|
-
log('\n');
|
|
181
|
-
});
|
|
182
|
-
program
|
|
183
|
-
.command('get-logs')
|
|
184
|
-
.description('Gets all the unencrypted logs from L2 blocks in the range specified.')
|
|
185
|
-
.option('-f, --from <blockNum>', 'Initial block number for getting logs (defaults to 1).')
|
|
186
|
-
.option('-l, --limit <blockCount>', 'How many blocks to fetch (defaults to 100).')
|
|
187
|
-
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
188
|
-
.action(async (options) => {
|
|
189
|
-
const { from, limit } = options;
|
|
190
|
-
const fromBlock = from ? parseInt(from) : 1;
|
|
191
|
-
const limitCount = limit ? parseInt(limit) : 100;
|
|
192
|
-
const client = await createCompatibleClient(options.rpcUrl, debugLogger);
|
|
193
|
-
const logs = await client.getUnencryptedLogs(fromBlock, limitCount);
|
|
194
|
-
if (!logs.length) {
|
|
195
|
-
log(`No logs found in blocks ${fromBlock} to ${fromBlock + limitCount}`);
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
log('Logs found: \n');
|
|
199
|
-
L2BlockL2Logs.unrollLogs(logs).forEach(fnLog => log(`${fnLog.toString('ascii')}\n`));
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
program
|
|
203
|
-
.command('register-recipient')
|
|
204
|
-
.description('Register a recipient in the Aztec RPC.')
|
|
205
|
-
.requiredOption('-a, --address <aztecAddress>', "The account's Aztec address.")
|
|
206
|
-
.requiredOption('-p, --public-key <publicKey>', 'The account public key.')
|
|
207
|
-
.requiredOption('-pa, --partial-address <partialAddress', 'The partially computed address of the account contract.')
|
|
208
|
-
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
209
|
-
.action(async (options) => {
|
|
210
|
-
const client = await createCompatibleClient(options.rpcUrl, debugLogger);
|
|
211
|
-
const address = AztecAddress.fromString(options.address);
|
|
212
|
-
const publicKey = Point.fromString(options.publicKey);
|
|
213
|
-
const partialAddress = Fr.fromString(options.partialAddress);
|
|
214
|
-
await client.registerRecipient(await CompleteAddress.create(address, publicKey, partialAddress));
|
|
215
|
-
log(`\nRegistered details for account with address: ${options.address}\n`);
|
|
216
|
-
});
|
|
217
|
-
program
|
|
218
|
-
.command('get-accounts')
|
|
219
|
-
.description('Gets all the Aztec accounts stored in the Aztec RPC.')
|
|
220
|
-
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
221
|
-
.action(async (options) => {
|
|
222
|
-
const client = await createCompatibleClient(options.rpcUrl, debugLogger);
|
|
223
|
-
const accounts = await client.getAccounts();
|
|
224
|
-
if (!accounts.length) {
|
|
225
|
-
log('No accounts found.');
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
log(`Accounts found: \n`);
|
|
229
|
-
for (const account of accounts) {
|
|
230
|
-
log(account.toReadableString());
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
program
|
|
235
|
-
.command('get-account')
|
|
236
|
-
.description('Gets an account given its Aztec address.')
|
|
237
|
-
.argument('<address>', 'The Aztec address to get account for')
|
|
238
|
-
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
239
|
-
.action(async (_address, options) => {
|
|
240
|
-
const client = await createCompatibleClient(options.rpcUrl, debugLogger);
|
|
241
|
-
const address = AztecAddress.fromString(_address);
|
|
242
|
-
const account = await client.getAccount(address);
|
|
243
|
-
if (!account) {
|
|
244
|
-
log(`Unknown account ${_address}`);
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
log(account.toReadableString());
|
|
248
|
-
}
|
|
249
|
-
});
|
|
250
|
-
program
|
|
251
|
-
.command('get-recipients')
|
|
252
|
-
.description('Gets all the recipients stored in the Aztec RPC.')
|
|
253
|
-
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
254
|
-
.action(async (options) => {
|
|
255
|
-
const client = await createCompatibleClient(options.rpcUrl, debugLogger);
|
|
256
|
-
const recipients = await client.getRecipients();
|
|
257
|
-
if (!recipients.length) {
|
|
258
|
-
log('No recipients found.');
|
|
259
|
-
}
|
|
260
|
-
else {
|
|
261
|
-
log(`Recipients found: \n`);
|
|
262
|
-
for (const recipient of recipients) {
|
|
263
|
-
log(recipient.toReadableString());
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
});
|
|
267
|
-
program
|
|
268
|
-
.command('get-recipient')
|
|
269
|
-
.description('Gets a recipient given its Aztec address.')
|
|
270
|
-
.argument('<address>', 'The Aztec address to get recipient for')
|
|
271
|
-
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
272
|
-
.action(async (_address, options) => {
|
|
273
|
-
const client = await createCompatibleClient(options.rpcUrl, debugLogger);
|
|
274
|
-
const address = AztecAddress.fromString(_address);
|
|
275
|
-
const recipient = await client.getRecipient(address);
|
|
276
|
-
if (!recipient) {
|
|
277
|
-
log(`Unknown recipient ${_address}`);
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
280
|
-
log(recipient.toReadableString());
|
|
281
|
-
}
|
|
282
|
-
});
|
|
283
|
-
program
|
|
284
|
-
.command('send')
|
|
285
|
-
.description('Calls a function on an Aztec contract.')
|
|
286
|
-
.argument('<functionName>', 'Name of Function to view')
|
|
287
|
-
.option('-a, --args [functionArgs...]', 'Function arguments', [])
|
|
288
|
-
.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")
|
|
289
|
-
.requiredOption('-ca, --contract-address <address>', 'Aztec address of the contract.')
|
|
290
|
-
.option('-k, --private-key <string>', "The sender's private key.", PRIVATE_KEY)
|
|
291
|
-
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
292
|
-
.action(async (functionName, options) => {
|
|
293
|
-
const { contractAddress, functionArgs, contractAbi } = await prepTx(options.contractAbi, options.contractAddress, functionName, options.args, log);
|
|
294
|
-
const fnAbi = getAbiFunction(contractAbi, functionName);
|
|
295
|
-
if (fnAbi.parameters.length !== options.args.length) {
|
|
296
|
-
throw Error(`Invalid number of args passed. Expected ${fnAbi.parameters.length}; Received: ${options.args.length}`);
|
|
297
|
-
}
|
|
298
|
-
const privateKey = GrumpkinScalar.fromString(stripLeadingHex(options.privateKey));
|
|
299
|
-
const client = await createCompatibleClient(options.rpcUrl, debugLogger);
|
|
300
|
-
const wallet = await getSchnorrAccount(client, privateKey, privateKey, accountCreationSalt).getWallet();
|
|
301
|
-
const contract = await Contract.at(contractAddress, contractAbi, wallet);
|
|
302
|
-
const tx = contract.methods[functionName](...functionArgs).send();
|
|
303
|
-
await tx.wait();
|
|
304
|
-
log('\nTransaction has been mined');
|
|
305
|
-
const receipt = await tx.getReceipt();
|
|
306
|
-
log(`Transaction hash: ${(await tx.getTxHash()).toString()}`);
|
|
307
|
-
log(`Status: ${receipt.status}\n`);
|
|
308
|
-
log(`Block number: ${receipt.blockNumber}`);
|
|
309
|
-
log(`Block hash: ${receipt.blockHash?.toString('hex')}`);
|
|
310
|
-
});
|
|
311
|
-
program
|
|
312
|
-
.command('call')
|
|
313
|
-
.description('Simulates the execution of a view (read-only) function on a deployed contract, without modifying state.')
|
|
314
|
-
.argument('<functionName>', 'Name of Function to view')
|
|
315
|
-
.option('-a, --args [functionArgs...]', 'Function arguments', [])
|
|
316
|
-
.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")
|
|
317
|
-
.requiredOption('-ca, --contract-address <address>', 'Aztec address of the contract.')
|
|
318
|
-
.option('-f, --from <string>', 'Public key of the TX viewer. If empty, will try to find account in RPC.')
|
|
319
|
-
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
320
|
-
.action(async (functionName, options) => {
|
|
321
|
-
const { contractAddress, functionArgs, contractAbi } = await prepTx(options.contractAbi, options.contractAddress, functionName, options.args, log);
|
|
322
|
-
const fnAbi = getAbiFunction(contractAbi, functionName);
|
|
323
|
-
if (fnAbi.parameters.length !== options.args.length) {
|
|
324
|
-
throw Error(`Invalid number of args passed. Expected ${fnAbi.parameters.length}; Received: ${options.args.length}`);
|
|
325
|
-
}
|
|
326
|
-
const client = await createCompatibleClient(options.rpcUrl, debugLogger);
|
|
327
|
-
const from = await getTxSender(client, options.from);
|
|
328
|
-
const result = await client.viewTx(functionName, functionArgs, contractAddress, from);
|
|
329
|
-
log('\nView result: ', result, '\n');
|
|
330
|
-
});
|
|
331
|
-
// Helper for users to decode hex strings into structs if needed.
|
|
332
|
-
program
|
|
333
|
-
.command('parse-parameter-struct')
|
|
334
|
-
.description("Helper for parsing an encoded string into a contract's parameter struct.")
|
|
335
|
-
.argument('<encodedString>', 'The encoded hex string')
|
|
336
|
-
.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")
|
|
337
|
-
.requiredOption('-p, --parameter <parameterName>', 'The name of the struct parameter to decode into')
|
|
338
|
-
.action(async (encodedString, options) => {
|
|
339
|
-
const contractAbi = await getContractAbi(options.contractAbi, log);
|
|
340
|
-
const parameterAbitype = contractAbi.functions
|
|
341
|
-
.map(({ parameters }) => parameters)
|
|
342
|
-
.flat()
|
|
343
|
-
.find(({ name, type }) => name === options.parameter && type.kind === 'struct');
|
|
344
|
-
if (!parameterAbitype) {
|
|
345
|
-
log(`No struct parameter found with name ${options.parameter}`);
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
const data = parseStructString(encodedString, parameterAbitype.type);
|
|
349
|
-
log(`\nStruct Data: \n${JsonStringify(data, true)}\n`);
|
|
350
|
-
});
|
|
351
|
-
program
|
|
352
|
-
.command('block-number')
|
|
353
|
-
.description('Gets the current Aztec L2 block number.')
|
|
354
|
-
.option('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
355
|
-
.action(async (options) => {
|
|
356
|
-
const client = await createCompatibleClient(options.rpcUrl, debugLogger);
|
|
357
|
-
const num = await client.getBlockNumber();
|
|
358
|
-
log(`${num}\n`);
|
|
359
|
-
});
|
|
360
|
-
program
|
|
361
|
-
.command('example-contracts')
|
|
362
|
-
.description('Lists the example contracts available to deploy from @aztec/noir-contracts')
|
|
363
|
-
.action(async () => {
|
|
364
|
-
const abisList = await getExampleContractArtifacts();
|
|
365
|
-
const names = Object.keys(abisList);
|
|
366
|
-
names.forEach(name => log(name));
|
|
367
|
-
});
|
|
368
|
-
program
|
|
369
|
-
.command('get-node-info')
|
|
370
|
-
.description('Gets the information of an aztec node at a URL.')
|
|
371
|
-
.requiredOption('-u, --rpc-url <string>', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080')
|
|
372
|
-
.action(async (options) => {
|
|
373
|
-
const client = await createCompatibleClient(options.rpcUrl, debugLogger);
|
|
374
|
-
const info = await client.getNodeInfo();
|
|
375
|
-
log(`\nNode Info:\n`);
|
|
376
|
-
Object.entries(info).map(([key, value]) => log(`${startCase(key)}: ${value}`));
|
|
377
|
-
});
|
|
378
|
-
program
|
|
379
|
-
.command('inspect-contract')
|
|
380
|
-
.description('Shows list of external callable functions for a contract')
|
|
381
|
-
.argument('<contractAbiFile>', `A compiled Noir contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts`)
|
|
382
|
-
.action(async (contractAbiFile) => {
|
|
383
|
-
const contractAbi = await getContractAbi(contractAbiFile, debugLogger);
|
|
384
|
-
const contractFns = contractAbi.functions.filter(f => !f.isInternal && f.name !== 'compute_note_hash_and_nullifier');
|
|
385
|
-
if (contractFns.length === 0) {
|
|
386
|
-
log(`No external functions found for contract ${contractAbi.name}`);
|
|
387
|
-
}
|
|
388
|
-
for (const fn of contractFns) {
|
|
389
|
-
const signature = decodeFunctionSignatureWithParameterNames(fn.name, fn.parameters);
|
|
390
|
-
log(`${fn.functionType} ${signature}`);
|
|
391
|
-
}
|
|
392
|
-
});
|
|
393
|
-
compileContract(program, 'compile', log);
|
|
394
|
-
generateTypescriptInterface(program, 'generate-typescript', log);
|
|
395
|
-
generateNoirInterface(program, 'generate-noir-interface', log);
|
|
396
|
-
return program;
|
|
397
|
-
}
|
|
398
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2hCLEVBQUUsRUFDRixjQUFjLEVBQ2QsS0FBSyxFQUNMLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsa0JBQWtCLEdBQ25CLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFjLHlDQUF5QyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0csT0FBTyxFQUFFLGVBQWUsRUFBZ0IsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVwRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDbEMsT0FBTyxTQUFTLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLGNBQWMsRUFDZCwyQkFBMkIsRUFDM0IsV0FBVyxFQUNYLE1BQU0sR0FDUCxNQUFNLFlBQVksQ0FBQztBQUVw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
|
package/dest/test/mocks.d.ts
DELETED
package/dest/test/mocks.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../src/test/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,WAAW,EAAgB,MAAM,uBAAuB,CAAC;AAE1F,eAAO,MAAM,eAAe,EAAE,WA4D7B,CAAC"}
|