mirror of
				https://github.com/Instadapp/dsa-connectors.git
				synced 2024-07-29 22:37:00 +00:00 
			
		
		
		
	buyCollateral updated
This commit is contained in:
		
							parent
							
								
									75c092c266
								
							
						
					
					
						commit
						8250831342
					
				| 
						 | 
				
			
			@ -116,10 +116,10 @@ contract Events {
 | 
			
		|||
 | 
			
		||||
	event LogBuyCollateral(
 | 
			
		||||
		address indexed market,
 | 
			
		||||
		address indexed token,
 | 
			
		||||
		uint256 indexed baseAmount,
 | 
			
		||||
		uint256 minCollateralAmt,
 | 
			
		||||
		uint256 collateralAmount,
 | 
			
		||||
		address indexed buyToken,
 | 
			
		||||
		uint256 indexed baseSellAmt,
 | 
			
		||||
		uint256 unitAmt,
 | 
			
		||||
		uint256 buyAmount,
 | 
			
		||||
		uint256 getId,
 | 
			
		||||
		uint256 setId
 | 
			
		||||
	);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,6 +18,14 @@ abstract contract Helpers is DSMath, Basic {
 | 
			
		|||
		uint256 setId;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	struct BuyCollateralData {
 | 
			
		||||
		address market;
 | 
			
		||||
		address sellToken;
 | 
			
		||||
		address buyAsset;
 | 
			
		||||
		uint256 unitAmt;
 | 
			
		||||
		uint256 baseSellAmt;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	enum Action {
 | 
			
		||||
		REPAY,
 | 
			
		||||
		DEPOSIT,
 | 
			
		||||
| 
						 | 
				
			
			@ -121,7 +129,9 @@ abstract contract Helpers is DSMath, Basic {
 | 
			
		|||
		amt_ = amt_ == uint256(-1) ? initialBal : amt_;
 | 
			
		||||
 | 
			
		||||
		if (token_ == getBaseToken(params.market)) {
 | 
			
		||||
			uint256 balance = CometInterface(params.market).balanceOf(params.from);
 | 
			
		||||
			uint256 balance = CometInterface(params.market).balanceOf(
 | 
			
		||||
				params.from
 | 
			
		||||
			);
 | 
			
		||||
			//if there are supplies, ensure withdrawn amount is not greater than supplied i.e can't borrow using withdraw.
 | 
			
		||||
			if (balance > 0) {
 | 
			
		||||
				require(amt_ <= balance, "withdraw-amt-greater-than-supplies");
 | 
			
		||||
| 
						 | 
				
			
			@ -211,4 +221,72 @@ abstract contract Helpers is DSMath, Basic {
 | 
			
		|||
 | 
			
		||||
		return amt;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function _buyCollateral(
 | 
			
		||||
		BuyCollateralData memory params,
 | 
			
		||||
		uint256 getId,
 | 
			
		||||
		uint256 setId
 | 
			
		||||
	) internal returns (string memory eventName_, bytes memory eventParam_) {
 | 
			
		||||
		uint256 sellAmt_ = getUint(getId, params.baseSellAmt);
 | 
			
		||||
		require(
 | 
			
		||||
			params.market != address(0) && params.buyAsset != address(0),
 | 
			
		||||
			"invalid market/token address"
 | 
			
		||||
		);
 | 
			
		||||
		require(
 | 
			
		||||
			params.sellToken == getBaseToken(params.market),
 | 
			
		||||
			"invalid-sell-token"
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		bool isEth = params.sellToken == ethAddr;
 | 
			
		||||
		params.sellToken = isEth ? wethAddr : params.sellToken;
 | 
			
		||||
 | 
			
		||||
		if (sellAmt_ == uint256(-1)) {
 | 
			
		||||
			sellAmt_ = isEth
 | 
			
		||||
				? address(this).balance
 | 
			
		||||
				: TokenInterface(params.sellToken).balanceOf(address(this));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		isEth = params.buyAsset == ethAddr;
 | 
			
		||||
		params.buyAsset = isEth ? wethAddr : params.buyAsset;
 | 
			
		||||
 | 
			
		||||
		convertEthToWeth(isEth, TokenInterface(params.sellToken), sellAmt_);
 | 
			
		||||
 | 
			
		||||
		uint256 slippageAmt_ = convert18ToDec(
 | 
			
		||||
			TokenInterface(params.buyAsset).decimals(),
 | 
			
		||||
			wmul(
 | 
			
		||||
				params.unitAmt,
 | 
			
		||||
				convertTo18(
 | 
			
		||||
					TokenInterface(params.sellToken).decimals(),
 | 
			
		||||
					sellAmt_
 | 
			
		||||
				)
 | 
			
		||||
			)
 | 
			
		||||
		);
 | 
			
		||||
		approve(TokenInterface(params.sellToken), params.market, sellAmt_);
 | 
			
		||||
		CometInterface(params.market).buyCollateral(
 | 
			
		||||
			params.buyAsset,
 | 
			
		||||
			slippageAmt_,
 | 
			
		||||
			sellAmt_,
 | 
			
		||||
			address(this)
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		uint256 buyAmt_ = CometInterface(params.market).quoteCollateral(
 | 
			
		||||
			params.buyAsset,
 | 
			
		||||
			sellAmt_
 | 
			
		||||
		);
 | 
			
		||||
		require(slippageAmt_ <= buyAmt_, "too-much-slippage");
 | 
			
		||||
 | 
			
		||||
		convertWethToEth(isEth, TokenInterface(params.buyAsset), buyAmt_);
 | 
			
		||||
		setUint(setId, sellAmt_);
 | 
			
		||||
 | 
			
		||||
		eventName_ = "LogBuyCollateral(address,address,uint256,uint256,uint256,uint256,uint256)";
 | 
			
		||||
		eventParam_ = abi.encode(
 | 
			
		||||
			params.market,
 | 
			
		||||
			params.buyAsset,
 | 
			
		||||
			sellAmt_,
 | 
			
		||||
			params.unitAmt,
 | 
			
		||||
			buyAmt_,
 | 
			
		||||
			getId,
 | 
			
		||||
			setId
 | 
			
		||||
		);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -714,17 +714,19 @@ abstract contract CompoundV3Resolver is Events, Helpers {
 | 
			
		|||
	 * @dev Buy collateral asset absorbed, from the market.
 | 
			
		||||
	 * @notice Buy collateral asset to increase protocol base reserves until targetReserves is reached.
 | 
			
		||||
	 * @param market The address of the market from where to withdraw.
 | 
			
		||||
	 * @param asset The collateral asset to purachase.
 | 
			
		||||
	 * @param minCollateralAmt Minimum amount of collateral expected to be received.
 | 
			
		||||
	 * @param baseAmt Amount of base asset to be sold for collateral.
 | 
			
		||||
	 * @param sellToken base token. (For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
 | 
			
		||||
	 * @param buyAsset The collateral asset to purachase. (For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
 | 
			
		||||
	 * @param unitAmt Minimum amount of collateral expected to be received.
 | 
			
		||||
	 * @param baseSellAmt Amount of base asset to be sold for collateral.
 | 
			
		||||
	 * @param getId ID to retrieve amt.
 | 
			
		||||
	 * @param setId ID stores the amount of base tokens sold.
 | 
			
		||||
	 */
 | 
			
		||||
	function buyCollateral(
 | 
			
		||||
		address market,
 | 
			
		||||
		address asset,
 | 
			
		||||
		uint256 minCollateralAmt,
 | 
			
		||||
		uint256 baseAmt,
 | 
			
		||||
		address sellToken,
 | 
			
		||||
		address buyAsset,
 | 
			
		||||
		uint256 unitAmt,
 | 
			
		||||
		uint256 baseSellAmt,
 | 
			
		||||
		uint256 getId,
 | 
			
		||||
		uint256 setId
 | 
			
		||||
	)
 | 
			
		||||
| 
						 | 
				
			
			@ -732,36 +734,14 @@ abstract contract CompoundV3Resolver is Events, Helpers {
 | 
			
		|||
		payable
 | 
			
		||||
		returns (string memory eventName_, bytes memory eventParam_)
 | 
			
		||||
	{
 | 
			
		||||
		uint256 amt_ = getUint(getId, baseAmt);
 | 
			
		||||
		require(
 | 
			
		||||
			market != address(0) && asset != address(0),
 | 
			
		||||
			"invalid market/token address"
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		bool isEth = asset == ethAddr;
 | 
			
		||||
		address token_ = isEth ? wethAddr : asset;
 | 
			
		||||
		TokenInterface tokenContract = TokenInterface(token_);
 | 
			
		||||
 | 
			
		||||
		convertEthToWeth(isEth, tokenContract, amt_);
 | 
			
		||||
		approve(TokenInterface(getBaseToken(market)), market, amt_);
 | 
			
		||||
 | 
			
		||||
		CometInterface(market).buyCollateral(
 | 
			
		||||
			asset,
 | 
			
		||||
			minCollateralAmt,
 | 
			
		||||
			amt_,
 | 
			
		||||
			address(this)
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		uint256 collAmt = CometInterface(market).quoteCollateral(asset, amt_);
 | 
			
		||||
		setUint(setId, amt_);
 | 
			
		||||
 | 
			
		||||
		eventName_ = "LogBuyCollateral(address,address,uint256,uint256,uint256,uint256,uint256)";
 | 
			
		||||
		eventParam_ = abi.encode(
 | 
			
		||||
			market,
 | 
			
		||||
			token_,
 | 
			
		||||
			amt_,
 | 
			
		||||
			minCollateralAmt,
 | 
			
		||||
			collAmt,
 | 
			
		||||
		(eventName_, eventParam_) = _buyCollateral(
 | 
			
		||||
			BuyCollateralData({
 | 
			
		||||
				market: market,
 | 
			
		||||
				sellToken: sellToken,
 | 
			
		||||
				buyAsset: buyAsset,
 | 
			
		||||
				unitAmt: unitAmt,
 | 
			
		||||
				baseSellAmt: baseSellAmt
 | 
			
		||||
			}),
 | 
			
		||||
			getId,
 | 
			
		||||
			setId
 | 
			
		||||
		);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user