From 0ff06b28f165d817bdbc2957bd1b285383a428c8 Mon Sep 17 00:00:00 2001 From: Lecky Lao Date: Wed, 1 Jul 2020 00:07:15 +1000 Subject: [PATCH] added deposit method and test; --- contracts/connectors/curvesbtc.sol | 44 ++++++++++++++++++++++++++++++ test/CurveSBTCProtocol.js | 26 ++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/contracts/connectors/curvesbtc.sol b/contracts/connectors/curvesbtc.sol index 5a802a4..e796188 100644 --- a/contracts/connectors/curvesbtc.sol +++ b/contracts/connectors/curvesbtc.sol @@ -112,4 +112,48 @@ contract CurveSBTCProtocol is CurveSBTCHelpers { emitEvent(_eventCode, _eventParam); } + /** + * @dev Deposit 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 deposit( + address token, + uint amt, + uint unitAmt, + uint getId, + uint setId + ) external payable { + uint256 _amt = getUint(getId, amt); + ERC20 tokenContract = ERC20(token); + + _amt = _amt == uint(-1) ? tokenContract.balanceOf(address(this)) : _amt; + uint[3] memory _amts; + _amts[uint(getTokenI(token))] = _amt; + + tokenContract.approve(getCurveSwapAddr(), _amt); + + uint _amt18 = convertTo18(tokenContract.decimals(), _amt); + uint _slippageAmt = wmul(unitAmt, _amt18); + + ERC20 curveTokenContract = ERC20(getCurveTokenAddr()); + uint initialCurveBal = curveTokenContract.balanceOf(address(this)); + + ICurve(getCurveSwapAddr()).add_liquidity(_amts, _slippageAmt); + + uint finalCurveBal = curveTokenContract.balanceOf(address(this)); + + uint mintAmt = sub(finalCurveBal, initialCurveBal); + + setUint(setId, mintAmt); + + emit LogDeposit(token, _amt, mintAmt, getId, setId); + bytes32 _eventCode = keccak256("LogDeposit(address,uint256,uint256,uint256,uint256)"); + bytes memory _eventParam = abi.encode(token, _amt, mintAmt, getId, setId); + emitEvent(_eventCode, _eventParam); + } + } diff --git a/test/CurveSBTCProtocol.js b/test/CurveSBTCProtocol.js index 63a8771..adb3071 100644 --- a/test/CurveSBTCProtocol.js +++ b/test/CurveSBTCProtocol.js @@ -10,6 +10,7 @@ const CurveSBTCProtocol = artifacts.require('CurveSBTCProtocol'); const erc20 = require("@studydefi/money-legos/erc20"); const uniswap = require("@studydefi/money-legos/uniswap"); const sbtcABI = require("./abi/sbtc.json"); +const erc20ABI = require("./abi/erc20.js"); contract('CurveSBTCProtocol', async accounts => { const [sender, receiver] = accounts; @@ -74,4 +75,29 @@ contract('CurveSBTCProtocol', async accounts => { const sbtcAfter = await sbtcContract.methods.balanceOf(sender).call(); expect(sbtcAfter - sbtcBefore).to.be.at.least(ether("0.09")); }); + + it('can add liquidity for wbtc', async function() { + const curveTokenContract = new web3.eth.Contract( + erc20ABI, + "0x075b1bb99792c9e1041ba13afef80c91a1e70fb3" + ) + + const tx = await contract.deposit( + erc20.wbtc.address, + 10000000, + ( 0.09 / 0.1 * 1e18 ).toString(), + 0, + 0, + { + gas: 4000000, + from: sender + } + ); + console.log(tx); + + const balance = await curveTokenContract.methods.balanceOf(sender); + + expect(balance).to.be.at.least(ether("0.09")); + + }); });