From 17e81432f1c7d3c69bc98eb90be317ca373c6d93 Mon Sep 17 00:00:00 2001 From: Noah Khamliche Date: Fri, 13 Aug 2021 17:43:24 -0400 Subject: [PATCH] Fixed PR comments, now onto writing tests --- contracts/zero-ex/contracts/src/IZeroEx.sol | 4 +- ...eryFeature.sol => FundRecoveryFeature.sol} | 68 ++++++++----------- ...ryFeature.sol => IFundRecoveryFeature.sol} | 15 ++-- .../test/features/fund_recovery_tests.ts | 0 4 files changed, 41 insertions(+), 46 deletions(-) rename contracts/zero-ex/contracts/src/features/{EpFundRecoveryFeature.sol => FundRecoveryFeature.sol} (59%) rename contracts/zero-ex/contracts/src/features/interfaces/{IEpFundRecoveryFeature.sol => IFundRecoveryFeature.sol} (63%) create mode 100644 contracts/zero-ex/test/features/fund_recovery_tests.ts diff --git a/contracts/zero-ex/contracts/src/IZeroEx.sol b/contracts/zero-ex/contracts/src/IZeroEx.sol index 20a53ad474..e97b9aa7a7 100644 --- a/contracts/zero-ex/contracts/src/IZeroEx.sol +++ b/contracts/zero-ex/contracts/src/IZeroEx.sol @@ -33,7 +33,7 @@ import "./features/interfaces/INativeOrdersFeature.sol"; import "./features/interfaces/IBatchFillNativeOrdersFeature.sol"; import "./features/interfaces/IMultiplexFeature.sol"; import "./features/interfaces/IOtcOrdersFeature.sol"; -import "./features/interfaces/IEpFundRecoveryFeature.sol"; +import "./features/interfaces/IFundRecoveryFeature.sol"; /// @dev Interface for a fully featured Exchange Proxy. @@ -50,7 +50,7 @@ interface IZeroEx is IBatchFillNativeOrdersFeature, IMultiplexFeature, IOtcOrdersFeature, - IEpFundRecoveryFeature + IFundRecoveryFeature { // solhint-disable state-visibility diff --git a/contracts/zero-ex/contracts/src/features/EpFundRecoveryFeature.sol b/contracts/zero-ex/contracts/src/features/FundRecoveryFeature.sol similarity index 59% rename from contracts/zero-ex/contracts/src/features/EpFundRecoveryFeature.sol rename to contracts/zero-ex/contracts/src/features/FundRecoveryFeature.sol index 1153089d1d..0bbeaa336a 100644 --- a/contracts/zero-ex/contracts/src/features/EpFundRecoveryFeature.sol +++ b/contracts/zero-ex/contracts/src/features/FundRecoveryFeature.sol @@ -16,55 +16,24 @@ pragma solidity ^0.6.5; pragma experimental ABIEncoderV2; import "@0x/contracts-erc20/contracts/src/v06/IERC20TokenV06.sol"; -import "@0x/contracts-erc20/contracts/src/v06/IEtherTokenV06.sol"; -import "../vendor/IUniswapV3Pool.sol"; import "../migrations/LibMigrate.sol"; import "../fixins/FixinCommon.sol"; -import "../fixins/FixinTokenSpender.sol"; import "./interfaces/IFeature.sol"; -import "./interfaces/IEpFundRecoveryFeature.sol"; +import "./interfaces/IFundRecoveryFeature.sol"; import "../transformers/LibERC20Transformer.sol"; -contract EpFundRecoveryFeature is +contract FundRecoveryFeature is IFeature, - IEpFundRecoveryFeature, - FixinCommon, - FixinTokenSpender + IFundRecoveryFeature, + FixinCommon { /// @dev Name of this feature. - string public constant override FEATURE_NAME = "EpFundRecoveryFeature"; + string public constant override FEATURE_NAME = "FundRecoveryFeature"; /// @dev Version of this feature. uint256 public immutable override FEATURE_VERSION = _encodeVersion(1, 0, 0); - /// @dev Deployed exchange proxy address. - address private immutable ZEROEX_EP_ADDRESS; /// @dev Construct this contract. - /// @param exchangeProxy Exchange Proxy contract address - constructor(address exchangeProxy) public { - ZEROEX_EP_ADDRESS = exchangeProxy; - } - - // solhint-enable state-visibility - /// @dev recovers WETH from the 0x Exchange Proxy contract - function recoverToDesignatedWallet( - IERC20TokenV06 erc20, - uint256 amountOut, - address payable designatedWallet - ) - external - override - { - if(amountOut == uint256(-1)) { - amountOut = erc20.balanceOf(ZEROEX_EP_ADDRESS); - } - if(LibERC20Transformer.isTokenETH(erc20)) - { - payable(designatedWallet).transfer(amountOut); - } - else{ - erc20.transferFrom(ZEROEX_EP_ADDRESS,designatedWallet,amountOut); - } - } + constructor() public {} /// @dev Initialize and register this feature. /// Should be delegatecalled by `Migrate.migrate()`. @@ -73,8 +42,29 @@ contract EpFundRecoveryFeature is external returns (bytes4 success) { - //_registerFeatureFunction(this.sellEthForTokenToUniswapV3.selector); - _registerFeatureFunction(this.recoverToDesignatedWallet.selector); + _registerFeatureFunction(this.transferTrappedTokensTo.selector); return LibMigrate.MIGRATE_SUCCESS; } + + // solhint-enable state-visibility + /// @dev recovers WETH from the 0x Exchange Proxy contract + /// @param erc20 ERC20 Token Address. + /// @param amountOut Amount of tokens to withdraw. + /// @param recipientWallet Recipient wallet address. + function transferTrappedTokensTo( + IERC20TokenV06 erc20, + uint256 amountOut, + address payable recipientWallet + ) + external + override + onlyOwner + { + if(amountOut == uint256(-1)) { + amountOut = LibERC20Transformer.getTokenBalanceOf(erc20, address(this)); + } + LibERC20Transformer.transformerTransfer(erc20, recipientWallet, amountOut); + } + + } \ No newline at end of file diff --git a/contracts/zero-ex/contracts/src/features/interfaces/IEpFundRecoveryFeature.sol b/contracts/zero-ex/contracts/src/features/interfaces/IFundRecoveryFeature.sol similarity index 63% rename from contracts/zero-ex/contracts/src/features/interfaces/IEpFundRecoveryFeature.sol rename to contracts/zero-ex/contracts/src/features/interfaces/IFundRecoveryFeature.sol index 3af8ce2f2d..c21076a4ad 100644 --- a/contracts/zero-ex/contracts/src/features/interfaces/IEpFundRecoveryFeature.sol +++ b/contracts/zero-ex/contracts/src/features/interfaces/IFundRecoveryFeature.sol @@ -18,13 +18,18 @@ pragma experimental ABIEncoderV2; import "@0x/contracts-erc20/contracts/src/v06/IERC20TokenV06.sol"; -/// @dev VIP Exchange Proxy Recovery Functions -interface IEpFundRecoveryFeature { - - function recoverToDesignatedWallet( +/// @dev Exchange Proxy Recovery Functions +interface IFundRecoveryFeature { + + /// @dev calledFrom FundRecoveryFeature.transferTrappedTokensTo() This will be delegatecalled + /// in the context of the Exchange Proxy instance being used. + /// @param erc20 ERC20 Token Address. + /// @param amountOut Amount of tokens to withdraw. + /// @param recipientWallet Recipient wallet address. + function transferTrappedTokensTo( IERC20TokenV06 erc20, uint256 amountOut, - address payable designatedWallet + address payable recipientWallet ) external; } \ No newline at end of file diff --git a/contracts/zero-ex/test/features/fund_recovery_tests.ts b/contracts/zero-ex/test/features/fund_recovery_tests.ts new file mode 100644 index 0000000000..e69de29bb2