@aztec/builder 0.0.1-commit.b655e406 → 0.0.1-commit.b6e433891
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/dest/bin/cli.d.ts +1 -1
- package/dest/contract-interface-gen/codegen.d.ts +2 -2
- package/dest/contract-interface-gen/codegen.d.ts.map +1 -1
- package/dest/contract-interface-gen/codegen.js +4 -0
- package/dest/contract-interface-gen/index.d.ts +2 -0
- package/dest/contract-interface-gen/index.d.ts.map +1 -0
- package/dest/contract-interface-gen/index.js +1 -0
- package/dest/contract-interface-gen/typescript.d.ts +1 -1
- package/dest/contract-interface-gen/typescript.d.ts.map +1 -1
- package/dest/contract-interface-gen/typescript.js +22 -15
- package/dest/index.d.ts +1 -1
- package/package.json +9 -10
- package/src/contract-interface-gen/codegen.ts +6 -0
- package/src/contract-interface-gen/index.ts +1 -0
- package/src/contract-interface-gen/typescript.ts +23 -14
package/dest/bin/cli.d.ts
CHANGED
|
@@ -5,5 +5,5 @@ export type GenerateCodeOptions = {
|
|
|
5
5
|
/**
|
|
6
6
|
* Generates Noir interface or Typescript interface for a folder or single file from a Noir compilation artifact.
|
|
7
7
|
*/
|
|
8
|
-
export declare function generateCode(outputPath: string, fileOrDirPath: string, opts?: GenerateCodeOptions): Promise<string[]>;
|
|
9
|
-
//# sourceMappingURL=
|
|
8
|
+
export declare function generateCode(outputPath: string, fileOrDirPath: string, opts?: GenerateCodeOptions): Promise<(string | undefined)[]>;
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWdlbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0LWludGVyZmFjZS1nZW4vY29kZWdlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZQSw0QkFBNEI7QUFDNUIsTUFBTSxNQUFNLG1CQUFtQixHQUFHO0lBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFBO0NBQUUsQ0FBQztBQUV0RDs7R0FFRztBQUNILHdCQUFzQixZQUFZLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLElBQUksR0FBRSxtQkFBd0IsbUNBa0IzRyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../src/contract-interface-gen/codegen.ts"],"names":[],"mappings":"AAYA,4BAA4B;AAC5B,MAAM,MAAM,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtD;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,GAAE,mBAAwB,
|
|
1
|
+
{"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../src/contract-interface-gen/codegen.ts"],"names":[],"mappings":"AAYA,4BAA4B;AAC5B,MAAM,MAAM,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtD;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,GAAE,mBAAwB,mCAkB3G"}
|
|
@@ -38,6 +38,10 @@ let cache = {};
|
|
|
38
38
|
}
|
|
39
39
|
const file = await readFile(noirAbiPath, 'utf8');
|
|
40
40
|
const contract = JSON.parse(file);
|
|
41
|
+
if (!Array.isArray(contract.functions)) {
|
|
42
|
+
console.log(`${fileName} is not a contract artifact. Skipping.`);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
41
45
|
const aztecAbi = loadContractArtifact(contract);
|
|
42
46
|
await mkdir(outputPath, {
|
|
43
47
|
recursive: true
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { generateTypescriptContractInterface } from './typescript.js';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdC1pbnRlcmZhY2UtZ2VuL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGlCQUFpQixDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract-interface-gen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { generateTypescriptContractInterface } from './typescript.js';
|
|
@@ -6,4 +6,4 @@ import { type ContractArtifact } from '@aztec/stdlib/abi';
|
|
|
6
6
|
* @returns The corresponding ts code.
|
|
7
7
|
*/
|
|
8
8
|
export declare function generateTypescriptContractInterface(input: ContractArtifact, artifactImportPath?: string): Promise<string>;
|
|
9
|
-
//# sourceMappingURL=
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0LWludGVyZmFjZS1nZW4vdHlwZXNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsS0FBSyxnQkFBZ0IsRUFhdEIsTUFBTSxtQkFBbUIsQ0FBQztBQStRM0I7Ozs7O0dBS0c7QUFDSCx3QkFBc0IsbUNBQW1DLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxtQkFrRDdHIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/contract-interface-gen/typescript.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/contract-interface-gen/typescript.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EAatB,MAAM,mBAAmB,CAAC;AA+Q3B;;;;;GAKG;AACH,wBAAsB,mCAAmC,CAAC,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,MAAM,mBAkD7G"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EventSelector, decodeFunctionSignature, getAllFunctionAbis, getDefaultInitializer, isAztecAddressStruct, isBoundedVecStruct, isEthAddressStruct, isFunctionSelectorStruct, isWrappedFieldStruct } from '@aztec/stdlib/abi';
|
|
1
|
+
import { EventSelector, decodeFunctionSignature, getAllFunctionAbis, getDefaultInitializer, isAztecAddressStruct, isBoundedVecStruct, isEthAddressStruct, isFunctionSelectorStruct, isOptionStruct, isPublicKeysStruct, isWrappedFieldStruct } from '@aztec/stdlib/abi';
|
|
2
2
|
/**
|
|
3
3
|
* Returns the corresponding typescript type for a given Noir type.
|
|
4
4
|
* @param type - The input Noir type.
|
|
@@ -28,11 +28,19 @@ import { EventSelector, decodeFunctionSignature, getAllFunctionAbis, getDefaultI
|
|
|
28
28
|
if (isWrappedFieldStruct(type)) {
|
|
29
29
|
return 'WrappedFieldLike';
|
|
30
30
|
}
|
|
31
|
+
if (isPublicKeysStruct(type)) {
|
|
32
|
+
// PublicKeys are special cased due to them being part of the preimage of contract addresses.
|
|
33
|
+
// The proper type is expected by the TS code that deals with the ContractInstanceRegistry protocol contract.
|
|
34
|
+
return 'PublicKeys';
|
|
35
|
+
}
|
|
31
36
|
if (isBoundedVecStruct(type)) {
|
|
32
37
|
// To make BoundedVec easier to work with, we expect a simple array on the input and then we encode it
|
|
33
38
|
// as a BoundedVec in the ArgumentsEncoder.
|
|
34
39
|
return `${abiTypeToTypescript(type.fields[0].type)}`;
|
|
35
40
|
}
|
|
41
|
+
if (isOptionStruct(type)) {
|
|
42
|
+
return `OptionLike<${abiTypeToTypescript(type.fields[1].type)}>`;
|
|
43
|
+
}
|
|
36
44
|
return `{ ${type.fields.map((f)=>`${f.name}: ${abiTypeToTypescript(f.type)}`).join(', ')} }`;
|
|
37
45
|
default:
|
|
38
46
|
throw new Error(`Unknown type ${type.kind}`);
|
|
@@ -69,14 +77,14 @@ import { EventSelector, decodeFunctionSignature, getAllFunctionAbis, getDefaultI
|
|
|
69
77
|
* Creates a tx to deploy a new instance of this contract.
|
|
70
78
|
*/
|
|
71
79
|
public static deploy(wallet: Wallet, ${args}) {
|
|
72
|
-
return new DeployMethod<${contractName}>(PublicKeys.default(), wallet, ${artifactName}, ${contractName}.at, Array.from(arguments).slice(1));
|
|
80
|
+
return new DeployMethod<${contractName}>(PublicKeys.default(), wallet, ${artifactName}, (instance, wallet) => ${contractName}.at(instance.address, wallet), Array.from(arguments).slice(1));
|
|
73
81
|
}
|
|
74
82
|
|
|
75
83
|
/**
|
|
76
84
|
* Creates a tx to deploy a new instance of this contract using the specified public keys hash to derive the address.
|
|
77
85
|
*/
|
|
78
86
|
public static deployWithPublicKeys(publicKeys: PublicKeys, wallet: Wallet, ${args}) {
|
|
79
|
-
return new DeployMethod<${contractName}>(publicKeys, wallet, ${artifactName}, ${contractName}.at, Array.from(arguments).slice(2));
|
|
87
|
+
return new DeployMethod<${contractName}>(publicKeys, wallet, ${artifactName}, (instance, wallet) => ${contractName}.at(instance.address, wallet), Array.from(arguments).slice(2));
|
|
80
88
|
}
|
|
81
89
|
|
|
82
90
|
/**
|
|
@@ -90,7 +98,7 @@ import { EventSelector, decodeFunctionSignature, getAllFunctionAbis, getDefaultI
|
|
|
90
98
|
opts.publicKeys ?? PublicKeys.default(),
|
|
91
99
|
opts.wallet,
|
|
92
100
|
${artifactName},
|
|
93
|
-
${contractName}.at,
|
|
101
|
+
(instance, wallet) => ${contractName}.at(instance.address, wallet),
|
|
94
102
|
Array.from(arguments).slice(1),
|
|
95
103
|
opts.method ?? 'constructor',
|
|
96
104
|
);
|
|
@@ -101,14 +109,14 @@ import { EventSelector, decodeFunctionSignature, getAllFunctionAbis, getDefaultI
|
|
|
101
109
|
* Generates the constructor by supplying the ABI to the parent class so the user doesn't have to.
|
|
102
110
|
* @param name - Name of the contract to derive the ABI name from.
|
|
103
111
|
* @returns A constructor method.
|
|
104
|
-
* @remarks The constructor is private because we want to force the user to use the
|
|
112
|
+
* @remarks The constructor is private because we want to force the user to use the at method.
|
|
105
113
|
*/ function generateConstructor(name) {
|
|
106
114
|
return `
|
|
107
115
|
private constructor(
|
|
108
|
-
|
|
116
|
+
address: AztecAddress,
|
|
109
117
|
wallet: Wallet,
|
|
110
118
|
) {
|
|
111
|
-
super(
|
|
119
|
+
super(address, ${name}ContractArtifact, wallet);
|
|
112
120
|
}
|
|
113
121
|
`;
|
|
114
122
|
}
|
|
@@ -116,20 +124,19 @@ import { EventSelector, decodeFunctionSignature, getAllFunctionAbis, getDefaultI
|
|
|
116
124
|
* Generates the at method for this contract.
|
|
117
125
|
* @param name - Name of the contract to derive the ABI name from.
|
|
118
126
|
* @returns An at method.
|
|
119
|
-
* @remarks We don't use constructor directly because of the async `wallet.getContractData` call.
|
|
120
127
|
*/ function generateAt(name) {
|
|
121
128
|
return `
|
|
122
129
|
/**
|
|
123
130
|
* Creates a contract instance.
|
|
124
131
|
* @param address - The deployed contract's address.
|
|
125
132
|
* @param wallet - The wallet to use when interacting with the contract.
|
|
126
|
-
* @returns A
|
|
133
|
+
* @returns A new Contract instance.
|
|
127
134
|
*/
|
|
128
|
-
public static
|
|
135
|
+
public static at(
|
|
129
136
|
address: AztecAddress,
|
|
130
137
|
wallet: Wallet,
|
|
131
|
-
) {
|
|
132
|
-
return Contract.at(address, ${name}Contract.artifact, wallet) as
|
|
138
|
+
): ${name}Contract {
|
|
139
|
+
return Contract.at(address, ${name}Contract.artifact, wallet) as ${name}Contract;
|
|
133
140
|
}`;
|
|
134
141
|
}
|
|
135
142
|
/**
|
|
@@ -233,7 +240,7 @@ async function generateEvents(events) {
|
|
|
233
240
|
* @param artifactImportPath - Optional path to import the artifact (if not set, will be required in the constructor).
|
|
234
241
|
* @returns The corresponding ts code.
|
|
235
242
|
*/ export async function generateTypescriptContractInterface(input, artifactImportPath) {
|
|
236
|
-
const methods = getAllFunctionAbis(input).filter((f)=>!f.
|
|
243
|
+
const methods = getAllFunctionAbis(input).filter((f)=>!f.isOnlySelf).sort((a, b)=>a.name.localeCompare(b.name)).map(generateMethod);
|
|
237
244
|
const deploy = artifactImportPath && generateDeploy(input);
|
|
238
245
|
const ctor = artifactImportPath && generateConstructor(input.name);
|
|
239
246
|
const at = artifactImportPath && generateAt(input.name);
|
|
@@ -246,8 +253,8 @@ async function generateEvents(events) {
|
|
|
246
253
|
|
|
247
254
|
/* eslint-disable */
|
|
248
255
|
import { AztecAddress, CompleteAddress } from '@aztec/aztec.js/addresses';
|
|
249
|
-
import { type AbiType, type AztecAddressLike, type ContractArtifact, EventSelector, decodeFromAbi, type EthAddressLike, type FieldLike, type FunctionSelectorLike, loadContractArtifact, loadContractArtifactForPublic, type NoirCompiledContract, type U128Like, type WrappedFieldLike } from '@aztec/aztec.js/abi';
|
|
250
|
-
import { Contract, ContractBase, ContractFunctionInteraction, type
|
|
256
|
+
import { type AbiType, type AztecAddressLike, type ContractArtifact, EventSelector, decodeFromAbi, type EthAddressLike, type FieldLike, type FunctionSelectorLike, loadContractArtifact, loadContractArtifactForPublic, type NoirCompiledContract, type OptionLike, type U128Like, type WrappedFieldLike } from '@aztec/aztec.js/abi';
|
|
257
|
+
import { Contract, ContractBase, ContractFunctionInteraction, type ContractMethod, type ContractStorageLayout, DeployMethod } from '@aztec/aztec.js/contracts';
|
|
251
258
|
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
252
259
|
import { Fr, Point } from '@aztec/aztec.js/fields';
|
|
253
260
|
import { type PublicKey, PublicKeys } from '@aztec/aztec.js/keys';
|
package/dest/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
2
|
export declare function injectCommands(program: Command): Command;
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHekMsd0JBQWdCLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxXQVk5QyJ9
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/builder",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.b6e433891",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
7
|
-
"./cli": "./dest/bin/cli.js"
|
|
7
|
+
"./cli": "./dest/bin/cli.js",
|
|
8
|
+
"./codegen": "./dest/contract-interface-gen/index.js"
|
|
8
9
|
},
|
|
9
10
|
"typedocOptions": {
|
|
10
11
|
"entryPoints": [
|
|
@@ -13,13 +14,10 @@
|
|
|
13
14
|
"name": "Aztec builder",
|
|
14
15
|
"tsconfig": "./tsconfig.json"
|
|
15
16
|
},
|
|
16
|
-
"bin": {
|
|
17
|
-
"aztec-builder": "dest/bin/cli.js"
|
|
18
|
-
},
|
|
19
17
|
"scripts": {
|
|
20
|
-
"build": "yarn clean && tsc
|
|
21
|
-
"build:dev": "tsc
|
|
22
|
-
"generate": "tsc
|
|
18
|
+
"build": "yarn clean && ../scripts/tsc.sh",
|
|
19
|
+
"build:dev": "../scripts/tsc.sh --watch",
|
|
20
|
+
"generate": "../scripts/tsc.sh",
|
|
23
21
|
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
24
22
|
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
|
|
25
23
|
},
|
|
@@ -69,14 +67,15 @@
|
|
|
69
67
|
]
|
|
70
68
|
},
|
|
71
69
|
"dependencies": {
|
|
72
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
73
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
70
|
+
"@aztec/foundation": "0.0.1-commit.b6e433891",
|
|
71
|
+
"@aztec/stdlib": "0.0.1-commit.b6e433891",
|
|
74
72
|
"commander": "^12.1.0"
|
|
75
73
|
},
|
|
76
74
|
"devDependencies": {
|
|
77
75
|
"@jest/globals": "^30.0.0",
|
|
78
76
|
"@types/jest": "^30.0.0",
|
|
79
77
|
"@types/node": "^22.15.17",
|
|
78
|
+
"@typescript/native-preview": "7.0.0-dev.20260113.1",
|
|
80
79
|
"jest": "^30.0.0",
|
|
81
80
|
"ts-node": "^10.9.1",
|
|
82
81
|
"typescript": "^5.3.3"
|
|
@@ -50,6 +50,12 @@ async function generateFromNoirAbi(outputPath: string, noirAbiPath: string, opts
|
|
|
50
50
|
|
|
51
51
|
const file = await readFile(noirAbiPath, 'utf8');
|
|
52
52
|
const contract = JSON.parse(file);
|
|
53
|
+
|
|
54
|
+
if (!Array.isArray(contract.functions)) {
|
|
55
|
+
console.log(`${fileName} is not a contract artifact. Skipping.`);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
53
59
|
const aztecAbi = loadContractArtifact(contract);
|
|
54
60
|
|
|
55
61
|
await mkdir(outputPath, { recursive: true });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { generateTypescriptContractInterface } from './typescript.js';
|
|
@@ -11,6 +11,8 @@ import {
|
|
|
11
11
|
isBoundedVecStruct,
|
|
12
12
|
isEthAddressStruct,
|
|
13
13
|
isFunctionSelectorStruct,
|
|
14
|
+
isOptionStruct,
|
|
15
|
+
isPublicKeysStruct,
|
|
14
16
|
isWrappedFieldStruct,
|
|
15
17
|
} from '@aztec/stdlib/abi';
|
|
16
18
|
|
|
@@ -44,11 +46,19 @@ function abiTypeToTypescript(type: ABIParameter['type']): string {
|
|
|
44
46
|
if (isWrappedFieldStruct(type)) {
|
|
45
47
|
return 'WrappedFieldLike';
|
|
46
48
|
}
|
|
49
|
+
if (isPublicKeysStruct(type)) {
|
|
50
|
+
// PublicKeys are special cased due to them being part of the preimage of contract addresses.
|
|
51
|
+
// The proper type is expected by the TS code that deals with the ContractInstanceRegistry protocol contract.
|
|
52
|
+
return 'PublicKeys';
|
|
53
|
+
}
|
|
47
54
|
if (isBoundedVecStruct(type)) {
|
|
48
55
|
// To make BoundedVec easier to work with, we expect a simple array on the input and then we encode it
|
|
49
56
|
// as a BoundedVec in the ArgumentsEncoder.
|
|
50
57
|
return `${abiTypeToTypescript(type.fields[0].type)}`;
|
|
51
58
|
}
|
|
59
|
+
if (isOptionStruct(type)) {
|
|
60
|
+
return `OptionLike<${abiTypeToTypescript(type.fields[1].type)}>`;
|
|
61
|
+
}
|
|
52
62
|
return `{ ${type.fields.map(f => `${f.name}: ${abiTypeToTypescript(f.type)}`).join(', ')} }`;
|
|
53
63
|
default:
|
|
54
64
|
throw new Error(`Unknown type ${type.kind}`);
|
|
@@ -92,14 +102,14 @@ function generateDeploy(input: ContractArtifact) {
|
|
|
92
102
|
* Creates a tx to deploy a new instance of this contract.
|
|
93
103
|
*/
|
|
94
104
|
public static deploy(wallet: Wallet, ${args}) {
|
|
95
|
-
return new DeployMethod<${contractName}>(PublicKeys.default(), wallet, ${artifactName}, ${contractName}.at, Array.from(arguments).slice(1));
|
|
105
|
+
return new DeployMethod<${contractName}>(PublicKeys.default(), wallet, ${artifactName}, (instance, wallet) => ${contractName}.at(instance.address, wallet), Array.from(arguments).slice(1));
|
|
96
106
|
}
|
|
97
107
|
|
|
98
108
|
/**
|
|
99
109
|
* Creates a tx to deploy a new instance of this contract using the specified public keys hash to derive the address.
|
|
100
110
|
*/
|
|
101
111
|
public static deployWithPublicKeys(publicKeys: PublicKeys, wallet: Wallet, ${args}) {
|
|
102
|
-
return new DeployMethod<${contractName}>(publicKeys, wallet, ${artifactName}, ${contractName}.at, Array.from(arguments).slice(2));
|
|
112
|
+
return new DeployMethod<${contractName}>(publicKeys, wallet, ${artifactName}, (instance, wallet) => ${contractName}.at(instance.address, wallet), Array.from(arguments).slice(2));
|
|
103
113
|
}
|
|
104
114
|
|
|
105
115
|
/**
|
|
@@ -113,7 +123,7 @@ function generateDeploy(input: ContractArtifact) {
|
|
|
113
123
|
opts.publicKeys ?? PublicKeys.default(),
|
|
114
124
|
opts.wallet,
|
|
115
125
|
${artifactName},
|
|
116
|
-
${contractName}.at,
|
|
126
|
+
(instance, wallet) => ${contractName}.at(instance.address, wallet),
|
|
117
127
|
Array.from(arguments).slice(1),
|
|
118
128
|
opts.method ?? 'constructor',
|
|
119
129
|
);
|
|
@@ -125,15 +135,15 @@ function generateDeploy(input: ContractArtifact) {
|
|
|
125
135
|
* Generates the constructor by supplying the ABI to the parent class so the user doesn't have to.
|
|
126
136
|
* @param name - Name of the contract to derive the ABI name from.
|
|
127
137
|
* @returns A constructor method.
|
|
128
|
-
* @remarks The constructor is private because we want to force the user to use the
|
|
138
|
+
* @remarks The constructor is private because we want to force the user to use the at method.
|
|
129
139
|
*/
|
|
130
140
|
function generateConstructor(name: string) {
|
|
131
141
|
return `
|
|
132
142
|
private constructor(
|
|
133
|
-
|
|
143
|
+
address: AztecAddress,
|
|
134
144
|
wallet: Wallet,
|
|
135
145
|
) {
|
|
136
|
-
super(
|
|
146
|
+
super(address, ${name}ContractArtifact, wallet);
|
|
137
147
|
}
|
|
138
148
|
`;
|
|
139
149
|
}
|
|
@@ -142,7 +152,6 @@ function generateConstructor(name: string) {
|
|
|
142
152
|
* Generates the at method for this contract.
|
|
143
153
|
* @param name - Name of the contract to derive the ABI name from.
|
|
144
154
|
* @returns An at method.
|
|
145
|
-
* @remarks We don't use constructor directly because of the async `wallet.getContractData` call.
|
|
146
155
|
*/
|
|
147
156
|
function generateAt(name: string) {
|
|
148
157
|
return `
|
|
@@ -150,13 +159,13 @@ function generateAt(name: string) {
|
|
|
150
159
|
* Creates a contract instance.
|
|
151
160
|
* @param address - The deployed contract's address.
|
|
152
161
|
* @param wallet - The wallet to use when interacting with the contract.
|
|
153
|
-
* @returns A
|
|
162
|
+
* @returns A new Contract instance.
|
|
154
163
|
*/
|
|
155
|
-
public static
|
|
164
|
+
public static at(
|
|
156
165
|
address: AztecAddress,
|
|
157
166
|
wallet: Wallet,
|
|
158
|
-
) {
|
|
159
|
-
return Contract.at(address, ${name}Contract.artifact, wallet) as
|
|
167
|
+
): ${name}Contract {
|
|
168
|
+
return Contract.at(address, ${name}Contract.artifact, wallet) as ${name}Contract;
|
|
160
169
|
}`;
|
|
161
170
|
}
|
|
162
171
|
|
|
@@ -284,7 +293,7 @@ async function generateEvents(events: any[] | undefined) {
|
|
|
284
293
|
*/
|
|
285
294
|
export async function generateTypescriptContractInterface(input: ContractArtifact, artifactImportPath?: string) {
|
|
286
295
|
const methods = getAllFunctionAbis(input)
|
|
287
|
-
.filter(f => !f.
|
|
296
|
+
.filter(f => !f.isOnlySelf)
|
|
288
297
|
.sort((a, b) => a.name.localeCompare(b.name))
|
|
289
298
|
.map(generateMethod);
|
|
290
299
|
const deploy = artifactImportPath && generateDeploy(input);
|
|
@@ -300,8 +309,8 @@ export async function generateTypescriptContractInterface(input: ContractArtifac
|
|
|
300
309
|
|
|
301
310
|
/* eslint-disable */
|
|
302
311
|
import { AztecAddress, CompleteAddress } from '@aztec/aztec.js/addresses';
|
|
303
|
-
import { type AbiType, type AztecAddressLike, type ContractArtifact, EventSelector, decodeFromAbi, type EthAddressLike, type FieldLike, type FunctionSelectorLike, loadContractArtifact, loadContractArtifactForPublic, type NoirCompiledContract, type U128Like, type WrappedFieldLike } from '@aztec/aztec.js/abi';
|
|
304
|
-
import { Contract, ContractBase, ContractFunctionInteraction, type
|
|
312
|
+
import { type AbiType, type AztecAddressLike, type ContractArtifact, EventSelector, decodeFromAbi, type EthAddressLike, type FieldLike, type FunctionSelectorLike, loadContractArtifact, loadContractArtifactForPublic, type NoirCompiledContract, type OptionLike, type U128Like, type WrappedFieldLike } from '@aztec/aztec.js/abi';
|
|
313
|
+
import { Contract, ContractBase, ContractFunctionInteraction, type ContractMethod, type ContractStorageLayout, DeployMethod } from '@aztec/aztec.js/contracts';
|
|
305
314
|
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
306
315
|
import { Fr, Point } from '@aztec/aztec.js/fields';
|
|
307
316
|
import { type PublicKey, PublicKeys } from '@aztec/aztec.js/keys';
|