@openzeppelin/wizard 0.2.3 → 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.
Files changed (92) hide show
  1. package/dist/add-pausable.d.ts +1 -0
  2. package/dist/add-pausable.d.ts.map +1 -1
  3. package/dist/add-pausable.js +9 -5
  4. package/dist/add-pausable.js.map +1 -1
  5. package/dist/contract.d.ts +13 -9
  6. package/dist/contract.d.ts.map +1 -1
  7. package/dist/contract.js +5 -5
  8. package/dist/contract.js.map +1 -1
  9. package/dist/environments/hardhat/package-lock.json +1717 -7286
  10. package/dist/environments/hardhat/package.json +4 -22
  11. package/dist/environments/hardhat/upgradeable/package-lock.json +2091 -7495
  12. package/dist/environments/hardhat/upgradeable/package.json +5 -22
  13. package/dist/erc1155.js +24 -15
  14. package/dist/erc1155.js.map +1 -1
  15. package/dist/erc20.d.ts +0 -1
  16. package/dist/erc20.d.ts.map +1 -1
  17. package/dist/erc20.js +45 -62
  18. package/dist/erc20.js.map +1 -1
  19. package/dist/erc721.js +54 -52
  20. package/dist/erc721.js.map +1 -1
  21. package/dist/generate/erc20.d.ts.map +1 -1
  22. package/dist/generate/erc20.js +0 -1
  23. package/dist/generate/erc20.js.map +1 -1
  24. package/dist/generate/governor.js +1 -1
  25. package/dist/generate/governor.js.map +1 -1
  26. package/dist/governor.d.ts +2 -2
  27. package/dist/governor.d.ts.map +1 -1
  28. package/dist/governor.js +110 -91
  29. package/dist/governor.js.map +1 -1
  30. package/dist/infer-transpiled.d.ts +3 -0
  31. package/dist/infer-transpiled.d.ts.map +1 -0
  32. package/dist/infer-transpiled.js +9 -0
  33. package/dist/infer-transpiled.js.map +1 -0
  34. package/dist/options.d.ts +3 -4
  35. package/dist/options.d.ts.map +1 -1
  36. package/dist/options.js +14 -11
  37. package/dist/options.js.map +1 -1
  38. package/dist/print-versioned.d.ts.map +1 -1
  39. package/dist/print-versioned.js +6 -1
  40. package/dist/print-versioned.js.map +1 -1
  41. package/dist/print.d.ts.map +1 -1
  42. package/dist/print.js +17 -9
  43. package/dist/print.js.map +1 -1
  44. package/dist/scripts/prepare.js +2 -4
  45. package/dist/scripts/prepare.js.map +1 -1
  46. package/dist/set-access-control.d.ts +1 -1
  47. package/dist/set-access-control.d.ts.map +1 -1
  48. package/dist/set-access-control.js +18 -7
  49. package/dist/set-access-control.js.map +1 -1
  50. package/dist/set-upgradeable.d.ts.map +1 -1
  51. package/dist/set-upgradeable.js +5 -4
  52. package/dist/set-upgradeable.js.map +1 -1
  53. package/dist/solidity-version.json +1 -1
  54. package/dist/zip-foundry.d.ts +5 -0
  55. package/dist/zip-foundry.d.ts.map +1 -0
  56. package/dist/zip-foundry.js +224 -0
  57. package/dist/zip-foundry.js.map +1 -0
  58. package/dist/zip-hardhat.d.ts.map +1 -1
  59. package/dist/zip-hardhat.js +36 -11
  60. package/dist/zip-hardhat.js.map +1 -1
  61. package/package.json +4 -5
  62. package/src/add-pausable.ts +7 -3
  63. package/src/contract.ts +17 -15
  64. package/src/environments/hardhat/package-lock.json +1717 -7286
  65. package/src/environments/hardhat/package.json +4 -22
  66. package/src/environments/hardhat/upgradeable/package-lock.json +2091 -7495
  67. package/src/environments/hardhat/upgradeable/package.json +5 -22
  68. package/src/erc1155.ts +30 -23
  69. package/src/erc20.ts +46 -67
  70. package/src/erc721.ts +64 -65
  71. package/src/generate/erc20.ts +0 -1
  72. package/src/generate/governor.ts +1 -1
  73. package/src/governor.ts +116 -102
  74. package/src/infer-transpiled.ts +5 -0
  75. package/src/options.ts +18 -16
  76. package/src/print-versioned.ts +6 -2
  77. package/src/print.ts +17 -13
  78. package/src/scripts/prepare.ts +1 -5
  79. package/src/set-access-control.ts +18 -7
  80. package/src/set-upgradeable.ts +5 -4
  81. package/src/solidity-version.json +1 -1
  82. package/src/zip-foundry.ts +259 -0
  83. package/src/zip-hardhat.ts +39 -11
  84. package/CHANGELOG.md +0 -26
  85. package/dist/zip.d.ts +0 -4
  86. package/dist/zip.d.ts.map +0 -1
  87. package/dist/zip.js +0 -48
  88. package/dist/zip.js.map +0 -1
  89. package/src/.DS_Store +0 -0
  90. package/src/environments/.DS_Store +0 -0
  91. package/src/environments/hardhat/.DS_Store +0 -0
  92. package/src/zip.ts +0 -53
@@ -9,27 +9,10 @@
9
9
  "author": "",
10
10
  "license": "ISC",
11
11
  "devDependencies": {
12
- "@openzeppelin/contracts-upgradeable": "^4.8.0",
13
- "@openzeppelin/hardhat-upgrades": "^1.21.0",
14
- "@ethersproject/abi": "^5.7.0",
15
- "@ethersproject/providers": "^5.7.2",
16
- "@nomicfoundation/hardhat-chai-matchers": "^1.0.4",
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 { addPausable } from './add-pausable';
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
- addPausable(c, access, [functions._beforeTokenTransfer]);
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
- c.addParent(
92
- {
93
- name: 'ERC1155',
94
- path: '@openzeppelin/contracts/token/ERC1155/ERC1155.sol',
95
- },
96
- [uri],
97
- );
98
-
99
- c.addOverride('ERC1155', functions._beforeTokenTransfer);
100
- c.addOverride('ERC1155', supportsInterface);
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
- c.addParent({
132
+ const ERC1155Supply = {
124
133
  name: 'ERC1155Supply',
125
134
  path: '@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol',
126
- });
127
- c.addOverride('ERC1155Supply', functions._beforeTokenTransfer);
135
+ };
136
+ c.addParent(ERC1155Supply);
137
+ c.addOverride(ERC1155Supply, functions._update);
128
138
  }
129
139
 
130
140
  const functions = defineFunctions({
131
- _beforeTokenTransfer: {
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: 'amounts', type: 'uint256[] memory' },
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 { addPausable } from './add-pausable';
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: false,
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.snapshots || opts.upgradeable === 'uups';
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
- addPausable(c, access, [functions._beforeTokenTransfer]);
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('ERC20', functions._beforeTokenTransfer);
121
- c.addOverride('ERC20', functions._afterTokenTransfer);
122
- c.addOverride('ERC20', functions._mint);
123
- c.addOverride('ERC20', functions._burn);
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
- c.addParent({
160
+ const ERC20Permit = {
171
161
  name: 'ERC20Permit',
172
- path: '@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol',
173
- }, [name]);
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
- c.addParent({
174
+ const ERC20Votes = {
182
175
  name: 'ERC20Votes',
183
176
  path: '@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol',
184
- });
185
- c.addOverride('ERC20Votes', functions._mint);
186
- c.addOverride('ERC20Votes', functions._burn);
187
- c.addOverride('ERC20Votes', functions._afterTokenTransfer);
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
- _beforeTokenTransfer: {
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: 'amount', type: 'uint256' },
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 { addPausable } from './add-pausable';
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
- addPausable(c, access, [functions._beforeTokenTransfer]);
85
+ addPausableExtension(c, access);
86
86
  }
87
87
 
88
88
  if (allOpts.burnable) {
@@ -104,45 +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
- name: 'ERC721',
111
- path: '@openzeppelin/contracts/token/ERC721/ERC721.sol',
112
- },
113
- [name, symbol],
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('ERC721', functions._baseURI);
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
- c.addParent({
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('ERC721Enumerable', functions._beforeTokenTransfer);
135
- c.addOverride('ERC721Enumerable', supportsInterface);
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
- c.addParent({
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('ERC721URIStorage', functions._burn);
145
- c.addOverride('ERC721URIStorage', functions.tokenURI);
156
+ c.addOverride(ERC721URIStorage, functions.tokenURI);
157
+ c.addOverride(ERC721URIStorage, supportsInterface);
146
158
  }
147
159
 
148
160
  function addBurnable(c: ContractBuilder) {
@@ -154,16 +166,11 @@ function addBurnable(c: ContractBuilder) {
154
166
 
155
167
  function addMintable(c: ContractBuilder, access: Access, incremental = false, uriStorage = false) {
156
168
  const fn = getMintFunction(incremental, uriStorage);
157
- requireAccessControl(c, fn, access, 'MINTER');
169
+ requireAccessControl(c, fn, access, 'MINTER', 'minter');
158
170
 
159
171
  if (incremental) {
160
- c.addUsing({
161
- name: 'Counters',
162
- path: '@openzeppelin/contracts/utils/Counters.sol',
163
- }, 'Counters.Counter');
164
- c.addVariable('Counters.Counter private _tokenIdCounter;');
165
- c.addFunctionCode('uint256 tokenId = _tokenIdCounter.current();', fn);
166
- c.addFunctionCode('_tokenIdCounter.increment();', fn);
172
+ c.addVariable('uint256 private _nextTokenId;');
173
+ c.addFunctionCode('uint256 tokenId = _nextTokenId++;', fn);
167
174
  c.addFunctionCode('_safeMint(to, tokenId);', fn);
168
175
  } else {
169
176
  c.addFunctionCode('_safeMint(to, tokenId);', fn);
@@ -175,47 +182,31 @@ function addMintable(c: ContractBuilder, access: Access, incremental = false, ur
175
182
  }
176
183
 
177
184
  function addVotes(c: ContractBuilder, name: string) {
178
- c.addParent(
179
- {
180
- name: 'EIP712',
181
- path: '@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol',
182
- },
183
- [name, "1"]
184
- );
185
- c.addParent(
186
- {
187
- name: 'ERC721Votes',
188
- path: '@openzeppelin/contracts/token/ERC721/extensions/draft-ERC721Votes.sol',
189
- });
190
- c.addOverride('ERC721Votes', functions._afterTokenTransfer);
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);
191
199
  }
192
200
 
193
201
  const functions = defineFunctions({
194
- _beforeTokenTransfer: {
195
- kind: 'internal' as const,
196
- args: [
197
- { name: 'from', type: 'address' },
198
- { name: 'to', type: 'address' },
199
- { name: 'tokenId', type: 'uint256' },
200
- { name: 'batchSize', type: 'uint256' },
201
- ],
202
- },
203
-
204
- _afterTokenTransfer: {
202
+ _update: {
205
203
  kind: 'internal' as const,
206
204
  args: [
207
- { name: 'from', type: 'address' },
208
205
  { name: 'to', type: 'address' },
209
206
  { name: 'tokenId', type: 'uint256' },
210
- { name: 'batchSize', type: 'uint256' },
211
- ],
212
- },
213
-
214
- _burn: {
215
- kind: 'internal' as const,
216
- args: [
217
- { name: 'tokenId', type: 'uint256' },
207
+ { name: 'auth', type: 'address' },
218
208
  ],
209
+ returns: ['address'],
219
210
  },
220
211
 
221
212
  tokenURI: {
@@ -233,6 +224,14 @@ const functions = defineFunctions({
233
224
  returns: ['string memory'],
234
225
  mutability: 'pure' as const,
235
226
  },
227
+
228
+ _increaseBalance: {
229
+ kind: 'internal' as const,
230
+ args: [
231
+ { name: 'account', type: 'address' },
232
+ { name: 'value', type: 'uint128' },
233
+ ],
234
+ },
236
235
  });
237
236
 
238
237
  function getMintFunction(incremental: boolean, uriStorage: boolean) {
@@ -10,7 +10,6 @@ const blueprint = {
10
10
  name: ['MyToken'],
11
11
  symbol: ['MTK'],
12
12
  burnable: booleans,
13
- snapshots: booleans,
14
13
  pausable: booleans,
15
14
  mintable: booleans,
16
15
  permit: booleans,
@@ -18,7 +18,7 @@ const blueprint = {
18
18
  quorumAbsolute: ['1000'],
19
19
  votes: votesOptions,
20
20
  timelock: timelockOptions,
21
- bravo: booleans,
21
+ storage: booleans,
22
22
  settings: booleans,
23
23
  upgradeable: upgradeableOptions,
24
24
  access: accessOptions,