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