@openzeppelin/wizard 0.5.0 → 0.5.1
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/build-generic.d.ts +2 -1
- package/dist/build-generic.d.ts.map +1 -1
- package/dist/build-generic.js.map +1 -1
- package/dist/erc20.d.ts +4 -2
- package/dist/erc20.d.ts.map +1 -1
- package/dist/erc20.js +22 -10
- package/dist/erc20.js.map +1 -1
- package/dist/stablecoin.d.ts +2 -17
- package/dist/stablecoin.d.ts.map +1 -1
- package/dist/stablecoin.js +52 -217
- package/dist/stablecoin.js.map +1 -1
- package/package.json +1 -1
- package/src/build-generic.ts +2 -1
- package/src/erc20.ts +16 -4
- package/src/stablecoin.ts +53 -266
package/dist/build-generic.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { ERC721Options } from './erc721';
|
|
|
4
4
|
import { ERC1155Options } from './erc1155';
|
|
5
5
|
import { StablecoinOptions } from './stablecoin';
|
|
6
6
|
import { GovernorOptions } from './governor';
|
|
7
|
+
import { Contract } from './contract';
|
|
7
8
|
export interface KindedOptions {
|
|
8
9
|
ERC20: {
|
|
9
10
|
kind: 'ERC20';
|
|
@@ -28,5 +29,5 @@ export interface KindedOptions {
|
|
|
28
29
|
} & CustomOptions;
|
|
29
30
|
}
|
|
30
31
|
export type GenericOptions = KindedOptions[keyof KindedOptions];
|
|
31
|
-
export declare function buildGeneric(opts: GenericOptions):
|
|
32
|
+
export declare function buildGeneric(opts: GenericOptions): Contract;
|
|
32
33
|
//# sourceMappingURL=build-generic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-generic.d.ts","sourceRoot":"","sources":["../src/build-generic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAe,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,YAAY,EAAc,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,aAAa,EAAe,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,cAAc,EAAgB,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAmB,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"build-generic.d.ts","sourceRoot":"","sources":["../src/build-generic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAe,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,YAAY,EAAc,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,aAAa,EAAe,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,cAAc,EAAgB,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAmB,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAK;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,GAAM,YAAY,CAAC;IAC9C,MAAM,EAAI;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAK,aAAa,CAAC;IAC/C,OAAO,EAAG;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,GAAI,cAAc,CAAC;IAChD,UAAU,EAAG;QAAE,IAAI,EAAE,YAAY,CAAA;KAAE,GAAI,iBAAiB,CAAC;IACzD,cAAc,EAAG;QAAE,IAAI,EAAE,gBAAgB,CAAA;KAAE,GAAI,iBAAiB,CAAC;IACjE,QAAQ,EAAE;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,GAAG,eAAe,CAAC;IACjD,MAAM,EAAG;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAI,aAAa,CAAC;CAC9C;AAED,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,aAAa,CAAC,CAAC;AAEhE,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,QAAQ,CA2B3D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-generic.js","sourceRoot":"","sources":["../src/build-generic.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"build-generic.js","sourceRoot":"","sources":["../src/build-generic.ts"],"names":[],"mappings":";;AAoBA,oCA2BC;AA/CD,qCAAsD;AACtD,mCAAmD;AACnD,qCAAsD;AACtD,uCAAyD;AACzD,6CAAkE;AAClE,yCAA4D;AAe5D,SAAgB,YAAY,CAAC,IAAoB;IAC/C,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,OAAO;YACV,OAAO,IAAA,kBAAU,EAAC,IAAI,CAAC,CAAC;QAE1B,KAAK,QAAQ;YACX,OAAO,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;QAE3B,KAAK,SAAS;YACZ,OAAO,IAAA,sBAAY,EAAC,IAAI,CAAC,CAAC;QAE5B,KAAK,YAAY;YACf,OAAO,IAAA,4BAAe,EAAC,IAAI,CAAC,CAAC;QAE/B,KAAK,gBAAgB;YACnB,OAAO,IAAA,4BAAe,EAAC,IAAI,CAAC,CAAC;QAE/B,KAAK,UAAU;YACb,OAAO,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC;QAE7B,KAAK,QAAQ;YACX,OAAO,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;QAE3B;YACE,MAAM,CAAC,GAAU,IAAI,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
|
package/dist/erc20.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ContractBuilder } from './contract';
|
|
2
2
|
import { CommonOptions } from './common-options';
|
|
3
3
|
import { ClockMode } from './set-clock-mode';
|
|
4
4
|
export interface ERC20Options extends CommonOptions {
|
|
@@ -17,8 +17,10 @@ export interface ERC20Options extends CommonOptions {
|
|
|
17
17
|
flashmint?: boolean;
|
|
18
18
|
}
|
|
19
19
|
export declare const defaults: Required<ERC20Options>;
|
|
20
|
+
export declare function withDefaults(opts: ERC20Options): Required<ERC20Options>;
|
|
20
21
|
export declare function printERC20(opts?: ERC20Options): string;
|
|
21
22
|
export declare function isAccessControlRequired(opts: Partial<ERC20Options>): boolean;
|
|
22
|
-
export declare function buildERC20(opts: ERC20Options):
|
|
23
|
+
export declare function buildERC20(opts: ERC20Options): ContractBuilder;
|
|
23
24
|
export declare const premintPattern: RegExp;
|
|
25
|
+
export declare const functions: Record<"pause" | "unpause" | "_update" | "_approve" | "mint" | "snapshot" | "nonces", import("./contract").BaseFunction>;
|
|
24
26
|
//# sourceMappingURL=erc20.d.ts.map
|
package/dist/erc20.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"erc20.d.ts","sourceRoot":"","sources":["../src/erc20.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"erc20.d.ts","sourceRoot":"","sources":["../src/erc20.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,eAAe,EAAE,MAAM,YAAY,CAAC;AAIvD,OAAO,EAAE,aAAa,EAAkD,MAAM,kBAAkB,CAAC;AAIjG,OAAO,EAAE,SAAS,EAAkC,MAAM,kBAAkB,CAAC;AAE7E,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAalC,CAAC;AAEX,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAYvE;AAED,wBAAgB,UAAU,CAAC,IAAI,GAAE,YAAuB,GAAG,MAAM,CAEhE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAE5E;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,eAAe,CA4C9D;AAkCD,eAAO,MAAM,cAAc,QAAmC,CAAC;AAiE/D,eAAO,MAAM,SAAS,0HAmDpB,CAAC"}
|
package/dist/erc20.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.premintPattern = exports.defaults = void 0;
|
|
3
|
+
exports.functions = exports.premintPattern = exports.defaults = void 0;
|
|
4
|
+
exports.withDefaults = withDefaults;
|
|
4
5
|
exports.printERC20 = printERC20;
|
|
5
6
|
exports.isAccessControlRequired = isAccessControlRequired;
|
|
6
7
|
exports.buildERC20 = buildERC20;
|
|
@@ -86,7 +87,8 @@ function addBase(c, name, symbol) {
|
|
|
86
87
|
path: '@openzeppelin/contracts/token/ERC20/ERC20.sol',
|
|
87
88
|
};
|
|
88
89
|
c.addParent(ERC20, [name, symbol]);
|
|
89
|
-
c.addOverride(ERC20, functions._update);
|
|
90
|
+
c.addOverride(ERC20, exports.functions._update);
|
|
91
|
+
c.addOverride(ERC20, exports.functions._approve); // allows override from stablecoin
|
|
90
92
|
}
|
|
91
93
|
function addPausableExtension(c, access) {
|
|
92
94
|
const ERC20Pausable = {
|
|
@@ -94,7 +96,7 @@ function addPausableExtension(c, access) {
|
|
|
94
96
|
path: '@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol',
|
|
95
97
|
};
|
|
96
98
|
c.addParent(ERC20Pausable);
|
|
97
|
-
c.addOverride(ERC20Pausable, functions._update);
|
|
99
|
+
c.addOverride(ERC20Pausable, exports.functions._update);
|
|
98
100
|
(0, add_pausable_1.addPauseFunctions)(c, access);
|
|
99
101
|
}
|
|
100
102
|
function addBurnable(c) {
|
|
@@ -116,13 +118,14 @@ function addPremint(c, amount) {
|
|
|
116
118
|
const zeroes = new Array(Math.max(0, -decimalPlace)).fill('0').join('');
|
|
117
119
|
const units = integer + decimals + zeroes;
|
|
118
120
|
const exp = decimalPlace <= 0 ? 'decimals()' : `(decimals() - ${decimalPlace})`;
|
|
119
|
-
c.
|
|
121
|
+
c.addConstructorArgument({ type: 'address', name: 'recipient' });
|
|
122
|
+
c.addConstructorCode(`_mint(recipient, ${units} * 10 ** ${exp});`);
|
|
120
123
|
}
|
|
121
124
|
}
|
|
122
125
|
}
|
|
123
126
|
function addMintable(c, access) {
|
|
124
|
-
(0, set_access_control_1.requireAccessControl)(c, functions.mint, access, 'MINTER', 'minter');
|
|
125
|
-
c.addFunctionCode('_mint(to, amount);', functions.mint);
|
|
127
|
+
(0, set_access_control_1.requireAccessControl)(c, exports.functions.mint, access, 'MINTER', 'minter');
|
|
128
|
+
c.addFunctionCode('_mint(to, amount);', exports.functions.mint);
|
|
126
129
|
}
|
|
127
130
|
function addPermit(c, name) {
|
|
128
131
|
const ERC20Permit = {
|
|
@@ -130,7 +133,7 @@ function addPermit(c, name) {
|
|
|
130
133
|
path: '@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol',
|
|
131
134
|
};
|
|
132
135
|
c.addParent(ERC20Permit, [name]);
|
|
133
|
-
c.addOverride(ERC20Permit, functions.nonces);
|
|
136
|
+
c.addOverride(ERC20Permit, exports.functions.nonces);
|
|
134
137
|
}
|
|
135
138
|
function addVotes(c, clockMode) {
|
|
136
139
|
if (!c.parents.some(p => p.contract.name === 'ERC20Permit')) {
|
|
@@ -141,14 +144,14 @@ function addVotes(c, clockMode) {
|
|
|
141
144
|
path: '@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol',
|
|
142
145
|
};
|
|
143
146
|
c.addParent(ERC20Votes);
|
|
144
|
-
c.addOverride(ERC20Votes, functions._update);
|
|
147
|
+
c.addOverride(ERC20Votes, exports.functions._update);
|
|
145
148
|
c.addImportOnly({
|
|
146
149
|
name: 'Nonces',
|
|
147
150
|
path: '@openzeppelin/contracts/utils/Nonces.sol',
|
|
148
151
|
});
|
|
149
152
|
c.addOverride({
|
|
150
153
|
name: 'Nonces',
|
|
151
|
-
}, functions.nonces);
|
|
154
|
+
}, exports.functions.nonces);
|
|
152
155
|
(0, set_clock_mode_1.setClockMode)(c, ERC20Votes, clockMode);
|
|
153
156
|
}
|
|
154
157
|
function addFlashMint(c) {
|
|
@@ -157,7 +160,7 @@ function addFlashMint(c) {
|
|
|
157
160
|
path: '@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol',
|
|
158
161
|
});
|
|
159
162
|
}
|
|
160
|
-
|
|
163
|
+
exports.functions = (0, define_functions_1.defineFunctions)({
|
|
161
164
|
_update: {
|
|
162
165
|
kind: 'internal',
|
|
163
166
|
args: [
|
|
@@ -166,6 +169,15 @@ const functions = (0, define_functions_1.defineFunctions)({
|
|
|
166
169
|
{ name: 'value', type: 'uint256' },
|
|
167
170
|
],
|
|
168
171
|
},
|
|
172
|
+
_approve: {
|
|
173
|
+
kind: 'internal',
|
|
174
|
+
args: [
|
|
175
|
+
{ name: 'owner', type: 'address' },
|
|
176
|
+
{ name: 'spender', type: 'address' },
|
|
177
|
+
{ name: 'value', type: 'uint256' },
|
|
178
|
+
{ name: 'emitEvent', type: 'bool' },
|
|
179
|
+
],
|
|
180
|
+
},
|
|
169
181
|
mint: {
|
|
170
182
|
kind: 'public',
|
|
171
183
|
args: [
|
package/dist/erc20.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"erc20.js","sourceRoot":"","sources":["../src/erc20.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"erc20.js","sourceRoot":"","sources":["../src/erc20.ts"],"names":[],"mappings":"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"}
|
package/dist/stablecoin.d.ts
CHANGED
|
@@ -1,26 +1,11 @@
|
|
|
1
1
|
import { Contract } from './contract';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export interface StablecoinOptions extends CommonOptions {
|
|
5
|
-
name: string;
|
|
6
|
-
symbol: string;
|
|
7
|
-
burnable?: boolean;
|
|
8
|
-
pausable?: boolean;
|
|
9
|
-
premint?: string;
|
|
10
|
-
mintable?: boolean;
|
|
11
|
-
permit?: boolean;
|
|
2
|
+
import { ERC20Options } from './erc20';
|
|
3
|
+
export interface StablecoinOptions extends ERC20Options {
|
|
12
4
|
limitations?: false | "allowlist" | "blocklist";
|
|
13
|
-
/**
|
|
14
|
-
* Whether to keep track of historical balances for voting in on-chain governance, and optionally specify the clock mode.
|
|
15
|
-
* Setting `true` is equivalent to 'blocknumber'. Setting a clock mode implies voting is enabled.
|
|
16
|
-
*/
|
|
17
|
-
votes?: boolean | ClockMode;
|
|
18
|
-
flashmint?: boolean;
|
|
19
5
|
custodian?: boolean;
|
|
20
6
|
}
|
|
21
7
|
export declare const defaults: Required<StablecoinOptions>;
|
|
22
8
|
export declare function printStablecoin(opts?: StablecoinOptions): string;
|
|
23
9
|
export declare function isAccessControlRequired(opts: Partial<StablecoinOptions>): boolean;
|
|
24
10
|
export declare function buildStablecoin(opts: StablecoinOptions): Contract;
|
|
25
|
-
export declare const premintPattern: RegExp;
|
|
26
11
|
//# sourceMappingURL=stablecoin.d.ts.map
|
package/dist/stablecoin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stablecoin.d.ts","sourceRoot":"","sources":["../src/stablecoin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAmB,MAAM,YAAY,CAAC;AAIvD,OAAO,
|
|
1
|
+
{"version":3,"file":"stablecoin.d.ts","sourceRoot":"","sources":["../src/stablecoin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAmB,MAAM,YAAY,CAAC;AAIvD,OAAO,EAAc,YAAY,EAA6F,MAAM,SAAS,CAAC;AAE9I,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,WAAW,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,WAAW,CAAC;IAChD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAMvC,CAAC;AAYX,wBAAgB,eAAe,CAAC,IAAI,GAAE,iBAA4B,GAAG,MAAM,CAE1E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAEjF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,QAAQ,CAiBjE"}
|
package/dist/stablecoin.js
CHANGED
|
@@ -1,47 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.defaults = void 0;
|
|
4
4
|
exports.printStablecoin = printStablecoin;
|
|
5
5
|
exports.isAccessControlRequired = isAccessControlRequired;
|
|
6
6
|
exports.buildStablecoin = buildStablecoin;
|
|
7
|
-
const contract_1 = require("./contract");
|
|
8
7
|
const set_access_control_1 = require("./set-access-control");
|
|
9
|
-
const add_pausable_1 = require("./add-pausable");
|
|
10
8
|
const define_functions_1 = require("./utils/define-functions");
|
|
11
|
-
const common_options_1 = require("./common-options");
|
|
12
|
-
const set_info_1 = require("./set-info");
|
|
13
9
|
const print_1 = require("./print");
|
|
14
|
-
const
|
|
10
|
+
const erc20_1 = require("./erc20");
|
|
15
11
|
exports.defaults = {
|
|
12
|
+
...erc20_1.defaults,
|
|
16
13
|
name: 'MyStablecoin',
|
|
17
14
|
symbol: 'MST',
|
|
18
|
-
burnable: false,
|
|
19
|
-
pausable: false,
|
|
20
|
-
premint: '0',
|
|
21
|
-
mintable: false,
|
|
22
|
-
permit: true,
|
|
23
15
|
limitations: false,
|
|
24
|
-
votes: false,
|
|
25
|
-
flashmint: false,
|
|
26
16
|
custodian: false,
|
|
27
|
-
access: common_options_1.defaults.access,
|
|
28
|
-
upgradeable: common_options_1.defaults.upgradeable,
|
|
29
|
-
info: common_options_1.defaults.info,
|
|
30
17
|
};
|
|
31
18
|
function withDefaults(opts) {
|
|
32
|
-
var _a, _b, _c, _d
|
|
19
|
+
var _a, _b, _c, _d;
|
|
33
20
|
return {
|
|
34
|
-
...opts,
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
mintable: (_c = opts.mintable) !== null && _c !== void 0 ? _c : exports.defaults.mintable,
|
|
40
|
-
permit: (_d = opts.permit) !== null && _d !== void 0 ? _d : exports.defaults.permit,
|
|
41
|
-
limitations: (_e = opts.limitations) !== null && _e !== void 0 ? _e : exports.defaults.limitations,
|
|
42
|
-
votes: (_f = opts.votes) !== null && _f !== void 0 ? _f : exports.defaults.votes,
|
|
43
|
-
flashmint: (_g = opts.flashmint) !== null && _g !== void 0 ? _g : exports.defaults.flashmint,
|
|
44
|
-
custodian: (_h = opts.custodian) !== null && _h !== void 0 ? _h : exports.defaults.custodian,
|
|
21
|
+
...(0, erc20_1.withDefaults)(opts),
|
|
22
|
+
name: (_a = opts.name) !== null && _a !== void 0 ? _a : exports.defaults.name,
|
|
23
|
+
symbol: (_b = opts.symbol) !== null && _b !== void 0 ? _b : exports.defaults.symbol,
|
|
24
|
+
limitations: (_c = opts.limitations) !== null && _c !== void 0 ? _c : exports.defaults.limitations,
|
|
25
|
+
custodian: (_d = opts.custodian) !== null && _d !== void 0 ? _d : exports.defaults.custodian,
|
|
45
26
|
};
|
|
46
27
|
}
|
|
47
28
|
function printStablecoin(opts = exports.defaults) {
|
|
@@ -52,89 +33,17 @@ function isAccessControlRequired(opts) {
|
|
|
52
33
|
}
|
|
53
34
|
function buildStablecoin(opts) {
|
|
54
35
|
const allOpts = withDefaults(opts);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (allOpts.burnable) {
|
|
59
|
-
addBurnable(c);
|
|
60
|
-
}
|
|
61
|
-
if (allOpts.pausable) {
|
|
62
|
-
addPausableExtension(c, access);
|
|
63
|
-
}
|
|
64
|
-
if (allOpts.premint) {
|
|
65
|
-
addPremint(c, allOpts.premint);
|
|
66
|
-
}
|
|
67
|
-
if (allOpts.mintable) {
|
|
68
|
-
addMintable(c, access);
|
|
69
|
-
}
|
|
70
|
-
if (allOpts.limitations) {
|
|
71
|
-
addLimitations(c, access, allOpts.limitations);
|
|
72
|
-
}
|
|
36
|
+
// Upgradeability is not yet available for the community contracts
|
|
37
|
+
allOpts.upgradeable = false;
|
|
38
|
+
const c = (0, erc20_1.buildERC20)(allOpts);
|
|
73
39
|
if (allOpts.custodian) {
|
|
74
|
-
addCustodian(c, access);
|
|
75
|
-
}
|
|
76
|
-
// Note: Votes requires Permit
|
|
77
|
-
if (allOpts.permit || allOpts.votes) {
|
|
78
|
-
addPermit(c, allOpts.name);
|
|
40
|
+
addCustodian(c, allOpts.access);
|
|
79
41
|
}
|
|
80
|
-
if (allOpts.
|
|
81
|
-
|
|
82
|
-
addVotes(c, clockMode);
|
|
83
|
-
}
|
|
84
|
-
if (allOpts.flashmint) {
|
|
85
|
-
addFlashMint(c);
|
|
42
|
+
if (allOpts.limitations) {
|
|
43
|
+
addLimitations(c, allOpts.access, allOpts.limitations);
|
|
86
44
|
}
|
|
87
|
-
(0, set_access_control_1.setAccessControl)(c, access);
|
|
88
|
-
// Upgradeability is not yet available for the community contracts
|
|
89
|
-
// setUpgradeable(c, upgradeable, access);
|
|
90
|
-
(0, set_info_1.setInfo)(c, info);
|
|
91
45
|
return c;
|
|
92
46
|
}
|
|
93
|
-
function addBase(c, name, symbol) {
|
|
94
|
-
const ERC20 = {
|
|
95
|
-
name: 'ERC20',
|
|
96
|
-
path: '@openzeppelin/contracts/token/ERC20/ERC20.sol',
|
|
97
|
-
};
|
|
98
|
-
c.addParent(ERC20, [name, symbol]);
|
|
99
|
-
c.addOverride(ERC20, functions._update);
|
|
100
|
-
c.addOverride(ERC20, functions._approve);
|
|
101
|
-
}
|
|
102
|
-
function addPausableExtension(c, access) {
|
|
103
|
-
const ERC20Pausable = {
|
|
104
|
-
name: 'ERC20Pausable',
|
|
105
|
-
path: '@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol',
|
|
106
|
-
};
|
|
107
|
-
c.addParent(ERC20Pausable);
|
|
108
|
-
c.addOverride(ERC20Pausable, functions._update);
|
|
109
|
-
(0, add_pausable_1.addPauseFunctions)(c, access);
|
|
110
|
-
}
|
|
111
|
-
function addBurnable(c) {
|
|
112
|
-
c.addParent({
|
|
113
|
-
name: 'ERC20Burnable',
|
|
114
|
-
path: '@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol',
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
exports.premintPattern = /^(\d*)(?:\.(\d+))?(?:e(\d+))?$/;
|
|
118
|
-
function addPremint(c, amount) {
|
|
119
|
-
var _a, _b, _c, _d, _e;
|
|
120
|
-
const m = amount.match(exports.premintPattern);
|
|
121
|
-
if (m) {
|
|
122
|
-
const integer = (_b = (_a = m[1]) === null || _a === void 0 ? void 0 : _a.replace(/^0+/, '')) !== null && _b !== void 0 ? _b : '';
|
|
123
|
-
const decimals = (_d = (_c = m[2]) === null || _c === void 0 ? void 0 : _c.replace(/0+$/, '')) !== null && _d !== void 0 ? _d : '';
|
|
124
|
-
const exponent = Number((_e = m[3]) !== null && _e !== void 0 ? _e : 0);
|
|
125
|
-
if (Number(integer + decimals) > 0) {
|
|
126
|
-
const decimalPlace = decimals.length - exponent;
|
|
127
|
-
const zeroes = new Array(Math.max(0, -decimalPlace)).fill('0').join('');
|
|
128
|
-
const units = integer + decimals + zeroes;
|
|
129
|
-
const exp = decimalPlace <= 0 ? 'decimals()' : `(decimals() - ${decimalPlace})`;
|
|
130
|
-
c.addConstructorCode(`_mint(msg.sender, ${units} * 10 ** ${exp});`);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
function addMintable(c, access) {
|
|
135
|
-
(0, set_access_control_1.requireAccessControl)(c, functions.mint, access, 'MINTER', 'minter');
|
|
136
|
-
c.addFunctionCode('_mint(to, amount);', functions.mint);
|
|
137
|
-
}
|
|
138
47
|
function addLimitations(c, access, mode) {
|
|
139
48
|
const type = mode === 'allowlist';
|
|
140
49
|
const ERC20Limitation = {
|
|
@@ -194,115 +103,41 @@ function addCustodian(c, access) {
|
|
|
194
103
|
}
|
|
195
104
|
}
|
|
196
105
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
{ name: 'from', type: 'address' },
|
|
235
|
-
{ name: 'to', type: 'address' },
|
|
236
|
-
{ name: 'value', type: 'uint256' },
|
|
237
|
-
],
|
|
238
|
-
},
|
|
239
|
-
_approve: {
|
|
240
|
-
kind: 'internal',
|
|
241
|
-
args: [
|
|
242
|
-
{ name: 'owner', type: 'address' },
|
|
243
|
-
{ name: 'spender', type: 'address' },
|
|
244
|
-
{ name: 'value', type: 'uint256' },
|
|
245
|
-
{ name: 'emitEvent', type: 'bool' },
|
|
246
|
-
],
|
|
247
|
-
},
|
|
248
|
-
_isCustodian: {
|
|
249
|
-
kind: 'internal',
|
|
250
|
-
args: [
|
|
251
|
-
{ name: 'user', type: 'address' },
|
|
252
|
-
],
|
|
253
|
-
returns: ['bool'],
|
|
254
|
-
mutability: 'view'
|
|
255
|
-
},
|
|
256
|
-
mint: {
|
|
257
|
-
kind: 'public',
|
|
258
|
-
args: [
|
|
259
|
-
{ name: 'to', type: 'address' },
|
|
260
|
-
{ name: 'amount', type: 'uint256' },
|
|
261
|
-
],
|
|
262
|
-
},
|
|
263
|
-
allowUser: {
|
|
264
|
-
kind: 'public',
|
|
265
|
-
args: [
|
|
266
|
-
{ name: 'user', type: 'address' }
|
|
267
|
-
],
|
|
268
|
-
},
|
|
269
|
-
disallowUser: {
|
|
270
|
-
kind: 'public',
|
|
271
|
-
args: [
|
|
272
|
-
{ name: 'user', type: 'address' }
|
|
273
|
-
],
|
|
274
|
-
},
|
|
275
|
-
blockUser: {
|
|
276
|
-
kind: 'public',
|
|
277
|
-
args: [
|
|
278
|
-
{ name: 'user', type: 'address' }
|
|
279
|
-
],
|
|
280
|
-
},
|
|
281
|
-
unblockUser: {
|
|
282
|
-
kind: 'public',
|
|
283
|
-
args: [
|
|
284
|
-
{ name: 'user', type: 'address' }
|
|
285
|
-
],
|
|
286
|
-
},
|
|
287
|
-
pause: {
|
|
288
|
-
kind: 'public',
|
|
289
|
-
args: [],
|
|
290
|
-
},
|
|
291
|
-
unpause: {
|
|
292
|
-
kind: 'public',
|
|
293
|
-
args: [],
|
|
294
|
-
},
|
|
295
|
-
snapshot: {
|
|
296
|
-
kind: 'public',
|
|
297
|
-
args: [],
|
|
298
|
-
},
|
|
299
|
-
nonces: {
|
|
300
|
-
kind: 'public',
|
|
301
|
-
args: [
|
|
302
|
-
{ name: 'owner', type: 'address' },
|
|
303
|
-
],
|
|
304
|
-
returns: ['uint256'],
|
|
305
|
-
mutability: 'view',
|
|
306
|
-
}
|
|
307
|
-
});
|
|
106
|
+
const functions = {
|
|
107
|
+
...erc20_1.functions,
|
|
108
|
+
...(0, define_functions_1.defineFunctions)({
|
|
109
|
+
_isCustodian: {
|
|
110
|
+
kind: 'internal',
|
|
111
|
+
args: [
|
|
112
|
+
{ name: 'user', type: 'address' },
|
|
113
|
+
],
|
|
114
|
+
returns: ['bool'],
|
|
115
|
+
mutability: 'view'
|
|
116
|
+
},
|
|
117
|
+
allowUser: {
|
|
118
|
+
kind: 'public',
|
|
119
|
+
args: [
|
|
120
|
+
{ name: 'user', type: 'address' }
|
|
121
|
+
],
|
|
122
|
+
},
|
|
123
|
+
disallowUser: {
|
|
124
|
+
kind: 'public',
|
|
125
|
+
args: [
|
|
126
|
+
{ name: 'user', type: 'address' }
|
|
127
|
+
],
|
|
128
|
+
},
|
|
129
|
+
blockUser: {
|
|
130
|
+
kind: 'public',
|
|
131
|
+
args: [
|
|
132
|
+
{ name: 'user', type: 'address' }
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
unblockUser: {
|
|
136
|
+
kind: 'public',
|
|
137
|
+
args: [
|
|
138
|
+
{ name: 'user', type: 'address' }
|
|
139
|
+
],
|
|
140
|
+
},
|
|
141
|
+
})
|
|
142
|
+
};
|
|
308
143
|
//# sourceMappingURL=stablecoin.js.map
|
package/dist/stablecoin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stablecoin.js","sourceRoot":"","sources":["../src/stablecoin.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"stablecoin.js","sourceRoot":"","sources":["../src/stablecoin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/build-generic.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { ERC721Options, buildERC721 } from './erc721';
|
|
|
4
4
|
import { ERC1155Options, buildERC1155 } from './erc1155';
|
|
5
5
|
import { StablecoinOptions, buildStablecoin } from './stablecoin';
|
|
6
6
|
import { GovernorOptions, buildGovernor } from './governor';
|
|
7
|
+
import { Contract } from './contract';
|
|
7
8
|
|
|
8
9
|
export interface KindedOptions {
|
|
9
10
|
ERC20: { kind: 'ERC20' } & ERC20Options;
|
|
@@ -17,7 +18,7 @@ export interface KindedOptions {
|
|
|
17
18
|
|
|
18
19
|
export type GenericOptions = KindedOptions[keyof KindedOptions];
|
|
19
20
|
|
|
20
|
-
export function buildGeneric(opts: GenericOptions) {
|
|
21
|
+
export function buildGeneric(opts: GenericOptions): Contract {
|
|
21
22
|
switch (opts.kind) {
|
|
22
23
|
case 'ERC20':
|
|
23
24
|
return buildERC20(opts);
|
package/src/erc20.ts
CHANGED
|
@@ -39,7 +39,7 @@ export const defaults: Required<ERC20Options> = {
|
|
|
39
39
|
info: commonDefaults.info,
|
|
40
40
|
} as const;
|
|
41
41
|
|
|
42
|
-
function withDefaults(opts: ERC20Options): Required<ERC20Options> {
|
|
42
|
+
export function withDefaults(opts: ERC20Options): Required<ERC20Options> {
|
|
43
43
|
return {
|
|
44
44
|
...opts,
|
|
45
45
|
...withCommonDefaults(opts),
|
|
@@ -61,7 +61,7 @@ export function isAccessControlRequired(opts: Partial<ERC20Options>): boolean {
|
|
|
61
61
|
return opts.mintable || opts.pausable || opts.upgradeable === 'uups';
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
export function buildERC20(opts: ERC20Options):
|
|
64
|
+
export function buildERC20(opts: ERC20Options): ContractBuilder {
|
|
65
65
|
const allOpts = withDefaults(opts);
|
|
66
66
|
|
|
67
67
|
const c = new ContractBuilder(allOpts.name);
|
|
@@ -118,6 +118,7 @@ function addBase(c: ContractBuilder, name: string, symbol: string) {
|
|
|
118
118
|
);
|
|
119
119
|
|
|
120
120
|
c.addOverride(ERC20, functions._update);
|
|
121
|
+
c.addOverride(ERC20, functions._approve); // allows override from stablecoin
|
|
121
122
|
}
|
|
122
123
|
|
|
123
124
|
function addPausableExtension(c: ContractBuilder, access: Access) {
|
|
@@ -152,7 +153,8 @@ function addPremint(c: ContractBuilder, amount: string) {
|
|
|
152
153
|
const zeroes = new Array(Math.max(0, -decimalPlace)).fill('0').join('');
|
|
153
154
|
const units = integer + decimals + zeroes;
|
|
154
155
|
const exp = decimalPlace <= 0 ? 'decimals()' : `(decimals() - ${decimalPlace})`;
|
|
155
|
-
c.
|
|
156
|
+
c.addConstructorArgument({type: 'address', name: 'recipient'});
|
|
157
|
+
c.addConstructorCode(`_mint(recipient, ${units} * 10 ** ${exp});`);
|
|
156
158
|
}
|
|
157
159
|
}
|
|
158
160
|
}
|
|
@@ -202,7 +204,7 @@ function addFlashMint(c: ContractBuilder) {
|
|
|
202
204
|
});
|
|
203
205
|
}
|
|
204
206
|
|
|
205
|
-
const functions = defineFunctions({
|
|
207
|
+
export const functions = defineFunctions({
|
|
206
208
|
_update: {
|
|
207
209
|
kind: 'internal' as const,
|
|
208
210
|
args: [
|
|
@@ -212,6 +214,16 @@ const functions = defineFunctions({
|
|
|
212
214
|
],
|
|
213
215
|
},
|
|
214
216
|
|
|
217
|
+
_approve: {
|
|
218
|
+
kind: 'internal' as const,
|
|
219
|
+
args: [
|
|
220
|
+
{ name: 'owner', type: 'address' },
|
|
221
|
+
{ name: 'spender', type: 'address' },
|
|
222
|
+
{ name: 'value', type: 'uint256' },
|
|
223
|
+
{ name: 'emitEvent', type: 'bool' },
|
|
224
|
+
],
|
|
225
|
+
},
|
|
226
|
+
|
|
215
227
|
mint: {
|
|
216
228
|
kind: 'public' as const,
|
|
217
229
|
args: [
|
package/src/stablecoin.ts
CHANGED
|
@@ -1,60 +1,28 @@
|
|
|
1
1
|
import { Contract, ContractBuilder } from './contract';
|
|
2
2
|
import { Access, setAccessControl, requireAccessControl } from './set-access-control';
|
|
3
|
-
import { addPauseFunctions } from './add-pausable';
|
|
4
3
|
import { defineFunctions } from './utils/define-functions';
|
|
5
|
-
import { CommonOptions, withCommonDefaults, defaults as commonDefaults } from './common-options';
|
|
6
|
-
import { setUpgradeable } from './set-upgradeable';
|
|
7
|
-
import { setInfo } from './set-info';
|
|
8
4
|
import { printContract } from './print';
|
|
9
|
-
import {
|
|
5
|
+
import { buildERC20, ERC20Options, defaults as erc20defaults, withDefaults as withERC20Defaults, functions as erc20functions } from './erc20';
|
|
10
6
|
|
|
11
|
-
export interface StablecoinOptions extends
|
|
12
|
-
name: string;
|
|
13
|
-
symbol: string;
|
|
14
|
-
burnable?: boolean;
|
|
15
|
-
pausable?: boolean;
|
|
16
|
-
premint?: string;
|
|
17
|
-
mintable?: boolean;
|
|
18
|
-
permit?: boolean;
|
|
7
|
+
export interface StablecoinOptions extends ERC20Options {
|
|
19
8
|
limitations?: false | "allowlist" | "blocklist";
|
|
20
|
-
/**
|
|
21
|
-
* Whether to keep track of historical balances for voting in on-chain governance, and optionally specify the clock mode.
|
|
22
|
-
* Setting `true` is equivalent to 'blocknumber'. Setting a clock mode implies voting is enabled.
|
|
23
|
-
*/
|
|
24
|
-
votes?: boolean | ClockMode;
|
|
25
|
-
flashmint?: boolean;
|
|
26
9
|
custodian?: boolean;
|
|
27
10
|
}
|
|
28
11
|
|
|
29
12
|
export const defaults: Required<StablecoinOptions> = {
|
|
13
|
+
...erc20defaults,
|
|
30
14
|
name: 'MyStablecoin',
|
|
31
15
|
symbol: 'MST',
|
|
32
|
-
burnable: false,
|
|
33
|
-
pausable: false,
|
|
34
|
-
premint: '0',
|
|
35
|
-
mintable: false,
|
|
36
|
-
permit: true,
|
|
37
16
|
limitations: false,
|
|
38
|
-
votes: false,
|
|
39
|
-
flashmint: false,
|
|
40
17
|
custodian: false,
|
|
41
|
-
access: commonDefaults.access,
|
|
42
|
-
upgradeable: commonDefaults.upgradeable,
|
|
43
|
-
info: commonDefaults.info,
|
|
44
18
|
} as const;
|
|
45
19
|
|
|
46
20
|
function withDefaults(opts: StablecoinOptions): Required<StablecoinOptions> {
|
|
47
21
|
return {
|
|
48
|
-
...opts,
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
pausable: opts.pausable ?? defaults.pausable,
|
|
52
|
-
premint: opts.premint || defaults.premint,
|
|
53
|
-
mintable: opts.mintable ?? defaults.mintable,
|
|
54
|
-
permit: opts.permit ?? defaults.permit,
|
|
22
|
+
...withERC20Defaults(opts),
|
|
23
|
+
name: opts.name ?? defaults.name,
|
|
24
|
+
symbol: opts.symbol ?? defaults.symbol,
|
|
55
25
|
limitations: opts.limitations ?? defaults.limitations,
|
|
56
|
-
votes: opts.votes ?? defaults.votes,
|
|
57
|
-
flashmint: opts.flashmint ?? defaults.flashmint,
|
|
58
26
|
custodian: opts.custodian ?? defaults.custodian,
|
|
59
27
|
};
|
|
60
28
|
}
|
|
@@ -70,116 +38,22 @@ export function isAccessControlRequired(opts: Partial<StablecoinOptions>): boole
|
|
|
70
38
|
export function buildStablecoin(opts: StablecoinOptions): Contract {
|
|
71
39
|
const allOpts = withDefaults(opts);
|
|
72
40
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const { access, upgradeable, info } = allOpts;
|
|
76
|
-
|
|
77
|
-
addBase(c, allOpts.name, allOpts.symbol);
|
|
78
|
-
|
|
79
|
-
if (allOpts.burnable) {
|
|
80
|
-
addBurnable(c);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (allOpts.pausable) {
|
|
84
|
-
addPausableExtension(c, access);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
if (allOpts.premint) {
|
|
88
|
-
addPremint(c, allOpts.premint);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if (allOpts.mintable) {
|
|
92
|
-
addMintable(c, access);
|
|
93
|
-
}
|
|
41
|
+
// Upgradeability is not yet available for the community contracts
|
|
42
|
+
allOpts.upgradeable = false;
|
|
94
43
|
|
|
95
|
-
|
|
96
|
-
addLimitations(c, access, allOpts.limitations);
|
|
97
|
-
}
|
|
44
|
+
const c = buildERC20(allOpts);
|
|
98
45
|
|
|
99
46
|
if (allOpts.custodian) {
|
|
100
|
-
addCustodian(c, access);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Note: Votes requires Permit
|
|
104
|
-
if (allOpts.permit || allOpts.votes) {
|
|
105
|
-
addPermit(c, allOpts.name);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
if (allOpts.votes) {
|
|
109
|
-
const clockMode = allOpts.votes === true ? clockModeDefault : allOpts.votes;
|
|
110
|
-
addVotes(c, clockMode);
|
|
47
|
+
addCustodian(c, allOpts.access);
|
|
111
48
|
}
|
|
112
49
|
|
|
113
|
-
if (allOpts.
|
|
114
|
-
|
|
50
|
+
if (allOpts.limitations) {
|
|
51
|
+
addLimitations(c, allOpts.access, allOpts.limitations);
|
|
115
52
|
}
|
|
116
53
|
|
|
117
|
-
setAccessControl(c, access);
|
|
118
|
-
|
|
119
|
-
// Upgradeability is not yet available for the community contracts
|
|
120
|
-
// setUpgradeable(c, upgradeable, access);
|
|
121
|
-
|
|
122
|
-
setInfo(c, info);
|
|
123
|
-
|
|
124
54
|
return c;
|
|
125
55
|
}
|
|
126
56
|
|
|
127
|
-
function addBase(c: ContractBuilder, name: string, symbol: string) {
|
|
128
|
-
const ERC20 = {
|
|
129
|
-
name: 'ERC20',
|
|
130
|
-
path: '@openzeppelin/contracts/token/ERC20/ERC20.sol',
|
|
131
|
-
};
|
|
132
|
-
c.addParent(
|
|
133
|
-
ERC20,
|
|
134
|
-
[name, symbol],
|
|
135
|
-
);
|
|
136
|
-
|
|
137
|
-
c.addOverride(ERC20, functions._update);
|
|
138
|
-
c.addOverride(ERC20, functions._approve);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
function addPausableExtension(c: ContractBuilder, access: Access) {
|
|
142
|
-
const ERC20Pausable = {
|
|
143
|
-
name: 'ERC20Pausable',
|
|
144
|
-
path: '@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol',
|
|
145
|
-
};
|
|
146
|
-
c.addParent(ERC20Pausable);
|
|
147
|
-
c.addOverride(ERC20Pausable, functions._update);
|
|
148
|
-
|
|
149
|
-
addPauseFunctions(c, access);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
function addBurnable(c: ContractBuilder) {
|
|
153
|
-
c.addParent({
|
|
154
|
-
name: 'ERC20Burnable',
|
|
155
|
-
path: '@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol',
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
export const premintPattern = /^(\d*)(?:\.(\d+))?(?:e(\d+))?$/;
|
|
160
|
-
|
|
161
|
-
function addPremint(c: ContractBuilder, amount: string) {
|
|
162
|
-
const m = amount.match(premintPattern);
|
|
163
|
-
if (m) {
|
|
164
|
-
const integer = m[1]?.replace(/^0+/, '') ?? '';
|
|
165
|
-
const decimals = m[2]?.replace(/0+$/, '') ?? '';
|
|
166
|
-
const exponent = Number(m[3] ?? 0);
|
|
167
|
-
|
|
168
|
-
if (Number(integer + decimals) > 0) {
|
|
169
|
-
const decimalPlace = decimals.length - exponent;
|
|
170
|
-
const zeroes = new Array(Math.max(0, -decimalPlace)).fill('0').join('');
|
|
171
|
-
const units = integer + decimals + zeroes;
|
|
172
|
-
const exp = decimalPlace <= 0 ? 'decimals()' : `(decimals() - ${decimalPlace})`;
|
|
173
|
-
c.addConstructorCode(`_mint(msg.sender, ${units} * 10 ** ${exp});`);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
function addMintable(c: ContractBuilder, access: Access) {
|
|
179
|
-
requireAccessControl(c, functions.mint, access, 'MINTER', 'minter');
|
|
180
|
-
c.addFunctionCode('_mint(to, amount);', functions.mint);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
57
|
function addLimitations(c: ContractBuilder, access: Access, mode: boolean | 'allowlist' | 'blocklist') {
|
|
184
58
|
const type = mode === 'allowlist';
|
|
185
59
|
const ERC20Limitation = {
|
|
@@ -249,132 +123,45 @@ function addCustodian(c: ContractBuilder, access: Access) {
|
|
|
249
123
|
}
|
|
250
124
|
}
|
|
251
125
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
_update: {
|
|
294
|
-
kind: 'internal' as const,
|
|
295
|
-
args: [
|
|
296
|
-
{ name: 'from', type: 'address' },
|
|
297
|
-
{ name: 'to', type: 'address' },
|
|
298
|
-
{ name: 'value', type: 'uint256' },
|
|
299
|
-
],
|
|
300
|
-
},
|
|
301
|
-
|
|
302
|
-
_approve: {
|
|
303
|
-
kind: 'internal' as const,
|
|
304
|
-
args: [
|
|
305
|
-
{ name: 'owner', type: 'address' },
|
|
306
|
-
{ name: 'spender', type: 'address' },
|
|
307
|
-
{ name: 'value', type: 'uint256' },
|
|
308
|
-
{ name: 'emitEvent', type: 'bool' },
|
|
309
|
-
],
|
|
310
|
-
},
|
|
311
|
-
|
|
312
|
-
_isCustodian: {
|
|
313
|
-
kind: 'internal' as const,
|
|
314
|
-
args: [
|
|
315
|
-
{ name: 'user', type: 'address' },
|
|
316
|
-
],
|
|
317
|
-
returns: ['bool'],
|
|
318
|
-
mutability: 'view' as const
|
|
319
|
-
},
|
|
320
|
-
|
|
321
|
-
mint: {
|
|
322
|
-
kind: 'public' as const,
|
|
323
|
-
args: [
|
|
324
|
-
{ name: 'to', type: 'address' },
|
|
325
|
-
{ name: 'amount', type: 'uint256' },
|
|
326
|
-
],
|
|
327
|
-
},
|
|
126
|
+
const functions = {
|
|
127
|
+
...erc20functions,
|
|
128
|
+
...defineFunctions({
|
|
129
|
+
_isCustodian: {
|
|
130
|
+
kind: 'internal' as const,
|
|
131
|
+
args: [
|
|
132
|
+
{ name: 'user', type: 'address' },
|
|
133
|
+
],
|
|
134
|
+
returns: ['bool'],
|
|
135
|
+
mutability: 'view' as const
|
|
136
|
+
},
|
|
137
|
+
|
|
138
|
+
allowUser: {
|
|
139
|
+
kind: 'public' as const,
|
|
140
|
+
args: [
|
|
141
|
+
{ name: 'user', type: 'address' }
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
|
|
145
|
+
disallowUser: {
|
|
146
|
+
kind: 'public' as const,
|
|
147
|
+
args: [
|
|
148
|
+
{ name: 'user', type: 'address' }
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
blockUser: {
|
|
153
|
+
kind: 'public' as const,
|
|
154
|
+
args: [
|
|
155
|
+
{ name: 'user', type: 'address' }
|
|
156
|
+
],
|
|
157
|
+
},
|
|
158
|
+
|
|
159
|
+
unblockUser: {
|
|
160
|
+
kind: 'public' as const,
|
|
161
|
+
args: [
|
|
162
|
+
{ name: 'user', type: 'address' }
|
|
163
|
+
],
|
|
164
|
+
},
|
|
165
|
+
})
|
|
166
|
+
};
|
|
328
167
|
|
|
329
|
-
allowUser: {
|
|
330
|
-
kind: 'public' as const,
|
|
331
|
-
args: [
|
|
332
|
-
{ name: 'user', type: 'address' }
|
|
333
|
-
],
|
|
334
|
-
},
|
|
335
|
-
|
|
336
|
-
disallowUser: {
|
|
337
|
-
kind: 'public' as const,
|
|
338
|
-
args: [
|
|
339
|
-
{ name: 'user', type: 'address' }
|
|
340
|
-
],
|
|
341
|
-
},
|
|
342
|
-
|
|
343
|
-
blockUser: {
|
|
344
|
-
kind: 'public' as const,
|
|
345
|
-
args: [
|
|
346
|
-
{ name: 'user', type: 'address' }
|
|
347
|
-
],
|
|
348
|
-
},
|
|
349
|
-
|
|
350
|
-
unblockUser: {
|
|
351
|
-
kind: 'public' as const,
|
|
352
|
-
args: [
|
|
353
|
-
{ name: 'user', type: 'address' }
|
|
354
|
-
],
|
|
355
|
-
},
|
|
356
|
-
|
|
357
|
-
pause: {
|
|
358
|
-
kind: 'public' as const,
|
|
359
|
-
args: [],
|
|
360
|
-
},
|
|
361
|
-
|
|
362
|
-
unpause: {
|
|
363
|
-
kind: 'public' as const,
|
|
364
|
-
args: [],
|
|
365
|
-
},
|
|
366
|
-
|
|
367
|
-
snapshot: {
|
|
368
|
-
kind: 'public' as const,
|
|
369
|
-
args: [],
|
|
370
|
-
},
|
|
371
|
-
|
|
372
|
-
nonces: {
|
|
373
|
-
kind: 'public' as const,
|
|
374
|
-
args: [
|
|
375
|
-
{ name: 'owner', type: 'address' },
|
|
376
|
-
],
|
|
377
|
-
returns: ['uint256'],
|
|
378
|
-
mutability: 'view' as const,
|
|
379
|
-
}
|
|
380
|
-
});
|