@openzeppelin/wizard 0.3.0 → 0.4.0
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/add-pausable.d.ts +1 -0
- package/dist/add-pausable.d.ts.map +1 -1
- package/dist/add-pausable.js +9 -5
- package/dist/add-pausable.js.map +1 -1
- package/dist/contract.d.ts +13 -9
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +5 -5
- package/dist/contract.js.map +1 -1
- package/dist/environments/hardhat/package-lock.json +1488 -7247
- package/dist/environments/hardhat/package.json +4 -22
- package/dist/environments/hardhat/upgradeable/package-lock.json +1668 -7725
- package/dist/environments/hardhat/upgradeable/package.json +5 -22
- package/dist/erc1155.js +24 -15
- package/dist/erc1155.js.map +1 -1
- package/dist/erc20.d.ts +0 -1
- package/dist/erc20.d.ts.map +1 -1
- package/dist/erc20.js +45 -62
- package/dist/erc20.js.map +1 -1
- package/dist/erc721.js +54 -53
- package/dist/erc721.js.map +1 -1
- package/dist/generate/erc20.d.ts.map +1 -1
- package/dist/generate/erc20.js +0 -1
- package/dist/generate/erc20.js.map +1 -1
- package/dist/generate/governor.js +1 -1
- package/dist/generate/governor.js.map +1 -1
- package/dist/governor.d.ts +2 -2
- package/dist/governor.d.ts.map +1 -1
- package/dist/governor.js +104 -98
- package/dist/governor.js.map +1 -1
- package/dist/infer-transpiled.d.ts +3 -0
- package/dist/infer-transpiled.d.ts.map +1 -0
- package/dist/infer-transpiled.js +9 -0
- package/dist/infer-transpiled.js.map +1 -0
- package/dist/options.d.ts +3 -4
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +14 -11
- package/dist/options.js.map +1 -1
- package/dist/print-versioned.d.ts.map +1 -1
- package/dist/print-versioned.js +6 -1
- package/dist/print-versioned.js.map +1 -1
- package/dist/print.d.ts.map +1 -1
- package/dist/print.js +17 -9
- package/dist/print.js.map +1 -1
- package/dist/scripts/prepare.js +0 -1
- package/dist/scripts/prepare.js.map +1 -1
- package/dist/set-access-control.d.ts +1 -1
- package/dist/set-access-control.d.ts.map +1 -1
- package/dist/set-access-control.js +18 -7
- package/dist/set-access-control.js.map +1 -1
- package/dist/set-upgradeable.d.ts.map +1 -1
- package/dist/set-upgradeable.js +5 -4
- package/dist/set-upgradeable.js.map +1 -1
- package/dist/solidity-version.json +1 -1
- package/dist/zip-foundry.d.ts +5 -0
- package/dist/zip-foundry.d.ts.map +1 -0
- package/dist/zip-foundry.js +224 -0
- package/dist/zip-foundry.js.map +1 -0
- package/dist/zip-hardhat.d.ts.map +1 -1
- package/dist/zip-hardhat.js +36 -11
- package/dist/zip-hardhat.js.map +1 -1
- package/package.json +3 -4
- package/src/add-pausable.ts +7 -3
- package/src/contract.ts +17 -15
- package/src/environments/hardhat/package-lock.json +1488 -7247
- package/src/environments/hardhat/package.json +4 -22
- package/src/environments/hardhat/upgradeable/package-lock.json +1668 -7725
- package/src/environments/hardhat/upgradeable/package.json +5 -22
- package/src/erc1155.ts +30 -23
- package/src/erc20.ts +46 -67
- package/src/erc721.ts +64 -66
- package/src/generate/erc20.ts +0 -1
- package/src/generate/governor.ts +1 -1
- package/src/governor.ts +110 -109
- package/src/infer-transpiled.ts +5 -0
- package/src/options.ts +18 -16
- package/src/print-versioned.ts +6 -2
- package/src/print.ts +17 -13
- package/src/scripts/prepare.ts +0 -2
- package/src/set-access-control.ts +18 -7
- package/src/set-upgradeable.ts +5 -4
- package/src/solidity-version.json +1 -1
- package/src/zip-foundry.ts +259 -0
- package/src/zip-hardhat.ts +39 -11
- package/CHANGELOG.md +0 -30
- package/dist/zip.d.ts +0 -4
- package/dist/zip.d.ts.map +0 -1
- package/dist/zip.js +0 -48
- package/dist/zip.js.map +0 -1
- package/src/.DS_Store +0 -0
- package/src/environments/.DS_Store +0 -0
- package/src/environments/hardhat/.DS_Store +0 -0
- package/src/zip.ts +0 -53
|
@@ -9,27 +9,10 @@
|
|
|
9
9
|
"author": "",
|
|
10
10
|
"license": "ISC",
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"@openzeppelin/contracts
|
|
13
|
-
"@openzeppelin/
|
|
14
|
-
"@
|
|
15
|
-
"@
|
|
16
|
-
"
|
|
17
|
-
"@nomicfoundation/hardhat-network-helpers": "^1.0.6",
|
|
18
|
-
"@nomicfoundation/hardhat-toolbox": "^2.0.0",
|
|
19
|
-
"@nomiclabs/hardhat-ethers": "^2.2.0",
|
|
20
|
-
"@nomiclabs/hardhat-etherscan": "^3.1.1",
|
|
21
|
-
"@typechain/ethers-v5": "^10.1.1",
|
|
22
|
-
"@typechain/hardhat": "^6.1.4",
|
|
23
|
-
"@types/chai": "^4.3.3",
|
|
24
|
-
"@types/mocha": "^9.1.1",
|
|
25
|
-
"@types/node": "^18.11.6",
|
|
26
|
-
"chai": "^4.3.6",
|
|
27
|
-
"ethers": "^5.7.2",
|
|
28
|
-
"hardhat": "^2.12.0",
|
|
29
|
-
"hardhat-gas-reporter": "^1.0.9",
|
|
30
|
-
"solidity-coverage": "^0.8.2",
|
|
31
|
-
"ts-node": "^10.9.1",
|
|
32
|
-
"typechain": "^8.1.1",
|
|
33
|
-
"typescript": "^4.8.4"
|
|
12
|
+
"@openzeppelin/contracts": "^5.0.0",
|
|
13
|
+
"@openzeppelin/contracts-upgradeable": "^5.0.0",
|
|
14
|
+
"@openzeppelin/hardhat-upgrades": "^2.0.0",
|
|
15
|
+
"@nomicfoundation/hardhat-toolbox": "^3.0.0",
|
|
16
|
+
"hardhat": "^2.16.1"
|
|
34
17
|
}
|
|
35
18
|
}
|
package/src/erc1155.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Contract, ContractBuilder } from './contract';
|
|
2
2
|
import { Access, setAccessControl, requireAccessControl } from './set-access-control';
|
|
3
|
-
import {
|
|
3
|
+
import { addPauseFunctions } from './add-pausable';
|
|
4
4
|
import { supportsInterface } from './common-functions';
|
|
5
5
|
import { defineFunctions } from './utils/define-functions';
|
|
6
6
|
import { CommonOptions, withCommonDefaults, defaults as commonDefaults } from './common-options';
|
|
@@ -65,7 +65,7 @@ export function buildERC1155(opts: ERC1155Options): Contract {
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
if (allOpts.pausable) {
|
|
68
|
-
|
|
68
|
+
addPausableExtension(c, access);
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
if (allOpts.burnable) {
|
|
@@ -88,16 +88,25 @@ export function buildERC1155(opts: ERC1155Options): Contract {
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
function addBase(c: ContractBuilder, uri: string) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
);
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
91
|
+
const ERC1155 = {
|
|
92
|
+
name: 'ERC1155',
|
|
93
|
+
path: '@openzeppelin/contracts/token/ERC1155/ERC1155.sol',
|
|
94
|
+
};
|
|
95
|
+
c.addParent(ERC1155, [uri]);
|
|
96
|
+
|
|
97
|
+
c.addOverride(ERC1155, functions._update);
|
|
98
|
+
c.addOverride(ERC1155, supportsInterface);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function addPausableExtension(c: ContractBuilder, access: Access) {
|
|
102
|
+
const ERC1155Pausable = {
|
|
103
|
+
name: 'ERC1155Pausable',
|
|
104
|
+
path: '@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Pausable.sol',
|
|
105
|
+
};
|
|
106
|
+
c.addParent(ERC1155Pausable);
|
|
107
|
+
c.addOverride(ERC1155Pausable, functions._update);
|
|
108
|
+
|
|
109
|
+
addPauseFunctions(c, access);
|
|
101
110
|
}
|
|
102
111
|
|
|
103
112
|
function addBurnable(c: ContractBuilder) {
|
|
@@ -108,35 +117,34 @@ function addBurnable(c: ContractBuilder) {
|
|
|
108
117
|
}
|
|
109
118
|
|
|
110
119
|
function addMintable(c: ContractBuilder, access: Access) {
|
|
111
|
-
requireAccessControl(c, functions.mint, access, 'MINTER');
|
|
112
|
-
requireAccessControl(c, functions.mintBatch, access, 'MINTER');
|
|
120
|
+
requireAccessControl(c, functions.mint, access, 'MINTER', 'minter');
|
|
121
|
+
requireAccessControl(c, functions.mintBatch, access, 'MINTER', 'minter');
|
|
113
122
|
c.addFunctionCode('_mint(account, id, amount, data);', functions.mint);
|
|
114
123
|
c.addFunctionCode('_mintBatch(to, ids, amounts, data);', functions.mintBatch);
|
|
115
124
|
}
|
|
116
125
|
|
|
117
126
|
function addSetUri(c: ContractBuilder, access: Access) {
|
|
118
|
-
requireAccessControl(c, functions.setURI, access, 'URI_SETTER');
|
|
127
|
+
requireAccessControl(c, functions.setURI, access, 'URI_SETTER', undefined);
|
|
119
128
|
c.addFunctionCode('_setURI(newuri);', functions.setURI);
|
|
120
129
|
}
|
|
121
130
|
|
|
122
131
|
function addSupply(c: ContractBuilder) {
|
|
123
|
-
|
|
132
|
+
const ERC1155Supply = {
|
|
124
133
|
name: 'ERC1155Supply',
|
|
125
134
|
path: '@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol',
|
|
126
|
-
}
|
|
127
|
-
c.
|
|
135
|
+
};
|
|
136
|
+
c.addParent(ERC1155Supply);
|
|
137
|
+
c.addOverride(ERC1155Supply, functions._update);
|
|
128
138
|
}
|
|
129
139
|
|
|
130
140
|
const functions = defineFunctions({
|
|
131
|
-
|
|
141
|
+
_update: {
|
|
132
142
|
kind: 'internal' as const,
|
|
133
143
|
args: [
|
|
134
|
-
{ name: 'operator', type: 'address' },
|
|
135
144
|
{ name: 'from', type: 'address' },
|
|
136
145
|
{ name: 'to', type: 'address' },
|
|
137
146
|
{ name: 'ids', type: 'uint256[] memory' },
|
|
138
|
-
{ name: '
|
|
139
|
-
{ name: 'data', type: 'bytes memory' },
|
|
147
|
+
{ name: 'values', type: 'uint256[] memory' },
|
|
140
148
|
],
|
|
141
149
|
},
|
|
142
150
|
|
|
@@ -166,5 +174,4 @@ const functions = defineFunctions({
|
|
|
166
174
|
{ name: 'data', type: 'bytes memory' },
|
|
167
175
|
],
|
|
168
176
|
},
|
|
169
|
-
|
|
170
177
|
});
|
package/src/erc20.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Contract, ContractBuilder } from './contract';
|
|
2
2
|
import { Access, setAccessControl, requireAccessControl } from './set-access-control';
|
|
3
|
-
import {
|
|
3
|
+
import { addPauseFunctions } from './add-pausable';
|
|
4
4
|
import { defineFunctions } from './utils/define-functions';
|
|
5
5
|
import { CommonOptions, withCommonDefaults, defaults as commonDefaults } from './common-options';
|
|
6
6
|
import { setUpgradeable } from './set-upgradeable';
|
|
@@ -11,7 +11,6 @@ export interface ERC20Options extends CommonOptions {
|
|
|
11
11
|
name: string;
|
|
12
12
|
symbol: string;
|
|
13
13
|
burnable?: boolean;
|
|
14
|
-
snapshots?: boolean;
|
|
15
14
|
pausable?: boolean;
|
|
16
15
|
premint?: string;
|
|
17
16
|
mintable?: boolean;
|
|
@@ -24,11 +23,10 @@ export const defaults: Required<ERC20Options> = {
|
|
|
24
23
|
name: 'MyToken',
|
|
25
24
|
symbol: 'MTK',
|
|
26
25
|
burnable: false,
|
|
27
|
-
snapshots: false,
|
|
28
26
|
pausable: false,
|
|
29
27
|
premint: '0',
|
|
30
28
|
mintable: false,
|
|
31
|
-
permit:
|
|
29
|
+
permit: true,
|
|
32
30
|
votes: false,
|
|
33
31
|
flashmint: false,
|
|
34
32
|
access: commonDefaults.access,
|
|
@@ -41,7 +39,6 @@ function withDefaults(opts: ERC20Options): Required<ERC20Options> {
|
|
|
41
39
|
...opts,
|
|
42
40
|
...withCommonDefaults(opts),
|
|
43
41
|
burnable: opts.burnable ?? defaults.burnable,
|
|
44
|
-
snapshots: opts.snapshots ?? defaults.snapshots,
|
|
45
42
|
pausable: opts.pausable ?? defaults.pausable,
|
|
46
43
|
premint: opts.premint || defaults.premint,
|
|
47
44
|
mintable: opts.mintable ?? defaults.mintable,
|
|
@@ -56,7 +53,7 @@ export function printERC20(opts: ERC20Options = defaults): string {
|
|
|
56
53
|
}
|
|
57
54
|
|
|
58
55
|
export function isAccessControlRequired(opts: Partial<ERC20Options>): boolean {
|
|
59
|
-
return opts.mintable || opts.pausable || opts.
|
|
56
|
+
return opts.mintable || opts.pausable || opts.upgradeable === 'uups';
|
|
60
57
|
}
|
|
61
58
|
|
|
62
59
|
export function buildERC20(opts: ERC20Options): Contract {
|
|
@@ -72,12 +69,8 @@ export function buildERC20(opts: ERC20Options): Contract {
|
|
|
72
69
|
addBurnable(c);
|
|
73
70
|
}
|
|
74
71
|
|
|
75
|
-
if (allOpts.snapshots) {
|
|
76
|
-
addSnapshot(c, access);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
72
|
if (allOpts.pausable) {
|
|
80
|
-
|
|
73
|
+
addPausableExtension(c, access);
|
|
81
74
|
}
|
|
82
75
|
|
|
83
76
|
if (allOpts.premint) {
|
|
@@ -109,18 +102,27 @@ export function buildERC20(opts: ERC20Options): Contract {
|
|
|
109
102
|
}
|
|
110
103
|
|
|
111
104
|
function addBase(c: ContractBuilder, name: string, symbol: string) {
|
|
105
|
+
const ERC20 = {
|
|
106
|
+
name: 'ERC20',
|
|
107
|
+
path: '@openzeppelin/contracts/token/ERC20/ERC20.sol',
|
|
108
|
+
};
|
|
112
109
|
c.addParent(
|
|
113
|
-
|
|
114
|
-
name: 'ERC20',
|
|
115
|
-
path: '@openzeppelin/contracts/token/ERC20/ERC20.sol',
|
|
116
|
-
},
|
|
110
|
+
ERC20,
|
|
117
111
|
[name, symbol],
|
|
118
112
|
);
|
|
119
113
|
|
|
120
|
-
c.addOverride(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
114
|
+
c.addOverride(ERC20, functions._update);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function addPausableExtension(c: ContractBuilder, access: Access) {
|
|
118
|
+
const ERC20Pausable = {
|
|
119
|
+
name: 'ERC20Pausable',
|
|
120
|
+
path: '@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol',
|
|
121
|
+
};
|
|
122
|
+
c.addParent(ERC20Pausable);
|
|
123
|
+
c.addOverride(ERC20Pausable, functions._update);
|
|
124
|
+
|
|
125
|
+
addPauseFunctions(c, access);
|
|
124
126
|
}
|
|
125
127
|
|
|
126
128
|
function addBurnable(c: ContractBuilder) {
|
|
@@ -130,18 +132,6 @@ function addBurnable(c: ContractBuilder) {
|
|
|
130
132
|
});
|
|
131
133
|
}
|
|
132
134
|
|
|
133
|
-
function addSnapshot(c: ContractBuilder, access: Access) {
|
|
134
|
-
c.addParent({
|
|
135
|
-
name: 'ERC20Snapshot',
|
|
136
|
-
path: '@openzeppelin/contracts/token/ERC20/extensions/ERC20Snapshot.sol',
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
c.addOverride('ERC20Snapshot', functions._beforeTokenTransfer);
|
|
140
|
-
|
|
141
|
-
requireAccessControl(c, functions.snapshot, access, 'SNAPSHOT');
|
|
142
|
-
c.addFunctionCode('_snapshot();', functions.snapshot);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
135
|
export const premintPattern = /^(\d*)(?:\.(\d+))?(?:e(\d+))?$/;
|
|
146
136
|
|
|
147
137
|
function addPremint(c: ContractBuilder, amount: string) {
|
|
@@ -162,15 +152,18 @@ function addPremint(c: ContractBuilder, amount: string) {
|
|
|
162
152
|
}
|
|
163
153
|
|
|
164
154
|
function addMintable(c: ContractBuilder, access: Access) {
|
|
165
|
-
requireAccessControl(c, functions.mint, access, 'MINTER');
|
|
155
|
+
requireAccessControl(c, functions.mint, access, 'MINTER', 'minter');
|
|
166
156
|
c.addFunctionCode('_mint(to, amount);', functions.mint);
|
|
167
157
|
}
|
|
168
158
|
|
|
169
159
|
function addPermit(c: ContractBuilder, name: string) {
|
|
170
|
-
|
|
160
|
+
const ERC20Permit = {
|
|
171
161
|
name: 'ERC20Permit',
|
|
172
|
-
path: '@openzeppelin/contracts/token/ERC20/extensions/
|
|
173
|
-
}
|
|
162
|
+
path: '@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol',
|
|
163
|
+
};
|
|
164
|
+
c.addParent(ERC20Permit, [name]);
|
|
165
|
+
c.addOverride(ERC20Permit, functions.nonces);
|
|
166
|
+
|
|
174
167
|
}
|
|
175
168
|
|
|
176
169
|
function addVotes(c: ContractBuilder) {
|
|
@@ -178,13 +171,15 @@ function addVotes(c: ContractBuilder) {
|
|
|
178
171
|
throw new Error('Missing ERC20Permit requirement for ERC20Votes');
|
|
179
172
|
}
|
|
180
173
|
|
|
181
|
-
|
|
174
|
+
const ERC20Votes = {
|
|
182
175
|
name: 'ERC20Votes',
|
|
183
176
|
path: '@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol',
|
|
184
|
-
}
|
|
185
|
-
c.
|
|
186
|
-
c.addOverride(
|
|
187
|
-
c.addOverride(
|
|
177
|
+
};
|
|
178
|
+
c.addParent(ERC20Votes);
|
|
179
|
+
c.addOverride(ERC20Votes, functions._update);
|
|
180
|
+
c.addOverride({
|
|
181
|
+
name: 'Nonces',
|
|
182
|
+
}, functions.nonces);
|
|
188
183
|
}
|
|
189
184
|
|
|
190
185
|
function addFlashMint(c: ContractBuilder) {
|
|
@@ -195,37 +190,12 @@ function addFlashMint(c: ContractBuilder) {
|
|
|
195
190
|
}
|
|
196
191
|
|
|
197
192
|
const functions = defineFunctions({
|
|
198
|
-
|
|
199
|
-
kind: 'internal' as const,
|
|
200
|
-
args: [
|
|
201
|
-
{ name: 'from', type: 'address' },
|
|
202
|
-
{ name: 'to', type: 'address' },
|
|
203
|
-
{ name: 'amount', type: 'uint256' },
|
|
204
|
-
],
|
|
205
|
-
},
|
|
206
|
-
|
|
207
|
-
_afterTokenTransfer: {
|
|
193
|
+
_update: {
|
|
208
194
|
kind: 'internal' as const,
|
|
209
195
|
args: [
|
|
210
196
|
{ name: 'from', type: 'address' },
|
|
211
197
|
{ name: 'to', type: 'address' },
|
|
212
|
-
{ name: '
|
|
213
|
-
],
|
|
214
|
-
},
|
|
215
|
-
|
|
216
|
-
_burn: {
|
|
217
|
-
kind: 'internal' as const,
|
|
218
|
-
args: [
|
|
219
|
-
{ name: 'account', type: 'address' },
|
|
220
|
-
{ name: 'amount', type: 'uint256' },
|
|
221
|
-
],
|
|
222
|
-
},
|
|
223
|
-
|
|
224
|
-
_mint: {
|
|
225
|
-
kind: 'internal' as const,
|
|
226
|
-
args: [
|
|
227
|
-
{ name: 'to', type: 'address' },
|
|
228
|
-
{ name: 'amount', type: 'uint256' },
|
|
198
|
+
{ name: 'value', type: 'uint256' },
|
|
229
199
|
],
|
|
230
200
|
},
|
|
231
201
|
|
|
@@ -251,4 +221,13 @@ const functions = defineFunctions({
|
|
|
251
221
|
kind: 'public' as const,
|
|
252
222
|
args: [],
|
|
253
223
|
},
|
|
224
|
+
|
|
225
|
+
nonces: {
|
|
226
|
+
kind: 'public' as const,
|
|
227
|
+
args: [
|
|
228
|
+
{ name: 'owner', type: 'address' },
|
|
229
|
+
],
|
|
230
|
+
returns: ['uint256'],
|
|
231
|
+
mutability: 'view' as const,
|
|
232
|
+
}
|
|
254
233
|
});
|
package/src/erc721.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Contract, ContractBuilder } from './contract';
|
|
2
2
|
import { Access, setAccessControl, requireAccessControl } from './set-access-control';
|
|
3
|
-
import {
|
|
3
|
+
import { addPauseFunctions } from './add-pausable';
|
|
4
4
|
import { supportsInterface } from './common-functions';
|
|
5
5
|
import { defineFunctions } from './utils/define-functions';
|
|
6
6
|
import { CommonOptions, withCommonDefaults, defaults as commonDefaults } from './common-options';
|
|
@@ -82,7 +82,7 @@ export function buildERC721(opts: ERC721Options): Contract {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
if (allOpts.pausable) {
|
|
85
|
-
|
|
85
|
+
addPausableExtension(c, access);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
if (allOpts.burnable) {
|
|
@@ -104,46 +104,57 @@ export function buildERC721(opts: ERC721Options): Contract {
|
|
|
104
104
|
return c;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
+
function addPausableExtension(c: ContractBuilder, access: Access) {
|
|
108
|
+
const ERC721Pausable = {
|
|
109
|
+
name: 'ERC721Pausable',
|
|
110
|
+
path: '@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol',
|
|
111
|
+
};
|
|
112
|
+
c.addParent(ERC721Pausable);
|
|
113
|
+
c.addOverride(ERC721Pausable, functions._update);
|
|
114
|
+
|
|
115
|
+
addPauseFunctions(c, access);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const ERC721 = {
|
|
119
|
+
name: 'ERC721',
|
|
120
|
+
path: '@openzeppelin/contracts/token/ERC721/ERC721.sol',
|
|
121
|
+
};
|
|
122
|
+
|
|
107
123
|
function addBase(c: ContractBuilder, name: string, symbol: string) {
|
|
108
|
-
c.addParent(
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
);
|
|
115
|
-
|
|
116
|
-
c.addOverride('ERC721', functions._beforeTokenTransfer);
|
|
117
|
-
c.addOverride('ERC721', functions._afterTokenTransfer);
|
|
118
|
-
c.addOverride('ERC721', functions._burn);
|
|
119
|
-
c.addOverride('ERC721', functions.tokenURI);
|
|
120
|
-
c.addOverride('ERC721', supportsInterface);
|
|
124
|
+
c.addParent(ERC721, [name, symbol]);
|
|
125
|
+
|
|
126
|
+
c.addOverride(ERC721, functions._update);
|
|
127
|
+
c.addOverride(ERC721, functions._increaseBalance);
|
|
128
|
+
c.addOverride(ERC721, functions.tokenURI);
|
|
129
|
+
c.addOverride(ERC721, supportsInterface);
|
|
121
130
|
}
|
|
122
131
|
|
|
123
132
|
function addBaseURI(c: ContractBuilder, baseUri: string) {
|
|
124
|
-
c.addOverride(
|
|
133
|
+
c.addOverride(ERC721, functions._baseURI);
|
|
125
134
|
c.setFunctionBody([`return ${JSON.stringify(baseUri)};`], functions._baseURI);
|
|
126
135
|
}
|
|
127
136
|
|
|
128
137
|
function addEnumerable(c: ContractBuilder) {
|
|
129
|
-
|
|
138
|
+
const ERC721Enumerable = {
|
|
130
139
|
name: 'ERC721Enumerable',
|
|
131
140
|
path: '@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol',
|
|
132
|
-
}
|
|
141
|
+
};
|
|
142
|
+
c.addParent(ERC721Enumerable);
|
|
133
143
|
|
|
134
|
-
c.addOverride(
|
|
135
|
-
c.addOverride(
|
|
144
|
+
c.addOverride(ERC721Enumerable, functions._update);
|
|
145
|
+
c.addOverride(ERC721Enumerable, functions._increaseBalance);
|
|
146
|
+
c.addOverride(ERC721Enumerable, supportsInterface);
|
|
136
147
|
}
|
|
137
148
|
|
|
138
149
|
function addURIStorage(c: ContractBuilder) {
|
|
139
|
-
|
|
150
|
+
const ERC721URIStorage = {
|
|
140
151
|
name: 'ERC721URIStorage',
|
|
141
152
|
path: '@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol',
|
|
142
|
-
}
|
|
153
|
+
};
|
|
154
|
+
c.addParent(ERC721URIStorage);
|
|
143
155
|
|
|
144
|
-
c.addOverride(
|
|
145
|
-
c.addOverride(
|
|
146
|
-
c.addOverride('ERC721URIStorage', supportsInterface);
|
|
156
|
+
c.addOverride(ERC721URIStorage, functions.tokenURI);
|
|
157
|
+
c.addOverride(ERC721URIStorage, supportsInterface);
|
|
147
158
|
}
|
|
148
159
|
|
|
149
160
|
function addBurnable(c: ContractBuilder) {
|
|
@@ -155,16 +166,11 @@ function addBurnable(c: ContractBuilder) {
|
|
|
155
166
|
|
|
156
167
|
function addMintable(c: ContractBuilder, access: Access, incremental = false, uriStorage = false) {
|
|
157
168
|
const fn = getMintFunction(incremental, uriStorage);
|
|
158
|
-
requireAccessControl(c, fn, access, 'MINTER');
|
|
169
|
+
requireAccessControl(c, fn, access, 'MINTER', 'minter');
|
|
159
170
|
|
|
160
171
|
if (incremental) {
|
|
161
|
-
c.
|
|
162
|
-
|
|
163
|
-
path: '@openzeppelin/contracts/utils/Counters.sol',
|
|
164
|
-
}, 'Counters.Counter');
|
|
165
|
-
c.addVariable('Counters.Counter private _tokenIdCounter;');
|
|
166
|
-
c.addFunctionCode('uint256 tokenId = _tokenIdCounter.current();', fn);
|
|
167
|
-
c.addFunctionCode('_tokenIdCounter.increment();', fn);
|
|
172
|
+
c.addVariable('uint256 private _nextTokenId;');
|
|
173
|
+
c.addFunctionCode('uint256 tokenId = _nextTokenId++;', fn);
|
|
168
174
|
c.addFunctionCode('_safeMint(to, tokenId);', fn);
|
|
169
175
|
} else {
|
|
170
176
|
c.addFunctionCode('_safeMint(to, tokenId);', fn);
|
|
@@ -176,47 +182,31 @@ function addMintable(c: ContractBuilder, access: Access, incremental = false, ur
|
|
|
176
182
|
}
|
|
177
183
|
|
|
178
184
|
function addVotes(c: ContractBuilder, name: string) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
c.addOverride(
|
|
185
|
+
const EIP712 = {
|
|
186
|
+
name: 'EIP712',
|
|
187
|
+
path: '@openzeppelin/contracts/utils/cryptography/EIP712.sol',
|
|
188
|
+
};
|
|
189
|
+
c.addParent(EIP712, [name, "1"]);
|
|
190
|
+
|
|
191
|
+
const ERC721Votes = {
|
|
192
|
+
name: 'ERC721Votes',
|
|
193
|
+
path: '@openzeppelin/contracts/token/ERC721/extensions/ERC721Votes.sol',
|
|
194
|
+
};
|
|
195
|
+
c.addParent(ERC721Votes);
|
|
196
|
+
|
|
197
|
+
c.addOverride(ERC721Votes, functions._update);
|
|
198
|
+
c.addOverride(ERC721Votes, functions._increaseBalance);
|
|
192
199
|
}
|
|
193
200
|
|
|
194
201
|
const functions = defineFunctions({
|
|
195
|
-
|
|
196
|
-
kind: 'internal' as const,
|
|
197
|
-
args: [
|
|
198
|
-
{ name: 'from', type: 'address' },
|
|
199
|
-
{ name: 'to', type: 'address' },
|
|
200
|
-
{ name: 'tokenId', type: 'uint256' },
|
|
201
|
-
{ name: 'batchSize', type: 'uint256' },
|
|
202
|
-
],
|
|
203
|
-
},
|
|
204
|
-
|
|
205
|
-
_afterTokenTransfer: {
|
|
202
|
+
_update: {
|
|
206
203
|
kind: 'internal' as const,
|
|
207
204
|
args: [
|
|
208
|
-
{ name: 'from', type: 'address' },
|
|
209
205
|
{ name: 'to', type: 'address' },
|
|
210
206
|
{ name: 'tokenId', type: 'uint256' },
|
|
211
|
-
{ name: '
|
|
212
|
-
],
|
|
213
|
-
},
|
|
214
|
-
|
|
215
|
-
_burn: {
|
|
216
|
-
kind: 'internal' as const,
|
|
217
|
-
args: [
|
|
218
|
-
{ name: 'tokenId', type: 'uint256' },
|
|
207
|
+
{ name: 'auth', type: 'address' },
|
|
219
208
|
],
|
|
209
|
+
returns: ['address'],
|
|
220
210
|
},
|
|
221
211
|
|
|
222
212
|
tokenURI: {
|
|
@@ -234,6 +224,14 @@ const functions = defineFunctions({
|
|
|
234
224
|
returns: ['string memory'],
|
|
235
225
|
mutability: 'pure' as const,
|
|
236
226
|
},
|
|
227
|
+
|
|
228
|
+
_increaseBalance: {
|
|
229
|
+
kind: 'internal' as const,
|
|
230
|
+
args: [
|
|
231
|
+
{ name: 'account', type: 'address' },
|
|
232
|
+
{ name: 'value', type: 'uint128' },
|
|
233
|
+
],
|
|
234
|
+
},
|
|
237
235
|
});
|
|
238
236
|
|
|
239
237
|
function getMintFunction(incremental: boolean, uriStorage: boolean) {
|
package/src/generate/erc20.ts
CHANGED
package/src/generate/governor.ts
CHANGED