mirror of
https://github.com/Instadapp/dsa-connectors-old.git
synced 2024-07-29 22:47:46 +00:00
added method withdraw and test;
This commit is contained in:
parent
0ff06b28f1
commit
a24ee929fd
|
@ -156,4 +156,52 @@ contract CurveSBTCProtocol is CurveSBTCHelpers {
|
|||
emitEvent(_eventCode, _eventParam);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Withdraw Token.
|
||||
* @param token token address.
|
||||
* @param amt token amount.
|
||||
* @param unitAmt unit amount of curve_amt/token_amt with slippage.
|
||||
* @param getId Get token amount at this ID from `InstaMemory` Contract.
|
||||
* @param setId Set token amount at this ID in `InstaMemory` Contract.
|
||||
*/
|
||||
function withdraw(
|
||||
address token,
|
||||
uint256 amt,
|
||||
uint256 unitAmt,
|
||||
uint getId,
|
||||
uint setId
|
||||
) external payable {
|
||||
uint _amt = getUint(getId, amt);
|
||||
int128 tokenId = getTokenI(token);
|
||||
|
||||
ERC20 curveTokenContract = ERC20(getCurveTokenAddr());
|
||||
ICurve curveSwap = ICurve(getCurveSwapAddr());
|
||||
|
||||
uint _curveAmt;
|
||||
uint[3] memory _amts;
|
||||
if (_amt == uint(-1)) {
|
||||
_curveAmt = curveTokenContract.balanceOf(address(this));
|
||||
_amt = curveSwap.calc_withdraw_one_coin(_curveAmt, tokenId);
|
||||
_amts[uint(tokenId)] = _amt;
|
||||
} else {
|
||||
_amts[uint(tokenId)] = _amt;
|
||||
_curveAmt = curveSwap.calc_token_amount(_amts, false);
|
||||
}
|
||||
|
||||
uint _amt18 = convertTo18(ERC20(token).decimals(), _amt);
|
||||
uint _slippageAmt = wmul(unitAmt, _amt18);
|
||||
|
||||
curveTokenContract.approve(address(curveSwap), 0);
|
||||
curveTokenContract.approve(address(curveSwap), _slippageAmt);
|
||||
|
||||
curveSwap.remove_liquidity_imbalance(_amts, _slippageAmt);
|
||||
|
||||
setUint(setId, _amt);
|
||||
|
||||
emit LogWithdraw(token, _amt, _curveAmt, getId, setId);
|
||||
bytes32 _eventCode = keccak256("LogWithdraw(address,uint256,uint256,uint256,uint256)");
|
||||
bytes memory _eventParam = abi.encode(token, _amt, _curveAmt, getId, setId);
|
||||
emitEvent(_eventCode, _eventParam);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -82,7 +82,7 @@ contract('CurveSBTCProtocol', async accounts => {
|
|||
"0x075b1bb99792c9e1041ba13afef80c91a1e70fb3"
|
||||
)
|
||||
|
||||
const tx = await contract.deposit(
|
||||
const txDeposit = await contract.deposit(
|
||||
erc20.wbtc.address,
|
||||
10000000,
|
||||
( 0.09 / 0.1 * 1e18 ).toString(),
|
||||
|
@ -93,11 +93,28 @@ contract('CurveSBTCProtocol', async accounts => {
|
|||
from: sender
|
||||
}
|
||||
);
|
||||
console.log(tx);
|
||||
console.log(txDeposit);
|
||||
|
||||
const balance = await curveTokenContract.methods.balanceOf(sender);
|
||||
const balanceDeposit = await curveTokenContract.methods.balanceOf(sender);
|
||||
|
||||
expect(balance).to.be.at.least(ether("0.09"));
|
||||
expect(balanceDeposit).to.be.at.least(ether("0.09"));
|
||||
|
||||
const txWithdraw = await contract.withdraw(
|
||||
erc20.wbtc.address,
|
||||
10000000,
|
||||
( 0.09 / 0.1 * 1e18 ).toString(),
|
||||
0,
|
||||
0,
|
||||
{
|
||||
gas: 4000000,
|
||||
from: sender
|
||||
}
|
||||
);
|
||||
console.log(txWithdraw);
|
||||
|
||||
const balanceWithdraw = await curveTokenContract.methods.balanceOf(sender);
|
||||
|
||||
expect(balanceWithdraw).to.equal(0);
|
||||
});
|
||||
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue
Block a user