diff --git a/contracts/mainnet/common/basic.sol b/contracts/mainnet/common/basic.sol index febeb784..c0650dfb 100644 --- a/contracts/mainnet/common/basic.sol +++ b/contracts/mainnet/common/basic.sol @@ -41,6 +41,10 @@ abstract contract Basic is DSMath, Stores { _sell = sell == ethAddr ? TokenInterface(wethAddr) : TokenInterface(sell); } + function changeEthAddrToWethAddr(address token) internal pure returns(address tokenAddr){ + tokenAddr = token == ethAddr ? wethAddr : token; + } + function convertEthToWeth(bool isEth, TokenInterface token, uint amount) internal { if(isEth) token.deposit{value: amount}(); } diff --git a/contracts/mainnet/connectors/sushi-incentive/events.sol b/contracts/mainnet/connectors/sushi-incentive/events.sol index ebf68ebd..aa1c890d 100644 --- a/contracts/mainnet/connectors/sushi-incentive/events.sol +++ b/contracts/mainnet/connectors/sushi-incentive/events.sol @@ -2,32 +2,27 @@ pragma solidity ^0.7.0; contract Events { event LogDeposit( - address indexed user, uint256 indexed pid, uint256 indexed version, uint256 amount ); event LogWithdraw( - address indexed user, uint256 indexed pid, uint256 indexed version, uint256 amount ); event LogEmergencyWithdraw( - address indexed user, uint256 indexed pid, uint256 indexed version, uint256 lpAmount, uint256 rewardsAmount ); event LogHarvest( - address indexed user, uint256 indexed pid, uint256 indexed version, uint256 amount ); event LogWithdrawAndHarvest( - address indexed user, uint256 indexed pid, uint256 indexed version, uint256 widrawAmount, diff --git a/contracts/mainnet/connectors/sushi-incentive/interface.sol b/contracts/mainnet/connectors/sushi-incentive/interface.sol index 865ec361..ba3b1c6c 100644 --- a/contracts/mainnet/connectors/sushi-incentive/interface.sol +++ b/contracts/mainnet/connectors/sushi-incentive/interface.sol @@ -1,6 +1,5 @@ pragma solidity ^0.7.0; pragma experimental ABIEncoderV2; -import "./libraries/IERC20.sol"; struct UserInfo { uint256 amount; @@ -14,6 +13,30 @@ struct PoolInfo { uint256 accSushiPerShare; // Accumulated SUSHIs per share, times 1e12. See below. } +interface IERC20 { + function totalSupply() external view returns (uint256); + + function balanceOf(address account) external view returns (uint256); + + function allowance(address owner, address spender) external view returns (uint256); + + function approve(address spender, uint256 amount) external returns (bool); + + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed owner, address indexed spender, uint256 value); + + /// @notice EIP 2612 + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) external; +} + interface IMasterChef { function poolLength() external view returns (uint256); diff --git a/contracts/mainnet/connectors/sushi-incentive/main.sol b/contracts/mainnet/connectors/sushi-incentive/main.sol index a60e6940..cc448434 100644 --- a/contracts/mainnet/connectors/sushi-incentive/main.sol +++ b/contracts/mainnet/connectors/sushi-incentive/main.sol @@ -13,6 +13,7 @@ import {Events} from "./events.sol"; abstract contract SushipswapIncentiveResolver is Helpers, Events { /** * @dev deposit LP token to masterChef + * @notice deposit LP token to masterChef * @param token1 token1 of LP token * @param token2 token2 of LP token * @param amount amount of LP token @@ -25,7 +26,13 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events { uint256 amount, uint256 getId, uint256 setId - ) external { + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + token1 = changeEthAddrToWethAddr(token1); + token2 = changeEthAddrToWethAddr(token2); amount = getUint(getId, amount); (uint256 _pid, uint256 _version, address lpTokenAddr) = _getPoolId( token1, @@ -36,11 +43,13 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events { TokenInterface lpToken = TokenInterface(lpTokenAddr); lpToken.approve(address(masterChef), amount); _deposit(_pid, amount, _version); - emit LogDeposit(address(this), _pid, _version, amount); + _eventName = "LogDeposit(uint256,uint256,uint256)"; + _eventParam = abi.encode(_pid, _version, amount); } /** * @dev withdraw LP token from masterChef + * @notice withdraw LP token from masterChef * @param token1 token1 of LP token * @param token2 token2 of LP token * @param amount amount of LP token @@ -53,17 +62,25 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events { uint256 amount, uint256 getId, uint256 setId - ) external { + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + token1 = changeEthAddrToWethAddr(token1); + token2 = changeEthAddrToWethAddr(token2); amount = getUint(getId, amount); (uint256 _pid, uint256 _version, ) = _getPoolId(token1, token2); setUint(setId, _pid); require(_pid != uint256(-1), "pool-does-not-exist"); _withdraw(_pid, amount, _version); - emit LogWithdraw(address(this), _pid, _version, amount); + _eventName = "LogWithdraw(uint256,uint256,uint256)"; + _eventParam = abi.encode(_pid, _version, amount); } /** * @dev harvest from masterChef + * @notice harvest from masterChef * @param token1 token1 deposited of LP token * @param token2 token2 deposited LP token * @param setId ID stores Pool ID @@ -72,18 +89,26 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events { address token1, address token2, uint256 setId - ) external { + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + token1 = changeEthAddrToWethAddr(token1); + token2 = changeEthAddrToWethAddr(token2); (uint256 _pid, uint256 _version, ) = _getPoolId(token1, token2); setUint(setId, _pid); require(_pid != uint256(-1), "pool-does-not-exist"); (, uint256 rewardsAmount) = _getUserInfo(_pid, _version); if (_version == 2) _harvest(_pid); else _withdraw(_pid, 0, _version); - emit LogHarvest(address(this), _pid, _version, rewardsAmount); + _eventName = "LogHarvest(uint256,uint256,uint256)"; + _eventParam = abi.encode(_pid, _version, rewardsAmount); } /** * @dev withdraw LP token and harvest from masterChef + * @notice withdraw LP token and harvest from masterChef * @param token1 token1 of LP token * @param token2 token2 of LP token * @param amount amount of LP token @@ -96,24 +121,26 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events { uint256 amount, uint256 getId, uint256 setId - ) external { + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + token1 = changeEthAddrToWethAddr(token1); + token2 = changeEthAddrToWethAddr(token2); amount = getUint(getId, amount); (uint256 _pid, uint256 _version, ) = _getPoolId(token1, token2); setUint(setId, _pid); require(_pid != uint256(-1), "pool-does-not-exist"); (, uint256 rewardsAmount) = _getUserInfo(_pid, _version); _withdrawAndHarvest(_pid, amount, _version); - emit LogWithdrawAndHarvest( - address(this), - _pid, - _version, - amount, - rewardsAmount - ); + _eventName = "LogWithdrawAndHarvest(uint256,uint256,uint256,uint256)"; + _eventParam = abi.encode(_pid, _version, amount, rewardsAmount); } /** * @dev emergency withdraw from masterChef + * @notice emergency withdraw from masterChef * @param token1 token1 deposited of LP token * @param token2 token2 deposited LP token * @param setId ID stores Pool ID @@ -122,7 +149,13 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events { address token1, address token2, uint256 setId - ) external { + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + token1 = changeEthAddrToWethAddr(token1); + token2 = changeEthAddrToWethAddr(token2); (uint256 _pid, uint256 _version, ) = _getPoolId(token1, token2); setUint(setId, _pid); require(_pid != uint256(-1), "pool-does-not-exist"); @@ -131,13 +164,8 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events { _version ); _emergencyWithdraw(_pid, _version); - emit LogEmergencyWithdraw( - address(this), - _pid, - _version, - lpAmount, - rewardsAmount - ); + _eventName = "LogEmergencyWithdraw(uint256,uint256,uint256,uint256)"; + _eventParam = abi.encode(_pid, _version, lpAmount, rewardsAmount); } }