From beabbc564da6504c033fde616c44050a7fc06fe8 Mon Sep 17 00:00:00 2001 From: 0xng Date: Wed, 18 Sep 2024 15:45:31 -0300 Subject: [PATCH] fix: adding sanity check tests to OptimismSuperchainERC20 and fixing error in allowance override --- packages/contracts-bedrock/semver-lock.json | 2 +- .../contracts-bedrock/src/L2/SuperchainERC20.sol | 2 +- .../test/L2/OptimismSuperchainERC20.t.sol | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 86765a45db81..62f3bad15eab 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -116,7 +116,7 @@ "sourceCodeHash": "0x4b806cc85cead74c8df34ab08f4b6c6a95a1a387a335ec8a7cb2de4ea4e1cf41" }, "src/L2/OptimismSuperchainERC20.sol": { - "initCodeHash": "0x362f5ee610df9ba99bf2ae5e6a96abace8ac8eb62d7a3433037525818cf13de0", + "initCodeHash": "0xa812d6c13a02e560864a023f0bc9696065f426aa95b8558e01925b164400d11c", "sourceCodeHash": "0xad3934ea533544b3c130c80be26201354af85f9166cb2ce54d96e5e383ebb5c1" }, "src/L2/OptimismSuperchainERC20Beacon.sol": { diff --git a/packages/contracts-bedrock/src/L2/SuperchainERC20.sol b/packages/contracts-bedrock/src/L2/SuperchainERC20.sol index 2411924638f8..010cf46107ee 100644 --- a/packages/contracts-bedrock/src/L2/SuperchainERC20.sol +++ b/packages/contracts-bedrock/src/L2/SuperchainERC20.sol @@ -97,7 +97,7 @@ abstract contract SuperchainERC20 is ISuperchainERC20Extensions, ISuperchainERC2 /// @return result Allowance for the spender. function allowance(address owner, address spender) public view virtual override returns (uint256 result) { if (spender == PERMIT2()) { - result = type(uint256).max; + return type(uint256).max; } result = super.allowance(owner, spender); } diff --git a/packages/contracts-bedrock/test/L2/OptimismSuperchainERC20.t.sol b/packages/contracts-bedrock/test/L2/OptimismSuperchainERC20.t.sol index b8de1468421b..b4a083185619 100644 --- a/packages/contracts-bedrock/test/L2/OptimismSuperchainERC20.t.sol +++ b/packages/contracts-bedrock/test/L2/OptimismSuperchainERC20.t.sol @@ -351,6 +351,22 @@ contract OptimismSuperchainERC20Test is Test { assertEq(superchainERC20.balanceOf(_to), _toBalanceBefore + _amount); } + function testFuzz_allowance_permit2_max(address _owner) external view { + assertEq(superchainERC20.allowance(_owner, superchainERC20.PERMIT2()), type(uint256).max); + } + + function testFuzz_permit2_transferFrom(address _owner, address _receiver, uint256 _amount) external { + vm.assume(_owner != _receiver); + vm.assume(_owner != ZERO_ADDRESS); + vm.prank(BRIDGE); + superchainERC20.mint(_owner, _amount); + + assertEq(superchainERC20.balanceOf(_receiver), 0); + vm.prank(superchainERC20.PERMIT2()); + superchainERC20.transferFrom(_owner, _receiver, _amount); + assertEq(superchainERC20.balanceOf(_receiver), _amount); + } + /// @notice Tests the `decimals` function always returns the correct value. function testFuzz_decimals_succeeds(uint8 _decimals) public { OptimismSuperchainERC20 _newSuperchainERC20 = _deploySuperchainERC20Proxy(REMOTE_TOKEN, NAME, SYMBOL, _decimals);