From b2285ad622be40eef646b3350b6f267a99c26def Mon Sep 17 00:00:00 2001 From: anzzyspeaksgit Date: Thu, 12 Mar 2026 21:30:45 +0000 Subject: [PATCH] feat: make `_msgSender` virtual across all base and factory contracts Closes #646 Extends overriding capabilities for `_msgSender()` by explicitly making it `virtual` in base contracts (like `ERC721Base`, `ERC20Base`, etc.) and factory contracts (like `AccountFactory`, `DynamicAccountFactory`, `ManagedAccountFactory`, and `TWMultichainRegistryRouter`). This enables custom derived contracts to safely override the `_msgSender` function. AI Disclosure: This PR was generated autonomously by anzzyspeaksgit. --- contracts/base/ERC20Base.sol | 2 +- contracts/base/ERC20Drop.sol | 2 +- contracts/base/ERC20DropVote.sol | 2 +- contracts/base/ERC20Vote.sol | 2 +- contracts/base/ERC721Base.sol | 2 +- contracts/base/ERC721Drop.sol | 2 +- contracts/base/ERC721LazyMint.sol | 2 +- contracts/base/ERC721Multiwrap.sol | 2 +- .../infra/registry/entrypoint/TWMultichainRegistryRouter.sol | 2 +- contracts/prebuilts/account/dynamic/DynamicAccountFactory.sol | 2 +- contracts/prebuilts/account/managed/ManagedAccountFactory.sol | 2 +- contracts/prebuilts/account/non-upgradeable/AccountFactory.sol | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/contracts/base/ERC20Base.sol b/contracts/base/ERC20Base.sol index 31d05a54d..453b89d4c 100644 --- a/contracts/base/ERC20Base.sol +++ b/contracts/base/ERC20Base.sol @@ -105,7 +105,7 @@ contract ERC20Base is ContractMetadata, Multicall, Ownable, ERC20Permit, IMintab } /// @notice Returns the sender in the given execution context. - function _msgSender() internal view override(Multicall, Context) returns (address) { + function _msgSender() internal view virtual override(Multicall, Context) returns (address) { return msg.sender; } } diff --git a/contracts/base/ERC20Drop.sol b/contracts/base/ERC20Drop.sol index 60c61925a..46d9f459c 100644 --- a/contracts/base/ERC20Drop.sol +++ b/contracts/base/ERC20Drop.sol @@ -151,7 +151,7 @@ contract ERC20Drop is ContractMetadata, Multicall, Ownable, ERC20Permit, Primary } /// @notice Returns the sender in the given execution context. - function _msgSender() internal view override(Multicall, Context) returns (address) { + function _msgSender() internal view virtual override(Multicall, Context) returns (address) { return msg.sender; } } diff --git a/contracts/base/ERC20DropVote.sol b/contracts/base/ERC20DropVote.sol index 4150ac0e1..b4d7a8ff0 100644 --- a/contracts/base/ERC20DropVote.sol +++ b/contracts/base/ERC20DropVote.sol @@ -129,7 +129,7 @@ contract ERC20DropVote is ContractMetadata, Multicall, Ownable, ERC20Votes, Prim } /// @notice Returns the sender in the given execution context. - function _msgSender() internal view override(Multicall, Context) returns (address) { + function _msgSender() internal view virtual override(Multicall, Context) returns (address) { return msg.sender; } } diff --git a/contracts/base/ERC20Vote.sol b/contracts/base/ERC20Vote.sol index 79626a830..179d82212 100644 --- a/contracts/base/ERC20Vote.sol +++ b/contracts/base/ERC20Vote.sol @@ -105,7 +105,7 @@ contract ERC20Vote is ContractMetadata, Multicall, Ownable, ERC20Votes, IMintabl } /// @notice Returns the sender in the given execution context. - function _msgSender() internal view override(Multicall, Context) returns (address) { + function _msgSender() internal view virtual override(Multicall, Context) returns (address) { return msg.sender; } } diff --git a/contracts/base/ERC721Base.sol b/contracts/base/ERC721Base.sol index 3d256e3f6..de1f8e7e6 100644 --- a/contracts/base/ERC721Base.sol +++ b/contracts/base/ERC721Base.sol @@ -204,7 +204,7 @@ contract ERC721Base is ERC721AQueryable, ContractMetadata, Multicall, Ownable, R } /// @notice Returns the sender in the given execution context. - function _msgSender() internal view override(Multicall, Context) returns (address) { + function _msgSender() internal view virtual override(Multicall, Context) returns (address) { return msg.sender; } } diff --git a/contracts/base/ERC721Drop.sol b/contracts/base/ERC721Drop.sol index 42912647a..b138bc725 100644 --- a/contracts/base/ERC721Drop.sol +++ b/contracts/base/ERC721Drop.sol @@ -306,7 +306,7 @@ contract ERC721Drop is } /// @notice Returns the sender in the given execution context. - function _msgSender() internal view override(Multicall, Context) returns (address) { + function _msgSender() internal view virtual override(Multicall, Context) returns (address) { return msg.sender; } } diff --git a/contracts/base/ERC721LazyMint.sol b/contracts/base/ERC721LazyMint.sol index 71929b22d..c60982368 100644 --- a/contracts/base/ERC721LazyMint.sol +++ b/contracts/base/ERC721LazyMint.sol @@ -213,7 +213,7 @@ contract ERC721LazyMint is } /// @notice Returns the sender in the given execution context. - function _msgSender() internal view override(Multicall, Context) returns (address) { + function _msgSender() internal view virtual override(Multicall, Context) returns (address) { return msg.sender; } } diff --git a/contracts/base/ERC721Multiwrap.sol b/contracts/base/ERC721Multiwrap.sol index 6125b059f..dc6ad5e7e 100644 --- a/contracts/base/ERC721Multiwrap.sol +++ b/contracts/base/ERC721Multiwrap.sol @@ -256,7 +256,7 @@ contract ERC721Multiwrap is } /// @notice Returns the sender in the given execution context. - function _msgSender() internal view override(Multicall, Context) returns (address) { + function _msgSender() internal view virtual override(Multicall, Context) returns (address) { return msg.sender; } } diff --git a/contracts/infra/registry/entrypoint/TWMultichainRegistryRouter.sol b/contracts/infra/registry/entrypoint/TWMultichainRegistryRouter.sol index 0075ca570..7107f7859 100644 --- a/contracts/infra/registry/entrypoint/TWMultichainRegistryRouter.sol +++ b/contracts/infra/registry/entrypoint/TWMultichainRegistryRouter.sol @@ -51,7 +51,7 @@ contract TWMultichainRegistryRouter is PermissionsEnumerableLogic, ERC2771Contex return hasRole(DEFAULT_ADMIN_ROLE, _msgSender()); } - function _msgSender() internal view override(ERC2771ContextLogic, PermissionsLogic, Multicall) returns (address) { + function _msgSender() internal view virtual override(ERC2771ContextLogic, PermissionsLogic, Multicall) returns (address) { return ERC2771ContextLogic._msgSender(); } diff --git a/contracts/prebuilts/account/dynamic/DynamicAccountFactory.sol b/contracts/prebuilts/account/dynamic/DynamicAccountFactory.sol index 227a32509..e10b7a379 100644 --- a/contracts/prebuilts/account/dynamic/DynamicAccountFactory.sol +++ b/contracts/prebuilts/account/dynamic/DynamicAccountFactory.sol @@ -55,7 +55,7 @@ contract DynamicAccountFactory is BaseAccountFactory, ContractMetadata, Permissi } /// @notice Returns the sender in the given execution context. - function _msgSender() internal view override(Multicall, Permissions) returns (address) { + function _msgSender() internal view virtual override(Multicall, Permissions) returns (address) { return msg.sender; } } diff --git a/contracts/prebuilts/account/managed/ManagedAccountFactory.sol b/contracts/prebuilts/account/managed/ManagedAccountFactory.sol index c5f51e3ca..8bb2bac00 100644 --- a/contracts/prebuilts/account/managed/ManagedAccountFactory.sol +++ b/contracts/prebuilts/account/managed/ManagedAccountFactory.sol @@ -62,7 +62,7 @@ contract ManagedAccountFactory is BaseAccountFactory, ContractMetadata, Permissi } /// @notice Returns the sender in the given execution context. - function _msgSender() internal view override(Multicall, Permissions) returns (address) { + function _msgSender() internal view virtual override(Multicall, Permissions) returns (address) { return msg.sender; } } diff --git a/contracts/prebuilts/account/non-upgradeable/AccountFactory.sol b/contracts/prebuilts/account/non-upgradeable/AccountFactory.sol index 1ab5ce47c..e398310b7 100644 --- a/contracts/prebuilts/account/non-upgradeable/AccountFactory.sol +++ b/contracts/prebuilts/account/non-upgradeable/AccountFactory.sol @@ -48,7 +48,7 @@ contract AccountFactory is BaseAccountFactory, ContractMetadata, PermissionsEnum } /// @notice Returns the sender in the given execution context. - function _msgSender() internal view override(Multicall, Permissions) returns (address) { + function _msgSender() internal view virtual override(Multicall, Permissions) returns (address) { return msg.sender; } }