mirror of
				https://github.com/Instadapp/dsa-connectors-old.git
				synced 2024-07-29 22:47:46 +00:00 
			
		
		
		
	1inch connector done
This commit is contained in:
		
							parent
							
								
									4cfc1e3cb7
								
							
						
					
					
						commit
						93cf4e81dc
					
				|  | @ -192,27 +192,18 @@ contract OneHelpers is Helpers { | |||
| 
 | ||||
| contract Resolver is OneHelpers { | ||||
|     function oneSplitSwap( | ||||
|         OneSplitInterface oneSplitContract, | ||||
|         TokenInterface _sellAddr, | ||||
|         TokenInterface _buyAddr, | ||||
|         uint _sellAmt, | ||||
|         uint unitAmt | ||||
|     ) internal returns (uint buyAmt, uint[] memory distribution){ | ||||
|         uint unitAmt, | ||||
|         uint[] memory distribution, | ||||
|         uint disableDexes | ||||
|     ) internal returns (uint buyAmt){ | ||||
|         (uint _buyDec, uint _sellDec) = getTokensDec(_buyAddr, _sellAddr); | ||||
|         uint _sellAmt18 = convertTo18(_sellDec, _sellAmt); | ||||
|         uint _slippageAmt = convert18ToDec(_buyDec, wmul(unitAmt, _sellAmt18)); | ||||
| 
 | ||||
|         OneSplitInterface oneSplitContract = OneSplitInterface(getOneSplitAddress()); | ||||
| 
 | ||||
|         (buyAmt, distribution) = oneSplitContract.getExpectedReturn( | ||||
|                 _sellAddr, | ||||
|                 _buyAddr, | ||||
|                 _sellAmt, | ||||
|                 3, // TODO - shall we hardcode? | ||||
|                 0 // TODO - do we need to disable anything? | ||||
|             ); | ||||
| 
 | ||||
|         require(_slippageAmt <= buyAmt, "Too much slippage"); | ||||
| 
 | ||||
|         uint ethAmt; | ||||
|         if (address(_sellAddr) == getAddressETH()) { | ||||
|             ethAmt = _sellAmt; | ||||
|  | @ -220,27 +211,23 @@ contract Resolver is OneHelpers { | |||
|             _sellAddr.approve(address(oneSplitContract), _sellAmt); | ||||
|         } | ||||
| 
 | ||||
|         uint initalBal = getTokenBal(_buyAddr); | ||||
| 
 | ||||
|         oneSplitContract.swap.value(ethAmt)( | ||||
|             _sellAddr, | ||||
|             _buyAddr, | ||||
|             _sellAmt, | ||||
|             _slippageAmt, | ||||
|             distribution, | ||||
|             0 | ||||
|             disableDexes | ||||
|         ); | ||||
| 
 | ||||
|         uint finalBal = getTokenBal(_buyAddr); | ||||
|         buyAmt = sub(finalBal, initalBal); | ||||
| 
 | ||||
|         require(_slippageAmt <= buyAmt, "Too much slippage"); | ||||
|     } | ||||
| 
 | ||||
|     function oneInchSwap( | ||||
|         bytes memory _callData, | ||||
|         uint ethAmt | ||||
|     ) | ||||
|     internal returns (uint buyAmt) { | ||||
|         // solium-disable-next-line security/no-call-value | ||||
|         (bool success, bytes memory data) = address(getOneInchAddress()).call.value(ethAmt)(_callData); | ||||
|         if (!success) revert("1Inch-swap-failed"); | ||||
| 
 | ||||
|         buyAmt = abi.decode(data, (uint)); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| contract BasicResolver is Resolver { | ||||
|  | @ -252,7 +239,7 @@ contract BasicResolver is Resolver { | |||
|         uint256 setId | ||||
|     ); | ||||
| 
 | ||||
|     event LogSellOneSplit( | ||||
|     event LogSell( | ||||
|         address indexed buyToken, | ||||
|         address indexed sellToken, | ||||
|         uint256 buyAmt, | ||||
|  | @ -268,34 +255,84 @@ contract BasicResolver is Resolver { | |||
|         uint unitAmt, | ||||
|         uint getId, | ||||
|         uint setId | ||||
|     ) external payable { | ||||
|         uint _sellAmt = sellAmt; | ||||
|     ) public payable { | ||||
|         uint _sellAmt = getUint(getId, sellAmt); | ||||
| 
 | ||||
|         TokenInterface _buyAddr = TokenInterface(buyAddr); | ||||
|         TokenInterface _sellAddr = TokenInterface(sellAddr); | ||||
| 
 | ||||
|         uint initalBal = getTokenBal(_buyAddr); | ||||
|         _sellAmt = _sellAmt == uint(-1) ? getTokenBal(_sellAddr) : _sellAmt; | ||||
| 
 | ||||
|         oneSplitSwap( | ||||
|         OneSplitInterface oneSplitContract = OneSplitInterface(getOneSplitAddress()); | ||||
| 
 | ||||
|         (, uint[] memory distribution) = oneSplitContract.getExpectedReturn( | ||||
|                 _sellAddr, | ||||
|                 _buyAddr, | ||||
|                 _sellAmt, | ||||
|                 3, // TODO - shall we hardcode? | ||||
|                 0 // TODO - do we need to disable anything? | ||||
|             ); | ||||
| 
 | ||||
|         uint _buyAmt = oneSplitSwap( | ||||
|             oneSplitContract, | ||||
|             _sellAddr, | ||||
|             _buyAddr, | ||||
|             _sellAmt, | ||||
|             unitAmt | ||||
|             unitAmt, | ||||
|             distribution, | ||||
|             0 | ||||
|         ); | ||||
| 
 | ||||
|         uint finialBal = getTokenBal(_buyAddr); | ||||
|         uint _buyAmt = sub(finialBal, initalBal); | ||||
| 
 | ||||
|         setUint(setId, _buyAmt); | ||||
|         emit LogSellOneSplit(address(_buyAddr), address(_sellAddr), _buyAmt, _sellAmt, getId, setId); | ||||
|         emit LogSell(address(_buyAddr), address(_sellAddr), _buyAmt, _sellAmt, getId, setId); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     function sell( | ||||
|         address buyAddr, | ||||
|         address sellAddr, | ||||
|         uint sellAmt, | ||||
|         uint unitAmt, | ||||
|         uint[] calldata distribution, | ||||
|         uint disableDexes, | ||||
|         uint getId, | ||||
|         uint setId | ||||
|     ) external payable { | ||||
|         uint _sellAmt = getUint(getId, sellAmt); | ||||
| 
 | ||||
|         TokenInterface _buyAddr = TokenInterface(buyAddr); | ||||
|         TokenInterface _sellAddr = TokenInterface(sellAddr); | ||||
| 
 | ||||
|         _sellAmt = _sellAmt == uint(-1) ? getTokenBal(_sellAddr) : _sellAmt; | ||||
| 
 | ||||
|         uint _buyAmt = oneSplitSwap( | ||||
|             OneSplitInterface(getOneSplitAddress()), | ||||
|             _sellAddr, | ||||
|             _buyAddr, | ||||
|             _sellAmt, | ||||
|             unitAmt, | ||||
|             distribution, | ||||
|             disableDexes | ||||
|         ); | ||||
| 
 | ||||
|         setUint(setId, _buyAmt); | ||||
|         emit LogSell(address(_buyAddr), address(_sellAddr), _buyAmt, _sellAmt, getId, setId); | ||||
|     } | ||||
| 
 | ||||
|     function sell( | ||||
|         address buyAddr, | ||||
|         address sellAddr, | ||||
|         uint sellAmt, | ||||
|         uint unitAmt, | ||||
|         bytes calldata callData, | ||||
|         uint setId | ||||
|     ) external payable { | ||||
|         (address _buyAddr, address _sellAddr, uint sellAmt) = decodeData(callData); | ||||
|         TokenInterface _buyAddr = TokenInterface(buyAddr); | ||||
|         TokenInterface _sellAddr = TokenInterface(sellAddr); | ||||
| 
 | ||||
|         (uint _buyDec, uint _sellDec) = getTokensDec(_buyAddr, _sellAddr); | ||||
|         uint _sellAmt18 = convertTo18(_sellDec, sellAmt); | ||||
|         uint _slippageAmt = convert18ToDec(_buyDec, wmul(unitAmt, _sellAmt18)); | ||||
| 
 | ||||
|         uint ethAmt; | ||||
|         if (address(_sellAddr) == getAddressETH()) { | ||||
|  | @ -304,10 +341,17 @@ contract BasicResolver is Resolver { | |||
|             TokenInterface(_sellAddr).approve(getOneInchAddress(), sellAmt); | ||||
|         } | ||||
| 
 | ||||
|         uint _buyAmt = oneInchSwap(callData, ethAmt); | ||||
|         uint initalBal = getTokenBal(_buyAddr); | ||||
| 
 | ||||
|         setUint(setId, _buyAmt); | ||||
|         emit LogSellOneInch(address(_buyAddr), address(_sellAddr), _buyAmt, sellAmt, setId); | ||||
|         address(getOneInchAddress()).call.value(ethAmt)(callData); | ||||
| 
 | ||||
|         uint finalBal = getTokenBal(_buyAddr); | ||||
|         uint buyAmt = sub(finalBal, initalBal); | ||||
| 
 | ||||
|         require(_slippageAmt <= buyAmt, "Too much slippage"); | ||||
| 
 | ||||
|         setUint(setId, buyAmt); | ||||
|         emit LogSell(address(_buyAddr), address(_sellAddr), buyAmt, sellAmt, 0, setId); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Samyak Jain
						Samyak Jain