updated quickswap

This commit is contained in:
pradyuman-verma 2021-12-15 00:00:07 +05:30
parent 95ed18984f
commit 3b4e272090
2 changed files with 103 additions and 73 deletions

View File

@ -15,74 +15,80 @@ contract Helpers is DSMath, Basic {
ISushiSwapFactory immutable factory = ISushiSwapFactory immutable factory =
ISushiSwapFactory(0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac); ISushiSwapFactory(0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac);
function _deposit(uint256 _pid, uint256 _amount, uint256 _version) internal { struct Metadata {
if(_version == 2) uint256 poolId;
masterChefV2.deposit(_pid, _amount, address(this)); uint256 version;
address lpToken;
}
function _deposit(Metadata memory data, uint256 _amount) internal {
if(data.version == 2)
masterChefV2.deposit(data.poolId, _amount, address(this));
else else
masterChef.deposit(_pid, _amount); masterChef.deposit(data.poolId, _amount);
} }
function _withdraw(uint256 _pid, uint256 _amount, uint256 _version) internal { function _withdraw(Metadata memory data, uint256 _amount) internal {
if(_version == 2) if(data.version == 2)
masterChefV2.withdraw(_pid, _amount, address(this)); masterChefV2.withdraw(data.poolId, _amount, address(this));
else else
masterChef.withdraw(_pid, _amount); masterChef.withdraw(data.poolId, _amount);
} }
function _harvest(uint256 _pid) internal { function _harvest(Metadata memory data) internal {
masterChefV2.harvest(_pid, address(this)); masterChefV2.harvest(data.poolId, address(this));
} }
function _withdrawAndHarvest(uint256 _pid, uint256 _amount, uint256 _version) internal { function _withdrawAndHarvest(Metadata memory data, uint256 _amount) internal {
if(_version == 2) if(data.version == 2)
masterChefV2.withdrawAndHarvest(_pid, _amount, address(this)); masterChefV2.withdrawAndHarvest(data.poolId, _amount, address(this));
else _withdraw(_pid, _amount, _version); else _withdraw(data, _amount);
} }
function _emergencyWithdraw(uint256 _pid, uint256 _version) internal { function _emergencyWithdraw(Metadata memory data) internal {
if(_version == 2) if(data.version == 2)
masterChefV2.emergencyWithdraw(_pid, address(this)); masterChefV2.emergencyWithdraw(data.poolId, address(this));
else else
masterChef.emergencyWithdraw(_pid, address(this)); masterChef.emergencyWithdraw(data.poolId, address(this));
} }
function _getPoolId(address tokenA, address tokenB) function _getPoolId(address tokenA, address tokenB)
internal internal
view view
returns (uint256 poolId, uint256 version, address lpToken) returns (Metadata memory data)
{ {
address pair = factory.getPair(tokenA, tokenB); address pair = factory.getPair(tokenA, tokenB);
uint256 length = masterChefV2.poolLength(); uint256 length = masterChefV2.poolLength();
version = 2; data.version = 2;
poolId = uint256(-1); data.poolId = uint256(-1);
for (uint256 i = 0; i < length; i++) { for (uint256 i = 0; i < length; i++) {
lpToken = masterChefV2.lpToken(i); data.lpToken = masterChefV2.lpToken(i);
if (pair == lpToken) { if (pair == data.lpToken) {
poolId = i; data.poolId = i;
break; break;
} }
} }
uint256 lengthV1 = masterChef.poolLength(); uint256 lengthV1 = masterChef.poolLength();
for (uint256 i = 0; i < lengthV1; i++) { for (uint256 i = 0; i < lengthV1; i++) {
(lpToken, , , ) = masterChef.poolInfo(i); (data.lpToken, , , ) = masterChef.poolInfo(i);
if (pair == lpToken) { if (pair == data.lpToken) {
poolId = i; data.poolId = i;
version = 1; data.version = 1;
break; break;
} }
} }
} }
function _getUserInfo(uint256 _pid, uint256 _version) function _getUserInfo(Metadata memory data)
internal internal
view view
returns (uint256 lpAmount, uint256 rewardsAmount) returns (uint256 lpAmount, uint256 rewardsAmount)
{ {
if(_version == 2) if(data.version == 2)
(lpAmount, rewardsAmount) = masterChefV2.userInfo(_pid, address(this)); (lpAmount, rewardsAmount) = masterChefV2.userInfo(data.poolId, address(this));
else else
(lpAmount, rewardsAmount) = masterChef.userInfo(_pid, address(this)); (lpAmount, rewardsAmount) = masterChef.userInfo(data.poolId, address(this));
} }
} }

View File

@ -25,7 +25,8 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events {
address token2, address token2,
uint256 amount, uint256 amount,
uint256 getId, uint256 getId,
uint256 setId uint256 setId,
Metadata memory data
) )
external external
payable payable
@ -34,17 +35,19 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events {
token1 = changeEthAddrToWethAddr(token1); token1 = changeEthAddrToWethAddr(token1);
token2 = changeEthAddrToWethAddr(token2); token2 = changeEthAddrToWethAddr(token2);
amount = getUint(getId, amount); amount = getUint(getId, amount);
(uint256 _pid, uint256 _version, address lpTokenAddr) = _getPoolId( if(data.poolId == uint256(-1)|| data.version < 0 || data.lpToken == address(0)){
data = _getPoolId(
token1, token1,
token2 token2
); );
setUint(setId, _pid); }
require(_pid != uint256(-1), "pool-does-not-exist"); setUint(setId, data.poolId);
TokenInterface lpToken = TokenInterface(lpTokenAddr); require(data.poolId != uint256(-1), "pool-does-not-exist");
TokenInterface lpToken = TokenInterface(data.lpToken);
lpToken.approve(address(masterChef), amount); lpToken.approve(address(masterChef), amount);
_deposit(_pid, amount, _version); _deposit(data, amount);
_eventName = "LogDeposit(uint256,uint256,uint256)"; _eventName = "LogDeposit(uint256,uint256,uint256)";
_eventParam = abi.encode(_pid, _version, amount); _eventParam = abi.encode(data.poolId, data.version, amount);
} }
/** /**
@ -61,7 +64,8 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events {
address token2, address token2,
uint256 amount, uint256 amount,
uint256 getId, uint256 getId,
uint256 setId uint256 setId,
Metadata memory data
) )
external external
payable payable
@ -70,12 +74,17 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events {
token1 = changeEthAddrToWethAddr(token1); token1 = changeEthAddrToWethAddr(token1);
token2 = changeEthAddrToWethAddr(token2); token2 = changeEthAddrToWethAddr(token2);
amount = getUint(getId, amount); amount = getUint(getId, amount);
(uint256 _pid, uint256 _version, ) = _getPoolId(token1, token2); if(data.poolId == uint256(-1)|| data.version < 0){
setUint(setId, _pid); data = _getPoolId(
require(_pid != uint256(-1), "pool-does-not-exist"); token1,
_withdraw(_pid, amount, _version); token2
);
}
setUint(setId, data.poolId);
require(data.poolId != uint256(-1), "pool-does-not-exist");
_withdraw(data, amount);
_eventName = "LogWithdraw(uint256,uint256,uint256)"; _eventName = "LogWithdraw(uint256,uint256,uint256)";
_eventParam = abi.encode(_pid, _version, amount); _eventParam = abi.encode(data.poolId, data.version, amount);
} }
/** /**
@ -88,7 +97,8 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events {
function harvest( function harvest(
address token1, address token1,
address token2, address token2,
uint256 setId uint256 setId,
Metadata memory data
) )
external external
payable payable
@ -96,14 +106,19 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events {
{ {
token1 = changeEthAddrToWethAddr(token1); token1 = changeEthAddrToWethAddr(token1);
token2 = changeEthAddrToWethAddr(token2); token2 = changeEthAddrToWethAddr(token2);
(uint256 _pid, uint256 _version, ) = _getPoolId(token1, token2); if(data.poolId == uint256(-1)|| data.version < 0 ){
setUint(setId, _pid); data = _getPoolId(
require(_pid != uint256(-1), "pool-does-not-exist"); token1,
(, uint256 rewardsAmount) = _getUserInfo(_pid, _version); token2
if (_version == 2) _harvest(_pid); );
else _withdraw(_pid, 0, _version); }
setUint(setId, data.poolId);
require(data.poolId != uint256(-1), "pool-does-not-exist");
(, uint256 rewardsAmount) = _getUserInfo(data);
if (data.version == 2) _harvest(data);
else _withdraw(data, 0);
_eventName = "LogHarvest(uint256,uint256,uint256)"; _eventName = "LogHarvest(uint256,uint256,uint256)";
_eventParam = abi.encode(_pid, _version, rewardsAmount); _eventParam = abi.encode(data.poolId, data.version, rewardsAmount);
} }
/** /**
@ -120,7 +135,8 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events {
address token2, address token2,
uint256 amount, uint256 amount,
uint256 getId, uint256 getId,
uint256 setId uint256 setId,
Metadata memory data
) )
external external
payable payable
@ -129,13 +145,18 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events {
token1 = changeEthAddrToWethAddr(token1); token1 = changeEthAddrToWethAddr(token1);
token2 = changeEthAddrToWethAddr(token2); token2 = changeEthAddrToWethAddr(token2);
amount = getUint(getId, amount); amount = getUint(getId, amount);
(uint256 _pid, uint256 _version, ) = _getPoolId(token1, token2); if(data.poolId == uint256(-1)|| data.version < 0){
setUint(setId, _pid); data = _getPoolId(
require(_pid != uint256(-1), "pool-does-not-exist"); token1,
(, uint256 rewardsAmount) = _getUserInfo(_pid, _version); token2
_withdrawAndHarvest(_pid, amount, _version); );
}
setUint(setId, data.poolId);
require(data.poolId != uint256(-1), "pool-does-not-exist");
(, uint256 rewardsAmount) = _getUserInfo(data);
_withdrawAndHarvest(data, amount);
_eventName = "LogWithdrawAndHarvest(uint256,uint256,uint256,uint256)"; _eventName = "LogWithdrawAndHarvest(uint256,uint256,uint256,uint256)";
_eventParam = abi.encode(_pid, _version, amount, rewardsAmount); _eventParam = abi.encode(data.poolId, data.version, amount, rewardsAmount);
} }
/** /**
@ -148,7 +169,8 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events {
function emergencyWithdraw( function emergencyWithdraw(
address token1, address token1,
address token2, address token2,
uint256 setId uint256 setId,
Metadata memory data
) )
external external
payable payable
@ -156,16 +178,18 @@ abstract contract SushipswapIncentiveResolver is Helpers, Events {
{ {
token1 = changeEthAddrToWethAddr(token1); token1 = changeEthAddrToWethAddr(token1);
token2 = changeEthAddrToWethAddr(token2); token2 = changeEthAddrToWethAddr(token2);
(uint256 _pid, uint256 _version, ) = _getPoolId(token1, token2); if(data.poolId == uint256(-1)|| data.version < 0 ){
setUint(setId, _pid); data = _getPoolId(
require(_pid != uint256(-1), "pool-does-not-exist"); token1,
(uint256 lpAmount, uint256 rewardsAmount) = _getUserInfo( token2
_pid,
_version
); );
_emergencyWithdraw(_pid, _version); }
setUint(setId, data.poolId);
require(data.poolId != uint256(-1), "pool-does-not-exist");
(uint256 lpAmount, uint256 rewardsAmount) = _getUserInfo(data);
_emergencyWithdraw(data);
_eventName = "LogEmergencyWithdraw(uint256,uint256,uint256,uint256)"; _eventName = "LogEmergencyWithdraw(uint256,uint256,uint256,uint256)";
_eventParam = abi.encode(_pid, _version, lpAmount, rewardsAmount); _eventParam = abi.encode(data.poolId, data.version, lpAmount, rewardsAmount);
} }
} }