From f2ee7d17f22916b0a1417744f61578506767ad8f Mon Sep 17 00:00:00 2001 From: Snezhkko Date: Mon, 8 Sep 2025 21:08:05 +0300 Subject: [PATCH 1/2] docs(account/AccountERC7579): clarify ERC-1271 behavior and no native fallback --- .../account/extensions/draft-AccountERC7579.sol | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/contracts/account/extensions/draft-AccountERC7579.sol b/contracts/account/extensions/draft-AccountERC7579.sol index 12ac9df1747..3e8fca156ad 100644 --- a/contracts/account/extensions/draft-AccountERC7579.sol +++ b/contracts/account/extensions/draft-AccountERC7579.sol @@ -172,8 +172,13 @@ abstract contract AccountERC7579 is Account, IERC1271, IERC7579Execution, IERC75 } /** - * @dev Implement ERC-1271 through IERC7579Validator modules. If module based validation fails, fallback to - * "native" validation by the abstract signer. + * @dev Implements ERC-1271 by delegating validation to installed {IERC7579Validator} modules via + * {IERC7579Validator-isValidSignatureWithSender}. If no installed module validates the signature, this + * function returns `0xffffffff`. + * + * This extension does not perform native/raw signature validation by default. Developers who require + * native/raw validation should either override this function to include it or compose with other + * extensions (e.g. {ERC7739}) and resolve multiple inheritance explicitly. * * NOTE: when combined with {ERC7739}, resolution ordering may have an impact ({ERC7739} does not call super). * Manual resolution might be necessary. @@ -200,6 +205,10 @@ abstract contract AccountERC7579 is Account, IERC1271, IERC7579Execution, IERC75 * if the module specified by the first 20 bytes of the nonce key is installed. Falls back to * {Account-_validateUserOp} otherwise. * + * Note: this contract disables raw signature validation (see {_rawSignatureValidation}), so unless + * overridden or complemented via multiple inheritance, the fallback path to {Account-_validateUserOp} + * will not succeed by itself. + * * See {_extractUserOpValidator} for the module extraction logic. */ function _validateUserOp( From 518a78f4e98af3eb4c3a6861710f36ab70525e2d Mon Sep 17 00:00:00 2001 From: Snezhkko Date: Tue, 9 Sep 2025 14:04:59 +0300 Subject: [PATCH 2/2] Update draft-AccountERC7579.sol --- contracts/account/extensions/draft-AccountERC7579.sol | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/contracts/account/extensions/draft-AccountERC7579.sol b/contracts/account/extensions/draft-AccountERC7579.sol index 3e8fca156ad..1fa849803f2 100644 --- a/contracts/account/extensions/draft-AccountERC7579.sol +++ b/contracts/account/extensions/draft-AccountERC7579.sol @@ -205,9 +205,10 @@ abstract contract AccountERC7579 is Account, IERC1271, IERC7579Execution, IERC75 * if the module specified by the first 20 bytes of the nonce key is installed. Falls back to * {Account-_validateUserOp} otherwise. * - * Note: this contract disables raw signature validation (see {_rawSignatureValidation}), so unless - * overridden or complemented via multiple inheritance, the fallback path to {Account-_validateUserOp} - * will not succeed by itself. + * Note: if no installed validation module is extracted from the user operation, this function + * defers to {Account-_validateUserOp}, which performs a {_rawSignatureValidation} check. This contract + * overrides {_rawSignatureValidation} to always return `false`. Projects that require native/raw + * validation should override {_rawSignatureValidation} or compose with another extension that provides it. * * See {_extractUserOpValidator} for the module extraction logic. */