diff --git a/src/mutability/Mutator.sol b/src/mutability/Mutator.sol index fc4b685..b13085e 100644 --- a/src/mutability/Mutator.sol +++ b/src/mutability/Mutator.sol @@ -45,7 +45,7 @@ contract Mutator is IMutator, Derived, Pausable { /// @notice Upgrades the implementation of a proxy and optionally calls its initializer /// @param implementation New version of contract to be proxied /// @param data Calldata to invoke the instance's initializer - function upgrade(IImplementation implementation, bytes memory data) public payable onlyOwner { + function upgrade(IImplementation implementation, bytes memory data) public onlyOwner { ShortString name = ShortStrings.toShortString(implementation.name()); if (_nameToMutable[name] == IMutable(address(0))) revert MutatorInvalidMutable(); _nameToMutable[name].upgrade(implementation, data); diff --git a/src/mutability/interfaces/IMutator.sol b/src/mutability/interfaces/IMutator.sol index 5af1052..180d31b 100644 --- a/src/mutability/interfaces/IMutator.sol +++ b/src/mutability/interfaces/IMutator.sol @@ -13,5 +13,5 @@ interface IMutator is IOwnable, IPausable { function mutables() external view returns (address[] memory); function create(IImplementation implementation, bytes calldata data) external returns (IMutableTransparent newMutable); - function upgrade( IImplementation implementation, bytes memory data) external payable; + function upgrade( IImplementation implementation, bytes memory data) external; } diff --git a/test/mutability/Mutator.t.sol b/test/mutability/Mutator.t.sol index 9486482..b256daf 100644 --- a/test/mutability/Mutator.t.sol +++ b/test/mutability/Mutator.t.sol @@ -64,6 +64,15 @@ contract MutatorTest is MutableTestV1Deploy { mutator.upgrade(impl2, abi.encode(772)); } + function test_revertsUpgradeWithValue() public { + SampleContractV2 impl2 = new SampleContractV2(201); + + vm.deal(owner, 1); + vm.prank(owner); + (bool success,) = address(mutator).call{value: 1}(abi.encodeCall(mutator.upgrade, (impl2, abi.encode(773)))); + assertFalse(success, "upgrade should reject ETH"); + } + function test_ownerCanPauseAndUnpause() public { vm.startPrank(owner); vm.expectEmit();