diff --git a/.changeset/cyan-rivers-fold.md b/.changeset/cyan-rivers-fold.md new file mode 100644 index 000000000..8f1713534 --- /dev/null +++ b/.changeset/cyan-rivers-fold.md @@ -0,0 +1,5 @@ +--- +'@openzeppelin/wizard': patch +--- + +`Accounts`: Add `_disableInitializers()` to account implementations diff --git a/packages/core/solidity/src/account.test.ts.md b/packages/core/solidity/src/account.test.ts.md index 0e25e37f3..da256f549 100644 --- a/packages/core/solidity/src/account.test.ts.md +++ b/packages/core/solidity/src/account.test.ts.md @@ -753,8 +753,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerECDSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerECDSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerECDSA is Initializable, Account, EIP712, ERC7739, SignerECDSA {␊ - constructor() EIP712("CustomAccount with SignerECDSA", "1") {}␊ + constructor() EIP712("CustomAccount with SignerECDSA", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeECDSA(address signer) public initializer {␊ _setSigner(signer);␊ @@ -775,7 +778,12 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerECDSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerECDSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerECDSAERC1271 is Initializable, Account, IERC1271, SignerECDSA {␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ view␊ @@ -805,8 +813,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerECDSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerECDSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerECDSAERC7739 is Initializable, Account, EIP712, ERC7739, SignerECDSA {␊ - constructor() EIP712("CustomAccount with SignerECDSAERC7739", "1") {}␊ + constructor() EIP712("CustomAccount with SignerECDSAERC7739", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeECDSA(address signer) public initializer {␊ _setSigner(signer);␊ @@ -829,8 +840,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerECDSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerECDSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerECDSAERC721Holder is Initializable, Account, EIP712, ERC7739, SignerECDSA, ERC721Holder {␊ - constructor() EIP712("CustomAccount with SignerECDSAERC721Holder", "1") {}␊ + constructor() EIP712("CustomAccount with SignerECDSAERC721Holder", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeECDSA(address signer) public initializer {␊ _setSigner(signer);␊ @@ -853,8 +867,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerECDSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerECDSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerECDSAERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerECDSA, ERC1155Holder {␊ - constructor() EIP712("CustomAccount with SignerECDSAERC1155Holder", "1") {}␊ + constructor() EIP712("CustomAccount with SignerECDSAERC1155Holder", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeECDSA(address signer) public initializer {␊ _setSigner(signer);␊ @@ -878,10 +895,13 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerECDSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerECDSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerECDSAERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerECDSA, ERC721Holder, ERC1155Holder {␊ constructor()␊ EIP712("CustomAccount with SignerECDSAERC721HolderERC1155Holder", "1")␊ - {}␊ + {␊ + _disableInitializers();␊ + }␊ ␊ function initializeECDSA(address signer) public initializer {␊ _setSigner(signer);␊ @@ -904,8 +924,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerECDSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerECDSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerECDSA, ERC7821 {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeECDSA(address signer) public initializer {␊ _setSigner(signer);␊ @@ -939,8 +962,11 @@ Generated by [AVA](https://avajs.dev). import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ import {SignerECDSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerECDSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579, SignerECDSA {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -999,7 +1025,12 @@ Generated by [AVA](https://avajs.dev). import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ import {SignerECDSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerECDSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, IERC1271, AccountERC7579, SignerECDSA {␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ function initializeECDSA(address signer) public initializer {␊ _setSigner(signer);␊ }␊ @@ -1055,8 +1086,11 @@ Generated by [AVA](https://avajs.dev). import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ import {SignerECDSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerECDSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579, SignerECDSA {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -1117,8 +1151,11 @@ Generated by [AVA](https://avajs.dev). import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ import {SignerECDSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerECDSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Hooked, SignerECDSA {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -1175,8 +1212,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerP256} from "@openzeppelin/community-contracts/utils/cryptography/SignerP256.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerP256 is Initializable, Account, EIP712, ERC7739, SignerP256 {␊ - constructor() EIP712("CustomAccount with SignerP256", "1") {}␊ + constructor() EIP712("CustomAccount with SignerP256", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeP256(bytes32 qx, bytes32 qy) public initializer {␊ _setSigner(qx, qy);␊ @@ -1197,7 +1237,12 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerP256} from "@openzeppelin/community-contracts/utils/cryptography/SignerP256.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerP256ERC1271 is Initializable, Account, IERC1271, SignerP256 {␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ view␊ @@ -1227,8 +1272,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerP256} from "@openzeppelin/community-contracts/utils/cryptography/SignerP256.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerP256ERC7739 is Initializable, Account, EIP712, ERC7739, SignerP256 {␊ - constructor() EIP712("CustomAccount with SignerP256ERC7739", "1") {}␊ + constructor() EIP712("CustomAccount with SignerP256ERC7739", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeP256(bytes32 qx, bytes32 qy) public initializer {␊ _setSigner(qx, qy);␊ @@ -1251,8 +1299,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerP256} from "@openzeppelin/community-contracts/utils/cryptography/SignerP256.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerP256ERC721Holder is Initializable, Account, EIP712, ERC7739, SignerP256, ERC721Holder {␊ - constructor() EIP712("CustomAccount with SignerP256ERC721Holder", "1") {}␊ + constructor() EIP712("CustomAccount with SignerP256ERC721Holder", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeP256(bytes32 qx, bytes32 qy) public initializer {␊ _setSigner(qx, qy);␊ @@ -1275,8 +1326,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerP256} from "@openzeppelin/community-contracts/utils/cryptography/SignerP256.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerP256ERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256, ERC1155Holder {␊ - constructor() EIP712("CustomAccount with SignerP256ERC1155Holder", "1") {}␊ + constructor() EIP712("CustomAccount with SignerP256ERC1155Holder", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeP256(bytes32 qx, bytes32 qy) public initializer {␊ _setSigner(qx, qy);␊ @@ -1300,10 +1354,13 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerP256} from "@openzeppelin/community-contracts/utils/cryptography/SignerP256.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerP256ERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256, ERC721Holder, ERC1155Holder {␊ constructor()␊ EIP712("CustomAccount with SignerP256ERC721HolderERC1155Holder", "1")␊ - {}␊ + {␊ + _disableInitializers();␊ + }␊ ␊ function initializeP256(bytes32 qx, bytes32 qy) public initializer {␊ _setSigner(qx, qy);␊ @@ -1326,8 +1383,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerP256} from "@openzeppelin/community-contracts/utils/cryptography/SignerP256.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerP256, ERC7821 {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeP256(bytes32 qx, bytes32 qy) public initializer {␊ _setSigner(qx, qy);␊ @@ -1361,8 +1421,11 @@ Generated by [AVA](https://avajs.dev). import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ import {SignerP256} from "@openzeppelin/community-contracts/utils/cryptography/SignerP256.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579, SignerP256 {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -1421,7 +1484,12 @@ Generated by [AVA](https://avajs.dev). import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ import {SignerP256} from "@openzeppelin/community-contracts/utils/cryptography/SignerP256.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, IERC1271, AccountERC7579, SignerP256 {␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ function initializeP256(bytes32 qx, bytes32 qy) public initializer {␊ _setSigner(qx, qy);␊ }␊ @@ -1477,8 +1545,11 @@ Generated by [AVA](https://avajs.dev). import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ import {SignerP256} from "@openzeppelin/community-contracts/utils/cryptography/SignerP256.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579, SignerP256 {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -1539,8 +1610,11 @@ Generated by [AVA](https://avajs.dev). import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ import {SignerP256} from "@openzeppelin/community-contracts/utils/cryptography/SignerP256.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Hooked, SignerP256 {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -1597,8 +1671,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerRSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerRSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerRSA is Initializable, Account, EIP712, ERC7739, SignerRSA {␊ - constructor() EIP712("CustomAccount with SignerRSA", "1") {}␊ + constructor() EIP712("CustomAccount with SignerRSA", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeRSA(bytes memory e, bytes memory n) public initializer {␊ _setSigner(e, n);␊ @@ -1619,7 +1696,12 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerRSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerRSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerRSAERC1271 is Initializable, Account, IERC1271, SignerRSA {␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ view␊ @@ -1649,8 +1731,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerRSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerRSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerRSAERC7739 is Initializable, Account, EIP712, ERC7739, SignerRSA {␊ - constructor() EIP712("CustomAccount with SignerRSAERC7739", "1") {}␊ + constructor() EIP712("CustomAccount with SignerRSAERC7739", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeRSA(bytes memory e, bytes memory n) public initializer {␊ _setSigner(e, n);␊ @@ -1673,8 +1758,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerRSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerRSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerRSAERC721Holder is Initializable, Account, EIP712, ERC7739, SignerRSA, ERC721Holder {␊ - constructor() EIP712("CustomAccount with SignerRSAERC721Holder", "1") {}␊ + constructor() EIP712("CustomAccount with SignerRSAERC721Holder", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeRSA(bytes memory e, bytes memory n) public initializer {␊ _setSigner(e, n);␊ @@ -1697,8 +1785,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerRSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerRSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerRSAERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerRSA, ERC1155Holder {␊ - constructor() EIP712("CustomAccount with SignerRSAERC1155Holder", "1") {}␊ + constructor() EIP712("CustomAccount with SignerRSAERC1155Holder", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeRSA(bytes memory e, bytes memory n) public initializer {␊ _setSigner(e, n);␊ @@ -1722,10 +1813,13 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerRSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerRSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerRSAERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerRSA, ERC721Holder, ERC1155Holder {␊ constructor()␊ EIP712("CustomAccount with SignerRSAERC721HolderERC1155Holder", "1")␊ - {}␊ + {␊ + _disableInitializers();␊ + }␊ ␊ function initializeRSA(bytes memory e, bytes memory n) public initializer {␊ _setSigner(e, n);␊ @@ -1748,8 +1842,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {SignerRSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerRSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerRSA, ERC7821 {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeRSA(bytes memory e, bytes memory n) public initializer {␊ _setSigner(e, n);␊ @@ -1783,8 +1880,11 @@ Generated by [AVA](https://avajs.dev). import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ import {SignerRSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerRSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579, SignerRSA {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -1843,7 +1943,12 @@ Generated by [AVA](https://avajs.dev). import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ import {SignerRSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerRSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, IERC1271, AccountERC7579, SignerRSA {␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ function initializeRSA(bytes memory e, bytes memory n) public initializer {␊ _setSigner(e, n);␊ }␊ @@ -1899,8 +2004,11 @@ Generated by [AVA](https://avajs.dev). import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ import {SignerRSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerRSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579, SignerRSA {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -1961,8 +2069,11 @@ Generated by [AVA](https://avajs.dev). import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ import {SignerRSA} from "@openzeppelin/community-contracts/utils/cryptography/SignerRSA.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Hooked, SignerRSA {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -2019,8 +2130,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {MultiSignerERC7913} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerMultisig is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913 {␊ - constructor() EIP712("CustomAccount with SignerMultisig", "1") {}␊ + constructor() EIP712("CustomAccount with SignerMultisig", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeMultisig(bytes[] memory signers, uint256 threshold)␊ public␊ @@ -2057,7 +2171,12 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {MultiSignerERC7913} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerMultisigERC1271 is Initializable, Account, IERC1271, MultiSignerERC7913 {␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ view␊ @@ -2103,8 +2222,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {MultiSignerERC7913} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerMultisigERC7739 is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913 {␊ - constructor() EIP712("CustomAccount with SignerMultisigERC7739", "1") {}␊ + constructor() EIP712("CustomAccount with SignerMultisigERC7739", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeMultisig(bytes[] memory signers, uint256 threshold)␊ public␊ @@ -2143,8 +2265,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {MultiSignerERC7913} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerMultisigERC721Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913, ERC721Holder {␊ - constructor() EIP712("CustomAccount with SignerMultisigERC721Holder", "1") {}␊ + constructor() EIP712("CustomAccount with SignerMultisigERC721Holder", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeMultisig(bytes[] memory signers, uint256 threshold)␊ public␊ @@ -2183,8 +2308,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {MultiSignerERC7913} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerMultisigERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913, ERC1155Holder {␊ - constructor() EIP712("CustomAccount with SignerMultisigERC1155Holder", "1") {}␊ + constructor() EIP712("CustomAccount with SignerMultisigERC1155Holder", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeMultisig(bytes[] memory signers, uint256 threshold)␊ public␊ @@ -2224,10 +2352,13 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {MultiSignerERC7913} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerMultisigERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913, ERC721Holder, ERC1155Holder {␊ constructor()␊ EIP712("CustomAccount with SignerMultisigERC721HolderERC1155Holder", "1")␊ - {}␊ + {␊ + _disableInitializers();␊ + }␊ ␊ function initializeMultisig(bytes[] memory signers, uint256 threshold)␊ public␊ @@ -2266,8 +2397,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {MultiSignerERC7913} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913, ERC7821 {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeMultisig(bytes[] memory signers, uint256 threshold)␊ public␊ @@ -2317,8 +2451,11 @@ Generated by [AVA](https://avajs.dev). import {MultiSignerERC7913} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579, MultiSignerERC7913 {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -2393,7 +2530,12 @@ Generated by [AVA](https://avajs.dev). import {MultiSignerERC7913} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, IERC1271, AccountERC7579, MultiSignerERC7913 {␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ function initializeMultisig(bytes[] memory signers, uint256 threshold)␊ public␊ initializer␊ @@ -2465,8 +2607,11 @@ Generated by [AVA](https://avajs.dev). import {MultiSignerERC7913} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579, MultiSignerERC7913 {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -2543,8 +2688,11 @@ Generated by [AVA](https://avajs.dev). import {MultiSignerERC7913} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Hooked, MultiSignerERC7913 {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -2617,8 +2765,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {MultiSignerERC7913Weighted} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913Weighted.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerMultisigWeighted is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Weighted {␊ - constructor() EIP712("CustomAccount with SignerMultisigWeighted", "1") {}␊ + constructor() EIP712("CustomAccount with SignerMultisigWeighted", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeMultisigWeighted(bytes[] memory signers, uint256[] memory weights, uint256 threshold)␊ public␊ @@ -2663,7 +2814,12 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {MultiSignerERC7913Weighted} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913Weighted.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerMultisigWeightedERC1271 is Initializable, Account, IERC1271, MultiSignerERC7913Weighted {␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ view␊ @@ -2717,10 +2873,13 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {MultiSignerERC7913Weighted} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913Weighted.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerMultisigWeightedERC7739 is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Weighted {␊ constructor()␊ EIP712("CustomAccount with SignerMultisigWeightedERC7739", "1")␊ - {}␊ + {␊ + _disableInitializers();␊ + }␊ ␊ function initializeMultisigWeighted(bytes[] memory signers, uint256[] memory weights, uint256 threshold)␊ public␊ @@ -2767,10 +2926,13 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {MultiSignerERC7913Weighted} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913Weighted.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerMultisigWeightedERC721Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Weighted, ERC721Holder {␊ constructor()␊ EIP712("CustomAccount with SignerMultisigWeightedERC721Holder", "1")␊ - {}␊ + {␊ + _disableInitializers();␊ + }␊ ␊ function initializeMultisigWeighted(bytes[] memory signers, uint256[] memory weights, uint256 threshold)␊ public␊ @@ -2817,10 +2979,13 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {MultiSignerERC7913Weighted} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913Weighted.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerMultisigWeightedERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Weighted, ERC1155Holder {␊ constructor()␊ EIP712("CustomAccount with SignerMultisigWeightedERC1155Holder", "1")␊ - {}␊ + {␊ + _disableInitializers();␊ + }␊ ␊ function initializeMultisigWeighted(bytes[] memory signers, uint256[] memory weights, uint256 threshold)␊ public␊ @@ -2868,10 +3033,13 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {MultiSignerERC7913Weighted} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913Weighted.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract CustomAccountWithSignerMultisigWeightedERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Weighted, ERC721Holder, ERC1155Holder {␊ constructor()␊ EIP712("CustomAccount with SignerMultisigWeightedERC721HolderERC1155Holder", "1")␊ - {}␊ + {␊ + _disableInitializers();␊ + }␊ ␊ function initializeMultisigWeighted(bytes[] memory signers, uint256[] memory weights, uint256 threshold)␊ public␊ @@ -2918,8 +3086,11 @@ Generated by [AVA](https://avajs.dev). import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {MultiSignerERC7913Weighted} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913Weighted.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Weighted, ERC7821 {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function initializeMultisigWeighted(bytes[] memory signers, uint256[] memory weights, uint256 threshold)␊ public␊ @@ -2978,8 +3149,11 @@ Generated by [AVA](https://avajs.dev). import {MultiSignerERC7913Weighted} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913Weighted.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579, MultiSignerERC7913Weighted {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -3063,7 +3237,12 @@ Generated by [AVA](https://avajs.dev). import {MultiSignerERC7913Weighted} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913Weighted.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, IERC1271, AccountERC7579, MultiSignerERC7913Weighted {␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ function initializeMultisigWeighted(bytes[] memory signers, uint256[] memory weights, uint256 threshold)␊ public␊ initializer␊ @@ -3144,8 +3323,11 @@ Generated by [AVA](https://avajs.dev). import {MultiSignerERC7913Weighted} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913Weighted.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579, MultiSignerERC7913Weighted {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -3231,8 +3413,11 @@ Generated by [AVA](https://avajs.dev). import {MultiSignerERC7913Weighted} from "@openzeppelin/community-contracts/utils/cryptography/MultiSignerERC7913Weighted.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ ␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Hooked, MultiSignerERC7913Weighted {␊ - constructor() EIP712("MyAccount", "1") {}␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ diff --git a/packages/core/solidity/src/account.test.ts.snap b/packages/core/solidity/src/account.test.ts.snap index dcc009238..13cd60956 100644 Binary files a/packages/core/solidity/src/account.test.ts.snap and b/packages/core/solidity/src/account.test.ts.snap differ diff --git a/packages/core/solidity/src/signer.ts b/packages/core/solidity/src/signer.ts index b5441e6f0..09e2cd111 100644 --- a/packages/core/solidity/src/signer.ts +++ b/packages/core/solidity/src/signer.ts @@ -6,11 +6,10 @@ export type SignerOptions = (typeof SignerOptions)[number]; export function addSigner(c: ContractBuilder, signer: SignerOptions): void { if (!signer) return; - const parent = signers[signer]; - const name = parent.name; - c.addParent(parent); + + c.addParent(signers[signer]); c.addOverride( - { name: name === signers.MultisigWeighted.name ? signers.Multisig.name : name }, + { name: signer === 'MultisigWeighted' ? signers.Multisig.name : signers[signer].name }, signerFunctions._rawSignatureValidation, ); @@ -21,31 +20,29 @@ export function addSigner(c: ContractBuilder, signer: SignerOptions): void { name: 'Initializable', path: '@openzeppelin/contracts/proxy/utils/Initializable.sol', }); + + // Add locking constructor + c.addNatspecTag('@custom:oz-upgrades-unsafe-allow', 'constructor'); + c.addConstructorCode(`_disableInitializers();`); + + // Add initializer const fn = signerFunctions[`initialize${signer}`]; c.addModifier('initializer', fn); - const args = fn.args; - switch (signer) { case 'Multisig': - c.addFunctionCode(`_addSigners(${args[0]!.name});`, fn); - c.addFunctionCode(`_setThreshold(${args[1]!.name});`, fn); + c.addFunctionCode(`_addSigners(${fn.args[0]!.name});`, fn); + c.addFunctionCode(`_setThreshold(${fn.args[1]!.name});`, fn); break; case 'MultisigWeighted': - c.addFunctionCode(`_addSigners(${args[0]!.name});`, fn); - c.addFunctionCode(`_setSignerWeights(${args[0]!.name}, ${args[1]!.name});`, fn); - c.addFunctionCode(`_setThreshold(${args[2]!.name});`, fn); + c.addFunctionCode(`_addSigners(${fn.args[0]!.name});`, fn); + c.addFunctionCode(`_setSignerWeights(${fn.args[0]!.name}, ${fn.args[1]!.name});`, fn); + c.addFunctionCode(`_setThreshold(${fn.args[2]!.name});`, fn); break; case 'ECDSA': case 'P256': case 'RSA': - c.addFunctionCode( - `_setSigner(${fn.args - .map(({ name }) => name) - .join(', ') - .trimEnd()});`, - fn, - ); + c.addFunctionCode(`_setSigner(${fn.args.map(({ name }) => name).join(', ')});`, fn); } } @@ -76,49 +73,47 @@ export const signers = { }, }; -export const signerFunctions = { - ...defineFunctions({ - initializeECDSA: { - kind: 'public' as const, - args: [{ name: 'signer', type: 'address' }], - }, - initializeP256: { - kind: 'public' as const, - args: [ - { name: 'qx', type: 'bytes32' }, - { name: 'qy', type: 'bytes32' }, - ], - }, - initializeRSA: { - kind: 'public' as const, - args: [ - { name: 'e', type: 'bytes memory' }, - { name: 'n', type: 'bytes memory' }, - ], - }, - initializeMultisig: { - kind: 'public' as const, - args: [ - { name: 'signers', type: 'bytes[] memory' }, - { name: 'threshold', type: 'uint256' }, - ], - }, - initializeMultisigWeighted: { - kind: 'public' as const, - args: [ - { name: 'signers', type: 'bytes[] memory' }, - { name: 'weights', type: 'uint256[] memory' }, - { name: 'threshold', type: 'uint256' }, - ], - }, - _rawSignatureValidation: { - kind: 'internal' as const, - args: [ - { name: 'hash', type: 'bytes32' }, - { name: 'signature', type: 'bytes calldata' }, - ], - returns: ['bool'], - mutability: 'view' as const, - }, - }), -}; +export const signerFunctions = defineFunctions({ + initializeECDSA: { + kind: 'public' as const, + args: [{ name: 'signer', type: 'address' }], + }, + initializeP256: { + kind: 'public' as const, + args: [ + { name: 'qx', type: 'bytes32' }, + { name: 'qy', type: 'bytes32' }, + ], + }, + initializeRSA: { + kind: 'public' as const, + args: [ + { name: 'e', type: 'bytes memory' }, + { name: 'n', type: 'bytes memory' }, + ], + }, + initializeMultisig: { + kind: 'public' as const, + args: [ + { name: 'signers', type: 'bytes[] memory' }, + { name: 'threshold', type: 'uint256' }, + ], + }, + initializeMultisigWeighted: { + kind: 'public' as const, + args: [ + { name: 'signers', type: 'bytes[] memory' }, + { name: 'weights', type: 'uint256[] memory' }, + { name: 'threshold', type: 'uint256' }, + ], + }, + _rawSignatureValidation: { + kind: 'internal' as const, + args: [ + { name: 'hash', type: 'bytes32' }, + { name: 'signature', type: 'bytes calldata' }, + ], + returns: ['bool'], + mutability: 'view' as const, + }, +});