@openzeppelin/wizard 0.10.3 → 0.10.5
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/dist/contract.d.ts +13 -4
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +34 -11
- package/dist/contract.js.map +1 -1
- package/dist/environments/hardhat/polkadot/package-lock.json +12683 -0
- package/dist/environments/hardhat/polkadot/package.json +17 -0
- package/dist/get-versioned-remappings.js +3 -3
- package/dist/get-versioned-remappings.js.map +1 -1
- package/dist/governor.d.ts +2 -1
- package/dist/governor.d.ts.map +1 -1
- package/dist/governor.js.map +1 -1
- package/dist/index.d.ts +11 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -1
- package/dist/index.js.map +1 -1
- package/dist/options.d.ts +8 -0
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +1 -0
- package/dist/options.js.map +1 -1
- package/dist/print.d.ts.map +1 -1
- package/dist/print.js +41 -12
- package/dist/print.js.map +1 -1
- package/dist/stablecoin.d.ts +1 -0
- package/dist/stablecoin.d.ts.map +1 -1
- package/dist/stablecoin.js.map +1 -1
- package/dist/utils/imports-libraries.d.ts +1 -1
- package/dist/utils/imports-libraries.d.ts.map +1 -1
- package/dist/utils/imports-libraries.js +3 -3
- package/dist/utils/imports-libraries.js.map +1 -1
- package/dist/zip-hardhat-polkadot.d.ts +5 -0
- package/dist/zip-hardhat-polkadot.d.ts.map +1 -0
- package/dist/zip-hardhat-polkadot.js +115 -0
- package/dist/zip-hardhat-polkadot.js.map +1 -0
- package/dist/zip-hardhat.d.ts +21 -0
- package/dist/zip-hardhat.d.ts.map +1 -1
- package/dist/zip-hardhat.js +181 -115
- package/dist/zip-hardhat.js.map +1 -1
- package/package.json +2 -2
- package/src/contract.ts +49 -14
- package/src/environments/hardhat/polkadot/package-lock.json +12683 -0
- package/src/environments/hardhat/polkadot/package.json +17 -0
- package/src/get-versioned-remappings.ts +1 -1
- package/src/governor.ts +3 -1
- package/src/index.ts +13 -2
- package/src/options.ts +5 -0
- package/src/print.ts +44 -11
- package/src/stablecoin.ts +2 -0
- package/src/utils/imports-libraries.ts +2 -2
- package/src/zip-hardhat-polkadot.ts +86 -0
- package/src/zip-hardhat.ts +203 -129
- /package/{openzeppelin-contracts-version.d.ts → openzeppelin-contracts-version.json.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zip-hardhat-polkadot.js","sourceRoot":"","sources":["../src/zip-hardhat-polkadot.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFA,gDAEC;AAnFD,+CAAoD;AAEpD,oFAAuD;AAEvD,MAAM,2BAA4B,SAAQ,iCAAmB;IACjD,2BAA2B;QACnC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACtC,CAAC;IAES,0BAA0B;QAClC,OAAO;;;gBAGK,+BAAgB;;;;;;;;;;;;;;;;;;;;;;;;;EAyB9B,CAAC;IACD,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,CAAW;QACxC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,wDAAa,8CAA8C,GAAC,CAAC;QAC9F,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QAChC,OAAO,WAAW,CAAC;IACrB,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,CAAW;QACxC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,wDAAa,mDAAmD,GAAC,CAAC;QACnG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QAC7C,OAAO,WAAW,CAAC;IACrB,CAAC;IAES,6BAA6B;QACrC,OAAO;;;;;;;CAOV,CAAC;IACA,CAAC;IAES,uCAAuC;QAC/C,OAAO;;;;;CAKV,CAAC;IACA,CAAC;IAES,2BAA2B;QACnC,OAAO;;;KAGN,CAAC;IACJ,CAAC;CACF;AAEM,KAAK,UAAU,kBAAkB,CAAC,CAAW,EAAE,IAAqB;IACzE,OAAO,IAAI,2BAA2B,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/D,CAAC"}
|
package/dist/zip-hardhat.d.ts
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
import JSZip from 'jszip';
|
|
2
2
|
import type { GenericOptions } from './build-generic';
|
|
3
3
|
import type { Contract } from './contract';
|
|
4
|
+
export declare class HardhatZipGenerator {
|
|
5
|
+
protected getAdditionalHardhatImports(): string[];
|
|
6
|
+
protected getHardhatConfigJsonString(): string;
|
|
7
|
+
protected getHardhatConfig(upgradeable: boolean): string;
|
|
8
|
+
protected getTsConfig(): string;
|
|
9
|
+
protected getGitIgnoreHardhatIgnition(): string;
|
|
10
|
+
protected getGitIgnore(): string;
|
|
11
|
+
protected getTest(c: Contract, opts?: GenericOptions): string;
|
|
12
|
+
getDeploymentCall(c: Contract, args: string[]): string;
|
|
13
|
+
protected getScript(c: Contract): string;
|
|
14
|
+
private lowerFirstCharacter;
|
|
15
|
+
protected getIgnitionModule(c: Contract): string;
|
|
16
|
+
protected getReadmeTestingEnvironmentSetupSection(): string;
|
|
17
|
+
protected getReadmePrerequisitesSection(): string;
|
|
18
|
+
protected getReadme(c: Contract): string;
|
|
19
|
+
getHardhatPlugins(c: Contract): string[];
|
|
20
|
+
protected getPackageJson(c: Contract): Promise<unknown>;
|
|
21
|
+
protected getPackageLock(c: Contract): Promise<unknown>;
|
|
22
|
+
protected getPrintContract(c: Contract): string;
|
|
23
|
+
zipHardhat(c: Contract, opts?: GenericOptions): Promise<JSZip>;
|
|
24
|
+
}
|
|
4
25
|
export declare function zipHardhat(c: Contract, opts?: GenericOptions): Promise<JSZip>;
|
|
5
26
|
//# sourceMappingURL=zip-hardhat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zip-hardhat.d.ts","sourceRoot":"","sources":["../src/zip-hardhat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"zip-hardhat.d.ts","sourceRoot":"","sources":["../src/zip-hardhat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAqF7D,qBAAa,mBAAmB;IAC9B,SAAS,CAAC,2BAA2B,IAAI,MAAM,EAAE;IAIjD,SAAS,CAAC,0BAA0B,IAAI,MAAM;IAe9C,SAAS,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,GAAG,MAAM;IAgBxD,SAAS,CAAC,WAAW,IAAI,MAAM;IAgB/B,SAAS,CAAC,2BAA2B,IAAI,MAAM;IAO/C,SAAS,CAAC,YAAY,IAAI,MAAM;IAehC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,MAAM;IAItD,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;IAW7D,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM;IA0BxC,OAAO,CAAC,mBAAmB;IAI3B,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM;IAchD,SAAS,CAAC,uCAAuC,IAAI,MAAM;IAI3D,SAAS,CAAC,6BAA6B,IAAI,MAAM;IAIjD,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM;IA4BjC,iBAAiB,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,EAAE;cAQ/B,cAAc,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;cAQ7C,cAAc,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ7D,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM;IAIzC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;CAwBrE;AAED,wBAAsB,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,CAEnF"}
|
package/dist/zip-hardhat.js
CHANGED
|
@@ -36,17 +36,87 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.HardhatZipGenerator = void 0;
|
|
39
40
|
exports.zipHardhat = zipHardhat;
|
|
40
41
|
const jszip_1 = __importDefault(require("jszip"));
|
|
41
42
|
const print_1 = require("./print");
|
|
42
43
|
const solidity_version_json_1 = __importDefault(require("./solidity-version.json"));
|
|
43
44
|
const format_lines_1 = require("./utils/format-lines");
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
class TestGenerator {
|
|
46
|
+
constructor(parent) {
|
|
47
|
+
this.parent = parent;
|
|
48
|
+
}
|
|
49
|
+
getContent(c, opts) {
|
|
50
|
+
return (0, format_lines_1.formatLinesWithSpaces)(2, ...(0, format_lines_1.spaceBetween)(this.getImports(c), this.getTestCase(c, opts)));
|
|
51
|
+
}
|
|
52
|
+
getTestCase(c, opts) {
|
|
53
|
+
return [
|
|
54
|
+
`describe("${c.name}", function () {`,
|
|
55
|
+
[
|
|
56
|
+
'it("Test contract", async function () {',
|
|
57
|
+
(0, format_lines_1.spaceBetween)([`const ContractFactory = await ethers.getContractFactory("${c.name}");`], this.declareVariables(c.constructorArgs), this.getDeployLines(c, c.constructorArgs.map(a => a.name)), this.getExpects(opts)),
|
|
58
|
+
'});',
|
|
59
|
+
],
|
|
60
|
+
'});',
|
|
61
|
+
];
|
|
62
|
+
}
|
|
63
|
+
getImports(c) {
|
|
64
|
+
return [
|
|
65
|
+
'import { expect } from "chai";',
|
|
66
|
+
`import { ${this.parent.getHardhatPlugins(c).join(', ')} } from "hardhat";`,
|
|
67
|
+
];
|
|
68
|
+
}
|
|
69
|
+
getExpects(opts) {
|
|
70
|
+
if (opts !== undefined) {
|
|
71
|
+
switch (opts.kind) {
|
|
72
|
+
case 'ERC20':
|
|
73
|
+
case 'ERC721':
|
|
74
|
+
return [`expect(await instance.name()).to.equal("${opts.name}");`];
|
|
75
|
+
case 'ERC1155':
|
|
76
|
+
return [`expect(await instance.uri(0)).to.equal("${opts.uri}");`];
|
|
77
|
+
case 'Account':
|
|
78
|
+
case 'Governor':
|
|
79
|
+
case 'Custom':
|
|
80
|
+
break;
|
|
81
|
+
default:
|
|
82
|
+
throw new Error('Unknown ERC');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
declareVariables(args) {
|
|
88
|
+
return args.flatMap((arg, i) => {
|
|
89
|
+
if (arg.type === 'address') {
|
|
90
|
+
return [`const ${arg.name} = (await ethers.getSigners())[${i}].address;`];
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
return [`// TODO: Set the following constructor argument`, `// const ${arg.name} = ...;`];
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
getDeployLines(c, argNames) {
|
|
98
|
+
if (c.constructorArgs.some(a => a.type !== 'address')) {
|
|
99
|
+
return [
|
|
100
|
+
`// TODO: Uncomment the below when the missing constructor arguments are set above`,
|
|
101
|
+
`// const instance = await ${this.parent.getDeploymentCall(c, argNames)};`,
|
|
102
|
+
`// await instance.waitForDeployment();`,
|
|
103
|
+
];
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
return [
|
|
107
|
+
`const instance = await ${this.parent.getDeploymentCall(c, argNames)};`,
|
|
108
|
+
'await instance.waitForDeployment();',
|
|
109
|
+
];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
class HardhatZipGenerator {
|
|
114
|
+
getAdditionalHardhatImports() {
|
|
115
|
+
return [];
|
|
116
|
+
}
|
|
117
|
+
getHardhatConfigJsonString() {
|
|
118
|
+
return `\
|
|
119
|
+
{
|
|
50
120
|
solidity: {
|
|
51
121
|
version: "${solidity_version_json_1.default}",
|
|
52
122
|
settings: {
|
|
@@ -56,11 +126,23 @@ const config: HardhatUserConfig = {
|
|
|
56
126
|
},
|
|
57
127
|
},
|
|
58
128
|
},
|
|
59
|
-
}
|
|
129
|
+
}`;
|
|
130
|
+
}
|
|
131
|
+
getHardhatConfig(upgradeable) {
|
|
132
|
+
const additionalImports = this.getAdditionalHardhatImports();
|
|
133
|
+
const importsSection = additionalImports.length > 0 ? additionalImports.map(imp => `import "${imp}";`).join('\n') + '\n' : '';
|
|
134
|
+
return `\
|
|
135
|
+
import { HardhatUserConfig } from "hardhat/config";
|
|
136
|
+
import "@nomicfoundation/hardhat-toolbox";
|
|
137
|
+
${importsSection}${upgradeable ? `import "@openzeppelin/hardhat-upgrades";` : ''}
|
|
138
|
+
|
|
139
|
+
const config: HardhatUserConfig = ${this.getHardhatConfigJsonString()};
|
|
60
140
|
|
|
61
141
|
export default config;
|
|
62
142
|
`;
|
|
63
|
-
|
|
143
|
+
}
|
|
144
|
+
getTsConfig() {
|
|
145
|
+
return `\
|
|
64
146
|
{
|
|
65
147
|
"compilerOptions": {
|
|
66
148
|
"target": "es2020",
|
|
@@ -73,7 +155,15 @@ const tsConfig = `\
|
|
|
73
155
|
}
|
|
74
156
|
}
|
|
75
157
|
`;
|
|
76
|
-
|
|
158
|
+
}
|
|
159
|
+
getGitIgnoreHardhatIgnition() {
|
|
160
|
+
return `
|
|
161
|
+
# Hardhat Ignition default folder for deployments against a local node
|
|
162
|
+
ignition/deployments/chain-31337
|
|
163
|
+
`;
|
|
164
|
+
}
|
|
165
|
+
getGitIgnore() {
|
|
166
|
+
return `\
|
|
77
167
|
node_modules
|
|
78
168
|
.env
|
|
79
169
|
coverage
|
|
@@ -84,78 +174,29 @@ typechain-types
|
|
|
84
174
|
# Hardhat files
|
|
85
175
|
cache
|
|
86
176
|
artifacts
|
|
87
|
-
`;
|
|
88
|
-
const test = (c, opts) => {
|
|
89
|
-
return (0, format_lines_1.formatLinesWithSpaces)(2, ...(0, format_lines_1.spaceBetween)(getImports(c), getTestCase(c)));
|
|
90
|
-
function getTestCase(c) {
|
|
91
|
-
const args = getAddressArgs(c);
|
|
92
|
-
return [
|
|
93
|
-
`describe("${c.name}", function () {`,
|
|
94
|
-
[
|
|
95
|
-
'it("Test contract", async function () {',
|
|
96
|
-
(0, format_lines_1.spaceBetween)([`const ContractFactory = await ethers.getContractFactory("${c.name}");`], getAddressVariables(args), [`const instance = await ${getDeploymentCall(c, args)};`, 'await instance.waitForDeployment();'], getExpects()),
|
|
97
|
-
'});',
|
|
98
|
-
],
|
|
99
|
-
'});',
|
|
100
|
-
];
|
|
101
|
-
}
|
|
102
|
-
function getImports(c) {
|
|
103
|
-
return ['import { expect } from "chai";', `import { ${getHardhatPlugins(c).join(', ')} } from "hardhat";`];
|
|
104
|
-
}
|
|
105
|
-
function getExpects() {
|
|
106
|
-
if (opts !== undefined) {
|
|
107
|
-
switch (opts.kind) {
|
|
108
|
-
case 'ERC20':
|
|
109
|
-
case 'ERC721':
|
|
110
|
-
return [`expect(await instance.name()).to.equal("${opts.name}");`];
|
|
111
|
-
case 'ERC1155':
|
|
112
|
-
return [`expect(await instance.uri(0)).to.equal("${opts.uri}");`];
|
|
113
|
-
case 'Account':
|
|
114
|
-
case 'Governor':
|
|
115
|
-
case 'Custom':
|
|
116
|
-
break;
|
|
117
|
-
default:
|
|
118
|
-
throw new Error('Unknown ERC');
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
return [];
|
|
177
|
+
${this.getGitIgnoreHardhatIgnition()}`;
|
|
122
178
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
for (let i = 0; i < args.length; i++) {
|
|
126
|
-
vars.push(`const ${args[i]} = (await ethers.getSigners())[${i}].address;`);
|
|
127
|
-
}
|
|
128
|
-
return vars;
|
|
179
|
+
getTest(c, opts) {
|
|
180
|
+
return new TestGenerator(this).getContent(c, opts);
|
|
129
181
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
182
|
+
getDeploymentCall(c, args) {
|
|
183
|
+
// TODO: remove that selector when the upgrades plugin supports @custom:oz-upgrades-unsafe-allow-reachable
|
|
184
|
+
const unsafeAllowConstructor = c.parents.find(p => ['EIP712'].includes(p.contract.name)) !== undefined;
|
|
185
|
+
return !c.upgradeable
|
|
186
|
+
? `ContractFactory.deploy(${args.join(', ')})`
|
|
187
|
+
: unsafeAllowConstructor
|
|
188
|
+
? `upgrades.deployProxy(ContractFactory, [${args.join(', ')}], { unsafeAllow: ['constructor'] })`
|
|
189
|
+
: `upgrades.deployProxy(ContractFactory, [${args.join(', ')}])`;
|
|
137
190
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
// TODO: remove that selector when the upgrades plugin supports @custom:oz-upgrades-unsafe-allow-reachable
|
|
142
|
-
const unsafeAllowConstructor = c.parents.find(p => ['EIP712'].includes(p.contract.name)) !== undefined;
|
|
143
|
-
return !c.upgradeable
|
|
144
|
-
? `ContractFactory.deploy(${args.join(', ')})`
|
|
145
|
-
: unsafeAllowConstructor
|
|
146
|
-
? `upgrades.deployProxy(ContractFactory, [${args.join(', ')}], { unsafeAllow: 'constructor' })`
|
|
147
|
-
: `upgrades.deployProxy(ContractFactory, [${args.join(', ')}])`;
|
|
148
|
-
}
|
|
149
|
-
const script = (c) => {
|
|
150
|
-
const args = getAddressArgs(c);
|
|
151
|
-
return `\
|
|
152
|
-
import { ${getHardhatPlugins(c).join(', ')} } from "hardhat";
|
|
191
|
+
getScript(c) {
|
|
192
|
+
return `\
|
|
193
|
+
import { ${this.getHardhatPlugins(c).join(', ')} } from "hardhat";
|
|
153
194
|
|
|
154
195
|
async function main() {
|
|
155
196
|
const ContractFactory = await ethers.getContractFactory("${c.name}");
|
|
156
197
|
|
|
157
|
-
${
|
|
158
|
-
const instance = await ${getDeploymentCall(c,
|
|
198
|
+
${c.constructorArgs.length > 0 ? '// TODO: Set values for the constructor arguments below' : ''}
|
|
199
|
+
const instance = await ${this.getDeploymentCall(c, c.constructorArgs.map(a => a.name))};
|
|
159
200
|
await instance.waitForDeployment();
|
|
160
201
|
|
|
161
202
|
console.log(\`${c.upgradeable ? 'Proxy' : 'Contract'} deployed to \${await instance.getAddress()}\`);
|
|
@@ -168,34 +209,42 @@ main().catch((error) => {
|
|
|
168
209
|
process.exitCode = 1;
|
|
169
210
|
});
|
|
170
211
|
`;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
212
|
+
}
|
|
213
|
+
lowerFirstCharacter(str) {
|
|
214
|
+
return str.charAt(0).toLowerCase() + str.slice(1);
|
|
215
|
+
}
|
|
216
|
+
getIgnitionModule(c) {
|
|
217
|
+
const contractVariableName = this.lowerFirstCharacter(c.name);
|
|
218
|
+
return `import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";
|
|
177
219
|
|
|
178
220
|
export default buildModule("${c.name}Module", (m) => {
|
|
179
221
|
|
|
180
|
-
${
|
|
181
|
-
const ${contractVariableName} = m.contract("${c.name}", [${
|
|
222
|
+
${c.constructorArgs.length > 0 ? '// TODO: Set values for the constructor arguments below' : ''}
|
|
223
|
+
const ${contractVariableName} = m.contract("${c.name}", [${c.constructorArgs.map(a => a.name).join(', ')}]);
|
|
182
224
|
|
|
183
225
|
return { ${contractVariableName} };
|
|
184
226
|
});
|
|
185
227
|
`;
|
|
186
|
-
}
|
|
187
|
-
|
|
228
|
+
}
|
|
229
|
+
getReadmeTestingEnvironmentSetupSection() {
|
|
230
|
+
return '';
|
|
231
|
+
}
|
|
232
|
+
getReadmePrerequisitesSection() {
|
|
233
|
+
return '';
|
|
234
|
+
}
|
|
235
|
+
getReadme(c) {
|
|
236
|
+
return `\
|
|
188
237
|
# Sample Hardhat Project
|
|
189
238
|
|
|
190
239
|
This project demonstrates a basic Hardhat use case. It comes with a contract generated by [OpenZeppelin Wizard](https://wizard.openzeppelin.com/), a test for that contract, ${c.upgradeable ? 'and a script that deploys that contract' : 'and a Hardhat Ignition module that deploys that contract'}.
|
|
191
240
|
|
|
192
|
-
## Installing dependencies
|
|
241
|
+
${this.getReadmePrerequisitesSection()}## Installing dependencies
|
|
193
242
|
|
|
194
243
|
\`\`\`
|
|
195
244
|
npm install
|
|
196
245
|
\`\`\`
|
|
197
246
|
|
|
198
|
-
## Testing the contract
|
|
247
|
+
${this.getReadmeTestingEnvironmentSetupSection()}## Testing the contract
|
|
199
248
|
|
|
200
249
|
\`\`\`
|
|
201
250
|
npm test
|
|
@@ -209,37 +258,54 @@ You can target any network from your Hardhat config using:
|
|
|
209
258
|
${c.upgradeable ? 'npx hardhat run --network <network-name> scripts/deploy.ts' : `npx hardhat ignition deploy ignition/modules/${c.name}.ts --network <network-name>`}
|
|
210
259
|
\`\`\`
|
|
211
260
|
`;
|
|
212
|
-
function getHardhatPlugins(c) {
|
|
213
|
-
const plugins = ['ethers'];
|
|
214
|
-
if (c.upgradeable) {
|
|
215
|
-
plugins.push('upgrades');
|
|
216
261
|
}
|
|
217
|
-
|
|
262
|
+
getHardhatPlugins(c) {
|
|
263
|
+
const plugins = ['ethers'];
|
|
264
|
+
if (c.upgradeable) {
|
|
265
|
+
plugins.push('upgrades');
|
|
266
|
+
}
|
|
267
|
+
return plugins;
|
|
268
|
+
}
|
|
269
|
+
async getPackageJson(c) {
|
|
270
|
+
const { default: packageJson } = c.upgradeable
|
|
271
|
+
? await Promise.resolve().then(() => __importStar(require('./environments/hardhat/upgradeable/package.json')))
|
|
272
|
+
: await Promise.resolve().then(() => __importStar(require('./environments/hardhat/package.json')));
|
|
273
|
+
packageJson.license = c.license;
|
|
274
|
+
return packageJson;
|
|
275
|
+
}
|
|
276
|
+
async getPackageLock(c) {
|
|
277
|
+
const { default: packageLock } = c.upgradeable
|
|
278
|
+
? await Promise.resolve().then(() => __importStar(require('./environments/hardhat/upgradeable/package-lock.json')))
|
|
279
|
+
: await Promise.resolve().then(() => __importStar(require('./environments/hardhat/package-lock.json')));
|
|
280
|
+
packageLock.packages[''].license = c.license;
|
|
281
|
+
return packageLock;
|
|
282
|
+
}
|
|
283
|
+
getPrintContract(c) {
|
|
284
|
+
return (0, print_1.printContract)(c);
|
|
285
|
+
}
|
|
286
|
+
async zipHardhat(c, opts) {
|
|
287
|
+
const zip = new jszip_1.default();
|
|
288
|
+
const packageJson = await this.getPackageJson(c);
|
|
289
|
+
const packageLock = await this.getPackageLock(c);
|
|
290
|
+
zip.file(`contracts/${c.name}.sol`, this.getPrintContract(c));
|
|
291
|
+
zip.file('test/test.ts', this.getTest(c, opts));
|
|
292
|
+
if (c.upgradeable) {
|
|
293
|
+
zip.file('scripts/deploy.ts', this.getScript(c));
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
zip.file(`ignition/modules/${c.name}.ts`, this.getIgnitionModule(c));
|
|
297
|
+
}
|
|
298
|
+
zip.file('.gitignore', this.getGitIgnore());
|
|
299
|
+
zip.file('hardhat.config.ts', this.getHardhatConfig(c.upgradeable));
|
|
300
|
+
zip.file('package.json', JSON.stringify(packageJson, null, 2));
|
|
301
|
+
zip.file(`package-lock.json`, JSON.stringify(packageLock, null, 2));
|
|
302
|
+
zip.file('README.md', this.getReadme(c));
|
|
303
|
+
zip.file('tsconfig.json', this.getTsConfig());
|
|
304
|
+
return zip;
|
|
305
|
+
}
|
|
218
306
|
}
|
|
307
|
+
exports.HardhatZipGenerator = HardhatZipGenerator;
|
|
219
308
|
async function zipHardhat(c, opts) {
|
|
220
|
-
|
|
221
|
-
const { default: packageJson } = c.upgradeable
|
|
222
|
-
? await Promise.resolve().then(() => __importStar(require('./environments/hardhat/upgradeable/package.json')))
|
|
223
|
-
: await Promise.resolve().then(() => __importStar(require('./environments/hardhat/package.json')));
|
|
224
|
-
packageJson.license = c.license;
|
|
225
|
-
const { default: packageLock } = c.upgradeable
|
|
226
|
-
? await Promise.resolve().then(() => __importStar(require('./environments/hardhat/upgradeable/package-lock.json')))
|
|
227
|
-
: await Promise.resolve().then(() => __importStar(require('./environments/hardhat/package-lock.json')));
|
|
228
|
-
packageLock.packages[''].license = c.license;
|
|
229
|
-
zip.file(`contracts/${c.name}.sol`, (0, print_1.printContract)(c));
|
|
230
|
-
zip.file('test/test.ts', test(c, opts));
|
|
231
|
-
if (c.upgradeable) {
|
|
232
|
-
zip.file('scripts/deploy.ts', script(c));
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
zip.file(`ignition/modules/${c.name}.ts`, ignitionModule(c));
|
|
236
|
-
}
|
|
237
|
-
zip.file('.gitignore', gitIgnore);
|
|
238
|
-
zip.file('hardhat.config.ts', hardhatConfig(c.upgradeable));
|
|
239
|
-
zip.file('package.json', JSON.stringify(packageJson, null, 2));
|
|
240
|
-
zip.file(`package-lock.json`, JSON.stringify(packageLock, null, 2));
|
|
241
|
-
zip.file('README.md', readme(c));
|
|
242
|
-
zip.file('tsconfig.json', tsConfig);
|
|
243
|
-
return zip;
|
|
309
|
+
return new HardhatZipGenerator().zipHardhat(c, opts);
|
|
244
310
|
}
|
|
245
311
|
//# sourceMappingURL=zip-hardhat.js.map
|
package/dist/zip-hardhat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zip-hardhat.js","sourceRoot":"","sources":["../src/zip-hardhat.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zip-hardhat.js","sourceRoot":"","sources":["../src/zip-hardhat.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openzeppelin/wizard",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.5",
|
|
4
4
|
"description": "A boilerplate generator to get started with OpenZeppelin Contracts",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": "https://github.com/OpenZeppelin/contracts-wizard",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"/dist",
|
|
13
13
|
"/src",
|
|
14
14
|
"openzeppelin-contracts-version.json",
|
|
15
|
-
"openzeppelin-contracts-version.d.ts",
|
|
15
|
+
"openzeppelin-contracts-version.json.d.ts",
|
|
16
16
|
"!**/*.test.*"
|
|
17
17
|
],
|
|
18
18
|
"scripts": {
|
package/src/contract.ts
CHANGED
|
@@ -4,7 +4,9 @@ export interface Contract {
|
|
|
4
4
|
name: string;
|
|
5
5
|
license: string;
|
|
6
6
|
parents: Parent[];
|
|
7
|
+
topLevelComments: string[];
|
|
7
8
|
natspecTags: NatspecTag[];
|
|
9
|
+
libraries: Library[];
|
|
8
10
|
imports: ImportContract[];
|
|
9
11
|
functions: ContractFunction[];
|
|
10
12
|
structs: ContractStruct[];
|
|
@@ -20,6 +22,7 @@ export interface Parent {
|
|
|
20
22
|
contract: ImportContract;
|
|
21
23
|
params: Value[];
|
|
22
24
|
importOnly?: boolean;
|
|
25
|
+
constructionOnly?: boolean;
|
|
23
26
|
}
|
|
24
27
|
|
|
25
28
|
export interface ImportContract extends ReferencedContract {
|
|
@@ -31,9 +34,9 @@ export interface ReferencedContract {
|
|
|
31
34
|
transpiled?: boolean;
|
|
32
35
|
}
|
|
33
36
|
|
|
34
|
-
export interface
|
|
37
|
+
export interface Library {
|
|
35
38
|
library: ImportContract;
|
|
36
|
-
usingFor: string
|
|
39
|
+
usingFor: Set<string>;
|
|
37
40
|
}
|
|
38
41
|
|
|
39
42
|
export interface BaseFunction {
|
|
@@ -53,13 +56,13 @@ export interface ContractFunction extends BaseFunction {
|
|
|
53
56
|
comments: string[];
|
|
54
57
|
}
|
|
55
58
|
|
|
59
|
+
export type FunctionKind = 'private' | 'internal' | 'public' | 'external';
|
|
56
60
|
export interface ContractStruct {
|
|
57
61
|
name: string;
|
|
58
62
|
comments: string[];
|
|
59
63
|
variables: string[];
|
|
60
64
|
}
|
|
61
65
|
|
|
62
|
-
export type FunctionKind = 'internal' | 'public' | 'private';
|
|
63
66
|
export type FunctionMutability = (typeof mutabilityRank)[number];
|
|
64
67
|
|
|
65
68
|
// Order is important
|
|
@@ -89,7 +92,7 @@ export class ContractBuilder implements Contract {
|
|
|
89
92
|
license: string = 'MIT';
|
|
90
93
|
upgradeable = false;
|
|
91
94
|
|
|
92
|
-
readonly
|
|
95
|
+
readonly topLevelComments: string[] = [];
|
|
93
96
|
readonly natspecTags: NatspecTag[] = [];
|
|
94
97
|
|
|
95
98
|
readonly constructorArgs: FunctionArgument[] = [];
|
|
@@ -97,6 +100,7 @@ export class ContractBuilder implements Contract {
|
|
|
97
100
|
|
|
98
101
|
readonly variableOrErrorMap: Map<string, VariableOrErrorDefinition> = new Map<string, VariableOrErrorDefinition>();
|
|
99
102
|
private parentMap: Map<string, Parent> = new Map<string, Parent>();
|
|
103
|
+
private libraryMap: Map<string, Library> = new Map<string, Library>();
|
|
100
104
|
private functionMap: Map<string, ContractFunction> = new Map();
|
|
101
105
|
private structMap: Map<string, ContractStruct> = new Map();
|
|
102
106
|
|
|
@@ -119,7 +123,13 @@ export class ContractBuilder implements Contract {
|
|
|
119
123
|
}
|
|
120
124
|
|
|
121
125
|
get imports(): ImportContract[] {
|
|
122
|
-
|
|
126
|
+
const parents = [...this.parentMap.values()].map(p => p.contract);
|
|
127
|
+
const libraries = [...this.libraryMap.values()].map(l => l.library);
|
|
128
|
+
return [...parents, ...libraries];
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
get libraries(): Library[] {
|
|
132
|
+
return [...this.libraryMap.values()];
|
|
123
133
|
}
|
|
124
134
|
|
|
125
135
|
get functions(): ContractFunction[] {
|
|
@@ -134,20 +144,41 @@ export class ContractBuilder implements Contract {
|
|
|
134
144
|
return [...this.variableOrErrorMap.values()];
|
|
135
145
|
}
|
|
136
146
|
|
|
137
|
-
|
|
147
|
+
private updateParentMap(
|
|
148
|
+
contract: ImportContract,
|
|
149
|
+
params: Value[] = [],
|
|
150
|
+
flags: Partial<Pick<Parent, 'importOnly' | 'constructionOnly'>> = {},
|
|
151
|
+
): boolean {
|
|
138
152
|
const present = this.parentMap.has(contract.name);
|
|
139
|
-
this.parentMap.set(contract.name, { contract, params });
|
|
153
|
+
this.parentMap = new Map(this.parentMap).set(contract.name, { contract, params, ...flags });
|
|
140
154
|
return !present;
|
|
141
155
|
}
|
|
142
156
|
|
|
157
|
+
addParent(contract: ImportContract, params: Value[] = []): boolean {
|
|
158
|
+
return this.updateParentMap(contract, params);
|
|
159
|
+
}
|
|
160
|
+
|
|
143
161
|
addImportOnly(contract: ImportContract): boolean {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
162
|
+
return this.updateParentMap(contract, [], { importOnly: true });
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
addConstructionOnly(contract: ImportContract, params: Value[] = []): boolean {
|
|
166
|
+
return this.updateParentMap(contract, params, { constructionOnly: true });
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
addLibrary(library: ImportContract, usingFor: string[]): boolean {
|
|
170
|
+
let modified = false;
|
|
171
|
+
if (this.libraryMap.has(library.name)) {
|
|
172
|
+
const existing = this.libraryMap.get(library.name)!;
|
|
173
|
+
const initialSize = existing.usingFor.size;
|
|
174
|
+
usingFor.forEach(type => existing.usingFor.add(type));
|
|
175
|
+
modified = existing.usingFor.size > initialSize;
|
|
176
|
+
} else {
|
|
177
|
+
this.libraryMap.set(library.name, { library, usingFor: new Set(usingFor) });
|
|
178
|
+
modified = true;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
return modified;
|
|
151
182
|
}
|
|
152
183
|
|
|
153
184
|
addOverride(parent: ReferencedContract, baseFn: BaseFunction, mutability?: FunctionMutability) {
|
|
@@ -163,6 +194,10 @@ export class ContractBuilder implements Contract {
|
|
|
163
194
|
fn.modifiers.push(modifier);
|
|
164
195
|
}
|
|
165
196
|
|
|
197
|
+
addTopLevelComment(comment: string) {
|
|
198
|
+
this.topLevelComments.push(comment);
|
|
199
|
+
}
|
|
200
|
+
|
|
166
201
|
addNatspecTag(key: string, value: string) {
|
|
167
202
|
// eslint-disable-next-line no-useless-escape
|
|
168
203
|
if (!/^(@custom:)?[a-z][a-z\-]*$/.exec(key)) throw new Error(`Invalid natspec key: ${key}`);
|