mirror of
				https://github.com/Instadapp/dsa-connectors-old.git
				synced 2024-07-29 22:47:46 +00:00 
			
		
		
		
	 becd0135aa
			
		
	
	
		becd0135aa
		
	
	
	
	
		
			
			fixing import for SafeERC20 and IERC20; set up constructor for synthetix connector to set address for staking contract; created MockSynthetix.sol for test; added nomiclabs/buidler; fixed test for SynthetixProtocol.js; adding .gitatributes to highlight solidity on GitHub; adding buidler artefacts and cache to git ignore; adding buidler.config.js;
		
			
				
	
	
		
			195 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const {
 | |
|   BN,           // Big Number support
 | |
|   expectEvent,  // Assertions for emitted events
 | |
|   expectRevert, // Assertions for transactions that should fail
 | |
|   balance,
 | |
|   ether
 | |
| } = require('@openzeppelin/test-helpers');
 | |
| 
 | |
| const ConnectSBTCCurve = artifacts.require('ConnectSBTCCurve');
 | |
| 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");
 | |
| const connectorsABI = require("./abi/connectors.json");
 | |
| const accountABI = require("./abi/account.json");
 | |
| const curveSwap = require("./abi/curveSwap.json");
 | |
| 
 | |
| contract('ConnectSBTCCurve', async accounts => {
 | |
|   const [sender, receiver] =  accounts;
 | |
|   let masterAddress = "0xfcd22438ad6ed564a1c26151df73f6b33b817b56";
 | |
|   let accountID = 7;
 | |
|   let dsrAddr = "0xEEB007bea2Bbb0cA6502217E8867f8f7b021B8D5";
 | |
| 
 | |
|   let connectorsAddr = "0xD6A602C01a023B98Ecfb29Df02FBA380d3B21E0c";
 | |
|   let connectorInstance = new web3.eth.Contract(connectorsABI, connectorsAddr);
 | |
| 
 | |
|   // let accountAddr = "0x939Daad09fC4A9B8f8A9352A485DAb2df4F4B3F8";
 | |
|   let accountInstance = new web3.eth.Contract(accountABI, dsrAddr);
 | |
|   let connectSBTCCurve;
 | |
|   let wbtcContract = new web3.eth.Contract(erc20.wbtc.abi, erc20.wbtc.address);
 | |
| 
 | |
|   before(async function () {
 | |
|     connectSBTCCurve = await ConnectSBTCCurve.deployed();
 | |
| 
 | |
|     let uniswapFactory = new web3.eth.Contract(
 | |
|       uniswap.factory.abi,
 | |
|       uniswap.factory.address
 | |
|     );
 | |
| 
 | |
|     const wbtcExchangeAddress = await uniswapFactory.methods.getExchange(
 | |
|       erc20.wbtc.address,
 | |
|     ).call();
 | |
| 
 | |
|     const wbtcExchange = new web3.eth.Contract(
 | |
|       uniswap.exchange.abi,
 | |
|       wbtcExchangeAddress
 | |
|     );
 | |
| 
 | |
|     const wbtcBefore = await wbtcContract.methods.balanceOf(sender).call();
 | |
|     console.log("Sender WBTC Before: ", wbtcBefore.toString());
 | |
| 
 | |
|     const balanceBefore = await web3.eth.getBalance(sender);
 | |
|     console.log("Sender Balance Before: ", balanceBefore.toString());
 | |
| 
 | |
|     await wbtcExchange.methods.ethToTokenSwapInput(
 | |
|       1, // min amount of token retrieved
 | |
|       2525644800, // random timestamp in the future (year 2050)
 | |
|     ).send(
 | |
|       {
 | |
|         gas: 4000000,
 | |
|         value: ether("10"),
 | |
|         from: sender
 | |
|       }
 | |
|     );
 | |
| 
 | |
|     let wbtcAfter = await wbtcContract.methods.balanceOf(sender).call();
 | |
|     console.log("Sender WBTC After: ", wbtcAfter.toString());
 | |
|     const balanceAfter = await web3.eth.getBalance(sender);
 | |
|     console.log("Sender Balance After: ", balanceAfter.toString());
 | |
| 
 | |
|     expect(wbtcAfter - wbtcBefore).to.be.at.least(10000000);
 | |
| 
 | |
|     // send WBTC to master
 | |
|     await wbtcContract.methods.transfer(dsrAddr, 10000000).send({from: sender});
 | |
|     // send WBTC to connector
 | |
|     // await wbtcContract.methods.transfer(connectSBTCCurve.address, 10000000).send({from: sender});
 | |
| 
 | |
|     // Send ETH to master
 | |
|     await web3.eth.sendTransaction({from: sender, to: masterAddress, value: ether("5")});
 | |
| 
 | |
|     // Enable the the given connector address
 | |
|     await connectorInstance.methods.enable(connectSBTCCurve.address).send({from: masterAddress});
 | |
|     // check if the give connector address is enabled.
 | |
|     let isEnabled = await connectorInstance.methods.connectors(connectSBTCCurve.address).call();
 | |
|     assert.ok(isEnabled);
 | |
|   });
 | |
| 
 | |
|   it('can sell WBTC for SBTC', async function () {
 | |
|     const sbtcContract = new web3.eth.Contract(sbtcABI, "0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6");
 | |
| 
 | |
|     const sbtcBefore = await sbtcContract.methods.balanceOf(dsrAddr).call();
 | |
|     console.log("Master SBTC Before: ", sbtcBefore.toString());
 | |
|     let wbtcBefore = await wbtcContract.methods.balanceOf(dsrAddr).call();
 | |
|     console.log("Master WBTC Before: ", wbtcBefore.toString());
 | |
| 
 | |
|     const encoded = await connectSBTCCurve.contract.methods.sell(
 | |
|       "0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6",
 | |
|       erc20.wbtc.address,
 | |
|       10000000,
 | |
|       ( 0.09 / 0.1 * 1e18 ).toString(),
 | |
|       0,
 | |
|       0,
 | |
|     ).encodeABI();
 | |
| 
 | |
|     await wbtcContract.methods.approve("0x7fC77b5c7614E1533320Ea6DDc2Eb61fa00A9714", 10000000).send({from: masterAddress});
 | |
|     const curveSwapContract = new web3.eth.Contract(curveSwap, "0x7fC77b5c7614E1533320Ea6DDc2Eb61fa00A9714");
 | |
|     const tx = await curveSwapContract.methods.exchange(1, 2, 1000000, 1).send({ from: masterAddress });
 | |
|     console.log(tx);
 | |
| 
 | |
|     // const tx = await connectSBTCCurve.contract.methods.sell(
 | |
|     //   "0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6",
 | |
|     //   erc20.wbtc.address,
 | |
|     //   1000000,
 | |
|     //   1,
 | |
|     //   0,
 | |
|     //   0,
 | |
|     // ).send({from: masterAddress});
 | |
|     // console.log(tx);
 | |
| 
 | |
|     //Inputs for `cast()` function of DSA Account.
 | |
|     const castInputs = [
 | |
|       [connectSBTCCurve.address],
 | |
|       [encoded],
 | |
|       masterAddress
 | |
|     ]
 | |
| 
 | |
|     // Execute `cast()` function
 | |
|     // const tx = await accountInstance.methods.cast(...castInputs).send({from: masterAddress});
 | |
|     // console.log(tx);
 | |
| 
 | |
|     let wbtcAfter = await wbtcContract.methods.balanceOf(dsrAddr).call();
 | |
|     console.log("Master WBTC After: ", wbtcAfter.toString());
 | |
|     const sbtcAfter = await sbtcContract.methods.balanceOf(dsrAddr).call();
 | |
|     console.log("Master SBTC After: ", sbtcAfter.toString());
 | |
|     expect(sbtcAfter - sbtcBefore).to.be.at.least(+ether("0.09"));
 | |
|   });
 | |
| 
 | |
|   it('can add and remove liquidity for wbtc', async function() {
 | |
|     const curveTokenContract = new web3.eth.Contract(
 | |
|     erc20ABI,
 | |
|       "0x075b1bb99792c9e1041ba13afef80c91a1e70fb3"
 | |
|   )
 | |
| 
 | |
|     let wbtcBefore = await wbtcContract.methods.balanceOf(dsrAddr).call();
 | |
|     console.log("Master WBTC Before: ", wbtcBefore.toString());
 | |
| 
 | |
|     const encodedDeposit = await connectSBTCCurve.contract.methods.deposit(
 | |
|       erc20.wbtc.address,
 | |
|       10000000,
 | |
|       ( 0.09 / 0.1 * 1e18 ).toString(),
 | |
|       0,
 | |
|       0
 | |
|     ).encodeABI();
 | |
| 
 | |
|     //Inputs for `cast()` function of DSA Account.
 | |
|     const castInputsDeposit = [
 | |
|       [connectSBTCCurve.address],
 | |
|       [encodedDeposit],
 | |
|       masterAddress
 | |
|     ]
 | |
| 
 | |
|     // Execute `cast()` function
 | |
|     const txDeposit = await accountInstance.methods.cast(...castInputsDeposit).send({from: masterAddress});
 | |
|     console.log(txDeposit);
 | |
| 
 | |
|     const balanceDeposit = await curveTokenContract.methods.balanceOf(dsrAddr);
 | |
| 
 | |
|     expect(balanceDeposit).to.be.at.least(ether("0.09"));
 | |
| 
 | |
|     const encodedWithdraw = await connectSBTCCurve.contract.methods.withdraw(
 | |
|       erc20.wbtc.address,
 | |
|       10000000,
 | |
|       ( 0.09 / 0.1 * 1e18 ).toString(),
 | |
|       0,
 | |
|       0
 | |
|     ).encodeABI();
 | |
| 
 | |
|     //Inputs for `cast()` function of DSA Account.
 | |
|     const castInputsWithdraw = [
 | |
|       [connectSBTCCurve.address],
 | |
|       [encodedWithdraw],
 | |
|       masterAddress
 | |
|     ]
 | |
| 
 | |
|     // Execute `cast()` function
 | |
|     const txWithdraw = await accountInstance.methods.cast(...castInputsWithdraw).send({from: masterAddress});
 | |
|     console.log(txWithdraw);
 | |
| 
 | |
|     const balanceWithdraw = await curveTokenContract.methods.balanceOf(dsrAddr);
 | |
| 
 | |
|     expect(balanceWithdraw).to.equal(0);
 | |
|   });
 | |
| 
 | |
| });
 |