@openzeppelin/wizard 0.7.0 → 0.8.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/README.md +1 -1
- package/dist/account.d.ts.map +1 -1
- package/dist/account.js +48 -28
- package/dist/account.js.map +1 -1
- package/dist/environments/hardhat/package-lock.json +463 -521
- package/dist/environments/hardhat/upgradeable/package-lock.json +1282 -1055
- package/dist/generate/account.d.ts.map +1 -1
- package/dist/generate/account.js +2 -1
- package/dist/generate/account.js.map +1 -1
- package/dist/options.d.ts +3 -0
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +8 -7
- package/dist/options.js.map +1 -1
- package/dist/print.d.ts.map +1 -1
- package/dist/print.js +27 -12
- package/dist/print.js.map +1 -1
- package/dist/set-upgradeable.d.ts +1 -0
- package/dist/set-upgradeable.d.ts.map +1 -1
- package/dist/set-upgradeable.js +6 -0
- package/dist/set-upgradeable.js.map +1 -1
- package/dist/signer.d.ts +7 -2
- package/dist/signer.d.ts.map +1 -1
- package/dist/signer.js +45 -65
- package/dist/signer.js.map +1 -1
- package/dist/utils/community-contracts-git-commit.d.ts +16 -0
- package/dist/utils/community-contracts-git-commit.d.ts.map +1 -0
- package/dist/utils/community-contracts-git-commit.js +37 -0
- package/dist/utils/community-contracts-git-commit.js.map +1 -0
- package/dist/utils/imports-libraries.d.ts +3 -0
- package/dist/utils/imports-libraries.d.ts.map +1 -0
- package/dist/utils/imports-libraries.js +7 -0
- package/dist/utils/imports-libraries.js.map +1 -0
- package/dist/zip-foundry.d.ts.map +1 -1
- package/dist/zip-foundry.js +60 -65
- package/dist/zip-foundry.js.map +1 -1
- package/dist/zip-hardhat.d.ts.map +1 -1
- package/dist/zip-hardhat.js +8 -3
- package/dist/zip-hardhat.js.map +1 -1
- package/package.json +2 -2
- package/src/account.ts +55 -29
- package/src/environments/hardhat/package-lock.json +463 -521
- package/src/environments/hardhat/upgradeable/package-lock.json +1282 -1055
- package/src/generate/account.ts +2 -1
- package/src/options.ts +8 -8
- package/src/print.ts +47 -14
- package/src/set-upgradeable.ts +6 -0
- package/src/signer.ts +49 -70
- package/src/utils/community-contracts-git-commit.ts +38 -0
- package/src/utils/imports-libraries.ts +5 -0
- package/src/zip-foundry.ts +84 -64
- package/src/zip-hardhat.ts +9 -3
package/dist/zip-foundry.js
CHANGED
|
@@ -12,47 +12,72 @@ const format_lines_1 = require("./utils/format-lines");
|
|
|
12
12
|
function getHeader(c) {
|
|
13
13
|
return [`// SPDX-License-Identifier: ${c.license}`, `pragma solidity ^${solidity_version_json_1.default};`];
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
function shouldUseUnsafeAllowConstructor(c) {
|
|
16
|
+
// TODO: remove that selector when the upgrades plugin supports @custom:oz-upgrades-unsafe-allow-reachable
|
|
17
|
+
return c.parents.find(p => ['EIP712'].includes(p.contract.name)) !== undefined;
|
|
18
|
+
}
|
|
19
|
+
function getImports(c, prepopulateImports) {
|
|
20
|
+
const result = [...prepopulateImports];
|
|
21
|
+
if (c.upgradeable) {
|
|
22
|
+
const unsafeAllowConstructor = shouldUseUnsafeAllowConstructor(c);
|
|
23
|
+
result.push(unsafeAllowConstructor
|
|
24
|
+
? 'import {Upgrades, Options} from "openzeppelin-foundry-upgrades/Upgrades.sol";'
|
|
25
|
+
: 'import {Upgrades} from "openzeppelin-foundry-upgrades/Upgrades.sol";');
|
|
26
|
+
}
|
|
27
|
+
result.push(`import {${c.name}} from "src/${c.name}.sol";`);
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
function getDeploymentCode(c, args, declareContractVariable, upgradeable) {
|
|
31
|
+
const unsafeAllowConstructor = shouldUseUnsafeAllowConstructor(c);
|
|
32
|
+
const instanceDeclaration = declareContractVariable ? `${c.name} ` : '';
|
|
33
|
+
switch (upgradeable) {
|
|
34
|
+
case 'transparent':
|
|
35
|
+
return printDeployProxyAndAssignInstance('deployTransparentProxy', true);
|
|
36
|
+
case 'uups':
|
|
37
|
+
return printDeployProxyAndAssignInstance('deployUUPSProxy', false);
|
|
38
|
+
default:
|
|
39
|
+
return [`${instanceDeclaration}instance = new ${c.name}(${args.join(', ')});`];
|
|
40
|
+
}
|
|
41
|
+
function printDeployProxyAndAssignInstance(deployProxyFunctionName, includeInitialOwner) {
|
|
42
|
+
const deployProxyArgs = [`"${c.name}.sol"`];
|
|
43
|
+
if (includeInitialOwner) {
|
|
44
|
+
deployProxyArgs.push('initialOwner');
|
|
45
|
+
}
|
|
46
|
+
deployProxyArgs.push(`abi.encodeCall(${c.name}.initialize, (${args.join(', ')}))`);
|
|
47
|
+
if (unsafeAllowConstructor) {
|
|
48
|
+
deployProxyArgs.push('opts');
|
|
21
49
|
}
|
|
22
|
-
|
|
23
|
-
|
|
50
|
+
for (let i = 0; i < deployProxyArgs.length - 1; i++) {
|
|
51
|
+
deployProxyArgs[i] += ',';
|
|
52
|
+
}
|
|
53
|
+
return [
|
|
54
|
+
unsafeAllowConstructor && 'Options memory opts;',
|
|
55
|
+
unsafeAllowConstructor && 'opts.unsafeAllow = "constructor";',
|
|
56
|
+
`address proxy = Upgrades.${deployProxyFunctionName}(`,
|
|
57
|
+
deployProxyArgs,
|
|
58
|
+
');',
|
|
59
|
+
// Account has a receive function, this requires a payable address
|
|
60
|
+
c.parents.find(p => ['Account'].includes(p.contract.name))
|
|
61
|
+
? `${instanceDeclaration}instance = ${c.name}(payable(proxy));`
|
|
62
|
+
: `${instanceDeclaration}instance = ${c.name}(proxy);`,
|
|
63
|
+
].filter(line => line !== false);
|
|
24
64
|
}
|
|
65
|
+
}
|
|
66
|
+
const test = (c, opts) => {
|
|
67
|
+
return (0, format_lines_1.formatLinesWithSpaces)(2, ...(0, format_lines_1.spaceBetween)(getHeader(c), getImports(c, ['import {Test} from "forge-std/Test.sol";']), getTestCase(c)));
|
|
25
68
|
function getTestCase(c) {
|
|
26
69
|
const args = getAddressArgs(c);
|
|
27
70
|
return [
|
|
28
71
|
`contract ${c.name}Test is Test {`,
|
|
29
|
-
(0, format_lines_1.spaceBetween)([`${c.name} public instance;`], [
|
|
72
|
+
(0, format_lines_1.spaceBetween)([`${c.name} public instance;`], [
|
|
73
|
+
'function setUp() public {',
|
|
74
|
+
getAddressVariables(c, args),
|
|
75
|
+
getDeploymentCode(c, args, false, opts === null || opts === void 0 ? void 0 : opts.upgradeable),
|
|
76
|
+
'}',
|
|
77
|
+
], getContractSpecificTestFunction()),
|
|
30
78
|
'}',
|
|
31
79
|
];
|
|
32
80
|
}
|
|
33
|
-
function getDeploymentCode(c, args) {
|
|
34
|
-
if (c.upgradeable) {
|
|
35
|
-
if ((opts === null || opts === void 0 ? void 0 : opts.upgradeable) === 'transparent') {
|
|
36
|
-
return [
|
|
37
|
-
`address proxy = Upgrades.deployTransparentProxy(`,
|
|
38
|
-
[`"${c.name}.sol",`, `initialOwner,`, `abi.encodeCall(${c.name}.initialize, (${args.join(', ')}))`],
|
|
39
|
-
');',
|
|
40
|
-
`instance = ${c.name}(proxy);`,
|
|
41
|
-
];
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
return [
|
|
45
|
-
`address proxy = Upgrades.deployUUPSProxy(`,
|
|
46
|
-
[`"${c.name}.sol",`, `abi.encodeCall(${c.name}.initialize, (${args.join(', ')}))`],
|
|
47
|
-
');',
|
|
48
|
-
`instance = ${c.name}(proxy);`,
|
|
49
|
-
];
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
return [`instance = new ${c.name}(${args.join(', ')});`];
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
81
|
function getAddressVariables(c, args) {
|
|
57
82
|
const vars = [];
|
|
58
83
|
let i = 1; // private key index starts from 1 since it must be non-zero
|
|
@@ -72,6 +97,7 @@ const test = (c, opts) => {
|
|
|
72
97
|
return ['function testName() public view {', [`assertEq(instance.name(), "${opts.name}");`], '}'];
|
|
73
98
|
case 'ERC1155':
|
|
74
99
|
return ['function testUri() public view {', [`assertEq(instance.uri(0), "${opts.uri}");`], '}'];
|
|
100
|
+
case 'Account':
|
|
75
101
|
case 'Governor':
|
|
76
102
|
case 'Custom':
|
|
77
103
|
return ['function testSomething() public {', ['// Add your test here'], '}'];
|
|
@@ -92,21 +118,13 @@ function getAddressArgs(c) {
|
|
|
92
118
|
return args;
|
|
93
119
|
}
|
|
94
120
|
const script = (c, opts) => {
|
|
95
|
-
return (0, format_lines_1.formatLinesWithSpaces)(2, ...(0, format_lines_1.spaceBetween)(getHeader(c), getImports(c), getScript(c)));
|
|
96
|
-
function getImports(c) {
|
|
97
|
-
const result = ['import {Script} from "forge-std/Script.sol";', 'import {console} from "forge-std/console.sol";'];
|
|
98
|
-
if (c.upgradeable) {
|
|
99
|
-
result.push('import {Upgrades} from "openzeppelin-foundry-upgrades/Upgrades.sol";');
|
|
100
|
-
}
|
|
101
|
-
result.push(`import {${c.name}} from "src/${c.name}.sol";`);
|
|
102
|
-
return result;
|
|
103
|
-
}
|
|
121
|
+
return (0, format_lines_1.formatLinesWithSpaces)(2, ...(0, format_lines_1.spaceBetween)(getHeader(c), getImports(c, ['import {Script} from "forge-std/Script.sol";', 'import {console} from "forge-std/console.sol";']), getScript(c)));
|
|
104
122
|
function getScript(c) {
|
|
105
123
|
const args = getAddressArgs(c);
|
|
106
124
|
const deploymentLines = [
|
|
107
125
|
'vm.startBroadcast();',
|
|
108
126
|
...getAddressVariables(c, args),
|
|
109
|
-
...getDeploymentCode(c, args),
|
|
127
|
+
...getDeploymentCode(c, args, true, opts === null || opts === void 0 ? void 0 : opts.upgradeable),
|
|
110
128
|
`console.log("${c.upgradeable ? 'Proxy' : 'Contract'} deployed to %s", address(instance));`,
|
|
111
129
|
'vm.stopBroadcast();',
|
|
112
130
|
];
|
|
@@ -116,29 +134,6 @@ const script = (c, opts) => {
|
|
|
116
134
|
'}',
|
|
117
135
|
];
|
|
118
136
|
}
|
|
119
|
-
function getDeploymentCode(c, args) {
|
|
120
|
-
if (c.upgradeable) {
|
|
121
|
-
if ((opts === null || opts === void 0 ? void 0 : opts.upgradeable) === 'transparent') {
|
|
122
|
-
return [
|
|
123
|
-
`address proxy = Upgrades.deployTransparentProxy(`,
|
|
124
|
-
[`"${c.name}.sol",`, `initialOwner,`, `abi.encodeCall(${c.name}.initialize, (${args.join(', ')}))`],
|
|
125
|
-
');',
|
|
126
|
-
`${c.name} instance = ${c.name}(proxy);`,
|
|
127
|
-
];
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
return [
|
|
131
|
-
`address proxy = Upgrades.deployUUPSProxy(`,
|
|
132
|
-
[`"${c.name}.sol",`, `abi.encodeCall(${c.name}.initialize, (${args.join(', ')}))`],
|
|
133
|
-
');',
|
|
134
|
-
`${c.name} instance = ${c.name}(proxy);`,
|
|
135
|
-
];
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
return [`${c.name} instance = new ${c.name}(${args.join(', ')});`];
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
137
|
function getAddressVariables(c, args) {
|
|
143
138
|
const vars = [];
|
|
144
139
|
if (c.upgradeable && (opts === null || opts === void 0 ? void 0 : opts.upgradeable) === 'transparent' && !args.includes('initialOwner')) {
|
package/dist/zip-foundry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zip-foundry.js","sourceRoot":"","sources":["../src/zip-foundry.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"zip-foundry.js","sourceRoot":"","sources":["../src/zip-foundry.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,EAAE,MAAM,YAAY,CAAC;AA6M3C,wBAAsB,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,cAAc,kBA8BlE"}
|
package/dist/zip-hardhat.js
CHANGED
|
@@ -109,6 +109,7 @@ const test = (c, opts) => {
|
|
|
109
109
|
return [`expect(await instance.name()).to.equal("${opts.name}");`];
|
|
110
110
|
case 'ERC1155':
|
|
111
111
|
return [`expect(await instance.uri(0)).to.equal("${opts.uri}");`];
|
|
112
|
+
case 'Account':
|
|
112
113
|
case 'Governor':
|
|
113
114
|
case 'Custom':
|
|
114
115
|
break;
|
|
@@ -136,9 +137,13 @@ function getAddressArgs(c) {
|
|
|
136
137
|
return args;
|
|
137
138
|
}
|
|
138
139
|
function getDeploymentCall(c, args) {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
140
|
+
// TODO: remove that selector when the upgrades plugin supports @custom:oz-upgrades-unsafe-allow-reachable
|
|
141
|
+
const unsafeAllowConstructor = c.parents.find(p => ['EIP712'].includes(p.contract.name)) !== undefined;
|
|
142
|
+
return !c.upgradeable
|
|
143
|
+
? `ContractFactory.deploy(${args.join(', ')})`
|
|
144
|
+
: unsafeAllowConstructor
|
|
145
|
+
? `upgrades.deployProxy(ContractFactory, [${args.join(', ')}], { unsafeAllow: 'constructor' })`
|
|
146
|
+
: `upgrades.deployProxy(ContractFactory, [${args.join(', ')}])`;
|
|
142
147
|
}
|
|
143
148
|
const script = (c) => {
|
|
144
149
|
const args = getAddressArgs(c);
|
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.
|
|
3
|
+
"version": "0.8.0",
|
|
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",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"update-env": "rm ./src/environments/hardhat/package-lock.json && npm install --package-lock-only --prefix ./src/environments/hardhat && rm ./src/environments/hardhat/upgradeable/package-lock.json && npm install --package-lock-only --prefix ./src/environments/hardhat/upgradeable"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@openzeppelin/community-contracts": "https://github.com/OpenZeppelin/openzeppelin-community-contracts",
|
|
25
|
+
"@openzeppelin/community-contracts": "git+https://github.com/OpenZeppelin/openzeppelin-community-contracts.git#2d607bd",
|
|
26
26
|
"@openzeppelin/contracts": "^5.4.0",
|
|
27
27
|
"@openzeppelin/contracts-upgradeable": "^5.4.0",
|
|
28
28
|
"@types/node": "^20.0.0",
|
package/src/account.ts
CHANGED
|
@@ -3,8 +3,10 @@ import type { Contract } from './contract';
|
|
|
3
3
|
import { defineFunctions } from './utils/define-functions';
|
|
4
4
|
import { printContract } from './print';
|
|
5
5
|
import { defaults as commonDefaults, withCommonDefaults, type CommonOptions } from './common-options';
|
|
6
|
+
import { upgradeableName } from './options';
|
|
6
7
|
import { setInfo } from './set-info';
|
|
7
8
|
import { addSigner, signerFunctions, signers, type SignerOptions } from './signer';
|
|
9
|
+
import { setUpgradeableAccount } from './set-upgradeable';
|
|
8
10
|
|
|
9
11
|
export const defaults: Required<AccountOptions> = {
|
|
10
12
|
...commonDefaults,
|
|
@@ -53,19 +55,20 @@ export function printAccount(opts: AccountOptions = defaults): string {
|
|
|
53
55
|
export function buildAccount(opts: AccountOptions): Contract {
|
|
54
56
|
const allOpts = withDefaults(opts);
|
|
55
57
|
|
|
56
|
-
allOpts.upgradeable = false; // Upgradeability is not yet available for the community contracts
|
|
57
58
|
allOpts.access = false; // Access control options are not used for Account
|
|
58
59
|
|
|
59
60
|
const c = new ContractBuilder(allOpts.name);
|
|
60
61
|
|
|
61
62
|
addParents(c, allOpts);
|
|
62
63
|
overrideRawSignatureValidation(c, allOpts);
|
|
64
|
+
setUpgradeableAccount(c, allOpts.upgradeable);
|
|
63
65
|
setInfo(c, allOpts.info);
|
|
64
66
|
|
|
65
67
|
if (opts.ERC7579Modules) {
|
|
66
68
|
c.addImportOnly({
|
|
67
69
|
name: 'PackedUserOperation',
|
|
68
70
|
path: '@openzeppelin/contracts/interfaces/draft-IERC4337.sol',
|
|
71
|
+
transpiled: false, // PackedUserOperation doesn't start with "I" so its not recognized as an "interface object"
|
|
69
72
|
});
|
|
70
73
|
}
|
|
71
74
|
|
|
@@ -76,16 +79,17 @@ function addParents(c: ContractBuilder, opts: AccountOptions): void {
|
|
|
76
79
|
// Base
|
|
77
80
|
c.addParent({
|
|
78
81
|
name: 'Account',
|
|
79
|
-
path: `@openzeppelin/
|
|
82
|
+
path: `@openzeppelin/contracts/account/Account.sol`,
|
|
83
|
+
transpiled: false,
|
|
80
84
|
});
|
|
81
|
-
c.addOverride({ name: 'Account' }, functions._validateUserOp);
|
|
85
|
+
c.addOverride({ name: 'Account', transpiled: false }, functions._validateUserOp);
|
|
82
86
|
|
|
83
87
|
if (opts.signatureValidation === 'ERC7739') addEIP712(c, opts);
|
|
84
88
|
|
|
85
89
|
// Extensions
|
|
86
90
|
addSignatureValidation(c, opts);
|
|
87
91
|
addERC7579Modules(c, opts);
|
|
88
|
-
addSigner(c, opts.signer ?? false);
|
|
92
|
+
addSigner(c, opts.signer ?? false, opts.upgradeable ?? false);
|
|
89
93
|
addMultisigFunctions(c, opts);
|
|
90
94
|
addBatchedExecution(c, opts);
|
|
91
95
|
addERC721Holder(c, opts);
|
|
@@ -97,7 +101,8 @@ function addSignatureValidation(c: ContractBuilder, opts: AccountOptions) {
|
|
|
97
101
|
case 'ERC7739':
|
|
98
102
|
c.addParent({
|
|
99
103
|
name: 'ERC7739',
|
|
100
|
-
path: '@openzeppelin/
|
|
104
|
+
path: '@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol',
|
|
105
|
+
transpiled: false,
|
|
101
106
|
});
|
|
102
107
|
break;
|
|
103
108
|
case 'ERC1271':
|
|
@@ -123,6 +128,7 @@ function addERC721Holder(c: ContractBuilder, opts: AccountOptions): void {
|
|
|
123
128
|
c.addParent({
|
|
124
129
|
name: 'ERC721Holder',
|
|
125
130
|
path: '@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol',
|
|
131
|
+
transpiled: false,
|
|
126
132
|
});
|
|
127
133
|
}
|
|
128
134
|
|
|
@@ -131,6 +137,7 @@ function addERC1155Holder(c: ContractBuilder, opts: AccountOptions): void {
|
|
|
131
137
|
c.addParent({
|
|
132
138
|
name: 'ERC1155Holder',
|
|
133
139
|
path: '@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol',
|
|
140
|
+
transpiled: false,
|
|
134
141
|
});
|
|
135
142
|
}
|
|
136
143
|
|
|
@@ -139,9 +146,10 @@ function addBatchedExecution(c: ContractBuilder, opts: AccountOptions): void {
|
|
|
139
146
|
if (!opts.batchedExecution || !!opts.ERC7579Modules) return;
|
|
140
147
|
c.addParent({
|
|
141
148
|
name: 'ERC7821',
|
|
142
|
-
path: '@openzeppelin/
|
|
149
|
+
path: '@openzeppelin/contracts/account/extensions/draft-ERC7821.sol',
|
|
150
|
+
transpiled: false,
|
|
143
151
|
});
|
|
144
|
-
c.addOverride({ name: 'ERC7821' }, functions._erc7821AuthorizedExecutor);
|
|
152
|
+
c.addOverride({ name: 'ERC7821', transpiled: false }, functions._erc7821AuthorizedExecutor);
|
|
145
153
|
c.setFunctionBody(
|
|
146
154
|
['return caller == address(entryPoint()) || super._erc7821AuthorizedExecutor(caller, mode, executionData);'],
|
|
147
155
|
functions._erc7821AuthorizedExecutor,
|
|
@@ -150,30 +158,42 @@ function addBatchedExecution(c: ContractBuilder, opts: AccountOptions): void {
|
|
|
150
158
|
|
|
151
159
|
function addERC7579Modules(c: ContractBuilder, opts: AccountOptions): void {
|
|
152
160
|
if (!opts.ERC7579Modules) return;
|
|
161
|
+
|
|
153
162
|
c.addParent({
|
|
154
163
|
name: opts.ERC7579Modules,
|
|
155
|
-
path: `@openzeppelin/
|
|
164
|
+
path: `@openzeppelin/contracts/account/extensions/draft-${opts.ERC7579Modules}.sol`,
|
|
156
165
|
});
|
|
157
166
|
if (opts.ERC7579Modules !== 'AccountERC7579') {
|
|
158
167
|
c.addImportOnly({
|
|
159
168
|
name: 'AccountERC7579',
|
|
160
|
-
path:
|
|
169
|
+
path: '@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol',
|
|
161
170
|
});
|
|
162
171
|
}
|
|
163
|
-
|
|
172
|
+
|
|
173
|
+
// Accounts that use ERC7579 without a signer must be constructed with at least one module (executor of validation)
|
|
174
|
+
if (!opts.signer) {
|
|
175
|
+
c.addConstructorArgument({ type: 'uint256', name: 'moduleTypeId' });
|
|
176
|
+
c.addConstructorArgument({ type: 'address', name: 'module' });
|
|
177
|
+
c.addConstructorArgument({ type: 'bytes calldata', name: 'initData' });
|
|
178
|
+
c.addConstructorCode('require(moduleTypeId == MODULE_TYPE_VALIDATOR || moduleTypeId == MODULE_TYPE_EXECUTOR);');
|
|
179
|
+
c.addConstructorCode('_installModule(moduleTypeId, module, initData);');
|
|
180
|
+
}
|
|
181
|
+
|
|
164
182
|
c.addOverride({ name: 'AccountERC7579' }, functions._validateUserOp);
|
|
183
|
+
c.addOverride({ name: 'AccountERC7579' }, functions.isValidSignature);
|
|
165
184
|
|
|
166
|
-
if (opts.signatureValidation
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
185
|
+
if (opts.signatureValidation === 'ERC7739') {
|
|
186
|
+
c.addOverride({ name: 'ERC7739', transpiled: false }, functions.isValidSignature);
|
|
187
|
+
c.setFunctionBody(
|
|
188
|
+
[
|
|
189
|
+
'// ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).',
|
|
190
|
+
'// If the returned value is 0xffffffff, fallback to ERC-7579 validation.',
|
|
191
|
+
'bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);',
|
|
192
|
+
`return erc7739magic == bytes4(0xffffffff) ? ${opts.upgradeable ? upgradeableName('AccountERC7579') : 'AccountERC7579'}.isValidSignature(hash, signature) : erc7739magic;`,
|
|
193
|
+
],
|
|
194
|
+
functions.isValidSignature,
|
|
195
|
+
);
|
|
196
|
+
}
|
|
177
197
|
}
|
|
178
198
|
|
|
179
199
|
function addMultisigFunctions(c: ContractBuilder, opts: AccountOptions): void {
|
|
@@ -203,6 +223,7 @@ function addEIP712(c: ContractBuilder, opts: AccountOptions): void {
|
|
|
203
223
|
{
|
|
204
224
|
name: 'EIP712',
|
|
205
225
|
path: '@openzeppelin/contracts/utils/cryptography/EIP712.sol',
|
|
226
|
+
transpiled: false, // do not use the upgradeable variant for in Accounts
|
|
206
227
|
},
|
|
207
228
|
[opts.name, '1'],
|
|
208
229
|
);
|
|
@@ -216,27 +237,32 @@ function overrideRawSignatureValidation(c: ContractBuilder, opts: AccountOptions
|
|
|
216
237
|
// to provide a custom validation logic
|
|
217
238
|
if (!opts.signer && !opts.ERC7579Modules) {
|
|
218
239
|
// Custom validation logic
|
|
219
|
-
c.addOverride({ name: 'Account' }, signerFunctions._rawSignatureValidation);
|
|
240
|
+
c.addOverride({ name: 'Account', transpiled: false }, signerFunctions._rawSignatureValidation);
|
|
220
241
|
c.setFunctionBody(['// Custom validation logic', 'return false;'], signerFunctions._rawSignatureValidation);
|
|
221
242
|
}
|
|
222
243
|
|
|
223
244
|
// Disambiguate between Signer and AccountERC7579
|
|
224
245
|
if (opts.signer && opts.ERC7579Modules) {
|
|
246
|
+
const accountName = opts.upgradeable ? upgradeableName('AccountERC7579') : 'AccountERC7579';
|
|
247
|
+
const signerName = opts.upgradeable ? upgradeableName(`Signer${opts.signer}`) : `Signer${opts.signer}`;
|
|
248
|
+
|
|
225
249
|
c.addImportOnly({
|
|
226
250
|
name: 'AbstractSigner',
|
|
227
|
-
path: '@openzeppelin/
|
|
251
|
+
path: '@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol',
|
|
252
|
+
transpiled: false,
|
|
228
253
|
});
|
|
229
|
-
c.addOverride({ name: 'AbstractSigner' }, signerFunctions._rawSignatureValidation);
|
|
254
|
+
c.addOverride({ name: 'AbstractSigner', transpiled: false }, signerFunctions._rawSignatureValidation);
|
|
230
255
|
c.addOverride({ name: 'AccountERC7579' }, signerFunctions._rawSignatureValidation);
|
|
231
256
|
c.setFunctionComments(
|
|
232
257
|
[
|
|
233
|
-
`// IMPORTANT: Make sure
|
|
234
|
-
`// in the inheritance chain (i.e. contract ... is
|
|
258
|
+
`// IMPORTANT: Make sure ${signerName} is most derived than ${accountName}`,
|
|
259
|
+
`// in the inheritance chain (i.e. contract ... is ${accountName}, ..., ${signerName})`,
|
|
235
260
|
'// to ensure the correct order of function resolution.',
|
|
236
|
-
|
|
261
|
+
`// ${accountName} returns false for _rawSignatureValidation`,
|
|
237
262
|
],
|
|
238
263
|
signerFunctions._rawSignatureValidation,
|
|
239
264
|
);
|
|
265
|
+
|
|
240
266
|
// Base override for `_rawSignatureValidation` given MultiSignerERC7913Weighted is MultiSignerERC7913
|
|
241
267
|
if (opts.signer === 'MultisigWeighted') {
|
|
242
268
|
c.addImportOnly(signers.Multisig);
|
|
@@ -283,13 +309,13 @@ const functions = {
|
|
|
283
309
|
},
|
|
284
310
|
setThreshold: {
|
|
285
311
|
kind: 'public' as const,
|
|
286
|
-
args: [{ name: 'threshold', type: '
|
|
312
|
+
args: [{ name: 'threshold', type: 'uint64' }],
|
|
287
313
|
},
|
|
288
314
|
setSignerWeights: {
|
|
289
315
|
kind: 'public' as const,
|
|
290
316
|
args: [
|
|
291
317
|
{ name: 'signers', type: 'bytes[] memory' },
|
|
292
|
-
{ name: 'weights', type: '
|
|
318
|
+
{ name: 'weights', type: 'uint64[] memory' },
|
|
293
319
|
],
|
|
294
320
|
},
|
|
295
321
|
}),
|