@sovryn-zero/lib-ethers
Version:
Sovryn Zero SDK Ethers-based implementation
297 lines (261 loc) • 11.1 kB
text/typescript
import {
CollateralGainTransferDetails,
Decimalish,
LiquidationDetails,
RedemptionDetails,
SendableLiquity,
StabilityDepositChangeDetails,
StabilityPoolGainsWithdrawalDetails,
TroveAdjustmentDetails,
TroveAdjustmentParams,
TroveClosureDetails,
TroveCreationDetails,
TroveCreationParams
} from "@sovryn-zero/lib-base";
import {
EthersTransactionOverrides,
EthersTransactionReceipt,
EthersTransactionResponse,
PermitParams
} from "./types";
import {
PopulatableEthersLiquity,
PopulatedEthersLiquityTransaction,
SentEthersLiquityTransaction
} from "./PopulatableEthersLiquity";
const sendTransaction = <T>(tx: PopulatedEthersLiquityTransaction<T>) => tx.send();
/**
* Ethers-based implementation of {@link @sovryn-zero/lib-base#SendableLiquity}.
*
* @public
*/
export class SendableEthersLiquity
implements SendableLiquity<EthersTransactionReceipt, EthersTransactionResponse> {
private _populate: PopulatableEthersLiquity;
constructor(populatable: PopulatableEthersLiquity) {
this._populate = populatable;
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.openTrove} */
openTrove(
params: TroveCreationParams<Decimalish>,
maxBorrowingRate?: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<TroveCreationDetails>> {
return this._populate.openTrove(params, maxBorrowingRate, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.openNueTrove} */
openNueTrove(
params: TroveCreationParams<Decimalish>,
maxBorrowingRate?: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<TroveCreationDetails>> {
return this._populate.openNueTrove(params, maxBorrowingRate, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.closeTrove} */
closeTrove(
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<TroveClosureDetails>> {
return this._populate.closeTrove(overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.closeNueTrove} */
closeNueTrove(
permitParams: PermitParams,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<TroveClosureDetails>> {
return this._populate.closeNueTrove(permitParams, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.adjustTrove} */
adjustTrove(
params: TroveAdjustmentParams<Decimalish>,
maxBorrowingRate?: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<TroveAdjustmentDetails>> {
return this._populate.adjustTrove(params, maxBorrowingRate, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.repayZusdFromDLLR} */
repayZusdFromDLLR(
zusdAmount: Decimalish,
permitParams: PermitParams,
maxBorrowingRate?: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<TroveAdjustmentDetails>> {
return this._populate.adjustNueTrove({
repayZUSD: zusdAmount,
}, permitParams, maxBorrowingRate, overrides).then(sendTransaction);
}
withdrawZusdAndConvertToDLLR(
zusdAmount: Decimalish,
maxBorrowingRate?: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<void>> {
return this._populate.withdrawZusdAndConvertToDLLR(zusdAmount, maxBorrowingRate, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.adjustNueTrove} */
adjustNueTrove(
params: TroveAdjustmentParams<Decimalish>,
permitParams: PermitParams,
maxBorrowingRate?: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<TroveAdjustmentDetails>> {
return this._populate.adjustNueTrove(params, permitParams, maxBorrowingRate, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.depositCollateral} */
depositCollateral(
amount: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<TroveAdjustmentDetails>> {
return this._populate.depositCollateral(amount, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.withdrawCollateral} */
withdrawCollateral(
amount: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<TroveAdjustmentDetails>> {
return this._populate.withdrawCollateral(amount, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.borrowZUSD} */
borrowZUSD(
amount: Decimalish,
maxBorrowingRate?: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<TroveAdjustmentDetails>> {
return this._populate.borrowZUSD(amount, maxBorrowingRate, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.repayZUSD} */
repayZUSD(
amount: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<TroveAdjustmentDetails>> {
return this._populate.repayZUSD(amount, overrides).then(sendTransaction);
}
/** @internal */
setPrice(
price: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<void>> {
return this._populate.setPrice(price, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.liquidate} */
liquidate(
address: string | string[],
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<LiquidationDetails>> {
return this._populate.liquidate(address, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.liquidateUpTo} */
liquidateUpTo(
maximumNumberOfTrovesToLiquidate: number,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<LiquidationDetails>> {
return this._populate
.liquidateUpTo(maximumNumberOfTrovesToLiquidate, overrides)
.then(sendTransaction);
}
redeemCollateralViaDLLR(
dllrAmount: Decimalish,
permitParams: PermitParams,
maxRedemptionRate?: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<RedemptionDetails>> {
return this._populate.redeemCollateralViaDLLR(dllrAmount, permitParams, maxRedemptionRate, overrides).then(sendTransaction);
}
provideToSpFromDLLR(
dllrAmount: Decimalish,
permitParams: PermitParams,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<void>> {
return this._populate.provideToSpFromDLLR(dllrAmount, permitParams, overrides).then(sendTransaction);
}
withdrawFromSpAndConvertToDLLR(
zusdAmountRequested: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<void>> {
return this._populate.withdrawFromSpAndConvertToDLLR(zusdAmountRequested, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.depositZUSDInStabilityPool} */
depositZUSDInStabilityPool(
amount: Decimalish,
frontendTag?: string,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<StabilityDepositChangeDetails>> {
return this._populate
.depositZUSDInStabilityPool(amount, frontendTag, overrides)
.then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.withdrawZUSDFromStabilityPool} */
withdrawZUSDFromStabilityPool(
amount: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<StabilityDepositChangeDetails>> {
return this._populate.withdrawZUSDFromStabilityPool(amount, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.withdrawGainsFromStabilityPool} */
withdrawGainsFromStabilityPool(
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<StabilityPoolGainsWithdrawalDetails>> {
return this._populate.withdrawGainsFromStabilityPool(overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.transferCollateralGainToTrove} */
transferCollateralGainToTrove(
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<CollateralGainTransferDetails>> {
return this._populate.transferCollateralGainToTrove(overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.sendZUSD} */
sendZUSD(
toAddress: string,
amount: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<void>> {
return this._populate.sendZUSD(toAddress, amount, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.sendZERO} */
sendZERO(
toAddress: string,
amount: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<void>> {
return this._populate.sendZERO(toAddress, amount, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.redeemZUSD} */
redeemZUSD(
amount: Decimalish,
maxRedemptionRate?: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<RedemptionDetails>> {
return this._populate.redeemZUSD(amount, maxRedemptionRate, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.claimCollateralSurplus} */
claimCollateralSurplus(
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<void>> {
return this._populate.claimCollateralSurplus(overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.stakeZERO} */
stakeZERO(
amount: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<void>> {
return this._populate.stakeZERO(amount, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.unstakeZERO} */
unstakeZERO(
amount: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<void>> {
return this._populate.unstakeZERO(amount, overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.withdrawGainsFromStaking} */
withdrawGainsFromStaking(
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<void>> {
return this._populate.withdrawGainsFromStaking(overrides).then(sendTransaction);
}
/** {@inheritDoc @sovryn-zero/lib-base#SendableLiquity.registerFrontend} */
registerFrontend(
kickbackRate: Decimalish,
overrides?: EthersTransactionOverrides
): Promise<SentEthersLiquityTransaction<void>> {
return this._populate.registerFrontend(kickbackRate, overrides).then(sendTransaction);
}
}