mirror of
				https://github.com/Instadapp/dsa-connectors.git
				synced 2024-07-29 22:37:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			103 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
| pragma solidity ^0.7.0;
 | |
| 
 | |
| // import files from common directory
 | |
| import { TokenInterface , MemoryInterface } from "../common/interfaces.sol";
 | |
| import { Stores } from "../common/stores.sol";
 | |
| import { DSMath } from "../common/math.sol";
 | |
| 
 | |
| interface KyberInterface {
 | |
|     function trade(
 | |
|         address src,
 | |
|         uint srcAmount,
 | |
|         address dest,
 | |
|         address destAddress,
 | |
|         uint maxDestAmount,
 | |
|         uint minConversionRate,
 | |
|         address walletId
 | |
|     ) external payable returns (uint);
 | |
| 
 | |
|     function getExpectedRate(
 | |
|         address src,
 | |
|         address dest,
 | |
|         uint srcQty
 | |
|     ) external view returns (uint, uint);
 | |
| }
 | |
| 
 | |
| 
 | |
| abstract contract KyberHelpers is DSMath, Stores  {
 | |
|     /**
 | |
|      * @dev Kyber Proxy Address
 | |
|      */
 | |
|     function getKyberAddr() internal pure returns (address) {
 | |
|         return 0x818E6FECD516Ecc3849DAf6845e3EC868087B755;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @dev Referral Address
 | |
|      */
 | |
|     function getReferralAddr() internal pure returns (address) {
 | |
|         return 0x7284a8451d9a0e7Dc62B3a71C0593eA2eC5c5638;
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| abstract contract KyberResolver is KyberHelpers {
 | |
|     event LogSell(
 | |
|         address indexed buyToken,
 | |
|         address indexed sellToken,
 | |
|         uint256 buyAmt,
 | |
|         uint256 sellAmt,
 | |
|         uint256 getId,
 | |
|         uint256 setId
 | |
|     );
 | |
| 
 | |
|     /**
 | |
|      * @dev Sell ETH/ERC20_Token.
 | |
|      * @param buyAddr buying token address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
 | |
|      * @param sellAddr selling token amount.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
 | |
|      * @param sellAmt selling token amount.
 | |
|      * @param unitAmt unit amount of buyAmt/sellAmt 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 sell(
 | |
|         address buyAddr,
 | |
|         address sellAddr,
 | |
|         uint sellAmt,
 | |
|         uint unitAmt,
 | |
|         uint getId,
 | |
|         uint setId
 | |
|     ) external payable
 | |
|     {
 | |
|         uint _sellAmt = getUint(getId, sellAmt);
 | |
| 
 | |
|         uint ethAmt;
 | |
|         if (sellAddr == ethAddr) {
 | |
|             _sellAmt = _sellAmt == uint(-1) ? address(this).balance : _sellAmt;
 | |
|             ethAmt = _sellAmt;
 | |
|         } else {
 | |
|             TokenInterface sellContract = TokenInterface(sellAddr);
 | |
|             _sellAmt = _sellAmt == uint(-1) ? sellContract.balanceOf(address(this)) : _sellAmt;
 | |
|             sellContract.approve(getKyberAddr(), _sellAmt);
 | |
|         }
 | |
| 
 | |
|         uint _buyAmt = KyberInterface(getKyberAddr()).trade{value: ethAmt}(
 | |
|             sellAddr,
 | |
|             _sellAmt,
 | |
|             buyAddr,
 | |
|             address(this),
 | |
|             uint(-1),
 | |
|             unitAmt,
 | |
|             getReferralAddr()
 | |
|         );
 | |
| 
 | |
|         setUint(setId, _buyAmt);
 | |
| 
 | |
|         emit LogSell(buyAddr, sellAddr, _buyAmt, _sellAmt, getId, setId);
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| contract ConnectKyber is KyberResolver {
 | |
|     string public name = "Kyber-v1";
 | |
| } | 
