mirror of
				https://github.com/Instadapp/dsa-connectors.git
				synced 2024-07-29 22:37:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
| pragma solidity ^0.7.0;
 | |
| 
 | |
| /**
 | |
|  * @title Kyber.
 | |
|  * @dev Decentralised Swapping.
 | |
|  */
 | |
| 
 | |
| import { TokenInterface } from "../../common/interfaces.sol";
 | |
| import { Helpers } from "./helpers.sol";
 | |
| import { Events } from "./events.sol";
 | |
| 
 | |
| abstract contract KyberResolver is Helpers, Events {
 | |
|     /**
 | |
|      * @dev Sell ETH/ERC20_Token.
 | |
|      * @notice Sell tokens using Kyber.
 | |
|      * @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 returns (string memory _eventName, bytes memory _eventParam) {
 | |
|         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;
 | |
|             approve(sellContract, address(kyber), _sellAmt);
 | |
|         }
 | |
| 
 | |
|         uint _buyAmt = kyber.trade{value: ethAmt}(
 | |
|             sellAddr,
 | |
|             _sellAmt,
 | |
|             buyAddr,
 | |
|             address(this),
 | |
|             uint(-1),
 | |
|             unitAmt,
 | |
|             referalAddr
 | |
|         );
 | |
| 
 | |
|         setUint(setId, _buyAmt);
 | |
| 
 | |
|         _eventName = "LogSell(address,address,uint256,uint256,uint256,uint256)";
 | |
|         _eventParam = abi.encode(buyAddr, sellAddr, _buyAmt, _sellAmt, getId, setId);
 | |
|     }
 | |
| }
 | |
| 
 | |
| contract ConnectV2Kyber is KyberResolver {
 | |
|     string public name = "Kyber-v2";
 | |
| } | 
