@rainfi/sdk
Version:
This package is used to interact with Rain.fi protocol on Solana
363 lines (362 loc) • 9.12 kB
TypeScript
import { PublicKey } from "@solana/web3.js";
export interface FullUserStats {
owner: string;
totalLoan: number;
totalMortgage: number;
totalLiquidation: number;
currentLoan: number;
currentMortgage: number;
totalVolumeBorrower: number;
totalVolumePool: number;
points: number;
creditScore: number;
createdAt: number;
}
export interface UserStats {
owner: PublicKey;
totalLoan: number;
totalMortgage: number;
totalLiquidation: number;
currentLoan: number;
currentMortgage: number;
createdAt: number;
totalVolumeBorrower: number;
totalVolumePool: number;
points: number;
creditScore: number;
}
export interface SplPoolCollection {
collection: number;
collectionLtv: number;
exposure: number;
amountUsed: number;
}
export type UserInputPoolCollection = {
collection: number;
collectionLtv: number;
exposure: number;
};
export interface PoolCollection {
collection: number;
collectionLtv: number;
exposure: number;
amountUsed: number;
}
export interface CreatePoolArgs {
collections: UserInputPoolCollection[];
loanToValue: number;
maxAmount: number;
baseInterest: number;
interestRate: number;
curveRate: number;
curveRateDay: number;
maxDuration: number;
compound: boolean;
amount: number;
referrer?: PublicKey;
}
export interface UpdatePoolArgs {
referrer?: PublicKey;
isCompounded: boolean;
optMinAmountPerLoan: number;
optMortgageCurve: {
baseInterest: number;
interestRate: number;
curveRate: number;
curveRateDay: number;
maxDuration: number;
maxAmount: number;
};
optLoanCurve: {
baseInterest: number;
interestRate: number;
curveRate: number;
curveRateDay: number;
maxDuration: number;
maxAmount: number;
};
optConditions: PoolConditions;
optLiquidation: PoolLiquidation;
loanLiquidation: number;
}
export interface PoolLiquidation {
loanLiquidation: number;
mortgageLiquidation: number;
isAutoSellEnabled: boolean;
percentageMaxLoss: number;
}
export interface PoolConditions {
isEnabled: boolean;
minAge: number;
minLoan: number;
minVolume: number;
liquidationThreshold: number;
padding1: number;
padding2: number;
padding3: number;
}
export interface BorrowArgs {
nftMint: PublicKey;
assetId?: PublicKey;
poolOwner: PublicKey;
duration: number;
amount: number;
interest: number;
slippage: number;
lookupTable?: PublicKey | undefined;
}
export interface ExtendArgs {
nftMint: PublicKey;
poolOwner: PublicKey;
loan: PublicKey;
duration: number;
amount: number;
interest: number;
slippage: number;
lookupTable?: PublicKey | undefined;
}
export interface MgRequestArgs {
nftMint: PublicKey;
poolOwner: PublicKey;
duration: number;
amount: number;
floorPrice: number;
marketplace: number;
price: number;
seller: PublicKey;
}
export interface LoanRequestArgs {
nftMint: PublicKey;
poolOwner: PublicKey;
duration: number;
amount: number;
collectionId?: number;
}
export interface ExecuteLoanRequestArgs {
loanRequestAddress: PublicKey;
duration: number;
amount: number;
interest: number;
slippage: number;
lookupTable?: PublicKey | undefined;
}
export interface Collection {
collectionAddress: string;
collectionId: number;
collectionName?: string;
hadeswapPair?: string;
maxAmountToBorrow?: number;
createdAt: number;
creator: string;
floorPrice: number;
image?: string;
mortgageEnabled?: boolean;
url?: string;
isLocked: boolean;
nftLocked: number;
risk: number;
supply: number;
updatedAt: number;
}
export type Curve = {
baseInterest: number;
interestRate: number;
curveRate: number;
curveRateDay: number;
maxDuration: number;
maxAmount: number;
};
export interface Pool {
poolAddress: string;
bump: number;
owner: string;
currency: string;
oraclePoolUsd: string;
oracleSolUsd: string;
status: 'pending' | 'ready' | 'disabled';
isCompounded: boolean;
isShared: boolean;
totalAmount: number;
borrowedAmount: number;
availableAmount: number;
usableAmount: number;
loanCurve: Curve;
mortgageCurve: Curve;
conditions: PoolConditions;
liquidation: PoolLiquidation;
isMortgageEnabled: boolean;
nftLocked: number;
totalLiquidations: number;
totalLoans: number;
totalMortgages: number;
totalInterest: number;
depositedAt: number;
createdAt: number;
updatedAt: number;
lastLoanAt: number;
lastMortgageAt: number;
loanLiquidation: number;
mortgageLiquidation: number;
whitelist: string;
padding: number[];
collections: PoolCollection[];
depositedAmount: number;
}
export interface Currency {
switchBoardOnDemandAccount: string | null | undefined;
fullName: string;
name: string;
id: string;
pyth: string;
history: string;
coingeckoName: string;
image: string;
symbol: string;
mint: string;
priceAccount?: string | null;
priceAccountV2?: string | null;
switchBoardAccount?: string | null;
decimals: number;
minAmount: number;
minDefiAmount: number;
simulationAmount: number;
showDecimals: boolean;
isLiveDefi: boolean;
isLive: boolean;
}
export interface Request {
accountAddress: string;
kind: 'loan' | 'mortgage';
status: 'accepted' | 'pending';
borrower: string;
mint: string;
pool: string;
amount: number;
duration: number;
collection: number;
marketplace: 'none' | 'solanart' | 'auctionhouse' | 'hyperspace' | 'hadeswap' | 'rain' | 'tensorswap_order' | 'tensorswap_listing' | 'magiceden-v2';
price: number;
createdAt: number;
}
export declare enum LoanKind {
Loan = 0,
Mortgage = 1
}
export declare enum RequestStatus {
Pending = 0,
Accepted = 1
}
export interface Loan {
accountAddress: string;
kind: 'loan' | 'mortgage';
status: 'sold' | 'ongoing' | 'repaid' | 'liquidated';
collateralAmount: number;
collateralDecimals: number;
isDefi: boolean;
platform?: string;
borrower: string;
lender: string;
pool: string;
mint: string;
currency: string;
isCustom: boolean;
isFrozen: boolean;
interest: number;
amount: number;
price: number;
duration: number;
collection: number;
liquidation: number;
marketplace: 'none' | 'solanart' | 'auctionhouse' | 'hyperspace' | 'hadeswap' | 'rain' | 'tensorswap_order' | 'tensorswap_listing' | 'magiceden-v2';
sale: Sale;
createdAt: number;
expiredAt: number;
repaidAt: number;
soldAt: number;
image?: string;
nft?: any;
collectionName?: string;
isCompressedLoan: boolean;
liquidatedAt: number;
listing: {
isListed: boolean;
price: number;
};
}
export type Sale = {
isForSale: boolean;
salePrice: number;
currency: string;
};
export declare enum Marketplace {
None = 0,
Auctionhouse = 1,
Solanart = 2,
Hyperspace = 3,
Yaww = 4,
Hadeswap = 5,
Rain = 6
}
export declare enum InterestType {
Manual = 0,
Dynamic = 1
}
export declare enum PoolStatus {
Pending = 0,
Ready = 1,
Disabled = 2
}
export declare enum MortgageStatus {
Pending = 0,
Ongoing = 1,
Repaid = 2,
Liquidated = 3
}
export interface Fees {
feesInPercentage: number;
feesInSol: number;
rainFees: number;
amountToLoan: number;
duration: number;
}
export type MortgageFilter = 'status' | 'borrower' | 'owner' | 'mint' | 'marketplace' | 'is_for_sale' | 'sale_price' | 'is_frozen' | 'interest' | 'repaid' | 'amount' | 'price' | 'duration' | 'collection';
export interface BuyArgs {
nftMint: PublicKey;
poolOwner: PublicKey;
seller?: PublicKey;
auctionHousePubkey?: PublicKey;
escrowAddress?: PublicKey;
marketplace: 'solanart' | 'auction_house' | 'hadeswap' | 'tensorswap_order' | 'tensorswap_listing' | 'magiceden-v2';
interest: number;
slippage: number;
price: number;
amount: number;
duration: number;
}
export interface ExecuteMortgageRequestArgs {
mortgageRequestAddress: PublicKey;
nftMint: PublicKey;
poolOwner: PublicKey;
seller?: PublicKey;
auctionHousePubkey?: PublicKey;
escrowAddress?: PublicKey;
marketplace: 'solanart' | 'auction_house' | 'hadeswap' | 'tensorswap_order' | 'tensorswap_listing' | 'magiceden-v2';
interest: number;
slippage: number;
price: number;
amount: number;
duration: number;
}
export interface ConfigMortgage {
isMortgageEnabled: boolean;
optMortgageCurve: Curve;
}
export interface BorrowCompressedArgs {
assetId: PublicKey;
poolOwner: PublicKey;
duration: number;
amount: number;
interest: number;
slippage: number;
lookupTable?: PublicKey | undefined;
}