From a465fbbc503df92d896511bf060e14080c47053c Mon Sep 17 00:00:00 2001 From: ernestognw Date: Mon, 3 Nov 2025 13:21:38 -0600 Subject: [PATCH 1/4] Add WebAuthn signer to Accounts --- .changeset/young-readers-cover.md | 7 + .../common/src/ai/descriptions/solidity.ts | 1 + packages/core/solidity/src/account.test.ts | 2 +- packages/core/solidity/src/account.test.ts.md | 1706 +++++++++++++++++ .../core/solidity/src/account.test.ts.snap | Bin 11599 -> 13340 bytes packages/core/solidity/src/account.ts | 14 +- .../core/solidity/src/generate/account.ts | 2 +- packages/core/solidity/src/signer.ts | 35 +- packages/mcp/src/solidity/schemas.ts | 1 + .../function-definitions/solidity.ts | 2 +- .../ui/src/solidity/AccountControls.svelte | 7 + 11 files changed, 1767 insertions(+), 10 deletions(-) create mode 100644 .changeset/young-readers-cover.md diff --git a/.changeset/young-readers-cover.md b/.changeset/young-readers-cover.md new file mode 100644 index 000000000..bd7fee37a --- /dev/null +++ b/.changeset/young-readers-cover.md @@ -0,0 +1,7 @@ +--- +'@openzeppelin/wizard': minor +'@openzeppelin/wizard-common': minor +'@openzeppelin/contracts-mcp': minor +--- + +Add `WebAuthn` to the list of signers available for smart accounts. diff --git a/packages/common/src/ai/descriptions/solidity.ts b/packages/common/src/ai/descriptions/solidity.ts index 8b8cdd15e..c59d3a6ff 100644 --- a/packages/common/src/ai/descriptions/solidity.ts +++ b/packages/common/src/ai/descriptions/solidity.ts @@ -70,6 +70,7 @@ export const solidityAccountDescriptions = { - ECDSA: Standard Ethereum signature validation using secp256k1, validates signatures against a specified owner address - EIP7702: Special ECDSA validation using account's own address as signer, enables EOAs to delegate execution rights - P256: NIST P-256 curve (secp256r1) validation for integration with Passkeys and HSMs + - WebAuthn: Web Authentication (WebAuthn) assertion validation for integration with Passkeys and HSMs on top of P256 - RSA: RSA PKCS#1 v1.5 signature validation (RFC8017) for PKI systems and HSMs - Multisig: ERC-7913 multisignature requiring minimum number of signatures from authorized signers - MultisigWeighted: ERC-7913 weighted multisignature where signers have different voting weights`, diff --git a/packages/core/solidity/src/account.test.ts b/packages/core/solidity/src/account.test.ts index 6e1d66de8..d576d4d3b 100644 --- a/packages/core/solidity/src/account.test.ts +++ b/packages/core/solidity/src/account.test.ts @@ -61,7 +61,7 @@ function format(upgradeable: false | 'uups' | 'transparent') { } } -for (const signer of [false, 'ECDSA', 'EIP7702', 'P256', 'RSA', 'Multisig', 'MultisigWeighted'] as const) { +for (const signer of [false, 'ECDSA', 'EIP7702', 'P256', 'WebAuthn', 'RSA', 'Multisig', 'MultisigWeighted'] as const) { for (const upgradeable of [false, 'uups', 'transparent'] as const) { if (signer === 'EIP7702' && !!upgradeable) continue; diff --git a/packages/core/solidity/src/account.test.ts.md b/packages/core/solidity/src/account.test.ts.md index 226805c38..f0eb0637f 100644 --- a/packages/core/solidity/src/account.test.ts.md +++ b/packages/core/solidity/src/account.test.ts.md @@ -4534,6 +4534,1712 @@ Generated by [AVA](https://avajs.dev). }␊ ` +## Account with SignerWebAuthn named non-upgradeable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthn is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("CustomAccount with SignerWebAuthn", "1")␊ + SignerP256(qx, qy)␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC1271 non-upgradeable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthnERC1271 is Account, IERC1271, SignerP256, SignerWebAuthn {␊ + constructor(bytes32 qx, bytes32 qy) SignerP256(qx, qy) {}␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override␊ + returns (bytes4)␊ + {␊ + return _rawSignatureValidation(hash, signature) ? IERC1271.isValidSignature.selector : bytes4(0xffffffff);␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7739 non-upgradeable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthnERC7739 is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("CustomAccount with SignerWebAuthnERC7739", "1")␊ + SignerP256(qx, qy)␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC721Holder non-upgradeable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthnERC721Holder is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn, ERC721Holder {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("CustomAccount with SignerWebAuthnERC721Holder", "1")␊ + SignerP256(qx, qy)␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC1155Holder non-upgradeable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthnERC1155Holder is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn, ERC1155Holder {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("CustomAccount with SignerWebAuthnERC1155Holder", "1")␊ + SignerP256(qx, qy)␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC721Holder and ERC1155Holder non-upgradeable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ + import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthnERC721HolderERC1155Holder is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn, ERC721Holder, ERC1155Holder {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("CustomAccount with SignerWebAuthnERC721HolderERC1155Holder", "1")␊ + SignerP256(qx, qy)␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7821 Execution non-upgradeable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + ␊ + contract MyAccount is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn, ERC7821 {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("MyAccount", "1")␊ + SignerP256(qx, qy)␊ + {}␊ + ␊ + function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ + internal␊ + view␊ + override␊ + returns (bool)␊ + {␊ + return caller == address(entryPoint()) || super._erc7821AuthorizedExecutor(caller, mode, executionData);␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7579 non-upgradeable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + ␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, SignerP256, SignerWebAuthn {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("MyAccount", "1")␊ + SignerP256(qx, qy)␊ + {}␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override(AccountERC7579, ERC7739)␊ + returns (bytes4)␊ + {␊ + // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ + // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ + bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ + return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, bytes calldata signature)␊ + internal␊ + override(Account, AccountERC7579)␊ + returns (uint256)␊ + {␊ + return super._validateUserOp(userOp, userOpHash, signature);␊ + }␊ + ␊ + // IMPORTANT: Make sure SignerWebAuthn is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerWebAuthn)␊ + // to ensure the correct order of function resolution.␊ + // AccountERC7579 returns false for _rawSignatureValidation␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256, AccountERC7579)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7579 with ERC1271 non-upgradeable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ + import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + ␊ + contract MyAccount is Account, IERC1271, AccountERC7579, SignerP256, SignerWebAuthn {␊ + constructor(bytes32 qx, bytes32 qy) SignerP256(qx, qy) {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, bytes calldata signature)␊ + internal␊ + override(Account, AccountERC7579)␊ + returns (uint256)␊ + {␊ + return super._validateUserOp(userOp, userOpHash, signature);␊ + }␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override(IERC1271, AccountERC7579)␊ + returns (bytes4)␊ + {␊ + return super.isValidSignature(hash, signature);␊ + }␊ + ␊ + // IMPORTANT: Make sure SignerWebAuthn is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerWebAuthn)␊ + // to ensure the correct order of function resolution.␊ + // AccountERC7579 returns false for _rawSignatureValidation␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256, AccountERC7579)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7579 with ERC7739 non-upgradeable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + ␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, SignerP256, SignerWebAuthn {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("MyAccount", "1")␊ + SignerP256(qx, qy)␊ + {}␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override(AccountERC7579, ERC7739)␊ + returns (bytes4)␊ + {␊ + // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ + // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ + bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ + return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, bytes calldata signature)␊ + internal␊ + override(Account, AccountERC7579)␊ + returns (uint256)␊ + {␊ + return super._validateUserOp(userOp, userOpHash, signature);␊ + }␊ + ␊ + // IMPORTANT: Make sure SignerWebAuthn is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerWebAuthn)␊ + // to ensure the correct order of function resolution.␊ + // AccountERC7579 returns false for _rawSignatureValidation␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256, AccountERC7579)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7579 hooks non-upgradeable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ + import {AccountERC7579Hooked} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579Hooked.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + ␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579Hooked, SignerP256, SignerWebAuthn {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("MyAccount", "1")␊ + SignerP256(qx, qy)␊ + {}␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override(AccountERC7579, ERC7739)␊ + returns (bytes4)␊ + {␊ + // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ + // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ + bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ + return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, bytes calldata signature)␊ + internal␊ + override(Account, AccountERC7579)␊ + returns (uint256)␊ + {␊ + return super._validateUserOp(userOp, userOpHash, signature);␊ + }␊ + ␊ + // IMPORTANT: Make sure SignerWebAuthn is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerWebAuthn)␊ + // to ensure the correct order of function resolution.␊ + // AccountERC7579 returns false for _rawSignatureValidation␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256, AccountERC7579)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn named upgradeable uups + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthn is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("CustomAccount with SignerWebAuthn", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function _authorizeUpgrade(address newImplementation)␊ + internal␊ + override␊ + onlyEntryPointOrSelf␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC1271 upgradeable uups + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthnERC1271 is Initializable, Account, IERC1271, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override␊ + returns (bytes4)␊ + {␊ + return _rawSignatureValidation(hash, signature) ? IERC1271.isValidSignature.selector : bytes4(0xffffffff);␊ + }␊ + ␊ + function _authorizeUpgrade(address newImplementation)␊ + internal␊ + override␊ + onlyEntryPointOrSelf␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7739 upgradeable uups + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthnERC7739 is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("CustomAccount with SignerWebAuthnERC7739", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function _authorizeUpgrade(address newImplementation)␊ + internal␊ + override␊ + onlyEntryPointOrSelf␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC721Holder upgradeable uups + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthnERC721Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC721Holder, UUPSUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("CustomAccount with SignerWebAuthnERC721Holder", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function _authorizeUpgrade(address newImplementation)␊ + internal␊ + override␊ + onlyEntryPointOrSelf␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC1155Holder upgradeable uups + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthnERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC1155Holder, UUPSUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("CustomAccount with SignerWebAuthnERC1155Holder", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function _authorizeUpgrade(address newImplementation)␊ + internal␊ + override␊ + onlyEntryPointOrSelf␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC721Holder and ERC1155Holder upgradeable uups + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ + import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthnERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC721Holder, ERC1155Holder, UUPSUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor()␊ + EIP712("CustomAccount with SignerWebAuthnERC721HolderERC1155Holder", "1")␊ + {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function _authorizeUpgrade(address newImplementation)␊ + internal␊ + override␊ + onlyEntryPointOrSelf␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7821 Execution upgradeable uups + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ + ␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC7821, UUPSUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ + internal␊ + view␊ + override␊ + returns (bool)␊ + {␊ + return caller == address(entryPoint()) || super._erc7821AuthorizedExecutor(caller, mode, executionData);␊ + }␊ + ␊ + function _authorizeUpgrade(address newImplementation)␊ + internal␊ + override␊ + onlyEntryPointOrSelf␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7579 upgradeable uups + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ + ␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __AccountERC7579_init();␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override(AccountERC7579Upgradeable, ERC7739)␊ + returns (bytes4)␊ + {␊ + // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ + // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ + bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ + return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ + }␊ + ␊ + function _authorizeUpgrade(address newImplementation)␊ + internal␊ + override␊ + onlyEntryPointOrSelf␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, bytes calldata signature)␊ + internal␊ + override(Account, AccountERC7579Upgradeable)␊ + returns (uint256)␊ + {␊ + return super._validateUserOp(userOp, userOpHash, signature);␊ + }␊ + ␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // to ensure the correct order of function resolution.␊ + // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7579 with ERC1271 upgradeable uups + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ + import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ + ␊ + contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __AccountERC7579_init();␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function _authorizeUpgrade(address newImplementation)␊ + internal␊ + override␊ + onlyEntryPointOrSelf␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, bytes calldata signature)␊ + internal␊ + override(Account, AccountERC7579Upgradeable)␊ + returns (uint256)␊ + {␊ + return super._validateUserOp(userOp, userOpHash, signature);␊ + }␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override(IERC1271, AccountERC7579Upgradeable)␊ + returns (bytes4)␊ + {␊ + return super.isValidSignature(hash, signature);␊ + }␊ + ␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // to ensure the correct order of function resolution.␊ + // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7579 with ERC7739 upgradeable uups + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ + ␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __AccountERC7579_init();␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override(AccountERC7579Upgradeable, ERC7739)␊ + returns (bytes4)␊ + {␊ + // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ + // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ + bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ + return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ + }␊ + ␊ + function _authorizeUpgrade(address newImplementation)␊ + internal␊ + override␊ + onlyEntryPointOrSelf␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, bytes calldata signature)␊ + internal␊ + override(Account, AccountERC7579Upgradeable)␊ + returns (uint256)␊ + {␊ + return super._validateUserOp(userOp, userOpHash, signature);␊ + }␊ + ␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // to ensure the correct order of function resolution.␊ + // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7579 hooks upgradeable uups + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ + import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ + ␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __AccountERC7579Hooked_init();␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override(AccountERC7579Upgradeable, ERC7739)␊ + returns (bytes4)␊ + {␊ + // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ + // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ + bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ + return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ + }␊ + ␊ + function _authorizeUpgrade(address newImplementation)␊ + internal␊ + override␊ + onlyEntryPointOrSelf␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, bytes calldata signature)␊ + internal␊ + override(Account, AccountERC7579Upgradeable)␊ + returns (uint256)␊ + {␊ + return super._validateUserOp(userOp, userOpHash, signature);␊ + }␊ + ␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // to ensure the correct order of function resolution.␊ + // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn named upgradeable transparent + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthn is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("CustomAccount with SignerWebAuthn", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC1271 upgradeable transparent + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthnERC1271 is Initializable, Account, IERC1271, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override␊ + returns (bytes4)␊ + {␊ + return _rawSignatureValidation(hash, signature) ? IERC1271.isValidSignature.selector : bytes4(0xffffffff);␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7739 upgradeable transparent + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthnERC7739 is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("CustomAccount with SignerWebAuthnERC7739", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC721Holder upgradeable transparent + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthnERC721Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC721Holder {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("CustomAccount with SignerWebAuthnERC721Holder", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC1155Holder upgradeable transparent + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthnERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC1155Holder {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("CustomAccount with SignerWebAuthnERC1155Holder", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC721Holder and ERC1155Holder upgradeable transparent + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ + import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + ␊ + contract CustomAccountWithSignerWebAuthnERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC721Holder, ERC1155Holder {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor()␊ + EIP712("CustomAccount with SignerWebAuthnERC721HolderERC1155Holder", "1")␊ + {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7821 Execution upgradeable transparent + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + ␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC7821 {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ + internal␊ + view␊ + override␊ + returns (bool)␊ + {␊ + return caller == address(entryPoint()) || super._erc7821AuthorizedExecutor(caller, mode, executionData);␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7579 upgradeable transparent + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + ␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __AccountERC7579_init();␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override(AccountERC7579Upgradeable, ERC7739)␊ + returns (bytes4)␊ + {␊ + // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ + // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ + bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ + return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, bytes calldata signature)␊ + internal␊ + override(Account, AccountERC7579Upgradeable)␊ + returns (uint256)␊ + {␊ + return super._validateUserOp(userOp, userOpHash, signature);␊ + }␊ + ␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // to ensure the correct order of function resolution.␊ + // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7579 with ERC1271 upgradeable transparent + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ + import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + ␊ + contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __AccountERC7579_init();␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, bytes calldata signature)␊ + internal␊ + override(Account, AccountERC7579Upgradeable)␊ + returns (uint256)␊ + {␊ + return super._validateUserOp(userOp, userOpHash, signature);␊ + }␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override(IERC1271, AccountERC7579Upgradeable)␊ + returns (bytes4)␊ + {␊ + return super.isValidSignature(hash, signature);␊ + }␊ + ␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // to ensure the correct order of function resolution.␊ + // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7579 with ERC7739 upgradeable transparent + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + ␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __AccountERC7579_init();␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override(AccountERC7579Upgradeable, ERC7739)␊ + returns (bytes4)␊ + {␊ + // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ + // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ + bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ + return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, bytes calldata signature)␊ + internal␊ + override(Account, AccountERC7579Upgradeable)␊ + returns (uint256)␊ + {␊ + return super._validateUserOp(userOp, userOpHash, signature);␊ + }␊ + ␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // to ensure the correct order of function resolution.␊ + // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + +## Account with SignerWebAuthn with ERC7579 hooks upgradeable transparent + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.5.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ + import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ + import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ + import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + ␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ + constructor() EIP712("MyAccount", "1") {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __AccountERC7579Hooked_init();␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ + }␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override(AccountERC7579Upgradeable, ERC7739)␊ + returns (bytes4)␊ + {␊ + // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ + // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ + bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ + return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, bytes calldata signature)␊ + internal␊ + override(Account, AccountERC7579Upgradeable)␊ + returns (uint256)␊ + {␊ + return super._validateUserOp(userOp, userOpHash, signature);␊ + }␊ + ␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // to ensure the correct order of function resolution.␊ + // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ + }␊ + ` + ## Account with SignerRSA named non-upgradeable > Snapshot 1 diff --git a/packages/core/solidity/src/account.test.ts.snap b/packages/core/solidity/src/account.test.ts.snap index be211845051cbba6643c6fe741cc35ebe97ad1dc..6c9a9465cb62a9bc20c2f2999bbaaf785dd56b9f 100644 GIT binary patch literal 13340 zcmY+~V{|6nx-Q_@wmRKc|K$v z>wH4nzU)?q*VTqG2OXrOhN7XuF%fZiy{d(uZwDz&P%SSIRRmR`Q4*3~ejKb$u$Brq ze(GW8np2~9bbqnTz0vayxw?M&#&z_>_2JcXHCq)iwKRM%t=02_FWNF|gQu3`WocBf z$l8%!c7>CXzRH69u$DsSH9y115hXgZ@F(j+wdJl|jFa=B`tz2rht*|c|L0>4Wt862 z0$)$JnYXT%R@a%I@Dn=+LW2>3<|^Bytx<)6`bZ-y?NQ0mQPX@?R`aHfwl&^blBlZ| z&mWG-9Hup!f>oxbdHM#c6a0C{Ao8nxwzPP>4X1J<8ggGp3Shs-*LTvsdYjRz@+HtSa zWv@R9y2&a=`bn>Tk(IMOD!ELj_MX-%N~(DCLSuO1-qc8`<;(kU*LL}My|dKjEbBs} z>g%f!v1_$)IcUj2*S^+=`Au%%951(*TC^44`Y~KQ__$R`~gv*iiJD=#b=vlV&uHtX_o}pT%NO~K1 zpWMfE!#^(T`N?l24up+Uy08lsdCRy2R4LY3JcYWb4)yhK7#Y_8SlZ$xgZ!S1`*vM0 zek=XR)BA$vzI@)yfPeVDjX8i{%gE?q*Jedx8Zb4dl3?D!T~ofC?I9$%L{Gp?+IeD2 zl5y$2;yk@{-7T`CW7aeH$7K^za?^G4*R~DsVGhNr`{u-H(?hh_e3q>(#b(46rN<3t z9d^WO1g6olG0&!#M*0Vl_th_hK5Y>AWGw8)gNk9%8Xx-0$1RUg>#w8pp~v5LM0IL< zn)`&X+(av_YwVM<1t#@sI+_UC$XTnHT&0;mQzX_+oft8@auBQrx+lwYT{}$J2{|~R zC#p@Rjx#cnXK}5`JYsmXtV^0KAevKm=$1O}tFwP|;9utT{h5``oC&tGA7<)Uy0ok? za4|z7T+scnteUsNU(%iwbK;-dE|_`JJ-aI=6N8-2prC|Z^E3mfG#aQMk18-o18t3e z;Rd1FsBE=bTUWaxoLT>=eLbV@^LyGJf26*m=iKsiR#q?2Glgk?z%zBd8LfKUykL*I z>##90aa!v0-`Rq4F&waVre+ZlG6r!bJZGmf3hv5?;xn7xZ1Uc^4Z360)9JphS9+>i z|9Sep>csIl_%Uz*oh(X z(-2y?mge5C@4fRQUic$n264kVx2(hF{;T_|*GQ~qVWoDq(rnUllNH3K*x-@mGIy!I zaX{_Dih$qKO(ii>Mx)7+%OXQPika;gvW;^&c$(-PFsp@`RB{gMshW?I)K zFZlxl*E4Ur45gS|x6L)799NFOH5=LW@m?!Y)Jc$RAn)Cb?CT@w7sDE}qfWiz;Zf7w zpWx<2OAakHyu2vFJuW20D2m1V z7$d1d-lMGj>7SM}IK9-!_B6sIKzeI~FhTwn;+pWi+LZz4RQ$g(<}^SLq5cwuazZaf zJ!UMrP(5=L^OYeYv9^@;mnm3H{2cMns+t%!6?MhaMmWzR@j&iYwCCa?AV5M&$r#8H z{*#C^zVxfhg|aYLkh0SY2@(?0em#8knB(4b&)_X&XQRNTsrnM>3aESBas2vvy4L>W zLD^P$RrFp>bIWgPl)B)0uv4Ftle2uea;$f+er6!1?t=6%8QpC{FlS@WWsLhe?D8do za1_3T-)4eB*k!}<<8g7l#a2Bl?Q|LBnLqV1Q5?Ysqvdgct-A8OF=IH|z~yZjtC#1K;rtyyYXXA!^b8`uyOa)S^28);0b=lDC*OXMN1p*iP;>z1 z{uq=Iet4qW0JV1lt8XGl5sQ)JBwX0Iq(tGD$&p=JU~d9ctv~drZAk=($Dh)-L_D%lqm^VhceFEda5 zkgqbjwO?f){J7U5u&(N`oElE0hYYpp86pYFK^rFHAtY3bh4q;)W0Ev1diy2%*O-6y zwL%Tw+QQi)lZsZzYv`+Lv%}$psWiof7?bi-dR;LOI#`VBK$0<%>(GAR`ZtYorS!ES zI73XErx1_cSQDRVH zP^G}pSdsz>JabUu|1AkU-WF4pNu=EB#I&SJs~H0Usl+2xd{hcYwj^CyGUp{QwB&Y} zcghhx*|6nmleyljr|A4K>E6KYm6tp$8=vg6)KneKZ5NvnQdh3Fu!JsI5Uy|v4!|aV zlEKZz_?<0{(p&5cd39E=FIv>f36=Xt=u{lIFxZ12Y8m_u@hu-1=@%@DkeiGFE^BCF z9E7B7O!_gJkLQi0KRpl3FrYSq?vyg+9docsJk+LzLYyZoq`?lI>&>+n7a+$nNuiLt z4X!}m6hRus=v9Wq`|ViRj1g93~l;`(1PnZ5xbSd_SES^|$ZX z>Dczs&QZls-SyqJ{*j=X)3{bi1#t` zk%{a7WgJ_>320pPAYuJ-uVYmbtN>v;VXVPJRr}bP1XIa*uArh{Moyl(MLqN_wPFx^ zX>;q?wn3_3HjKpQkw_Pwsc9f1;Axxwb%tf7H=iKB{f*{OV5(M)oGdyT$l!2m9osQC zQcXttfj?e-f1W*@)Pa=7{}~Hy5w>KoBIy`lKNE08hWHtM3QxuF`i`}#V5i_B=Es9} zu2GWFMF5w_cQ%%~kK?n^;icmF2LYT@QvCh18Q`cxQNuKR=(o6SwK#G5O$s;;jbT z^>YB{Ya8)-+q2vt{OR@2MmP{D1N;&^adN$y-?P5H*WZ0%@#w97uDx?oxL>F0H@HVN zJCyLn$-xIj`^`|`FH&S2hmLy34?#wiDM7GdNtJE2uAKB3UsEg6x&6w!o(rd|0E%ut z+_S(9=tZMb74`|f8hz(`mW2*7;oTll`T*pd?kRX58{S`a?BeU354o5=oVVST=>Gal zbrJ2cHqXj7iT&8BrA_>yV>4fihm4z{>8i!)Ww+j@YE(;tci3#e-rnA3V2=Oi*T8}) zp3`vVVgB6uIzfQgWp-vp2HA|$Oq*>>5w7W1)N0C>xkhr`?4o9}ji090W{eeXmTJQh z{nv~87T-E!Gm(CtO;crQh+emflDXyxLR?|u4djw^WGFrZPT!H2kc3M~D!J67yytBb zFo#clT-p7&!ISVxO`cDr>C8lf5oEgJmy_A_x2#;(8IR3-2GzWPJ?xX?ZzGIc-hDUl z(R%jp{(IQRtUvE@d(xv$><-}@1jzf(vrtTn;2Ub2ry?)eT5$q%0Ra2!1R*5Ae<^Zv z5m7@2ux@+&9Y@BxV|M7U&$Ov(`Idq3cV{s;#bm|S`AW`9%WBJmb~5~_S4CkwV?jzL z{Q{$vhaTWTh!)|evT{V+dul=88pEc;v7I=F^azHA!8H*$y7@d!Sp$qyU0D{|8mktZ zQQrp69}T2^eY<*?GCC$~6;3p)rp#>-V_AQxD;YEL6TJ`T$n{=9kElQjj1|;b!OKXu zf(SHr0L|m^txvO3b1|-=cJs)TkDy_$yWz{x%a!=dU0JBg$@nd*gZ3NcX)xe;Lmlul zAp?)$VF>x9G)Tg6kcn*w#V3a23xl=R1+Qa3{Z-^# zK;g{15{3F{>wOKb!X0<)i66lP2@nU(6iq&0i0?vRSbDHWBWsEDy=TXHu-{|C*=hU{ zwG$_paA4_B$Ix8Kqx^T#2L>@ng0K8>5~uvZY$=B>W`j=$4Q}Rk0eLjMZ`3?5`IKNC zq+lK7hPZx|i7u-oIa-ffz}AD4w^=-rO+3Gs*6-X&hCj#!i!*0?6nRhRvvg0E_olP) zlYE$=s%7bE(xUuml~NEmU1iox#?yt5JSRG*aj{$>)6G+TF4sv^1Q7ese5_=)J0|KU zfcSTU~&iO4qhysio1++u1+C;k~e_QLkU^{simyMdH&zw-N1Ak6-kGP@bZ z#u!TENCIg$-D?`8nAjIv;;91Gk8ZyZc;QEwS$Yvv1sya5Z+yq3nEhI0Ag0f8D zIO{VycaA^tPyU9~DYu1JI-#l<@TS;iSl&bu40PO7YSjB|Hq^wrT<%W-uyju1Ff@t8 zdIL=czqlj@Zef07j+fZ5Y^>)!Tq6h9EwsLkfH(OodY`TqNrHgW)BI2h2PyNSGU#u) zrA`bz)3_$XRIH+D4y2&fnrSx?N}|}q<9B5gaYr?&{=6xA*;2YPus4}B=CyE1>8qhe zq47&4$eFn&5)5P}`zXa9Fn4FP6I&u>(W z&V>>rKS`6`6{##-CIJAig<$j^& zyVLjAHKv^9zCDFKqRICHMiR7HxWp5t2Er*2uF~eMbH{I#u`z=eiT4u}jCj615#16l zvnjO^%E)B##$>ba5#&77vDVDDs&HX922XQR=%|WJJRu!z!@9y8YVdhQqmyx-e?-Mr zB7wnR_-pK%1@^|yYX}{)a$(lacsKo9e{#q@-oRJ>jEi<)G(3!wEdeveCX`UU4#N=Q z_i@PqA@q+*!VGNEU9o}#F}YpLLQ_+t9vQl#2C)-83qYj80s-}SB`W^yBn2ivnlL~G zxjY_fJI=?OWcx3et5vcZ1k!{xXw7S;R`%Vk2Pshfgp{tbg{^=GkpXJ9B=s2o-8$C$e>^05 zhX4wNTwtW_C=n#e?@(lzLl-RHRM$G#FK^q|oAc$ zylvSl5h-fNq?=l9Ns)}a94PnJIg}Dw*`CwZ{6GQ@Nvq@_uKuhdU;O>N z-22yE8JueBTs!;1kFtD*?@dkbNLU{`ZtQow%=OAfX@ zC) zel$j(MMIls{!g+DD_?_gp*t-dxjaF612xlCZtPLCv^*EZbw;Th{L!#8HBZ>4POhs} z;(S(BxKs3E1;1)tfu$2UG2VO7u&;bh+A8-Gmv#KL)U4KqhVc2sG;~9`=GKZ}wx?M` zxoG!~7p=b6@5FwauEK5rHyWr**>(|?drFyc`2cLmA;2d%UWp z@7iQuG9s@;L`$Qb7RCKTPzi{C8;U2dkZ~jk6eAi!H!M!&FH;14uK7KL`0zMTBoFLF zxKMCzJV8SSw5=2h5pj_89O9XGoLpRH0LTZR$(0ZS1v6C{;v2+i@thdFAB7v61B<~Z zMh-3o5{l{HFfO#3NDbo3vQ1G`tdaZAf&swGWhxE}B66+s}S97bZ<5* zzpFIQ5MSnYJM4GW^r8{DT`6K__q1Y9phF=w(t;u5w*19)P+EWM&SyEl#`j`S4e;{~gS4Ki9e{JF59bl*&m`EJ?le)+C;xnl6iMuK6f~>0> zuXykX1-qLJ;CyFnPx!S}98*!H*p%)$&1?Xw=y1{qt4}S@jmD_XFRXu3fI^2t_X48F zp-?Sui^_u9y2u90>ri1p7Js&Tb3*7ZC)G=7 z96XBoXEE`Mh+ zS_q^l(#}m5b2g@@`5lXqCZT8?9|HB6JFI@Z;fn9KiG417(DI(NMKgy|B?l|& z2nr|6vv4mFxlY!1oq86V%vKtz6Z>6FkJ(UkwanJtK}^bOrth&wu}5(GcF+S?yFXvH z&~-k|W)9$v9gVm9s7ntqfCZ`Ap~B0d;q$0yJ(BA^05aP7t)rB$fdS5C4%&6lsQ?zr8aYLJ^+l5b9@Xp12*US-W9Z@BJlvKRMra!@Lv=iJ{9!U)Ybo%9Rk(J09o~$0)4TsR+``Q z4Zs4rrQ&aA?&cmw^23X@E0-~u<=G)UH%9T8tdfIAoQRDoaRLYZH)Z5a0J?r;d8X+R zy09jqAm!q40a;@T`wuw0H>n_zKFqT0b!E9&`7&h1i+odt2WhV~`QKY4e$+x*Goz)l zj0H?xm~)6q;L!!}q$OfKWo6Zo)98&E7;Covgb6c4$6I;z?8&u|Go8_BM~-D{;^J4K zPEY370?2nI} ztEo}TJlJ3*&TaMQIng{*YlyW1(?cMXr^`&mj1}xm-*gUXwlLaxuuLXnG~vt-B>97DkLAJB{=q`5`X%nQ*mnfSXUB zZmq7_+Wd48RA}1pHRwJ-?#?4WQp2NiIdHX1zs31~M$IdHDDHpiPhFpX>QCT}T8SV( z$9GQWGVF=b7T6I%IF!FxkhuqYP+J~}+`J*aag1E=b_7pKB4bfs2dn z1Z4$Q2w8xl8Q7M7GAP@*nHqBhMO%bqv!D~3x@!yvPT*DZV-~sX*)@MF{mVx3{>JMy zAn6I95Wu+4Da3yBW2RhXsXRWiZD%ykkz!LYPdJY@ZwAtd_L>(c6cl|#at)&L1mZ@R z-zwI7hr)~8cZcF8-Adm|KeV1KUkt+PAlYl$6|qv;^38WDe#w}Jr^47uv`lgn|Z{-X;+7{VQZ3(`y zwD1D?WgKBx!6TY(izTO-^S$uFAy$>nLPD1VQ8LZ|OC!lL8k3hAjSrH>>>g)Dk)|0z zS$??T0Lx(FtuMLOZF|r9nd^yL$Ar>K&6EzCs*(y$i_nWkl{e-Ce5X#%Zv^g;87LD# zl9Xzo^20*a(ik(ff$9+Bv?wC=14S-Nk9gq)SKcg1RM3}?b|U*=(v>DdfR!o%M;UJA!m?kn1-1qlc81fWmOF4CxlB4Mn@0VL1CU7;7bQ^+ye@znN(6l zAW)38gU^Onju7pzKFeoO+7c+4htlB17s@E)A;2wM{n6OL*HeAx6xA15E`BU zhCAc(g>j8YWZ&q4dn{=?zh6PWWca%vkB(K8YPiHg_>+M|djvYLACXSZnFW8JT)rSF z!6-?q&{1>9a5JsZ?1Zw3vG$qOQ6TAHpfYLJEVIV2s4{WB*4Xn|K2W)XDl< z*-kHVgGs$5xp}~2XVgk=&X!UzV!75)-WzREYqtmDY_hY5f?Fx-D!JKLgB55N$BHY@ zu#f|a?qwOvebm=`z@3vcT4iaU-AV+S z%11bjq1kP8P|JG)+$l8P--c_SRgffUoV4l;TERSM*_JqdXC1;Bp-x-EI zzfGyJ1%DL(iZ)MsO(1s&yKEB-SB=hK;6;}*Uk>_C8kC^TbQ;@(xFyuQlTn9=%1^Ze z6%)N7C0!e2=jF|oje?N5-3KxS+`D@JBIEfwTX`8TPCV#f9^13rxi}oMDO%P1JR0r1 z*!6((yDksCE{6~kdrVMcNR_TaXKM3+dr;ebP$Mecr1;0PF{HC=J)m?LadU#l5zrjyH zKJc*U@4gRg&^`%CUG(Jq%~~d&+rn3Hou4We2O!h=`;p)kB0U@!47RFn{4ImLy=?O; z{{OP{*MG`VlGA_6QtsCU;Vv!UkGGd?&QCBf@85W8nD697C`!WShWT*M1DcWn6hF6% zH(%i4gzWTlg#$1D9erE@uH_JyviTzH`;;<6@}XFgL4eBv+!h^8!SHD`-oMdD5hIUS zaLqa{8IfB8wxy9ri}d;dvIxX)2<17|O*#?;f)Nd-8y2PVmn?!jSH}PXT2LHeaM#&b z;DFx@0!SSWN)Ne+V=M^En`t#j8tONQNk&=sBi}Ct5($x7pIpOt9pfY9%@a#(aj zl)+*6FwEMVpoa478gQ*y5G`W(=NM7LQW5Y$r`MUq9GL#Op|9bgukoQ4t#Z^C{lfe` z=RIN96Z6dH%t8|ohf^v0s^Q0(AbD_6F^o6vHO?4PJ(Z)gp>xXM2IqMcVi}UAM#vKj z6a!JZ3CXx&M+}PM$rk&hUS_Gyqih?4NSf01_m0*>+(}$NV(bKquPCARH!W~bUJyg~ z7oTgPxmN>9QMkB0g@X14_O+4@GRSA62)-$}g_8kkfmUPrDzz=pC5Ld~s+sA+SbGZu zC5K$>BW2vOQ!`hxm`l1#*%SPT?9%DwKMkz6rPeeP7-y#4-6cV3Ks9=-5=@MGIS zVDRYCp+})mdbpmb|E0k0sh|uk%(T+-pN+W&Sgw5L95OuNkj(t_PJ$h6aRf$1*Mg$* z5SWpK;D0L71PB}?TKrxr_ol4QKO8@SHkcI)1yQ23~7e=E@^ z6gN#UUJ^NF_P}w*M|A3(FriazQId?C(g$vT%^VO*5-W5!byIQ*G$vNznS)tyDkCAM z_cjQ&96w*fefjY~3+_RYrSg4*lh~7a5_DeX>k!sq!>jJ^{$0>dd52n`>2^tOP?$?1 zu`>O|Gn%u=zXTP|v~8-CeJ7LEa#*7&{As@yKEKqijuz?^ zdWSaHCco>#bj_ffPfX>NHmP3gwsi@Nu#QVkz{vX1@*#;zoteGe5 z9Z|A-b4;ky)@hZxrS{tik~B?UWQg93Z$#_O_D-orl$!$V`Ai-RswZq)ExT zPpJ1XH7+oV=S@>~d^fu;kuzH@QL~Q4b?F(S!%m*&oXJmgPXX4;3(u#vLp6oh!^7>Q ztWei;xQ^OX71bSPHAh`MhIKlll84y1S)G%iUAuMW_M@yCBZ_OD(9JmQArE(y$mHGL z(8RDC<`V~hi5Qv)iPa=&iC`RQacyx>McL3e)4gS$WJF>rbeKnaW+I5+C@7se8YqEG zQs51;HB`jhCTtGG2(4$QLZ~oa1zlt`~s>+nDJ__egBVcX0XStbkQ$gx3At&bD6)n z#|BfFi5u&L@{r+m{@~M`0UM6CV1{7vAV@XEjBT61kP^90DI?r#b^LzSQeD@t+o?@i z<)si~tIgw4M)&VrS|SF-Ta9wZ!Gp1`+Xu2-&fhmyFS zq+Seb6@Z8)Elr}QbA|TvgJuvtxw?A5aDt_Me%ny~ZoK@Z4;e;=C~AA={@y!EE>ueQzydf(_(_lG2T zzCD42%zZ_m;1?`J z`L9W4F19Ch{dnYblCWRc$q}a1nl+Qggd^Upx(|ynt#9o&SLzQk`U#g&x(z7=7N&HM={VdU|9Nm z&|B&A)e#Ke+H&mARS^$*o&oDDq z!GvoUvLqEzQ$!rQ{)h!io3+y{9$uxDap%kagQ4GZv6GvN8$&`t!hcop%?1{HjN{sZU4dSanS?EL4p-rz&j&o^<9y+gJ`c5odB;0BvyBJTF{y#0*=zUsw-Q1}kTVhxb)zWQ#D ztgfl9$xUygU)H~3YHSU?MR!hrUIpa=|6dtdT~Qa8@Y6%5|K7l}kp~}kc{eb$W{fG= zBU++KYN9a+#|&0Q6hgLnI5ihT{(XgGVXDkq`Niq?z(@;!MkV+g%ef)rTDj-chJD%& z_}i3erfkU*tu!<8C?SW;v%Z2Zr8tLT)*2ls2?#Osf0kD~(4k>H+>05$6SRX***D9hdRJ^PkljOq$Kmp9TOE+g(X zv)Nx1lgYm^QqV4JhelyQC0>>D*(_u5_P~3Kl@T~kGqX_<&r!-2akL_(r5cV-9zctW zvKCma>fE#>mylnEAyZ^dQzfT#l6LPTV92-B&AnUa?M%d*{7wkJp%%`ad$084ba^Q# zk3hauzBDxqR0l~%7g8s?vH|@!KgPm=+au^fj2RK8J(Sy{pBd5LS2GPUGuRl&nC~GY zXgNGMnb@dS)kvL5sTG|1m$_hva7JYMPs%MG5+yvn_uN-70|fdX{|k_!npCN`P8akR zHC%L2UB{hSrvJC8lL`hNZOE)|Diq>lZgcuiOuwuut~0&nOEh4tv+wss$dgsPwOfIj ze5>*9`m!(b2~*dg%M9M`{KoO#`-%QB%tvzGjl6~5iq(G`Aca_sTEs*uU{S~xot+CD z1np}3`Y33YDkiXU^@+7K<_8Lh62E>M2ROSVwS|LFv9=1DD+)1#q*H$y@Pf30XvczL z-^Y|bYujhr_tn>HgS2Hs|KSpbrpaAP8JhtObp>&0yMy)jy@2w%Rd|zwwfrKH*E$)L z33~SZM$8099T*KC8%F904$+Ig9p-3;2!ZV08L7^%;F*px6e5IC{u@s|gx1{ncGMU( z6qp=J-wz%qgq<5PcL+7O62AQo!r&vlF7~_!0Z3%#6!bC;M|zaAvnV{G^Uf7`hJRPl zy!46fG5-|Esow-roi*jsnK*q-m}1NYGW}q8yLscD_w5-2F-Kw(Gxc$k3DHjb5L#;Z z!_}(Y@oF~OpRSL?%1nOSTuj+N6$zTDbrZj7s$_4(jFhm zr3ZErFYIs6+x@;qXMBJ|;%bFTFqWu))ltko-R^G);|Sv%(L@g6J=xzgW-$%V3KVii ze>&X96!;K)3{3V-j+q^9+i%;$!A2sxas_O=bvM2IsN>KJY@*&+3p@}qb1vx{(l634 z60KJZH~<%h{Kr8zI1bIfB_S*_-{82oJgfd|Xvr)XC#06DN#`ThvpD5s4#^L`m&AI! zY;OHM*_i&!LqhcDX^yS!wx2aWkbn2@sS+#q>0n7b-khiNQs5_LpM2S|-6khH%^;G{ zK42fNIsa6);L!f9{ab0VgNaGW2Ac~)!=EE#&@$>;Qgt|iB(5qw-?6VWrWZZxiTzbf zqyRIi9SzfWL5z)XX)>yGGoh5!Dv%S96M2%8839e~SR?_d!U0T^B5)*7V%fnGl~PwM z6t~P&(@MyDBrZY%MzRq~+BC-i56I9@p1|WTaA1vdA_F$%k@jK$Gs? zfCukb%F*=+<-~w`Op-!OUS#&V##VXrn2?^o@fUdx`ot(xea^uUEvvce^UNe^w~ z+LAQP#a8e>#_j%hXt^L$38f}6vAaX&m9_pXfY!e|Xn7eQa_tRV zUI-LJL`_)m8Zh3|K$S-OE531$l3THJT_UkIxHdTbeo3CG9!Aa=voY8W4B-y;E{w9b ziKD~~ERwSK?`;5)z;@dnT+Y|vPNn%JY%VZ$wc69?E71(ir{{|L`sw!Vtu`*>r8}jU z&wkez9XgXM(s37MMUu;v>U7=UdU5X_v;>*UtM>$4mdK43?BCDA7ji^_KPCbKVmp#; zUDn!7a)=dZqGa6l~B8$ zl4!zxkRF9`kb5rnnlDTtM$-qOH$!924z7u)Tre_!T7#nLRZ!mucc)IWJ8iaJ<@|Dz zY774f{&n+mCH=ZnUq{a6?i;)PB;=o(p=j}o-V&qIIWl6bCRb;sn)rg^G&DNZAM1CA z99d@v_MIBDPt)##)^@7$>L@l@e{Z+Gp21@mQ~F61ktCknNDuJ%`61V6k^*wJf)}97 z0qYx<7YiN>{&zRl2^aA^QVqmM7NeI)2vpy;L=!@1&`riU!XHH_RI%~KAl-D3ZAu|x z81K9h3R9wzsy| zQF9wuhK&jiX4G|scsKZF$=Ulhe&xkXiDFA&%d5x9f667`<`|O9+=V<%@PBmTO}~GE NDgZ+F(P*GS{vR2yyW{`> literal 11599 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 c.addConstructorArgument(arg)); + c.addParent( + signers['P256'], + signerArgs[signer].map(arg => ({ lit: arg.name })), + ); + c.addParent(signers[signer]); + c.addImportOnly({ + name: 'AbstractSigner', + path: '@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol', + transpiled: false, + }); + c.addOverride({ name: 'AbstractSigner', transpiled: false }, signerFunctions._rawSignatureValidation); + c.addOverride({ name: 'SignerP256' }, signerFunctions._rawSignatureValidation); + break; + } } } @@ -50,6 +75,10 @@ export const signers = { name: 'SignerP256', path: '@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol', }, + WebAuthn: { + name: 'SignerWebAuthn', + path: '@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol', + }, RSA: { name: 'SignerRSA', path: '@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol', @@ -74,6 +103,10 @@ export const signerArgs: Record, { nam { name: 'e', type: 'bytes memory' }, { name: 'n', type: 'bytes memory' }, ], + WebAuthn: [ + { name: 'qx', type: 'bytes32' }, + { name: 'qy', type: 'bytes32' }, + ], Multisig: [ { name: 'signers', type: 'bytes[] memory' }, { name: 'threshold', type: 'uint64' }, diff --git a/packages/mcp/src/solidity/schemas.ts b/packages/mcp/src/solidity/schemas.ts index 72ee798e7..c2cd4a772 100644 --- a/packages/mcp/src/solidity/schemas.ts +++ b/packages/mcp/src/solidity/schemas.ts @@ -128,6 +128,7 @@ export const accountSchema = { .or(z.literal('ECDSA')) .or(z.literal('EIP7702')) .or(z.literal('P256')) + .or(z.literal('WebAuthn')) .or(z.literal('RSA')) .or(z.literal('Multisig')) .or(z.literal('MultisigWeighted')) diff --git a/packages/ui/api/ai-assistant/function-definitions/solidity.ts b/packages/ui/api/ai-assistant/function-definitions/solidity.ts index 5f50dc32d..91bdd7347 100644 --- a/packages/ui/api/ai-assistant/function-definitions/solidity.ts +++ b/packages/ui/api/ai-assistant/function-definitions/solidity.ts @@ -211,7 +211,7 @@ export const solidityAccountAIFunctionDefinition = { signer: { anyOf: [ { type: 'boolean', enum: [false] }, - { type: 'string', enum: ['ECDSA', 'EIP7702', 'P256', 'RSA', 'Multisig', 'MultisigWeighted'] }, + { type: 'string', enum: ['ECDSA', 'EIP7702', 'P256', 'WebAuthn', 'RSA', 'Multisig', 'MultisigWeighted'] }, ], description: solidityAccountDescriptions.signer, }, diff --git a/packages/ui/src/solidity/AccountControls.svelte b/packages/ui/src/solidity/AccountControls.svelte index 74c262542..ae6e08b5f 100644 --- a/packages/ui/src/solidity/AccountControls.svelte +++ b/packages/ui/src/solidity/AccountControls.svelte @@ -216,6 +216,13 @@ hardware security modules that use RSA keys. + From eaca6ad2d866e8f191db0b9cc66e7121580e247a Mon Sep 17 00:00:00 2001 From: ernestognw Date: Mon, 3 Nov 2025 13:31:28 -0600 Subject: [PATCH 2/4] up --- packages/core/solidity/src/account.ts | 2 ++ packages/core/solidity/src/signer.ts | 11 ++++------- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/core/solidity/src/account.ts b/packages/core/solidity/src/account.ts index 9fe2623cf..654ee69ba 100644 --- a/packages/core/solidity/src/account.ts +++ b/packages/core/solidity/src/account.ts @@ -246,6 +246,7 @@ function overrideRawSignatureValidation(c: ContractBuilder, opts: AccountOptions const accountName = opts.upgradeable ? upgradeableName('AccountERC7579') : 'AccountERC7579'; const signerName = opts.upgradeable ? upgradeableName(`Signer${opts.signer}`) : `Signer${opts.signer}`; + // WebAuthnSigner depends inherits from P256Signer, so the AbstractSigner override is handled by `addSigner` if (opts.signer !== 'WebAuthn') { c.addImportOnly({ name: 'AbstractSigner', @@ -254,6 +255,7 @@ function overrideRawSignatureValidation(c: ContractBuilder, opts: AccountOptions }); c.addOverride({ name: 'AbstractSigner', transpiled: false }, signerFunctions._rawSignatureValidation); } + c.addOverride({ name: 'AccountERC7579' }, signerFunctions._rawSignatureValidation); c.setFunctionComments( [ diff --git a/packages/core/solidity/src/signer.ts b/packages/core/solidity/src/signer.ts index b5d1f2cd0..d38fed804 100644 --- a/packages/core/solidity/src/signer.ts +++ b/packages/core/solidity/src/signer.ts @@ -44,10 +44,10 @@ export function addSigner(c: ContractBuilder, signer: SignerOptions, upgradeable break; } case 'WebAuthn': { - signerArgs[signer].forEach(arg => c.addConstructorArgument(arg)); + signerArgs.P256.forEach(arg => c.addConstructorArgument(arg)); c.addParent( - signers['P256'], - signerArgs[signer].map(arg => ({ lit: arg.name })), + signers.P256, + signerArgs.P256.map(arg => ({ lit: arg.name })), ); c.addParent(signers[signer]); c.addImportOnly({ @@ -103,10 +103,7 @@ export const signerArgs: Record, { nam { name: 'e', type: 'bytes memory' }, { name: 'n', type: 'bytes memory' }, ], - WebAuthn: [ - { name: 'qx', type: 'bytes32' }, - { name: 'qy', type: 'bytes32' }, - ], + WebAuthn: [], Multisig: [ { name: 'signers', type: 'bytes[] memory' }, { name: 'threshold', type: 'uint64' }, From f2d18a553d4f044ddbf0558758bcaf3811fabaa0 Mon Sep 17 00:00:00 2001 From: ernestognw Date: Mon, 3 Nov 2025 14:30:37 -0600 Subject: [PATCH 3/4] Nits --- .changeset/young-readers-cover.md | 8 ++-- .../common/src/ai/descriptions/solidity.ts | 6 +-- packages/core/solidity/src/account.test.ts | 3 +- .../core/solidity/src/generate/account.ts | 2 +- packages/core/solidity/src/signer.ts | 42 ++++++++++--------- packages/mcp/src/solidity/schemas.ts | 6 +-- .../function-definitions/solidity.ts | 2 +- 7 files changed, 37 insertions(+), 32 deletions(-) diff --git a/.changeset/young-readers-cover.md b/.changeset/young-readers-cover.md index bd7fee37a..1e2253073 100644 --- a/.changeset/young-readers-cover.md +++ b/.changeset/young-readers-cover.md @@ -1,7 +1,7 @@ --- -'@openzeppelin/wizard': minor -'@openzeppelin/wizard-common': minor -'@openzeppelin/contracts-mcp': minor +'@openzeppelin/wizard': patch +'@openzeppelin/wizard-common': patch +'@openzeppelin/contracts-mcp': patch --- -Add `WebAuthn` to the list of signers available for smart accounts. +Solidity account signer: Add `WebAuthn` to the list of signers available. diff --git a/packages/common/src/ai/descriptions/solidity.ts b/packages/common/src/ai/descriptions/solidity.ts index c59d3a6ff..6188129f8 100644 --- a/packages/common/src/ai/descriptions/solidity.ts +++ b/packages/common/src/ai/descriptions/solidity.ts @@ -69,11 +69,11 @@ export const solidityAccountDescriptions = { signer: `Defines the signature verification algorithm used by the account to verify user operations. Options: - ECDSA: Standard Ethereum signature validation using secp256k1, validates signatures against a specified owner address - EIP7702: Special ECDSA validation using account's own address as signer, enables EOAs to delegate execution rights + - Multisig: ERC-7913 multisignature requiring minimum number of signatures from authorized signers + - MultisigWeighted: ERC-7913 weighted multisignature where signers have different voting weights - P256: NIST P-256 curve (secp256r1) validation for integration with Passkeys and HSMs - - WebAuthn: Web Authentication (WebAuthn) assertion validation for integration with Passkeys and HSMs on top of P256 - RSA: RSA PKCS#1 v1.5 signature validation (RFC8017) for PKI systems and HSMs - - Multisig: ERC-7913 multisignature requiring minimum number of signatures from authorized signers - - MultisigWeighted: ERC-7913 weighted multisignature where signers have different voting weights`, + - WebAuthn: Web Authentication (WebAuthn) assertion validation for integration with Passkeys and HSMs on top of P256`, batchedExecution: 'Whether to implement a minimal batching interface for the account to allow multiple operations to be executed in a single transaction following the ERC-7821 standard.', ERC7579Modules: diff --git a/packages/core/solidity/src/account.test.ts b/packages/core/solidity/src/account.test.ts index d576d4d3b..2cc356480 100644 --- a/packages/core/solidity/src/account.test.ts +++ b/packages/core/solidity/src/account.test.ts @@ -4,6 +4,7 @@ import { account } from '.'; import type { AccountOptions } from './account'; import { buildAccount } from './account'; import { printContract } from './print'; +import { SignerOptions } from './signer'; /** * Tests external API for equivalence with internal API @@ -61,7 +62,7 @@ function format(upgradeable: false | 'uups' | 'transparent') { } } -for (const signer of [false, 'ECDSA', 'EIP7702', 'P256', 'WebAuthn', 'RSA', 'Multisig', 'MultisigWeighted'] as const) { +for (const signer of SignerOptions) { for (const upgradeable of [false, 'uups', 'transparent'] as const) { if (signer === 'EIP7702' && !!upgradeable) continue; diff --git a/packages/core/solidity/src/generate/account.ts b/packages/core/solidity/src/generate/account.ts index 5c6005f3b..e92df43f9 100644 --- a/packages/core/solidity/src/generate/account.ts +++ b/packages/core/solidity/src/generate/account.ts @@ -8,7 +8,7 @@ const account = { signatureValidation: [false, 'ERC1271', 'ERC7739'] as const, ERC721Holder: [false, true] as const, ERC1155Holder: [false, true] as const, - signer: ['ECDSA', 'EIP7702', 'P256', 'WebAuthn', 'RSA', 'Multisig', 'MultisigWeighted'] as const, + signer: ['ECDSA', 'EIP7702', 'Multisig', 'MultisigWeighted', 'P256', 'RSA', 'WebAuthn'] as const, batchedExecution: [false, true] as const, ERC7579Modules: [false, 'AccountERC7579', 'AccountERC7579Hooked'] as const, access: [false] as const, diff --git a/packages/core/solidity/src/signer.ts b/packages/core/solidity/src/signer.ts index d38fed804..32140008e 100644 --- a/packages/core/solidity/src/signer.ts +++ b/packages/core/solidity/src/signer.ts @@ -7,11 +7,11 @@ export const SignerOptions = [ false, 'ECDSA', 'EIP7702', - 'P256', - 'WebAuthn', - 'RSA', 'Multisig', 'MultisigWeighted', + 'P256', + 'RSA', + 'WebAuthn', ] as const; export type SignerOptions = (typeof SignerOptions)[number]; @@ -59,6 +59,10 @@ export function addSigner(c: ContractBuilder, signer: SignerOptions, upgradeable c.addOverride({ name: 'SignerP256' }, signerFunctions._rawSignatureValidation); break; } + default: { + const _: never = signer; + throw new Error('Unknown signer'); + } } } @@ -71,25 +75,25 @@ export const signers = { name: 'SignerEIP7702', path: '@openzeppelin/contracts/utils/cryptography/signers/SignerEIP7702.sol', }, + Multisig: { + name: 'MultiSignerERC7913', + path: '@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol', + }, + MultisigWeighted: { + name: 'MultiSignerERC7913Weighted', + path: '@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol', + }, P256: { name: 'SignerP256', path: '@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol', }, - WebAuthn: { - name: 'SignerWebAuthn', - path: '@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol', - }, RSA: { name: 'SignerRSA', path: '@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol', }, - Multisig: { - name: 'MultiSignerERC7913', - path: '@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol', - }, - MultisigWeighted: { - name: 'MultiSignerERC7913Weighted', - path: '@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol', + WebAuthn: { + name: 'SignerWebAuthn', + path: '@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol', }, }; @@ -99,11 +103,6 @@ export const signerArgs: Record, { nam { name: 'qx', type: 'bytes32' }, { name: 'qy', type: 'bytes32' }, ], - RSA: [ - { name: 'e', type: 'bytes memory' }, - { name: 'n', type: 'bytes memory' }, - ], - WebAuthn: [], Multisig: [ { name: 'signers', type: 'bytes[] memory' }, { name: 'threshold', type: 'uint64' }, @@ -113,6 +112,11 @@ export const signerArgs: Record, { nam { name: 'weights', type: 'uint64[] memory' }, { name: 'threshold', type: 'uint64' }, ], + RSA: [ + { name: 'e', type: 'bytes memory' }, + { name: 'n', type: 'bytes memory' }, + ], + WebAuthn: [], }; export const signerFunctions = defineFunctions({ diff --git a/packages/mcp/src/solidity/schemas.ts b/packages/mcp/src/solidity/schemas.ts index c2cd4a772..d495c1384 100644 --- a/packages/mcp/src/solidity/schemas.ts +++ b/packages/mcp/src/solidity/schemas.ts @@ -127,11 +127,11 @@ export const accountSchema = { .literal(false) .or(z.literal('ECDSA')) .or(z.literal('EIP7702')) - .or(z.literal('P256')) - .or(z.literal('WebAuthn')) - .or(z.literal('RSA')) .or(z.literal('Multisig')) .or(z.literal('MultisigWeighted')) + .or(z.literal('P256')) + .or(z.literal('RSA')) + .or(z.literal('WebAuthn')) .optional() .describe(solidityAccountDescriptions.signer), batchedExecution: z.boolean().optional().describe(solidityAccountDescriptions.batchedExecution), diff --git a/packages/ui/api/ai-assistant/function-definitions/solidity.ts b/packages/ui/api/ai-assistant/function-definitions/solidity.ts index 91bdd7347..0e10063f3 100644 --- a/packages/ui/api/ai-assistant/function-definitions/solidity.ts +++ b/packages/ui/api/ai-assistant/function-definitions/solidity.ts @@ -211,7 +211,7 @@ export const solidityAccountAIFunctionDefinition = { signer: { anyOf: [ { type: 'boolean', enum: [false] }, - { type: 'string', enum: ['ECDSA', 'EIP7702', 'P256', 'WebAuthn', 'RSA', 'Multisig', 'MultisigWeighted'] }, + { type: 'string', enum: ['ECDSA', 'EIP7702', 'P256', 'Multisig', 'MultisigWeighted', 'RSA', 'WebAuthn'] }, ], description: solidityAccountDescriptions.signer, }, From 6b7de0dec18a0184619594107ae33b3d0e70e5b9 Mon Sep 17 00:00:00 2001 From: ernestognw Date: Mon, 3 Nov 2025 14:31:20 -0600 Subject: [PATCH 4/4] Update snapshots --- packages/core/solidity/src/account.test.ts.md | 5090 ++++++++--------- .../core/solidity/src/account.test.ts.snap | Bin 13340 -> 13325 bytes 2 files changed, 2545 insertions(+), 2545 deletions(-) diff --git a/packages/core/solidity/src/account.test.ts.md b/packages/core/solidity/src/account.test.ts.md index f0eb0637f..3578a156a 100644 --- a/packages/core/solidity/src/account.test.ts.md +++ b/packages/core/solidity/src/account.test.ts.md @@ -3135,7 +3135,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 named non-upgradeable +## Account with SignerMultisig named non-upgradeable > Snapshot 1 @@ -3146,17 +3146,29 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ ␊ - contract CustomAccountWithSignerP256 is Account, EIP712, ERC7739, SignerP256 {␊ - constructor(bytes32 qx, bytes32 qy)␊ - EIP712("CustomAccount with SignerP256", "1")␊ - SignerP256(qx, qy)␊ + contract CustomAccountWithSignerMultisig is Account, EIP712, ERC7739, MultiSignerERC7913 {␊ + constructor(bytes[] memory signers, uint64 threshold)␊ + EIP712("CustomAccount with SignerMultisig", "1")␊ + MultiSignerERC7913(signers, threshold)␊ {}␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ }␊ ` -## Account with SignerP256 with ERC1271 non-upgradeable +## Account with SignerMultisig with ERC1271 non-upgradeable > Snapshot 1 @@ -3166,10 +3178,12 @@ Generated by [AVA](https://avajs.dev). ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ ␊ - contract CustomAccountWithSignerP256ERC1271 is Account, IERC1271, SignerP256 {␊ - constructor(bytes32 qx, bytes32 qy) SignerP256(qx, qy) {}␊ + contract CustomAccountWithSignerMultisigERC1271 is Account, IERC1271, MultiSignerERC7913 {␊ + constructor(bytes[] memory signers, uint64 threshold)␊ + MultiSignerERC7913(signers, threshold)␊ + {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -3179,10 +3193,22 @@ Generated by [AVA](https://avajs.dev). {␊ return _rawSignatureValidation(hash, signature) ? IERC1271.isValidSignature.selector : bytes4(0xffffffff);␊ }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ }␊ ` -## Account with SignerP256 with ERC7739 non-upgradeable +## Account with SignerMultisig with ERC7739 non-upgradeable > Snapshot 1 @@ -3193,17 +3219,29 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ ␊ - contract CustomAccountWithSignerP256ERC7739 is Account, EIP712, ERC7739, SignerP256 {␊ - constructor(bytes32 qx, bytes32 qy)␊ - EIP712("CustomAccount with SignerP256ERC7739", "1")␊ - SignerP256(qx, qy)␊ + contract CustomAccountWithSignerMultisigERC7739 is Account, EIP712, ERC7739, MultiSignerERC7913 {␊ + constructor(bytes[] memory signers, uint64 threshold)␊ + EIP712("CustomAccount with SignerMultisigERC7739", "1")␊ + MultiSignerERC7913(signers, threshold)␊ {}␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ }␊ ` -## Account with SignerP256 with ERC721Holder non-upgradeable +## Account with SignerMultisig with ERC721Holder non-upgradeable > Snapshot 1 @@ -3215,17 +3253,29 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ ␊ - contract CustomAccountWithSignerP256ERC721Holder is Account, EIP712, ERC7739, SignerP256, ERC721Holder {␊ - constructor(bytes32 qx, bytes32 qy)␊ - EIP712("CustomAccount with SignerP256ERC721Holder", "1")␊ - SignerP256(qx, qy)␊ + contract CustomAccountWithSignerMultisigERC721Holder is Account, EIP712, ERC7739, MultiSignerERC7913, ERC721Holder {␊ + constructor(bytes[] memory signers, uint64 threshold)␊ + EIP712("CustomAccount with SignerMultisigERC721Holder", "1")␊ + MultiSignerERC7913(signers, threshold)␊ {}␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ }␊ ` -## Account with SignerP256 with ERC1155Holder non-upgradeable +## Account with SignerMultisig with ERC1155Holder non-upgradeable > Snapshot 1 @@ -3237,17 +3287,29 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ ␊ - contract CustomAccountWithSignerP256ERC1155Holder is Account, EIP712, ERC7739, SignerP256, ERC1155Holder {␊ - constructor(bytes32 qx, bytes32 qy)␊ - EIP712("CustomAccount with SignerP256ERC1155Holder", "1")␊ - SignerP256(qx, qy)␊ + contract CustomAccountWithSignerMultisigERC1155Holder is Account, EIP712, ERC7739, MultiSignerERC7913, ERC1155Holder {␊ + constructor(bytes[] memory signers, uint64 threshold)␊ + EIP712("CustomAccount with SignerMultisigERC1155Holder", "1")␊ + MultiSignerERC7913(signers, threshold)␊ {}␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ }␊ ` -## Account with SignerP256 with ERC721Holder and ERC1155Holder non-upgradeable +## Account with SignerMultisig with ERC721Holder and ERC1155Holder non-upgradeable > Snapshot 1 @@ -3260,17 +3322,29 @@ Generated by [AVA](https://avajs.dev). import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ ␊ - contract CustomAccountWithSignerP256ERC721HolderERC1155Holder is Account, EIP712, ERC7739, SignerP256, ERC721Holder, ERC1155Holder {␊ - constructor(bytes32 qx, bytes32 qy)␊ - EIP712("CustomAccount with SignerP256ERC721HolderERC1155Holder", "1")␊ - SignerP256(qx, qy)␊ + contract CustomAccountWithSignerMultisigERC721HolderERC1155Holder is Account, EIP712, ERC7739, MultiSignerERC7913, ERC721Holder, ERC1155Holder {␊ + constructor(bytes[] memory signers, uint64 threshold)␊ + EIP712("CustomAccount with SignerMultisigERC721HolderERC1155Holder", "1")␊ + MultiSignerERC7913(signers, threshold)␊ {}␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ }␊ ` -## Account with SignerP256 with ERC7821 Execution non-upgradeable +## Account with SignerMultisig with ERC7821 Execution non-upgradeable > Snapshot 1 @@ -3282,13 +3356,25 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, SignerP256, ERC7821 {␊ - constructor(bytes32 qx, bytes32 qy)␊ + contract MyAccount is Account, EIP712, ERC7739, MultiSignerERC7913, ERC7821 {␊ + constructor(bytes[] memory signers, uint64 threshold)␊ EIP712("MyAccount", "1")␊ - SignerP256(qx, qy)␊ + MultiSignerERC7913(signers, threshold)␊ {}␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ internal␊ @@ -3301,7 +3387,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC7579 non-upgradeable +## Account with SignerMultisig with ERC7579 non-upgradeable > Snapshot 1 @@ -3314,13 +3400,13 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, SignerP256 {␊ - constructor(bytes32 qx, bytes32 qy)␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, MultiSignerERC7913 {␊ + constructor(bytes[] memory signers, uint64 threshold)␊ EIP712("MyAccount", "1")␊ - SignerP256(qx, qy)␊ + MultiSignerERC7913(signers, threshold)␊ {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -3334,6 +3420,18 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -3345,14 +3443,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerP256 is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerP256)␊ + // IMPORTANT: Make sure SignerMultisig is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisig)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerP256, AbstractSigner, AccountERC7579)␊ + override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -3360,7 +3458,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC7579 with ERC1271 non-upgradeable +## Account with SignerMultisig with ERC7579 with ERC1271 non-upgradeable > Snapshot 1 @@ -3372,11 +3470,25 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ + import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ - contract MyAccount is Account, IERC1271, AccountERC7579, SignerP256 {␊ - constructor(bytes32 qx, bytes32 qy) SignerP256(qx, qy) {}␊ + contract MyAccount is Account, IERC1271, AccountERC7579, MultiSignerERC7913 {␊ + constructor(bytes[] memory signers, uint64 threshold)␊ + MultiSignerERC7913(signers, threshold)␊ + {}␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -3397,14 +3509,14 @@ Generated by [AVA](https://avajs.dev). return super.isValidSignature(hash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerP256 is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerP256)␊ + // IMPORTANT: Make sure SignerMultisig is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisig)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerP256, AbstractSigner, AccountERC7579)␊ + override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -3412,7 +3524,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC7579 with ERC7739 non-upgradeable +## Account with SignerMultisig with ERC7579 with ERC7739 non-upgradeable > Snapshot 1 @@ -3425,13 +3537,13 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, SignerP256 {␊ - constructor(bytes32 qx, bytes32 qy)␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, MultiSignerERC7913 {␊ + constructor(bytes[] memory signers, uint64 threshold)␊ EIP712("MyAccount", "1")␊ - SignerP256(qx, qy)␊ + MultiSignerERC7913(signers, threshold)␊ {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -3445,6 +3557,18 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -3456,14 +3580,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerP256 is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerP256)␊ + // IMPORTANT: Make sure SignerMultisig is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisig)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerP256, AbstractSigner, AccountERC7579)␊ + override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -3471,7 +3595,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC7579 hooks non-upgradeable +## Account with SignerMultisig with ERC7579 hooks non-upgradeable > Snapshot 1 @@ -3485,13 +3609,13 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579Hooked} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579Hooked.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, AccountERC7579Hooked, SignerP256 {␊ - constructor(bytes32 qx, bytes32 qy)␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579Hooked, MultiSignerERC7913 {␊ + constructor(bytes[] memory signers, uint64 threshold)␊ EIP712("MyAccount", "1")␊ - SignerP256(qx, qy)␊ + MultiSignerERC7913(signers, threshold)␊ {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -3505,6 +3629,18 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -3516,14 +3652,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerP256 is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerP256)␊ + // IMPORTANT: Make sure SignerMultisig is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisig)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerP256, AbstractSigner, AccountERC7579)␊ + override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -3531,7 +3667,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 named upgradeable uups +## Account with SignerMultisig named upgradeable uups > Snapshot 1 @@ -3543,17 +3679,32 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerP256 is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, UUPSUpgradeable {␊ + contract CustomAccountWithSignerMultisig is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerP256", "1") {␊ + constructor() EIP712("CustomAccount with SignerMultisig", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913_init(signers, threshold);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -3564,7 +3715,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC1271 upgradeable uups +## Account with SignerMultisig with ERC1271 upgradeable uups > Snapshot 1 @@ -3575,17 +3726,20 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerP256ERC1271 is Initializable, Account, IERC1271, SignerP256Upgradeable, UUPSUpgradeable {␊ + contract CustomAccountWithSignerMultisigERC1271 is Initializable, Account, IERC1271, MultiSignerERC7913Upgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913_init(signers, threshold);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -3596,6 +3750,18 @@ Generated by [AVA](https://avajs.dev). {␊ return _rawSignatureValidation(hash, signature) ? IERC1271.isValidSignature.selector : bytes4(0xffffffff);␊ }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ internal␊ @@ -3605,7 +3771,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC7739 upgradeable uups +## Account with SignerMultisig with ERC7739 upgradeable uups > Snapshot 1 @@ -3617,17 +3783,32 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerP256ERC7739 is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, UUPSUpgradeable {␊ + contract CustomAccountWithSignerMultisigERC7739 is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerP256ERC7739", "1") {␊ + constructor() EIP712("CustomAccount with SignerMultisigERC7739", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913_init(signers, threshold);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -3638,7 +3819,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC721Holder upgradeable uups +## Account with SignerMultisig with ERC721Holder upgradeable uups > Snapshot 1 @@ -3651,17 +3832,32 @@ Generated by [AVA](https://avajs.dev). import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerP256ERC721Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC721Holder, UUPSUpgradeable {␊ + contract CustomAccountWithSignerMultisigERC721Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC721Holder, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerP256ERC721Holder", "1") {␊ + constructor() EIP712("CustomAccount with SignerMultisigERC721Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913_init(signers, threshold);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -3672,7 +3868,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC1155Holder upgradeable uups +## Account with SignerMultisig with ERC1155Holder upgradeable uups > Snapshot 1 @@ -3685,17 +3881,32 @@ Generated by [AVA](https://avajs.dev). import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerP256ERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC1155Holder, UUPSUpgradeable {␊ + contract CustomAccountWithSignerMultisigERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC1155Holder, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerP256ERC1155Holder", "1") {␊ + constructor() EIP712("CustomAccount with SignerMultisigERC1155Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913_init(signers, threshold);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -3706,7 +3917,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC721Holder and ERC1155Holder upgradeable uups +## Account with SignerMultisig with ERC721Holder and ERC1155Holder upgradeable uups > Snapshot 1 @@ -3720,19 +3931,34 @@ Generated by [AVA](https://avajs.dev). import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerP256ERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC721Holder, ERC1155Holder, UUPSUpgradeable {␊ + contract CustomAccountWithSignerMultisigERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC721Holder, ERC1155Holder, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor()␊ - EIP712("CustomAccount with SignerP256ERC721HolderERC1155Holder", "1")␊ + EIP712("CustomAccount with SignerMultisigERC721HolderERC1155Holder", "1")␊ {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913_init(signers, threshold);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -3743,7 +3969,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC7821 Execution upgradeable uups +## Account with SignerMultisig with ERC7821 Execution upgradeable uups > Snapshot 1 @@ -3756,17 +3982,32 @@ Generated by [AVA](https://avajs.dev). import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC7821, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC7821, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913_init(signers, threshold);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ @@ -3786,7 +4027,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC7579 upgradeable uups +## Account with SignerMultisig with ERC7579 upgradeable uups > Snapshot 1 @@ -3800,19 +4041,22 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913Upgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579_init();␊ - __SignerP256_init(qx, qy);␊ + __MultiSignerERC7913_init(signers, threshold);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -3826,6 +4070,18 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ internal␊ @@ -3843,14 +4099,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ + // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -3858,7 +4114,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC7579 with ERC1271 upgradeable uups +## Account with SignerMultisig with ERC7579 with ERC1271 upgradeable uups > Snapshot 1 @@ -3871,28 +4127,43 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, SignerP256Upgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, MultiSignerERC7913Upgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579_init();␊ - __SignerP256_init(qx, qy);␊ + __MultiSignerERC7913_init(signers, threshold);␊ }␊ ␊ - function _authorizeUpgrade(address newImplementation)␊ - internal␊ - override␊ - onlyEntryPointOrSelf␊ - {}␊ - ␊ - // The following functions are overrides required by Solidity.␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ + ␊ + function _authorizeUpgrade(address newImplementation)␊ + internal␊ + override␊ + onlyEntryPointOrSelf␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ ␊ function _validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, bytes calldata signature)␊ internal␊ @@ -3911,14 +4182,14 @@ Generated by [AVA](https://avajs.dev). return super.isValidSignature(hash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ + // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -3926,7 +4197,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC7579 with ERC7739 upgradeable uups +## Account with SignerMultisig with ERC7579 with ERC7739 upgradeable uups > Snapshot 1 @@ -3940,19 +4211,22 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913Upgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579_init();␊ - __SignerP256_init(qx, qy);␊ + __MultiSignerERC7913_init(signers, threshold);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -3966,6 +4240,18 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ internal␊ @@ -3983,14 +4269,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ + // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -3998,7 +4284,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC7579 hooks upgradeable uups +## Account with SignerMultisig with ERC7579 hooks upgradeable uups > Snapshot 1 @@ -4013,19 +4299,22 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, SignerP256Upgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, MultiSignerERC7913Upgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579Hooked_init();␊ - __SignerP256_init(qx, qy);␊ + __MultiSignerERC7913_init(signers, threshold);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -4039,6 +4328,18 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ internal␊ @@ -4056,14 +4357,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ + // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -4071,7 +4372,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 named upgradeable transparent +## Account with SignerMultisig named upgradeable transparent > Snapshot 1 @@ -4083,21 +4384,36 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ ␊ - contract CustomAccountWithSignerP256 is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable {␊ + contract CustomAccountWithSignerMultisig is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerP256", "1") {␊ + constructor() EIP712("CustomAccount with SignerMultisig", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913_init(signers, threshold);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerP256 with ERC1271 upgradeable transparent +## Account with SignerMultisig with ERC1271 upgradeable transparent > Snapshot 1 @@ -4108,16 +4424,19 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ ␊ - contract CustomAccountWithSignerP256ERC1271 is Initializable, Account, IERC1271, SignerP256Upgradeable {␊ + contract CustomAccountWithSignerMultisigERC1271 is Initializable, Account, IERC1271, MultiSignerERC7913Upgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913_init(signers, threshold);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -4128,10 +4447,22 @@ Generated by [AVA](https://avajs.dev). {␊ return _rawSignatureValidation(hash, signature) ? IERC1271.isValidSignature.selector : bytes4(0xffffffff);␊ }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ }␊ ` -## Account with SignerP256 with ERC7739 upgradeable transparent +## Account with SignerMultisig with ERC7739 upgradeable transparent > Snapshot 1 @@ -4143,21 +4474,36 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ ␊ - contract CustomAccountWithSignerP256ERC7739 is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable {␊ + contract CustomAccountWithSignerMultisigERC7739 is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerP256ERC7739", "1") {␊ + constructor() EIP712("CustomAccount with SignerMultisigERC7739", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913_init(signers, threshold);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerP256 with ERC721Holder upgradeable transparent +## Account with SignerMultisig with ERC721Holder upgradeable transparent > Snapshot 1 @@ -4170,21 +4516,36 @@ Generated by [AVA](https://avajs.dev). import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ ␊ - contract CustomAccountWithSignerP256ERC721Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC721Holder {␊ + contract CustomAccountWithSignerMultisigERC721Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC721Holder {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerP256ERC721Holder", "1") {␊ + constructor() EIP712("CustomAccount with SignerMultisigERC721Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913_init(signers, threshold);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerP256 with ERC1155Holder upgradeable transparent +## Account with SignerMultisig with ERC1155Holder upgradeable transparent > Snapshot 1 @@ -4197,21 +4558,36 @@ Generated by [AVA](https://avajs.dev). import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ ␊ - contract CustomAccountWithSignerP256ERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC1155Holder {␊ + contract CustomAccountWithSignerMultisigERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC1155Holder {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerP256ERC1155Holder", "1") {␊ + constructor() EIP712("CustomAccount with SignerMultisigERC1155Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913_init(signers, threshold);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerP256 with ERC721Holder and ERC1155Holder upgradeable transparent +## Account with SignerMultisig with ERC721Holder and ERC1155Holder upgradeable transparent > Snapshot 1 @@ -4225,23 +4601,38 @@ Generated by [AVA](https://avajs.dev). import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ ␊ - contract CustomAccountWithSignerP256ERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC721Holder, ERC1155Holder {␊ + contract CustomAccountWithSignerMultisigERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC721Holder, ERC1155Holder {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor()␊ - EIP712("CustomAccount with SignerP256ERC721HolderERC1155Holder", "1")␊ + EIP712("CustomAccount with SignerMultisigERC721HolderERC1155Holder", "1")␊ {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913_init(signers, threshold);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerP256 with ERC7821 Execution upgradeable transparent +## Account with SignerMultisig with ERC7821 Execution upgradeable transparent > Snapshot 1 @@ -4254,17 +4645,32 @@ Generated by [AVA](https://avajs.dev). import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC7821 {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC7821 {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ - }␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913_init(signers, threshold);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ internal␊ @@ -4277,7 +4683,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC7579 upgradeable transparent +## Account with SignerMultisig with ERC7579 upgradeable transparent > Snapshot 1 @@ -4291,18 +4697,21 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913Upgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579_init();␊ - __SignerP256_init(qx, qy);␊ + __MultiSignerERC7913_init(signers, threshold);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -4316,6 +4725,18 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -4327,14 +4748,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ + // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -4342,7 +4763,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC7579 with ERC1271 upgradeable transparent +## Account with SignerMultisig with ERC7579 with ERC1271 upgradeable transparent > Snapshot 1 @@ -4355,18 +4776,33 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, SignerP256Upgradeable {␊ + contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, MultiSignerERC7913Upgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579_init();␊ - __SignerP256_init(qx, qy);␊ + __MultiSignerERC7913_init(signers, threshold);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ @@ -4388,14 +4824,14 @@ Generated by [AVA](https://avajs.dev). return super.isValidSignature(hash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ + // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -4403,7 +4839,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC7579 with ERC7739 upgradeable transparent +## Account with SignerMultisig with ERC7579 with ERC7739 upgradeable transparent > Snapshot 1 @@ -4417,18 +4853,21 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913Upgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579_init();␊ - __SignerP256_init(qx, qy);␊ + __MultiSignerERC7913_init(signers, threshold);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -4442,6 +4881,18 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -4453,14 +4904,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ + // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -4468,7 +4919,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerP256 with ERC7579 hooks upgradeable transparent +## Account with SignerMultisig with ERC7579 hooks upgradeable transparent > Snapshot 1 @@ -4483,18 +4934,21 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, SignerP256Upgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, MultiSignerERC7913Upgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579Hooked_init();␊ - __SignerP256_init(qx, qy);␊ + __MultiSignerERC7913_init(signers, threshold);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -4508,6 +4962,18 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -4519,14 +4985,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ + // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -4534,7 +5000,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerWebAuthn named non-upgradeable +## Account with SignerMultisigWeighted named non-upgradeable > Snapshot 1 @@ -4542,33 +5008,39 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ - import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthn is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn {␊ - constructor(bytes32 qx, bytes32 qy)␊ - EIP712("CustomAccount with SignerWebAuthn", "1")␊ - SignerP256(qx, qy)␊ + contract CustomAccountWithSignerMultisigWeighted is Account, EIP712, ERC7739, MultiSignerERC7913Weighted {␊ + constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + EIP712("CustomAccount with SignerMultisigWeighted", "1")␊ + MultiSignerERC7913Weighted(signers, weights, threshold)␊ {}␊ ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthn, AbstractSigner, SignerP256)␊ - returns (bool)␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ {␊ - return super._rawSignatureValidation(hash, signature);␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerWebAuthn with ERC1271 non-upgradeable +## Account with SignerMultisigWeighted with ERC1271 non-upgradeable > Snapshot 1 @@ -4576,14 +5048,14 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ - import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthnERC1271 is Account, IERC1271, SignerP256, SignerWebAuthn {␊ - constructor(bytes32 qx, bytes32 qy) SignerP256(qx, qy) {}␊ + contract CustomAccountWithSignerMultisigWeightedERC1271 is Account, IERC1271, MultiSignerERC7913Weighted {␊ + constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + MultiSignerERC7913Weighted(signers, weights, threshold)␊ + {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -4594,20 +5066,28 @@ Generated by [AVA](https://avajs.dev). return _rawSignatureValidation(hash, signature) ? IERC1271.isValidSignature.selector : bytes4(0xffffffff);␊ }␊ ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthn, AbstractSigner, SignerP256)␊ - returns (bool)␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ {␊ - return super._rawSignatureValidation(hash, signature);␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerWebAuthn with ERC7739 non-upgradeable +## Account with SignerMultisigWeighted with ERC7739 non-upgradeable > Snapshot 1 @@ -4615,33 +5095,39 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ - import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthnERC7739 is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn {␊ - constructor(bytes32 qx, bytes32 qy)␊ - EIP712("CustomAccount with SignerWebAuthnERC7739", "1")␊ - SignerP256(qx, qy)␊ + contract CustomAccountWithSignerMultisigWeightedERC7739 is Account, EIP712, ERC7739, MultiSignerERC7913Weighted {␊ + constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + EIP712("CustomAccount with SignerMultisigWeightedERC7739", "1")␊ + MultiSignerERC7913Weighted(signers, weights, threshold)␊ {}␊ ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthn, AbstractSigner, SignerP256)␊ - returns (bool)␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ {␊ - return super._rawSignatureValidation(hash, signature);␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerWebAuthn with ERC721Holder non-upgradeable +## Account with SignerMultisigWeighted with ERC721Holder non-upgradeable > Snapshot 1 @@ -4649,34 +5135,40 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ - import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthnERC721Holder is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn, ERC721Holder {␊ - constructor(bytes32 qx, bytes32 qy)␊ - EIP712("CustomAccount with SignerWebAuthnERC721Holder", "1")␊ - SignerP256(qx, qy)␊ + contract CustomAccountWithSignerMultisigWeightedERC721Holder is Account, EIP712, ERC7739, MultiSignerERC7913Weighted, ERC721Holder {␊ + constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + EIP712("CustomAccount with SignerMultisigWeightedERC721Holder", "1")␊ + MultiSignerERC7913Weighted(signers, weights, threshold)␊ {}␊ ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthn, AbstractSigner, SignerP256)␊ - returns (bool)␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ {␊ - return super._rawSignatureValidation(hash, signature);␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerWebAuthn with ERC1155Holder non-upgradeable +## Account with SignerMultisigWeighted with ERC1155Holder non-upgradeable > Snapshot 1 @@ -4684,34 +5176,40 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ - import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthnERC1155Holder is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn, ERC1155Holder {␊ - constructor(bytes32 qx, bytes32 qy)␊ - EIP712("CustomAccount with SignerWebAuthnERC1155Holder", "1")␊ - SignerP256(qx, qy)␊ + contract CustomAccountWithSignerMultisigWeightedERC1155Holder is Account, EIP712, ERC7739, MultiSignerERC7913Weighted, ERC1155Holder {␊ + constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + EIP712("CustomAccount with SignerMultisigWeightedERC1155Holder", "1")␊ + MultiSignerERC7913Weighted(signers, weights, threshold)␊ {}␊ ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthn, AbstractSigner, SignerP256)␊ - returns (bool)␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ {␊ - return super._rawSignatureValidation(hash, signature);␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerWebAuthn with ERC721Holder and ERC1155Holder non-upgradeable +## Account with SignerMultisigWeighted with ERC721Holder and ERC1155Holder non-upgradeable > Snapshot 1 @@ -4719,35 +5217,41 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ - import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthnERC721HolderERC1155Holder is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn, ERC721Holder, ERC1155Holder {␊ - constructor(bytes32 qx, bytes32 qy)␊ - EIP712("CustomAccount with SignerWebAuthnERC721HolderERC1155Holder", "1")␊ - SignerP256(qx, qy)␊ + contract CustomAccountWithSignerMultisigWeightedERC721HolderERC1155Holder is Account, EIP712, ERC7739, MultiSignerERC7913Weighted, ERC721Holder, ERC1155Holder {␊ + constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + EIP712("CustomAccount with SignerMultisigWeightedERC721HolderERC1155Holder", "1")␊ + MultiSignerERC7913Weighted(signers, weights, threshold)␊ {}␊ ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthn, AbstractSigner, SignerP256)␊ - returns (bool)␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ {␊ - return super._rawSignatureValidation(hash, signature);␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerWebAuthn with ERC7821 Execution non-upgradeable +## Account with SignerMultisigWeighted with ERC7821 Execution non-upgradeable > Snapshot 1 @@ -4755,43 +5259,49 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ - import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ + import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn, ERC7821 {␊ - constructor(bytes32 qx, bytes32 qy)␊ + contract MyAccount is Account, EIP712, ERC7739, MultiSignerERC7913Weighted, ERC7821 {␊ + constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ EIP712("MyAccount", "1")␊ - SignerP256(qx, qy)␊ + MultiSignerERC7913Weighted(signers, weights, threshold)␊ {}␊ ␊ - function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ - internal␊ - view␊ - override␊ - returns (bool)␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ {␊ - return caller == address(entryPoint()) || super._erc7821AuthorizedExecutor(caller, mode, executionData);␊ + _setSignerWeights(signers, weights);␊ }␊ ␊ - // The following functions are overrides required by Solidity.␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ + ␊ + function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ internal␊ view␊ - override(SignerWebAuthn, AbstractSigner, SignerP256)␊ + override␊ returns (bool)␊ {␊ - return super._rawSignatureValidation(hash, signature);␊ + return caller == address(entryPoint()) || super._erc7821AuthorizedExecutor(caller, mode, executionData);␊ }␊ }␊ ` -## Account with SignerWebAuthn with ERC7579 non-upgradeable +## Account with SignerMultisigWeighted with ERC7579 non-upgradeable > Snapshot 1 @@ -4804,14 +5314,14 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ + import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ - import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, SignerP256, SignerWebAuthn {␊ - constructor(bytes32 qx, bytes32 qy)␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, MultiSignerERC7913Weighted {␊ + constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ EIP712("MyAccount", "1")␊ - SignerP256(qx, qy)␊ + MultiSignerERC7913Weighted(signers, weights, threshold)␊ {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -4825,6 +5335,25 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -4836,14 +5365,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerWebAuthn is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerWebAuthn)␊ + // IMPORTANT: Make sure SignerMultisigWeighted is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisigWeighted)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerWebAuthn, AbstractSigner, SignerP256, AccountERC7579)␊ + override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -4851,7 +5380,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerWebAuthn with ERC7579 with ERC1271 non-upgradeable +## Account with SignerMultisigWeighted with ERC7579 with ERC1271 non-upgradeable > Snapshot 1 @@ -4863,12 +5392,33 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ + import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ + import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ - import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ ␊ - contract MyAccount is Account, IERC1271, AccountERC7579, SignerP256, SignerWebAuthn {␊ - constructor(bytes32 qx, bytes32 qy) SignerP256(qx, qy) {}␊ + contract MyAccount is Account, IERC1271, AccountERC7579, MultiSignerERC7913Weighted {␊ + constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + MultiSignerERC7913Weighted(signers, weights, threshold)␊ + {}␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -4889,14 +5439,14 @@ Generated by [AVA](https://avajs.dev). return super.isValidSignature(hash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerWebAuthn is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerWebAuthn)␊ + // IMPORTANT: Make sure SignerMultisigWeighted is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisigWeighted)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerWebAuthn, AbstractSigner, SignerP256, AccountERC7579)␊ + override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -4904,7 +5454,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerWebAuthn with ERC7579 with ERC7739 non-upgradeable +## Account with SignerMultisigWeighted with ERC7579 with ERC7739 non-upgradeable > Snapshot 1 @@ -4917,14 +5467,14 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ + import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ - import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, SignerP256, SignerWebAuthn {␊ - constructor(bytes32 qx, bytes32 qy)␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, MultiSignerERC7913Weighted {␊ + constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ EIP712("MyAccount", "1")␊ - SignerP256(qx, qy)␊ + MultiSignerERC7913Weighted(signers, weights, threshold)␊ {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -4939,24 +5489,43 @@ Generated by [AVA](https://avajs.dev). return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ }␊ ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, bytes calldata signature)␊ - internal␊ - override(Account, AccountERC7579)␊ - returns (uint256)␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ {␊ - return super._validateUserOp(userOp, userOpHash, signature);␊ + _setSignerWeights(signers, weights);␊ }␊ ␊ - // IMPORTANT: Make sure SignerWebAuthn is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerWebAuthn)␊ - // to ensure the correct order of function resolution.␊ - // AccountERC7579 returns false for _rawSignatureValidation␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthn, AbstractSigner, SignerP256, AccountERC7579)␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, bytes calldata signature)␊ + internal␊ + override(Account, AccountERC7579)␊ + returns (uint256)␊ + {␊ + return super._validateUserOp(userOp, userOpHash, signature);␊ + }␊ + ␊ + // IMPORTANT: Make sure SignerMultisigWeighted is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisigWeighted)␊ + // to ensure the correct order of function resolution.␊ + // AccountERC7579 returns false for _rawSignatureValidation␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -4964,7 +5533,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerWebAuthn with ERC7579 hooks non-upgradeable +## Account with SignerMultisigWeighted with ERC7579 hooks non-upgradeable > Snapshot 1 @@ -4978,14 +5547,14 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579Hooked} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579Hooked.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ + import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ - import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, AccountERC7579Hooked, SignerP256, SignerWebAuthn {␊ - constructor(bytes32 qx, bytes32 qy)␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579Hooked, MultiSignerERC7913Weighted {␊ + constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ EIP712("MyAccount", "1")␊ - SignerP256(qx, qy)␊ + MultiSignerERC7913Weighted(signers, weights, threshold)␊ {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -4999,6 +5568,25 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -5010,14 +5598,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerWebAuthn is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerWebAuthn)␊ + // IMPORTANT: Make sure SignerMultisigWeighted is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisigWeighted)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerWebAuthn, AbstractSigner, SignerP256, AccountERC7579)␊ + override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -5025,7 +5613,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerWebAuthn named upgradeable uups +## Account with SignerMultisigWeighted named upgradeable uups > Snapshot 1 @@ -5033,24 +5621,43 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthn is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ + contract CustomAccountWithSignerMultisigWeighted is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerWebAuthn", "1") {␊ + constructor() EIP712("CustomAccount with SignerMultisigWeighted", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -5058,21 +5665,10 @@ Generated by [AVA](https://avajs.dev). override␊ onlyEntryPointOrSelf␊ {}␊ - ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ - returns (bool)␊ - {␊ - return super._rawSignatureValidation(hash, signature);␊ - }␊ }␊ ` -## Account with SignerWebAuthn with ERC1271 upgradeable uups +## Account with SignerMultisigWeighted with ERC1271 upgradeable uups > Snapshot 1 @@ -5080,23 +5676,23 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthnERC1271 is Initializable, Account, IERC1271, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ + contract CustomAccountWithSignerMultisigWeightedERC1271 is Initializable, Account, IERC1271, MultiSignerERC7913WeightedUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -5107,27 +5703,35 @@ Generated by [AVA](https://avajs.dev). {␊ return _rawSignatureValidation(hash, signature) ? IERC1271.isValidSignature.selector : bytes4(0xffffffff);␊ }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ internal␊ override␊ onlyEntryPointOrSelf␊ {}␊ - ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ - returns (bool)␊ - {␊ - return super._rawSignatureValidation(hash, signature);␊ - }␊ }␊ ` -## Account with SignerWebAuthn with ERC7739 upgradeable uups +## Account with SignerMultisigWeighted with ERC7739 upgradeable uups > Snapshot 1 @@ -5135,24 +5739,45 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthnERC7739 is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ + contract CustomAccountWithSignerMultisigWeightedERC7739 is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerWebAuthnERC7739", "1") {␊ + constructor()␊ + EIP712("CustomAccount with SignerMultisigWeightedERC7739", "1")␊ + {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -5160,21 +5785,10 @@ Generated by [AVA](https://avajs.dev). override␊ onlyEntryPointOrSelf␊ {}␊ - ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ - returns (bool)␊ - {␊ - return super._rawSignatureValidation(hash, signature);␊ - }␊ }␊ ` -## Account with SignerWebAuthn with ERC721Holder upgradeable uups +## Account with SignerMultisigWeighted with ERC721Holder upgradeable uups > Snapshot 1 @@ -5182,25 +5796,46 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthnERC721Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC721Holder, UUPSUpgradeable {␊ + contract CustomAccountWithSignerMultisigWeightedERC721Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC721Holder, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerWebAuthnERC721Holder", "1") {␊ + constructor()␊ + EIP712("CustomAccount with SignerMultisigWeightedERC721Holder", "1")␊ + {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -5208,21 +5843,10 @@ Generated by [AVA](https://avajs.dev). override␊ onlyEntryPointOrSelf␊ {}␊ - ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ - returns (bool)␊ - {␊ - return super._rawSignatureValidation(hash, signature);␊ - }␊ }␊ ` -## Account with SignerWebAuthn with ERC1155Holder upgradeable uups +## Account with SignerMultisigWeighted with ERC1155Holder upgradeable uups > Snapshot 1 @@ -5230,25 +5854,46 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthnERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC1155Holder, UUPSUpgradeable {␊ + contract CustomAccountWithSignerMultisigWeightedERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC1155Holder, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerWebAuthnERC1155Holder", "1") {␊ + constructor()␊ + EIP712("CustomAccount with SignerMultisigWeightedERC1155Holder", "1")␊ + {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -5256,21 +5901,10 @@ Generated by [AVA](https://avajs.dev). override␊ onlyEntryPointOrSelf␊ {}␊ - ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ - returns (bool)␊ - {␊ - return super._rawSignatureValidation(hash, signature);␊ - }␊ }␊ ` -## Account with SignerWebAuthn with ERC721Holder and ERC1155Holder upgradeable uups +## Account with SignerMultisigWeighted with ERC721Holder and ERC1155Holder upgradeable uups > Snapshot 1 @@ -5278,28 +5912,47 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthnERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC721Holder, ERC1155Holder, UUPSUpgradeable {␊ + contract CustomAccountWithSignerMultisigWeightedERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC721Holder, ERC1155Holder, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor()␊ - EIP712("CustomAccount with SignerWebAuthnERC721HolderERC1155Holder", "1")␊ + EIP712("CustomAccount with SignerMultisigWeightedERC721HolderERC1155Holder", "1")␊ {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -5307,21 +5960,10 @@ Generated by [AVA](https://avajs.dev). override␊ onlyEntryPointOrSelf␊ {}␊ - ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ - returns (bool)␊ - {␊ - return super._rawSignatureValidation(hash, signature);␊ - }␊ }␊ ` -## Account with SignerWebAuthn with ERC7821 Execution upgradeable uups +## Account with SignerMultisigWeighted with ERC7821 Execution upgradeable uups > Snapshot 1 @@ -5329,25 +5971,44 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC7821, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC7821, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ @@ -5364,21 +6025,10 @@ Generated by [AVA](https://avajs.dev). override␊ onlyEntryPointOrSelf␊ {}␊ - ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ - returns (bool)␊ - {␊ - return super._rawSignatureValidation(hash, signature);␊ - }␊ }␊ ` -## Account with SignerWebAuthn with ERC7579 upgradeable uups +## Account with SignerMultisigWeighted with ERC7579 upgradeable uups > Snapshot 1 @@ -5392,21 +6042,23 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913WeightedUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579_init();␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -5420,6 +6072,25 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ internal␊ @@ -5437,14 +6108,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -5452,7 +6123,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerWebAuthn with ERC7579 with ERC1271 upgradeable uups +## Account with SignerMultisigWeighted with ERC7579 with ERC1271 upgradeable uups > Snapshot 1 @@ -5465,21 +6136,42 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, MultiSignerERC7913WeightedUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579_init();␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -5507,14 +6199,14 @@ Generated by [AVA](https://avajs.dev). return super.isValidSignature(hash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -5522,7 +6214,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerWebAuthn with ERC7579 with ERC7739 upgradeable uups +## Account with SignerMultisigWeighted with ERC7579 with ERC7739 upgradeable uups > Snapshot 1 @@ -5536,21 +6228,23 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913WeightedUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579_init();␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -5564,6 +6258,25 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ internal␊ @@ -5581,14 +6294,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -5596,7 +6309,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerWebAuthn with ERC7579 hooks upgradeable uups +## Account with SignerMultisigWeighted with ERC7579 hooks upgradeable uups > Snapshot 1 @@ -5611,21 +6324,23 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, MultiSignerERC7913WeightedUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579Hooked_init();␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -5639,6 +6354,25 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ internal␊ @@ -5656,14 +6390,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -5671,7 +6405,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerWebAuthn named upgradeable transparent +## Account with SignerMultisigWeighted named upgradeable transparent > Snapshot 1 @@ -5679,39 +6413,47 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthn is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ + contract CustomAccountWithSignerMultisigWeighted is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerWebAuthn", "1") {␊ + constructor() EIP712("CustomAccount with SignerMultisigWeighted", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ }␊ ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ - returns (bool)␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ {␊ - return super._rawSignatureValidation(hash, signature);␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerWebAuthn with ERC1271 upgradeable transparent +## Account with SignerMultisigWeighted with ERC1271 upgradeable transparent > Snapshot 1 @@ -5719,22 +6461,22 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthnERC1271 is Initializable, Account, IERC1271, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ + contract CustomAccountWithSignerMultisigWeightedERC1271 is Initializable, Account, IERC1271, MultiSignerERC7913WeightedUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -5746,20 +6488,28 @@ Generated by [AVA](https://avajs.dev). return _rawSignatureValidation(hash, signature) ? IERC1271.isValidSignature.selector : bytes4(0xffffffff);␊ }␊ ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ - returns (bool)␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ {␊ - return super._rawSignatureValidation(hash, signature);␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerWebAuthn with ERC7739 upgradeable transparent +## Account with SignerMultisigWeighted with ERC7739 upgradeable transparent > Snapshot 1 @@ -5767,39 +6517,49 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthnERC7739 is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ + contract CustomAccountWithSignerMultisigWeightedERC7739 is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerWebAuthnERC7739", "1") {␊ + constructor()␊ + EIP712("CustomAccount with SignerMultisigWeightedERC7739", "1")␊ + {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ }␊ ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ - returns (bool)␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ {␊ - return super._rawSignatureValidation(hash, signature);␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerWebAuthn with ERC721Holder upgradeable transparent +## Account with SignerMultisigWeighted with ERC721Holder upgradeable transparent > Snapshot 1 @@ -5807,40 +6567,50 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthnERC721Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC721Holder {␊ + contract CustomAccountWithSignerMultisigWeightedERC721Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC721Holder {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerWebAuthnERC721Holder", "1") {␊ + constructor()␊ + EIP712("CustomAccount with SignerMultisigWeightedERC721Holder", "1")␊ + {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ }␊ ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ - returns (bool)␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ {␊ - return super._rawSignatureValidation(hash, signature);␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerWebAuthn with ERC1155Holder upgradeable transparent +## Account with SignerMultisigWeighted with ERC1155Holder upgradeable transparent > Snapshot 1 @@ -5848,40 +6618,50 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthnERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC1155Holder {␊ + contract CustomAccountWithSignerMultisigWeightedERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC1155Holder {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerWebAuthnERC1155Holder", "1") {␊ + constructor()␊ + EIP712("CustomAccount with SignerMultisigWeightedERC1155Holder", "1")␊ + {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ }␊ ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ - returns (bool)␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ {␊ - return super._rawSignatureValidation(hash, signature);␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerWebAuthn with ERC721Holder and ERC1155Holder upgradeable transparent +## Account with SignerMultisigWeighted with ERC721Holder and ERC1155Holder upgradeable transparent > Snapshot 1 @@ -5889,43 +6669,51 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerWebAuthnERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC721Holder, ERC1155Holder {␊ + contract CustomAccountWithSignerMultisigWeightedERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC721Holder, ERC1155Holder {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor()␊ - EIP712("CustomAccount with SignerWebAuthnERC721HolderERC1155Holder", "1")␊ + EIP712("CustomAccount with SignerMultisigWeightedERC721HolderERC1155Holder", "1")␊ {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ }␊ ␊ - // The following functions are overrides required by Solidity.␊ - ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ - internal␊ - view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ - returns (bool)␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ {␊ - return super._rawSignatureValidation(hash, signature);␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ }␊ ` -## Account with SignerWebAuthn with ERC7821 Execution upgradeable transparent +## Account with SignerMultisigWeighted with ERC7821 Execution upgradeable transparent > Snapshot 1 @@ -5933,49 +6721,57 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ - import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC7821 {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC7821 {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ }␊ ␊ - function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ - internal␊ - view␊ - override␊ - returns (bool)␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ {␊ - return caller == address(entryPoint()) || super._erc7821AuthorizedExecutor(caller, mode, executionData);␊ + _setSignerWeights(signers, weights);␊ }␊ ␊ - // The following functions are overrides required by Solidity.␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ ␊ - function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ + ␊ + function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ internal␊ view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + override␊ returns (bool)␊ {␊ - return super._rawSignatureValidation(hash, signature);␊ + return caller == address(entryPoint()) || super._erc7821AuthorizedExecutor(caller, mode, executionData);␊ }␊ }␊ ` -## Account with SignerWebAuthn with ERC7579 upgradeable transparent +## Account with SignerMultisigWeighted with ERC7579 upgradeable transparent > Snapshot 1 @@ -5989,20 +6785,22 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913WeightedUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579_init();␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -6016,6 +6814,25 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -6027,14 +6844,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -6042,7 +6859,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerWebAuthn with ERC7579 with ERC1271 upgradeable transparent +## Account with SignerMultisigWeighted with ERC7579 with ERC1271 upgradeable transparent > Snapshot 1 @@ -6055,20 +6872,41 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ + contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, MultiSignerERC7913WeightedUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579_init();␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ @@ -6090,14 +6928,14 @@ Generated by [AVA](https://avajs.dev). return super.isValidSignature(hash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -6105,7 +6943,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerWebAuthn with ERC7579 with ERC7739 upgradeable transparent +## Account with SignerMultisigWeighted with ERC7579 with ERC7739 upgradeable transparent > Snapshot 1 @@ -6119,32 +6957,53 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913WeightedUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579_init();␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + }␊ + ␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override(AccountERC7579Upgradeable, ERC7739)␊ + returns (bytes4)␊ + {␊ + // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ + // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ + bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ + return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ + }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ }␊ ␊ - function isValidSignature(bytes32 hash, bytes calldata signature)␊ - public␊ - view␊ - override(AccountERC7579Upgradeable, ERC7739)␊ - returns (bytes4)␊ - {␊ - // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ - // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ - bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ - return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ @@ -6157,14 +7016,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -6172,7 +7031,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerWebAuthn with ERC7579 hooks upgradeable transparent +## Account with SignerMultisigWeighted with ERC7579 hooks upgradeable transparent > Snapshot 1 @@ -6187,20 +7046,22 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ - import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, MultiSignerERC7913WeightedUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + public␊ + initializer␊ + {␊ __AccountERC7579Hooked_init();␊ - __SignerP256_init(qx, qy);␊ - __SignerWebAuthn_init();␊ + __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -6214,6 +7075,25 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ + ␊ + function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ + public␊ + onlyEntryPointOrSelf␊ + {␊ + _setSignerWeights(signers, weights);␊ + }␊ + ␊ + function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _addSigners(signers);␊ + }␊ + ␊ + function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ + _removeSigners(signers);␊ + }␊ + ␊ + function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ + _setThreshold(threshold);␊ + }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -6225,14 +7105,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ + // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ + override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -6240,7 +7120,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA named non-upgradeable +## Account with SignerP256 named non-upgradeable > Snapshot 1 @@ -6251,17 +7131,17 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ - contract CustomAccountWithSignerRSA is Account, EIP712, ERC7739, SignerRSA {␊ - constructor(bytes memory e, bytes memory n)␊ - EIP712("CustomAccount with SignerRSA", "1")␊ - SignerRSA(e, n)␊ + contract CustomAccountWithSignerP256 is Account, EIP712, ERC7739, SignerP256 {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("CustomAccount with SignerP256", "1")␊ + SignerP256(qx, qy)␊ {}␊ }␊ ` -## Account with SignerRSA with ERC1271 non-upgradeable +## Account with SignerP256 with ERC1271 non-upgradeable > Snapshot 1 @@ -6271,10 +7151,10 @@ Generated by [AVA](https://avajs.dev). ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ - contract CustomAccountWithSignerRSAERC1271 is Account, IERC1271, SignerRSA {␊ - constructor(bytes memory e, bytes memory n) SignerRSA(e, n) {}␊ + contract CustomAccountWithSignerP256ERC1271 is Account, IERC1271, SignerP256 {␊ + constructor(bytes32 qx, bytes32 qy) SignerP256(qx, qy) {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -6287,7 +7167,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7739 non-upgradeable +## Account with SignerP256 with ERC7739 non-upgradeable > Snapshot 1 @@ -6298,17 +7178,17 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ - contract CustomAccountWithSignerRSAERC7739 is Account, EIP712, ERC7739, SignerRSA {␊ - constructor(bytes memory e, bytes memory n)␊ - EIP712("CustomAccount with SignerRSAERC7739", "1")␊ - SignerRSA(e, n)␊ + contract CustomAccountWithSignerP256ERC7739 is Account, EIP712, ERC7739, SignerP256 {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("CustomAccount with SignerP256ERC7739", "1")␊ + SignerP256(qx, qy)␊ {}␊ }␊ ` -## Account with SignerRSA with ERC721Holder non-upgradeable +## Account with SignerP256 with ERC721Holder non-upgradeable > Snapshot 1 @@ -6320,17 +7200,17 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ - contract CustomAccountWithSignerRSAERC721Holder is Account, EIP712, ERC7739, SignerRSA, ERC721Holder {␊ - constructor(bytes memory e, bytes memory n)␊ - EIP712("CustomAccount with SignerRSAERC721Holder", "1")␊ - SignerRSA(e, n)␊ + contract CustomAccountWithSignerP256ERC721Holder is Account, EIP712, ERC7739, SignerP256, ERC721Holder {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("CustomAccount with SignerP256ERC721Holder", "1")␊ + SignerP256(qx, qy)␊ {}␊ }␊ ` -## Account with SignerRSA with ERC1155Holder non-upgradeable +## Account with SignerP256 with ERC1155Holder non-upgradeable > Snapshot 1 @@ -6342,17 +7222,17 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ - contract CustomAccountWithSignerRSAERC1155Holder is Account, EIP712, ERC7739, SignerRSA, ERC1155Holder {␊ - constructor(bytes memory e, bytes memory n)␊ - EIP712("CustomAccount with SignerRSAERC1155Holder", "1")␊ - SignerRSA(e, n)␊ + contract CustomAccountWithSignerP256ERC1155Holder is Account, EIP712, ERC7739, SignerP256, ERC1155Holder {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("CustomAccount with SignerP256ERC1155Holder", "1")␊ + SignerP256(qx, qy)␊ {}␊ }␊ ` -## Account with SignerRSA with ERC721Holder and ERC1155Holder non-upgradeable +## Account with SignerP256 with ERC721Holder and ERC1155Holder non-upgradeable > Snapshot 1 @@ -6365,17 +7245,17 @@ Generated by [AVA](https://avajs.dev). import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ - contract CustomAccountWithSignerRSAERC721HolderERC1155Holder is Account, EIP712, ERC7739, SignerRSA, ERC721Holder, ERC1155Holder {␊ - constructor(bytes memory e, bytes memory n)␊ - EIP712("CustomAccount with SignerRSAERC721HolderERC1155Holder", "1")␊ - SignerRSA(e, n)␊ + contract CustomAccountWithSignerP256ERC721HolderERC1155Holder is Account, EIP712, ERC7739, SignerP256, ERC721Holder, ERC1155Holder {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("CustomAccount with SignerP256ERC721HolderERC1155Holder", "1")␊ + SignerP256(qx, qy)␊ {}␊ }␊ ` -## Account with SignerRSA with ERC7821 Execution non-upgradeable +## Account with SignerP256 with ERC7821 Execution non-upgradeable > Snapshot 1 @@ -6387,12 +7267,12 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ - import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, SignerRSA, ERC7821 {␊ - constructor(bytes memory e, bytes memory n)␊ + contract MyAccount is Account, EIP712, ERC7739, SignerP256, ERC7821 {␊ + constructor(bytes32 qx, bytes32 qy)␊ EIP712("MyAccount", "1")␊ - SignerRSA(e, n)␊ + SignerP256(qx, qy)␊ {}␊ ␊ function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ @@ -6406,7 +7286,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7579 non-upgradeable +## Account with SignerP256 with ERC7579 non-upgradeable > Snapshot 1 @@ -6420,12 +7300,12 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, SignerRSA {␊ - constructor(bytes memory e, bytes memory n)␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, SignerP256 {␊ + constructor(bytes32 qx, bytes32 qy)␊ EIP712("MyAccount", "1")␊ - SignerRSA(e, n)␊ + SignerP256(qx, qy)␊ {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -6450,14 +7330,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerRSA is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerRSA)␊ + // IMPORTANT: Make sure SignerP256 is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerP256)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerRSA, AbstractSigner, AccountERC7579)␊ + override(SignerP256, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -6465,7 +7345,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7579 with ERC1271 non-upgradeable +## Account with SignerP256 with ERC7579 with ERC1271 non-upgradeable > Snapshot 1 @@ -6478,10 +7358,10 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ - contract MyAccount is Account, IERC1271, AccountERC7579, SignerRSA {␊ - constructor(bytes memory e, bytes memory n) SignerRSA(e, n) {}␊ + contract MyAccount is Account, IERC1271, AccountERC7579, SignerP256 {␊ + constructor(bytes32 qx, bytes32 qy) SignerP256(qx, qy) {}␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -6502,14 +7382,14 @@ Generated by [AVA](https://avajs.dev). return super.isValidSignature(hash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerRSA is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerRSA)␊ + // IMPORTANT: Make sure SignerP256 is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerP256)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerRSA, AbstractSigner, AccountERC7579)␊ + override(SignerP256, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -6517,7 +7397,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7579 with ERC7739 non-upgradeable +## Account with SignerP256 with ERC7579 with ERC7739 non-upgradeable > Snapshot 1 @@ -6531,12 +7411,12 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, SignerRSA {␊ - constructor(bytes memory e, bytes memory n)␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, SignerP256 {␊ + constructor(bytes32 qx, bytes32 qy)␊ EIP712("MyAccount", "1")␊ - SignerRSA(e, n)␊ + SignerP256(qx, qy)␊ {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -6561,14 +7441,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerRSA is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerRSA)␊ + // IMPORTANT: Make sure SignerP256 is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerP256)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerRSA, AbstractSigner, AccountERC7579)␊ + override(SignerP256, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -6576,7 +7456,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7579 hooks non-upgradeable +## Account with SignerP256 with ERC7579 hooks non-upgradeable > Snapshot 1 @@ -6591,12 +7471,12 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, AccountERC7579Hooked, SignerRSA {␊ - constructor(bytes memory e, bytes memory n)␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579Hooked, SignerP256 {␊ + constructor(bytes32 qx, bytes32 qy)␊ EIP712("MyAccount", "1")␊ - SignerRSA(e, n)␊ + SignerP256(qx, qy)␊ {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -6621,14 +7501,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerRSA is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerRSA)␊ + // IMPORTANT: Make sure SignerP256 is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerP256)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerRSA, AbstractSigner, AccountERC7579)␊ + override(SignerP256, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -6636,7 +7516,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA named upgradeable uups +## Account with SignerP256 named upgradeable uups > Snapshot 1 @@ -6648,17 +7528,17 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerRSA is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, UUPSUpgradeable {␊ + contract CustomAccountWithSignerP256 is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerRSA", "1") {␊ + constructor() EIP712("CustomAccount with SignerP256", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ - __SignerRSA_init(e, n);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -6669,7 +7549,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC1271 upgradeable uups +## Account with SignerP256 with ERC1271 upgradeable uups > Snapshot 1 @@ -6680,17 +7560,17 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerRSAERC1271 is Initializable, Account, IERC1271, SignerRSAUpgradeable, UUPSUpgradeable {␊ + contract CustomAccountWithSignerP256ERC1271 is Initializable, Account, IERC1271, SignerP256Upgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ - __SignerRSA_init(e, n);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -6710,7 +7590,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7739 upgradeable uups +## Account with SignerP256 with ERC7739 upgradeable uups > Snapshot 1 @@ -6722,17 +7602,17 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerRSAERC7739 is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, UUPSUpgradeable {␊ + contract CustomAccountWithSignerP256ERC7739 is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerRSAERC7739", "1") {␊ + constructor() EIP712("CustomAccount with SignerP256ERC7739", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ - __SignerRSA_init(e, n);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -6743,7 +7623,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC721Holder upgradeable uups +## Account with SignerP256 with ERC721Holder upgradeable uups > Snapshot 1 @@ -6756,17 +7636,17 @@ Generated by [AVA](https://avajs.dev). import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerRSAERC721Holder is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC721Holder, UUPSUpgradeable {␊ + contract CustomAccountWithSignerP256ERC721Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC721Holder, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerRSAERC721Holder", "1") {␊ + constructor() EIP712("CustomAccount with SignerP256ERC721Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ - __SignerRSA_init(e, n);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -6777,7 +7657,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC1155Holder upgradeable uups +## Account with SignerP256 with ERC1155Holder upgradeable uups > Snapshot 1 @@ -6790,17 +7670,17 @@ Generated by [AVA](https://avajs.dev). import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerRSAERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC1155Holder, UUPSUpgradeable {␊ + contract CustomAccountWithSignerP256ERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC1155Holder, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerRSAERC1155Holder", "1") {␊ + constructor() EIP712("CustomAccount with SignerP256ERC1155Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ - __SignerRSA_init(e, n);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -6811,7 +7691,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC721Holder and ERC1155Holder upgradeable uups +## Account with SignerP256 with ERC721Holder and ERC1155Holder upgradeable uups > Snapshot 1 @@ -6825,19 +7705,19 @@ Generated by [AVA](https://avajs.dev). import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerRSAERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC721Holder, ERC1155Holder, UUPSUpgradeable {␊ + contract CustomAccountWithSignerP256ERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC721Holder, ERC1155Holder, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor()␊ - EIP712("CustomAccount with SignerRSAERC721HolderERC1155Holder", "1")␊ + EIP712("CustomAccount with SignerP256ERC721HolderERC1155Holder", "1")␊ {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ - __SignerRSA_init(e, n);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -6848,7 +7728,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7821 Execution upgradeable uups +## Account with SignerP256 with ERC7821 Execution upgradeable uups > Snapshot 1 @@ -6861,17 +7741,17 @@ Generated by [AVA](https://avajs.dev). import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC7821, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC7821, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ - __SignerRSA_init(e, n);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ @@ -6891,7 +7771,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7579 upgradeable uups +## Account with SignerP256 with ERC7579 upgradeable uups > Snapshot 1 @@ -6906,18 +7786,18 @@ Generated by [AVA](https://avajs.dev). import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerRSAUpgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579_init();␊ - __SignerRSA_init(e, n);␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -6948,14 +7828,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ + // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -6963,7 +7843,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7579 with ERC1271 upgradeable uups +## Account with SignerP256 with ERC7579 with ERC1271 upgradeable uups > Snapshot 1 @@ -6977,18 +7857,18 @@ Generated by [AVA](https://avajs.dev). import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, SignerRSAUpgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, SignerP256Upgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579_init();␊ - __SignerRSA_init(e, n);␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -7016,14 +7896,14 @@ Generated by [AVA](https://avajs.dev). return super.isValidSignature(hash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ + // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -7031,7 +7911,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7579 with ERC7739 upgradeable uups +## Account with SignerP256 with ERC7579 with ERC7739 upgradeable uups > Snapshot 1 @@ -7046,18 +7926,18 @@ Generated by [AVA](https://avajs.dev). import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerRSAUpgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579_init();␊ - __SignerRSA_init(e, n);␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -7088,14 +7968,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ + // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -7103,7 +7983,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7579 hooks upgradeable uups +## Account with SignerP256 with ERC7579 hooks upgradeable uups > Snapshot 1 @@ -7119,18 +7999,18 @@ Generated by [AVA](https://avajs.dev). import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, SignerRSAUpgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, SignerP256Upgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579Hooked_init();␊ - __SignerRSA_init(e, n);␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -7161,14 +8041,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ + // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -7176,7 +8056,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA named upgradeable transparent +## Account with SignerP256 named upgradeable transparent > Snapshot 1 @@ -7188,21 +8068,21 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ ␊ - contract CustomAccountWithSignerRSA is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable {␊ + contract CustomAccountWithSignerP256 is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerRSA", "1") {␊ + constructor() EIP712("CustomAccount with SignerP256", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ - __SignerRSA_init(e, n);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ }␊ }␊ ` -## Account with SignerRSA with ERC1271 upgradeable transparent +## Account with SignerP256 with ERC1271 upgradeable transparent > Snapshot 1 @@ -7213,16 +8093,16 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ ␊ - contract CustomAccountWithSignerRSAERC1271 is Initializable, Account, IERC1271, SignerRSAUpgradeable {␊ + contract CustomAccountWithSignerP256ERC1271 is Initializable, Account, IERC1271, SignerP256Upgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ - __SignerRSA_init(e, n);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -7236,7 +8116,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7739 upgradeable transparent +## Account with SignerP256 with ERC7739 upgradeable transparent > Snapshot 1 @@ -7248,21 +8128,21 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ ␊ - contract CustomAccountWithSignerRSAERC7739 is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable {␊ + contract CustomAccountWithSignerP256ERC7739 is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerRSAERC7739", "1") {␊ + constructor() EIP712("CustomAccount with SignerP256ERC7739", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ - __SignerRSA_init(e, n);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ }␊ }␊ ` -## Account with SignerRSA with ERC721Holder upgradeable transparent +## Account with SignerP256 with ERC721Holder upgradeable transparent > Snapshot 1 @@ -7275,21 +8155,21 @@ Generated by [AVA](https://avajs.dev). import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ ␊ - contract CustomAccountWithSignerRSAERC721Holder is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC721Holder {␊ + contract CustomAccountWithSignerP256ERC721Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC721Holder {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerRSAERC721Holder", "1") {␊ + constructor() EIP712("CustomAccount with SignerP256ERC721Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ - __SignerRSA_init(e, n);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ }␊ }␊ ` -## Account with SignerRSA with ERC1155Holder upgradeable transparent +## Account with SignerP256 with ERC1155Holder upgradeable transparent > Snapshot 1 @@ -7302,21 +8182,21 @@ Generated by [AVA](https://avajs.dev). import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ ␊ - contract CustomAccountWithSignerRSAERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC1155Holder {␊ + contract CustomAccountWithSignerP256ERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC1155Holder {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerRSAERC1155Holder", "1") {␊ + constructor() EIP712("CustomAccount with SignerP256ERC1155Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ - __SignerRSA_init(e, n);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ }␊ }␊ ` -## Account with SignerRSA with ERC721Holder and ERC1155Holder upgradeable transparent +## Account with SignerP256 with ERC721Holder and ERC1155Holder upgradeable transparent > Snapshot 1 @@ -7330,23 +8210,23 @@ Generated by [AVA](https://avajs.dev). import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ ␊ - contract CustomAccountWithSignerRSAERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC721Holder, ERC1155Holder {␊ + contract CustomAccountWithSignerP256ERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC721Holder, ERC1155Holder {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor()␊ - EIP712("CustomAccount with SignerRSAERC721HolderERC1155Holder", "1")␊ + EIP712("CustomAccount with SignerP256ERC721HolderERC1155Holder", "1")␊ {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ - __SignerRSA_init(e, n);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ }␊ }␊ ` -## Account with SignerRSA with ERC7821 Execution upgradeable transparent +## Account with SignerP256 with ERC7821 Execution upgradeable transparent > Snapshot 1 @@ -7359,16 +8239,16 @@ Generated by [AVA](https://avajs.dev). import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC7821 {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, ERC7821 {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ - __SignerRSA_init(e, n);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ @@ -7382,7 +8262,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7579 upgradeable transparent +## Account with SignerP256 with ERC7579 upgradeable transparent > Snapshot 1 @@ -7397,17 +8277,17 @@ Generated by [AVA](https://avajs.dev). import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerRSAUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579_init();␊ - __SignerRSA_init(e, n);␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -7432,14 +8312,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ + // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -7447,7 +8327,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7579 with ERC1271 upgradeable transparent +## Account with SignerP256 with ERC7579 with ERC1271 upgradeable transparent > Snapshot 1 @@ -7461,17 +8341,17 @@ Generated by [AVA](https://avajs.dev). import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, SignerRSAUpgradeable {␊ + contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, SignerP256Upgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579_init();␊ - __SignerRSA_init(e, n);␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ @@ -7493,14 +8373,14 @@ Generated by [AVA](https://avajs.dev). return super.isValidSignature(hash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ + // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -7508,7 +8388,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7579 with ERC7739 upgradeable transparent +## Account with SignerP256 with ERC7579 with ERC7739 upgradeable transparent > Snapshot 1 @@ -7523,17 +8403,17 @@ Generated by [AVA](https://avajs.dev). import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerRSAUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579_init();␊ - __SignerRSA_init(e, n);␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -7558,14 +8438,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ + // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -7573,7 +8453,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerRSA with ERC7579 hooks upgradeable transparent +## Account with SignerP256 with ERC7579 hooks upgradeable transparent > Snapshot 1 @@ -7589,17 +8469,17 @@ Generated by [AVA](https://avajs.dev). import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ - import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, SignerRSAUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, SignerP256Upgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes memory e, bytes memory n) public initializer {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579Hooked_init();␊ - __SignerRSA_init(e, n);␊ + __SignerP256_init(qx, qy);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -7624,14 +8504,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ + // IMPORTANT: Make sure SignerP256Upgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerP256Upgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerP256Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -7639,7 +8519,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig named non-upgradeable +## Account with SignerRSA named non-upgradeable > Snapshot 1 @@ -7650,29 +8530,17 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ + import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ ␊ - contract CustomAccountWithSignerMultisig is Account, EIP712, ERC7739, MultiSignerERC7913 {␊ - constructor(bytes[] memory signers, uint64 threshold)␊ - EIP712("CustomAccount with SignerMultisig", "1")␊ - MultiSignerERC7913(signers, threshold)␊ + contract CustomAccountWithSignerRSA is Account, EIP712, ERC7739, SignerRSA {␊ + constructor(bytes memory e, bytes memory n)␊ + EIP712("CustomAccount with SignerRSA", "1")␊ + SignerRSA(e, n)␊ {}␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ }␊ ` -## Account with SignerMultisig with ERC1271 non-upgradeable +## Account with SignerRSA with ERC1271 non-upgradeable > Snapshot 1 @@ -7682,12 +8550,10 @@ Generated by [AVA](https://avajs.dev). ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ + import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ ␊ - contract CustomAccountWithSignerMultisigERC1271 is Account, IERC1271, MultiSignerERC7913 {␊ - constructor(bytes[] memory signers, uint64 threshold)␊ - MultiSignerERC7913(signers, threshold)␊ - {}␊ + contract CustomAccountWithSignerRSAERC1271 is Account, IERC1271, SignerRSA {␊ + constructor(bytes memory e, bytes memory n) SignerRSA(e, n) {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -7697,22 +8563,10 @@ Generated by [AVA](https://avajs.dev). {␊ return _rawSignatureValidation(hash, signature) ? IERC1271.isValidSignature.selector : bytes4(0xffffffff);␊ }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ }␊ ` -## Account with SignerMultisig with ERC7739 non-upgradeable +## Account with SignerRSA with ERC7739 non-upgradeable > Snapshot 1 @@ -7723,29 +8577,17 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ + import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ ␊ - contract CustomAccountWithSignerMultisigERC7739 is Account, EIP712, ERC7739, MultiSignerERC7913 {␊ - constructor(bytes[] memory signers, uint64 threshold)␊ - EIP712("CustomAccount with SignerMultisigERC7739", "1")␊ - MultiSignerERC7913(signers, threshold)␊ + contract CustomAccountWithSignerRSAERC7739 is Account, EIP712, ERC7739, SignerRSA {␊ + constructor(bytes memory e, bytes memory n)␊ + EIP712("CustomAccount with SignerRSAERC7739", "1")␊ + SignerRSA(e, n)␊ {}␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ }␊ ` -## Account with SignerMultisig with ERC721Holder non-upgradeable +## Account with SignerRSA with ERC721Holder non-upgradeable > Snapshot 1 @@ -7757,29 +8599,17 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ + import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ ␊ - contract CustomAccountWithSignerMultisigERC721Holder is Account, EIP712, ERC7739, MultiSignerERC7913, ERC721Holder {␊ - constructor(bytes[] memory signers, uint64 threshold)␊ - EIP712("CustomAccount with SignerMultisigERC721Holder", "1")␊ - MultiSignerERC7913(signers, threshold)␊ + contract CustomAccountWithSignerRSAERC721Holder is Account, EIP712, ERC7739, SignerRSA, ERC721Holder {␊ + constructor(bytes memory e, bytes memory n)␊ + EIP712("CustomAccount with SignerRSAERC721Holder", "1")␊ + SignerRSA(e, n)␊ {}␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ }␊ ` -## Account with SignerMultisig with ERC1155Holder non-upgradeable +## Account with SignerRSA with ERC1155Holder non-upgradeable > Snapshot 1 @@ -7791,29 +8621,17 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ + import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ ␊ - contract CustomAccountWithSignerMultisigERC1155Holder is Account, EIP712, ERC7739, MultiSignerERC7913, ERC1155Holder {␊ - constructor(bytes[] memory signers, uint64 threshold)␊ - EIP712("CustomAccount with SignerMultisigERC1155Holder", "1")␊ - MultiSignerERC7913(signers, threshold)␊ + contract CustomAccountWithSignerRSAERC1155Holder is Account, EIP712, ERC7739, SignerRSA, ERC1155Holder {␊ + constructor(bytes memory e, bytes memory n)␊ + EIP712("CustomAccount with SignerRSAERC1155Holder", "1")␊ + SignerRSA(e, n)␊ {}␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ }␊ ` -## Account with SignerMultisig with ERC721Holder and ERC1155Holder non-upgradeable +## Account with SignerRSA with ERC721Holder and ERC1155Holder non-upgradeable > Snapshot 1 @@ -7826,29 +8644,17 @@ Generated by [AVA](https://avajs.dev). import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ + import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ ␊ - contract CustomAccountWithSignerMultisigERC721HolderERC1155Holder is Account, EIP712, ERC7739, MultiSignerERC7913, ERC721Holder, ERC1155Holder {␊ - constructor(bytes[] memory signers, uint64 threshold)␊ - EIP712("CustomAccount with SignerMultisigERC721HolderERC1155Holder", "1")␊ - MultiSignerERC7913(signers, threshold)␊ + contract CustomAccountWithSignerRSAERC721HolderERC1155Holder is Account, EIP712, ERC7739, SignerRSA, ERC721Holder, ERC1155Holder {␊ + constructor(bytes memory e, bytes memory n)␊ + EIP712("CustomAccount with SignerRSAERC721HolderERC1155Holder", "1")␊ + SignerRSA(e, n)␊ {}␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ }␊ ` -## Account with SignerMultisig with ERC7821 Execution non-upgradeable +## Account with SignerRSA with ERC7821 Execution non-upgradeable > Snapshot 1 @@ -7860,25 +8666,13 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ - import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ + import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, MultiSignerERC7913, ERC7821 {␊ - constructor(bytes[] memory signers, uint64 threshold)␊ + contract MyAccount is Account, EIP712, ERC7739, SignerRSA, ERC7821 {␊ + constructor(bytes memory e, bytes memory n)␊ EIP712("MyAccount", "1")␊ - MultiSignerERC7913(signers, threshold)␊ + SignerRSA(e, n)␊ {}␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ internal␊ @@ -7891,7 +8685,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC7579 non-upgradeable +## Account with SignerRSA with ERC7579 non-upgradeable > Snapshot 1 @@ -7904,13 +8698,13 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, MultiSignerERC7913 {␊ - constructor(bytes[] memory signers, uint64 threshold)␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, SignerRSA {␊ + constructor(bytes memory e, bytes memory n)␊ EIP712("MyAccount", "1")␊ - MultiSignerERC7913(signers, threshold)␊ + SignerRSA(e, n)␊ {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -7924,18 +8718,6 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -7947,14 +8729,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisig is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisig)␊ + // IMPORTANT: Make sure SignerRSA is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerRSA)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ + override(SignerRSA, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -7962,7 +8744,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC7579 with ERC1271 non-upgradeable +## Account with SignerRSA with ERC7579 with ERC1271 non-upgradeable > Snapshot 1 @@ -7974,25 +8756,11 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ ␊ - contract MyAccount is Account, IERC1271, AccountERC7579, MultiSignerERC7913 {␊ - constructor(bytes[] memory signers, uint64 threshold)␊ - MultiSignerERC7913(signers, threshold)␊ - {}␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ + contract MyAccount is Account, IERC1271, AccountERC7579, SignerRSA {␊ + constructor(bytes memory e, bytes memory n) SignerRSA(e, n) {}␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -8013,14 +8781,14 @@ Generated by [AVA](https://avajs.dev). return super.isValidSignature(hash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisig is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisig)␊ + // IMPORTANT: Make sure SignerRSA is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerRSA)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ + override(SignerRSA, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -8028,7 +8796,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC7579 with ERC7739 non-upgradeable +## Account with SignerRSA with ERC7579 with ERC7739 non-upgradeable > Snapshot 1 @@ -8041,13 +8809,13 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, MultiSignerERC7913 {␊ - constructor(bytes[] memory signers, uint64 threshold)␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, SignerRSA {␊ + constructor(bytes memory e, bytes memory n)␊ EIP712("MyAccount", "1")␊ - MultiSignerERC7913(signers, threshold)␊ + SignerRSA(e, n)␊ {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -8061,18 +8829,6 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -8084,14 +8840,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisig is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisig)␊ + // IMPORTANT: Make sure SignerRSA is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerRSA)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ + override(SignerRSA, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -8099,7 +8855,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC7579 hooks non-upgradeable +## Account with SignerRSA with ERC7579 hooks non-upgradeable > Snapshot 1 @@ -8113,37 +8869,25 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579Hooked} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579Hooked.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, AccountERC7579Hooked, MultiSignerERC7913 {␊ - constructor(bytes[] memory signers, uint64 threshold)␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579Hooked, SignerRSA {␊ + constructor(bytes memory e, bytes memory n)␊ EIP712("MyAccount", "1")␊ - MultiSignerERC7913(signers, threshold)␊ + SignerRSA(e, n)␊ {}␊ ␊ - function isValidSignature(bytes32 hash, bytes calldata signature)␊ - public␊ - view␊ - override(AccountERC7579, ERC7739)␊ - returns (bytes4)␊ - {␊ - // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ - // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ - bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ - return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override(AccountERC7579, ERC7739)␊ + returns (bytes4)␊ + {␊ + // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ + // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ + bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ + return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ @@ -8156,14 +8900,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisig is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisig)␊ + // IMPORTANT: Make sure SignerRSA is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerRSA)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ + override(SignerRSA, AbstractSigner, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -8171,7 +8915,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig named upgradeable uups +## Account with SignerRSA named upgradeable uups > Snapshot 1 @@ -8183,32 +8927,17 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisig is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, UUPSUpgradeable {␊ + contract CustomAccountWithSignerRSA is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerMultisig", "1") {␊ + constructor() EIP712("CustomAccount with SignerRSA", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913_init(signers, threshold);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -8219,7 +8948,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC1271 upgradeable uups +## Account with SignerRSA with ERC1271 upgradeable uups > Snapshot 1 @@ -8230,20 +8959,17 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigERC1271 is Initializable, Account, IERC1271, MultiSignerERC7913Upgradeable, UUPSUpgradeable {␊ + contract CustomAccountWithSignerRSAERC1271 is Initializable, Account, IERC1271, SignerRSAUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913_init(signers, threshold);␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -8254,18 +8980,6 @@ Generated by [AVA](https://avajs.dev). {␊ return _rawSignatureValidation(hash, signature) ? IERC1271.isValidSignature.selector : bytes4(0xffffffff);␊ }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ internal␊ @@ -8275,7 +8989,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC7739 upgradeable uups +## Account with SignerRSA with ERC7739 upgradeable uups > Snapshot 1 @@ -8287,32 +9001,17 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigERC7739 is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, UUPSUpgradeable {␊ + contract CustomAccountWithSignerRSAERC7739 is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerMultisigERC7739", "1") {␊ + constructor() EIP712("CustomAccount with SignerRSAERC7739", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913_init(signers, threshold);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -8323,7 +9022,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC721Holder upgradeable uups +## Account with SignerRSA with ERC721Holder upgradeable uups > Snapshot 1 @@ -8336,32 +9035,17 @@ Generated by [AVA](https://avajs.dev). import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigERC721Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC721Holder, UUPSUpgradeable {␊ + contract CustomAccountWithSignerRSAERC721Holder is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC721Holder, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerMultisigERC721Holder", "1") {␊ + constructor() EIP712("CustomAccount with SignerRSAERC721Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913_init(signers, threshold);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -8372,7 +9056,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC1155Holder upgradeable uups +## Account with SignerRSA with ERC1155Holder upgradeable uups > Snapshot 1 @@ -8385,32 +9069,17 @@ Generated by [AVA](https://avajs.dev). import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC1155Holder, UUPSUpgradeable {␊ + contract CustomAccountWithSignerRSAERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC1155Holder, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerMultisigERC1155Holder", "1") {␊ + constructor() EIP712("CustomAccount with SignerRSAERC1155Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913_init(signers, threshold);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -8421,7 +9090,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC721Holder and ERC1155Holder upgradeable uups +## Account with SignerRSA with ERC721Holder and ERC1155Holder upgradeable uups > Snapshot 1 @@ -8435,34 +9104,19 @@ Generated by [AVA](https://avajs.dev). import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC721Holder, ERC1155Holder, UUPSUpgradeable {␊ + contract CustomAccountWithSignerRSAERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC721Holder, ERC1155Holder, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor()␊ - EIP712("CustomAccount with SignerMultisigERC721HolderERC1155Holder", "1")␊ + EIP712("CustomAccount with SignerRSAERC721HolderERC1155Holder", "1")␊ {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913_init(signers, threshold);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -8473,7 +9127,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC7821 Execution upgradeable uups +## Account with SignerRSA with ERC7821 Execution upgradeable uups > Snapshot 1 @@ -8486,32 +9140,17 @@ Generated by [AVA](https://avajs.dev). import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC7821, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC7821, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913_init(signers, threshold);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ @@ -8531,7 +9170,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC7579 upgradeable uups +## Account with SignerRSA with ERC7579 upgradeable uups > Snapshot 1 @@ -8545,22 +9184,19 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913Upgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerRSAUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ __AccountERC7579_init();␊ - __MultiSignerERC7913_init(signers, threshold);␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -8574,18 +9210,6 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ internal␊ @@ -8603,14 +9227,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ + // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -8618,7 +9242,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC7579 with ERC1271 upgradeable uups +## Account with SignerRSA with ERC7579 with ERC1271 upgradeable uups > Snapshot 1 @@ -8631,34 +9255,19 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, MultiSignerERC7913Upgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, SignerRSAUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __AccountERC7579_init();␊ - __MultiSignerERC7913_init(signers, threshold);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ + __AccountERC7579_init();␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -8686,14 +9295,14 @@ Generated by [AVA](https://avajs.dev). return super.isValidSignature(hash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ + // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -8701,7 +9310,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC7579 with ERC7739 upgradeable uups +## Account with SignerRSA with ERC7579 with ERC7739 upgradeable uups > Snapshot 1 @@ -8715,22 +9324,19 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913Upgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerRSAUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ __AccountERC7579_init();␊ - __MultiSignerERC7913_init(signers, threshold);␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -8744,18 +9350,6 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ internal␊ @@ -8773,14 +9367,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ + // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -8788,7 +9382,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC7579 hooks upgradeable uups +## Account with SignerRSA with ERC7579 hooks upgradeable uups > Snapshot 1 @@ -8803,22 +9397,19 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, MultiSignerERC7913Upgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, SignerRSAUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ __AccountERC7579Hooked_init();␊ - __MultiSignerERC7913_init(signers, threshold);␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -8832,18 +9423,6 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ internal␊ @@ -8861,14 +9440,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ + // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -8876,7 +9455,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig named upgradeable transparent +## Account with SignerRSA named upgradeable transparent > Snapshot 1 @@ -8888,36 +9467,21 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisig is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable {␊ + contract CustomAccountWithSignerRSA is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerMultisig", "1") {␊ + constructor() EIP712("CustomAccount with SignerRSA", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913_init(signers, threshold);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ + __SignerRSA_init(e, n);␊ }␊ }␊ ` -## Account with SignerMultisig with ERC1271 upgradeable transparent +## Account with SignerRSA with ERC1271 upgradeable transparent > Snapshot 1 @@ -8928,19 +9492,16 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigERC1271 is Initializable, Account, IERC1271, MultiSignerERC7913Upgradeable {␊ + contract CustomAccountWithSignerRSAERC1271 is Initializable, Account, IERC1271, SignerRSAUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913_init(signers, threshold);␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -8951,22 +9512,10 @@ Generated by [AVA](https://avajs.dev). {␊ return _rawSignatureValidation(hash, signature) ? IERC1271.isValidSignature.selector : bytes4(0xffffffff);␊ }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ }␊ ` -## Account with SignerMultisig with ERC7739 upgradeable transparent +## Account with SignerRSA with ERC7739 upgradeable transparent > Snapshot 1 @@ -8978,36 +9527,21 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigERC7739 is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable {␊ + contract CustomAccountWithSignerRSAERC7739 is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerMultisigERC7739", "1") {␊ + constructor() EIP712("CustomAccount with SignerRSAERC7739", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913_init(signers, threshold);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ + __SignerRSA_init(e, n);␊ }␊ }␊ ` -## Account with SignerMultisig with ERC721Holder upgradeable transparent +## Account with SignerRSA with ERC721Holder upgradeable transparent > Snapshot 1 @@ -9020,36 +9554,21 @@ Generated by [AVA](https://avajs.dev). import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigERC721Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC721Holder {␊ + contract CustomAccountWithSignerRSAERC721Holder is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC721Holder {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerMultisigERC721Holder", "1") {␊ + constructor() EIP712("CustomAccount with SignerRSAERC721Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913_init(signers, threshold);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ + __SignerRSA_init(e, n);␊ }␊ }␊ ` -## Account with SignerMultisig with ERC1155Holder upgradeable transparent +## Account with SignerRSA with ERC1155Holder upgradeable transparent > Snapshot 1 @@ -9062,36 +9581,21 @@ Generated by [AVA](https://avajs.dev). import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC1155Holder {␊ + contract CustomAccountWithSignerRSAERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC1155Holder {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerMultisigERC1155Holder", "1") {␊ + constructor() EIP712("CustomAccount with SignerRSAERC1155Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913_init(signers, threshold);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ + __SignerRSA_init(e, n);␊ }␊ }␊ ` -## Account with SignerMultisig with ERC721Holder and ERC1155Holder upgradeable transparent +## Account with SignerRSA with ERC721Holder and ERC1155Holder upgradeable transparent > Snapshot 1 @@ -9105,38 +9609,23 @@ Generated by [AVA](https://avajs.dev). import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC721Holder, ERC1155Holder {␊ + contract CustomAccountWithSignerRSAERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC721Holder, ERC1155Holder {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor()␊ - EIP712("CustomAccount with SignerMultisigERC721HolderERC1155Holder", "1")␊ + EIP712("CustomAccount with SignerRSAERC721HolderERC1155Holder", "1")␊ {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913_init(signers, threshold);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ + __SignerRSA_init(e, n);␊ }␊ }␊ ` -## Account with SignerMultisig with ERC7821 Execution upgradeable transparent +## Account with SignerRSA with ERC7821 Execution upgradeable transparent > Snapshot 1 @@ -9149,31 +9638,16 @@ Generated by [AVA](https://avajs.dev). import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913Upgradeable, ERC7821 {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerRSAUpgradeable, ERC7821 {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913_init(signers, threshold);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ @@ -9187,7 +9661,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC7579 upgradeable transparent +## Account with SignerRSA with ERC7579 upgradeable transparent > Snapshot 1 @@ -9201,21 +9675,18 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913Upgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerRSAUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ __AccountERC7579_init();␊ - __MultiSignerERC7913_init(signers, threshold);␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -9229,18 +9700,6 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -9252,14 +9711,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ + // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -9267,7 +9726,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC7579 with ERC1271 upgradeable transparent +## Account with SignerRSA with ERC7579 with ERC1271 upgradeable transparent > Snapshot 1 @@ -9280,33 +9739,18 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, MultiSignerERC7913Upgradeable {␊ + contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, SignerRSAUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ __AccountERC7579_init();␊ - __MultiSignerERC7913_init(signers, threshold);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + __SignerRSA_init(e, n);␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ @@ -9328,14 +9772,14 @@ Generated by [AVA](https://avajs.dev). return super.isValidSignature(hash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ + // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -9343,7 +9787,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC7579 with ERC7739 upgradeable transparent +## Account with SignerRSA with ERC7579 with ERC7739 upgradeable transparent > Snapshot 1 @@ -9357,21 +9801,18 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913Upgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerRSAUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ __AccountERC7579_init();␊ - __MultiSignerERC7913_init(signers, threshold);␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -9385,18 +9826,6 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -9408,14 +9837,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ + // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -9423,7 +9852,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisig with ERC7579 hooks upgradeable transparent +## Account with SignerRSA with ERC7579 hooks upgradeable transparent > Snapshot 1 @@ -9438,21 +9867,18 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, MultiSignerERC7913Upgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, SignerRSAUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64 threshold)␊ - public␊ - initializer␊ - {␊ + function initialize(bytes memory e, bytes memory n) public initializer {␊ __AccountERC7579Hooked_init();␊ - __MultiSignerERC7913_init(signers, threshold);␊ + __SignerRSA_init(e, n);␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -9466,18 +9892,6 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -9489,14 +9903,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigUpgradeable)␊ + // IMPORTANT: Make sure SignerRSAUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerRSAUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerRSAUpgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -9504,7 +9918,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisigWeighted named non-upgradeable +## Account with SignerWebAuthn named non-upgradeable > Snapshot 1 @@ -9512,39 +9926,33 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeighted is Account, EIP712, ERC7739, MultiSignerERC7913Weighted {␊ - constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - EIP712("CustomAccount with SignerMultisigWeighted", "1")␊ - MultiSignerERC7913Weighted(signers, weights, threshold)␊ + contract CustomAccountWithSignerWebAuthn is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("CustomAccount with SignerWebAuthn", "1")␊ + SignerP256(qx, qy)␊ {}␊ ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ + // The following functions are overrides required by Solidity.␊ ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC1271 non-upgradeable +## Account with SignerWebAuthn with ERC1271 non-upgradeable > Snapshot 1 @@ -9552,14 +9960,14 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeightedERC1271 is Account, IERC1271, MultiSignerERC7913Weighted {␊ - constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - MultiSignerERC7913Weighted(signers, weights, threshold)␊ - {}␊ + contract CustomAccountWithSignerWebAuthnERC1271 is Account, IERC1271, SignerP256, SignerWebAuthn {␊ + constructor(bytes32 qx, bytes32 qy) SignerP256(qx, qy) {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ public␊ @@ -9570,28 +9978,20 @@ Generated by [AVA](https://avajs.dev). return _rawSignatureValidation(hash, signature) ? IERC1271.isValidSignature.selector : bytes4(0xffffffff);␊ }␊ ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ + // The following functions are overrides required by Solidity.␊ ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC7739 non-upgradeable +## Account with SignerWebAuthn with ERC7739 non-upgradeable > Snapshot 1 @@ -9599,39 +9999,33 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeightedERC7739 is Account, EIP712, ERC7739, MultiSignerERC7913Weighted {␊ - constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - EIP712("CustomAccount with SignerMultisigWeightedERC7739", "1")␊ - MultiSignerERC7913Weighted(signers, weights, threshold)␊ + contract CustomAccountWithSignerWebAuthnERC7739 is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("CustomAccount with SignerWebAuthnERC7739", "1")␊ + SignerP256(qx, qy)␊ {}␊ ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ + // The following functions are overrides required by Solidity.␊ ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC721Holder non-upgradeable +## Account with SignerWebAuthn with ERC721Holder non-upgradeable > Snapshot 1 @@ -9639,40 +10033,34 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ - import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ - import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ - ␊ - contract CustomAccountWithSignerMultisigWeightedERC721Holder is Account, EIP712, ERC7739, MultiSignerERC7913Weighted, ERC721Holder {␊ - constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - EIP712("CustomAccount with SignerMultisigWeightedERC721Holder", "1")␊ - MultiSignerERC7913Weighted(signers, weights, threshold)␊ - {}␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ + import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ + contract CustomAccountWithSignerWebAuthnERC721Holder is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn, ERC721Holder {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("CustomAccount with SignerWebAuthnERC721Holder", "1")␊ + SignerP256(qx, qy)␊ + {}␊ ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ + // The following functions are overrides required by Solidity.␊ ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC1155Holder non-upgradeable +## Account with SignerWebAuthn with ERC1155Holder non-upgradeable > Snapshot 1 @@ -9680,40 +10068,34 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeightedERC1155Holder is Account, EIP712, ERC7739, MultiSignerERC7913Weighted, ERC1155Holder {␊ - constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - EIP712("CustomAccount with SignerMultisigWeightedERC1155Holder", "1")␊ - MultiSignerERC7913Weighted(signers, weights, threshold)␊ + contract CustomAccountWithSignerWebAuthnERC1155Holder is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn, ERC1155Holder {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("CustomAccount with SignerWebAuthnERC1155Holder", "1")␊ + SignerP256(qx, qy)␊ {}␊ ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ + // The following functions are overrides required by Solidity.␊ ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC721Holder and ERC1155Holder non-upgradeable +## Account with SignerWebAuthn with ERC721Holder and ERC1155Holder non-upgradeable > Snapshot 1 @@ -9721,41 +10103,35 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeightedERC721HolderERC1155Holder is Account, EIP712, ERC7739, MultiSignerERC7913Weighted, ERC721Holder, ERC1155Holder {␊ - constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - EIP712("CustomAccount with SignerMultisigWeightedERC721HolderERC1155Holder", "1")␊ - MultiSignerERC7913Weighted(signers, weights, threshold)␊ + contract CustomAccountWithSignerWebAuthnERC721HolderERC1155Holder is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn, ERC721Holder, ERC1155Holder {␊ + constructor(bytes32 qx, bytes32 qy)␊ + EIP712("CustomAccount with SignerWebAuthnERC721HolderERC1155Holder", "1")␊ + SignerP256(qx, qy)␊ {}␊ ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ + // The following functions are overrides required by Solidity.␊ ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthn, AbstractSigner, SignerP256)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC7821 Execution non-upgradeable +## Account with SignerWebAuthn with ERC7821 Execution non-upgradeable > Snapshot 1 @@ -9763,49 +10139,43 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ - import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, MultiSignerERC7913Weighted, ERC7821 {␊ - constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + contract MyAccount is Account, EIP712, ERC7739, SignerP256, SignerWebAuthn, ERC7821 {␊ + constructor(bytes32 qx, bytes32 qy)␊ EIP712("MyAccount", "1")␊ - MultiSignerERC7913Weighted(signers, weights, threshold)␊ + SignerP256(qx, qy)␊ {}␊ ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ + function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ + internal␊ + view␊ + override␊ + returns (bool)␊ {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ + return caller == address(entryPoint()) || super._erc7821AuthorizedExecutor(caller, mode, executionData);␊ }␊ ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ + // The following functions are overrides required by Solidity.␊ ␊ - function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override␊ + override(SignerWebAuthn, AbstractSigner, SignerP256)␊ returns (bool)␊ {␊ - return caller == address(entryPoint()) || super._erc7821AuthorizedExecutor(caller, mode, executionData);␊ + return super._rawSignatureValidation(hash, signature);␊ }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC7579 non-upgradeable +## Account with SignerWebAuthn with ERC7579 non-upgradeable > Snapshot 1 @@ -9818,14 +10188,14 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ - import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, MultiSignerERC7913Weighted {␊ - constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, SignerP256, SignerWebAuthn {␊ + constructor(bytes32 qx, bytes32 qy)␊ EIP712("MyAccount", "1")␊ - MultiSignerERC7913Weighted(signers, weights, threshold)␊ + SignerP256(qx, qy)␊ {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -9839,25 +10209,6 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -9869,14 +10220,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigWeighted is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisigWeighted)␊ + // IMPORTANT: Make sure SignerWebAuthn is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerWebAuthn)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ + override(SignerWebAuthn, AbstractSigner, SignerP256, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -9884,7 +10235,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisigWeighted with ERC7579 with ERC1271 non-upgradeable +## Account with SignerWebAuthn with ERC7579 with ERC1271 non-upgradeable > Snapshot 1 @@ -9896,33 +10247,12 @@ Generated by [AVA](https://avajs.dev). import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ - import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ ␊ - contract MyAccount is Account, IERC1271, AccountERC7579, MultiSignerERC7913Weighted {␊ - constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - MultiSignerERC7913Weighted(signers, weights, threshold)␊ - {}␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ + contract MyAccount is Account, IERC1271, AccountERC7579, SignerP256, SignerWebAuthn {␊ + constructor(bytes32 qx, bytes32 qy) SignerP256(qx, qy) {}␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -9943,14 +10273,14 @@ Generated by [AVA](https://avajs.dev). return super.isValidSignature(hash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigWeighted is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisigWeighted)␊ + // IMPORTANT: Make sure SignerWebAuthn is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerWebAuthn)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ + override(SignerWebAuthn, AbstractSigner, SignerP256, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -9958,7 +10288,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisigWeighted with ERC7579 with ERC7739 non-upgradeable +## Account with SignerWebAuthn with ERC7579 with ERC7739 non-upgradeable > Snapshot 1 @@ -9971,45 +10301,26 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ - import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, MultiSignerERC7913Weighted {␊ - constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579, SignerP256, SignerWebAuthn {␊ + constructor(bytes32 qx, bytes32 qy)␊ EIP712("MyAccount", "1")␊ - MultiSignerERC7913Weighted(signers, weights, threshold)␊ - {}␊ - ␊ - function isValidSignature(bytes32 hash, bytes calldata signature)␊ - public␊ - view␊ - override(AccountERC7579, ERC7739)␊ - returns (bytes4)␊ - {␊ - // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ - // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ - bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ - return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ - }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ + SignerP256(qx, qy)␊ + {}␊ ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function isValidSignature(bytes32 hash, bytes calldata signature)␊ + public␊ + view␊ + override(AccountERC7579, ERC7739)␊ + returns (bytes4)␊ + {␊ + // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ + // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ + bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ + return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ @@ -10022,14 +10333,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigWeighted is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisigWeighted)␊ + // IMPORTANT: Make sure SignerWebAuthn is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerWebAuthn)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ + override(SignerWebAuthn, AbstractSigner, SignerP256, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -10037,7 +10348,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisigWeighted with ERC7579 hooks non-upgradeable +## Account with SignerWebAuthn with ERC7579 hooks non-upgradeable > Snapshot 1 @@ -10051,14 +10362,14 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579Hooked} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579Hooked.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ - import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ - import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ + import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ ␊ - contract MyAccount is Account, EIP712, ERC7739, AccountERC7579Hooked, MultiSignerERC7913Weighted {␊ - constructor(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ + contract MyAccount is Account, EIP712, ERC7739, AccountERC7579Hooked, SignerP256, SignerWebAuthn {␊ + constructor(bytes32 qx, bytes32 qy)␊ EIP712("MyAccount", "1")␊ - MultiSignerERC7913Weighted(signers, weights, threshold)␊ + SignerP256(qx, qy)␊ {}␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -10072,25 +10383,6 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579.isValidSignature(hash, signature) : erc7739magic;␊ }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -10102,14 +10394,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigWeighted is most derived than AccountERC7579␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerMultisigWeighted)␊ + // IMPORTANT: Make sure SignerWebAuthn is most derived than AccountERC7579␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579, ..., SignerWebAuthn)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579 returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913, AbstractSigner, AccountERC7579)␊ + override(SignerWebAuthn, AbstractSigner, SignerP256, AccountERC7579)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -10117,7 +10409,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisigWeighted named upgradeable uups +## Account with SignerWebAuthn named upgradeable uups > Snapshot 1 @@ -10125,43 +10417,24 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeighted is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, UUPSUpgradeable {␊ + contract CustomAccountWithSignerWebAuthn is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerMultisigWeighted", "1") {␊ + constructor() EIP712("CustomAccount with SignerWebAuthn", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ - }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -10169,10 +10442,21 @@ Generated by [AVA](https://avajs.dev). override␊ onlyEntryPointOrSelf␊ {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC1271 upgradeable uups +## Account with SignerWebAuthn with ERC1271 upgradeable uups > Snapshot 1 @@ -10180,23 +10464,23 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeightedERC1271 is Initializable, Account, IERC1271, MultiSignerERC7913WeightedUpgradeable, UUPSUpgradeable {␊ + contract CustomAccountWithSignerWebAuthnERC1271 is Initializable, Account, IERC1271, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -10207,35 +10491,27 @@ Generated by [AVA](https://avajs.dev). {␊ return _rawSignatureValidation(hash, signature) ? IERC1271.isValidSignature.selector : bytes4(0xffffffff);␊ }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ internal␊ override␊ onlyEntryPointOrSelf␊ {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC7739 upgradeable uups +## Account with SignerWebAuthn with ERC7739 upgradeable uups > Snapshot 1 @@ -10243,45 +10519,24 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeightedERC7739 is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, UUPSUpgradeable {␊ + contract CustomAccountWithSignerWebAuthnERC7739 is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor()␊ - EIP712("CustomAccount with SignerMultisigWeightedERC7739", "1")␊ - {␊ + constructor() EIP712("CustomAccount with SignerWebAuthnERC7739", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ - }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -10289,10 +10544,21 @@ Generated by [AVA](https://avajs.dev). override␊ onlyEntryPointOrSelf␊ {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC721Holder upgradeable uups +## Account with SignerWebAuthn with ERC721Holder upgradeable uups > Snapshot 1 @@ -10300,46 +10566,25 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeightedERC721Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC721Holder, UUPSUpgradeable {␊ + contract CustomAccountWithSignerWebAuthnERC721Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC721Holder, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor()␊ - EIP712("CustomAccount with SignerMultisigWeightedERC721Holder", "1")␊ - {␊ + constructor() EIP712("CustomAccount with SignerWebAuthnERC721Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ - }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -10347,10 +10592,21 @@ Generated by [AVA](https://avajs.dev). override␊ onlyEntryPointOrSelf␊ {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC1155Holder upgradeable uups +## Account with SignerWebAuthn with ERC1155Holder upgradeable uups > Snapshot 1 @@ -10358,46 +10614,25 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeightedERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC1155Holder, UUPSUpgradeable {␊ + contract CustomAccountWithSignerWebAuthnERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC1155Holder, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor()␊ - EIP712("CustomAccount with SignerMultisigWeightedERC1155Holder", "1")␊ - {␊ + constructor() EIP712("CustomAccount with SignerWebAuthnERC1155Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ - }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -10405,10 +10640,21 @@ Generated by [AVA](https://avajs.dev). override␊ onlyEntryPointOrSelf␊ {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC721Holder and ERC1155Holder upgradeable uups +## Account with SignerWebAuthn with ERC721Holder and ERC1155Holder upgradeable uups > Snapshot 1 @@ -10416,47 +10662,28 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeightedERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC721Holder, ERC1155Holder, UUPSUpgradeable {␊ + contract CustomAccountWithSignerWebAuthnERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC721Holder, ERC1155Holder, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor()␊ - EIP712("CustomAccount with SignerMultisigWeightedERC721HolderERC1155Holder", "1")␊ + EIP712("CustomAccount with SignerWebAuthnERC721HolderERC1155Holder", "1")␊ {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ - }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -10464,10 +10691,21 @@ Generated by [AVA](https://avajs.dev). override␊ onlyEntryPointOrSelf␊ {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC7821 Execution upgradeable uups +## Account with SignerWebAuthn with ERC7821 Execution upgradeable uups > Snapshot 1 @@ -10475,44 +10713,25 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC7821, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC7821, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ - }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ @@ -10529,10 +10748,21 @@ Generated by [AVA](https://avajs.dev). override␊ onlyEntryPointOrSelf␊ {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ + }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC7579 upgradeable uups +## Account with SignerWebAuthn with ERC7579 upgradeable uups > Snapshot 1 @@ -10546,23 +10776,21 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913WeightedUpgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579_init();␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -10576,25 +10804,6 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ internal␊ @@ -10612,14 +10821,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -10627,7 +10836,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisigWeighted with ERC7579 with ERC1271 upgradeable uups +## Account with SignerWebAuthn with ERC7579 with ERC1271 upgradeable uups > Snapshot 1 @@ -10640,42 +10849,21 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, MultiSignerERC7913WeightedUpgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579_init();␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ - }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -10703,14 +10891,14 @@ Generated by [AVA](https://avajs.dev). return super.isValidSignature(hash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -10718,7 +10906,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisigWeighted with ERC7579 with ERC7739 upgradeable uups +## Account with SignerWebAuthn with ERC7579 with ERC7739 upgradeable uups > Snapshot 1 @@ -10732,23 +10920,21 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913WeightedUpgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579_init();␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -10760,26 +10946,7 @@ Generated by [AVA](https://avajs.dev). // ERC-7739 can return the ERC-1271 magic value, 0xffffffff (invalid) or 0x77390001 (detection).␊ // If the returned value is 0xffffffff, fallback to ERC-7579 validation.␊ bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ - return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ - }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ @@ -10798,14 +10965,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -10813,7 +10980,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisigWeighted with ERC7579 hooks upgradeable uups +## Account with SignerWebAuthn with ERC7579 hooks upgradeable uups > Snapshot 1 @@ -10828,23 +10995,21 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, MultiSignerERC7913WeightedUpgradeable, UUPSUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable, UUPSUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579Hooked_init();␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -10858,25 +11023,6 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ function _authorizeUpgrade(address newImplementation)␊ internal␊ @@ -10894,14 +11040,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -10909,7 +11055,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisigWeighted named upgradeable transparent +## Account with SignerWebAuthn named upgradeable transparent > Snapshot 1 @@ -10917,47 +11063,39 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeighted is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable {␊ + contract CustomAccountWithSignerWebAuthn is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor() EIP712("CustomAccount with SignerMultisigWeighted", "1") {␊ + constructor() EIP712("CustomAccount with SignerWebAuthn", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ - }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ + // The following functions are overrides required by Solidity.␊ ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC1271 upgradeable transparent +## Account with SignerWebAuthn with ERC1271 upgradeable transparent > Snapshot 1 @@ -10965,22 +11103,22 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeightedERC1271 is Initializable, Account, IERC1271, MultiSignerERC7913WeightedUpgradeable {␊ + contract CustomAccountWithSignerWebAuthnERC1271 is Initializable, Account, IERC1271, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -10992,28 +11130,20 @@ Generated by [AVA](https://avajs.dev). return _rawSignatureValidation(hash, signature) ? IERC1271.isValidSignature.selector : bytes4(0xffffffff);␊ }␊ ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ + // The following functions are overrides required by Solidity.␊ ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC7739 upgradeable transparent +## Account with SignerWebAuthn with ERC7739 upgradeable transparent > Snapshot 1 @@ -11021,49 +11151,39 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeightedERC7739 is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable {␊ + contract CustomAccountWithSignerWebAuthnERC7739 is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor()␊ - EIP712("CustomAccount with SignerMultisigWeightedERC7739", "1")␊ - {␊ + constructor() EIP712("CustomAccount with SignerWebAuthnERC7739", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ - }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ + // The following functions are overrides required by Solidity.␊ ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC721Holder upgradeable transparent +## Account with SignerWebAuthn with ERC721Holder upgradeable transparent > Snapshot 1 @@ -11071,50 +11191,40 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeightedERC721Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC721Holder {␊ + contract CustomAccountWithSignerWebAuthnERC721Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC721Holder {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor()␊ - EIP712("CustomAccount with SignerMultisigWeightedERC721Holder", "1")␊ - {␊ + constructor() EIP712("CustomAccount with SignerWebAuthnERC721Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ - }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ + // The following functions are overrides required by Solidity.␊ ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC1155Holder upgradeable transparent +## Account with SignerWebAuthn with ERC1155Holder upgradeable transparent > Snapshot 1 @@ -11122,50 +11232,40 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeightedERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC1155Holder {␊ + contract CustomAccountWithSignerWebAuthnERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC1155Holder {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ - constructor()␊ - EIP712("CustomAccount with SignerMultisigWeightedERC1155Holder", "1")␊ - {␊ + constructor() EIP712("CustomAccount with SignerWebAuthnERC1155Holder", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ - }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ + // The following functions are overrides required by Solidity.␊ ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC721Holder and ERC1155Holder upgradeable transparent +## Account with SignerWebAuthn with ERC721Holder and ERC1155Holder upgradeable transparent > Snapshot 1 @@ -11173,51 +11273,43 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";␊ import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ ␊ - contract CustomAccountWithSignerMultisigWeightedERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC721Holder, ERC1155Holder {␊ + contract CustomAccountWithSignerWebAuthnERC721HolderERC1155Holder is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC721Holder, ERC1155Holder {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor()␊ - EIP712("CustomAccount with SignerMultisigWeightedERC721HolderERC1155Holder", "1")␊ + EIP712("CustomAccount with SignerWebAuthnERC721HolderERC1155Holder", "1")␊ {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ - }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ + // The following functions are overrides required by Solidity.␊ ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ + internal␊ + view␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ + returns (bool)␊ + {␊ + return super._rawSignatureValidation(hash, signature);␊ }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC7821 Execution upgradeable transparent +## Account with SignerWebAuthn with ERC7821 Execution upgradeable transparent > Snapshot 1 @@ -11225,57 +11317,49 @@ Generated by [AVA](https://avajs.dev). // Compatible with OpenZeppelin Contracts ^5.5.0␊ pragma solidity ^0.8.27;␊ ␊ + import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {ERC7821} from "@openzeppelin/contracts/account/extensions/draft-ERC7821.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, MultiSignerERC7913WeightedUpgradeable, ERC7821 {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, SignerP256Upgradeable, SignerWebAuthnUpgradeable, ERC7821 {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ + function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ + internal␊ + view␊ + override␊ + returns (bool)␊ {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ + return caller == address(entryPoint()) || super._erc7821AuthorizedExecutor(caller, mode, executionData);␊ }␊ ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ + // The following functions are overrides required by Solidity.␊ ␊ - function _erc7821AuthorizedExecutor(address caller, bytes32 mode, bytes calldata executionData)␊ + function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable)␊ returns (bool)␊ {␊ - return caller == address(entryPoint()) || super._erc7821AuthorizedExecutor(caller, mode, executionData);␊ + return super._rawSignatureValidation(hash, signature);␊ }␊ }␊ ` -## Account with SignerMultisigWeighted with ERC7579 upgradeable transparent +## Account with SignerWebAuthn with ERC7579 upgradeable transparent > Snapshot 1 @@ -11289,22 +11373,20 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913WeightedUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579_init();␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -11318,25 +11400,6 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -11348,14 +11411,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -11363,7 +11426,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisigWeighted with ERC7579 with ERC1271 upgradeable transparent +## Account with SignerWebAuthn with ERC7579 with ERC1271 upgradeable transparent > Snapshot 1 @@ -11376,41 +11439,20 @@ Generated by [AVA](https://avajs.dev). import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, MultiSignerERC7913WeightedUpgradeable {␊ + contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579_init();␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ - }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ // The following functions are overrides required by Solidity.␊ @@ -11432,14 +11474,14 @@ Generated by [AVA](https://avajs.dev). return super.isValidSignature(hash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -11447,7 +11489,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisigWeighted with ERC7579 with ERC7739 upgradeable transparent +## Account with SignerWebAuthn with ERC7579 with ERC7739 upgradeable transparent > Snapshot 1 @@ -11461,22 +11503,20 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, MultiSignerERC7913WeightedUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579Upgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579_init();␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -11490,25 +11530,6 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -11520,14 +11541,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ @@ -11535,7 +11556,7 @@ Generated by [AVA](https://avajs.dev). }␊ ` -## Account with SignerMultisigWeighted with ERC7579 hooks upgradeable transparent +## Account with SignerWebAuthn with ERC7579 hooks upgradeable transparent > Snapshot 1 @@ -11550,22 +11571,20 @@ Generated by [AVA](https://avajs.dev). import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ - import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ - import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ + import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ ␊ - contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, MultiSignerERC7913WeightedUpgradeable {␊ + contract MyAccount is Initializable, Account, EIP712, ERC7739, AccountERC7579HookedUpgradeable, SignerP256Upgradeable, SignerWebAuthnUpgradeable {␊ /// @custom:oz-upgrades-unsafe-allow-reachable constructor␊ constructor() EIP712("MyAccount", "1") {␊ _disableInitializers();␊ }␊ ␊ - function initialize(bytes[] memory signers, uint64[] memory weights, uint64 threshold)␊ - public␊ - initializer␊ - {␊ + function initialize(bytes32 qx, bytes32 qy) public initializer {␊ __AccountERC7579Hooked_init();␊ - __MultiSignerERC7913Weighted_init(signers, weights, threshold);␊ + __SignerP256_init(qx, qy);␊ + __SignerWebAuthn_init();␊ }␊ ␊ function isValidSignature(bytes32 hash, bytes calldata signature)␊ @@ -11579,25 +11598,6 @@ Generated by [AVA](https://avajs.dev). bytes4 erc7739magic = ERC7739.isValidSignature(hash, signature);␊ return erc7739magic == bytes4(0xffffffff) ? AccountERC7579Upgradeable.isValidSignature(hash, signature) : erc7739magic;␊ }␊ - ␊ - function setSignerWeights(bytes[] memory signers, uint64[] memory weights)␊ - public␊ - onlyEntryPointOrSelf␊ - {␊ - _setSignerWeights(signers, weights);␊ - }␊ - ␊ - function addSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _addSigners(signers);␊ - }␊ - ␊ - function removeSigners(bytes[] memory signers) public onlyEntryPointOrSelf {␊ - _removeSigners(signers);␊ - }␊ - ␊ - function setThreshold(uint64 threshold) public onlyEntryPointOrSelf {␊ - _setThreshold(threshold);␊ - }␊ ␊ // The following functions are overrides required by Solidity.␊ ␊ @@ -11609,14 +11609,14 @@ Generated by [AVA](https://avajs.dev). return super._validateUserOp(userOp, userOpHash, signature);␊ }␊ ␊ - // IMPORTANT: Make sure SignerMultisigWeightedUpgradeable is most derived than AccountERC7579Upgradeable␊ - // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerMultisigWeightedUpgradeable)␊ + // IMPORTANT: Make sure SignerWebAuthnUpgradeable is most derived than AccountERC7579Upgradeable␊ + // in the inheritance chain (i.e. contract ... is AccountERC7579Upgradeable, ..., SignerWebAuthnUpgradeable)␊ // to ensure the correct order of function resolution.␊ // AccountERC7579Upgradeable returns false for _rawSignatureValidation␊ function _rawSignatureValidation(bytes32 hash, bytes calldata signature)␊ internal␊ view␊ - override(MultiSignerERC7913Upgradeable, AbstractSigner, AccountERC7579Upgradeable)␊ + override(SignerWebAuthnUpgradeable, AbstractSigner, SignerP256Upgradeable, AccountERC7579Upgradeable)␊ returns (bool)␊ {␊ return super._rawSignatureValidation(hash, signature);␊ diff --git a/packages/core/solidity/src/account.test.ts.snap b/packages/core/solidity/src/account.test.ts.snap index 6c9a9465cb62a9bc20c2f2999bbaaf785dd56b9f..6dcbefd41c6cbc005c9bdf2e0ede75212e05f3b1 100644 GIT binary patch literal 13325 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 HAc6iLhVYAt literal 13340 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 NDgZ+F(P*GS{vR2yyW{`>