UNPKG

@kamino-finance/klend-sdk

Version:

Typescript SDK for interacting with the Kamino Lending (klend) protocol

184 lines (170 loc) 5.2 kB
import { PublicKey } from '@solana/web3.js'; import { PROGRAM_ID } from '../idl_codegen/programId'; /** * Lending market authority seed */ export const LENDING_MARKET_AUTH_SEED = 'lma'; /** * Reserve liquidity supply seed */ export const RESERVE_LIQ_SUPPLY_SEED = 'reserve_liq_supply'; /** * Reserve fee vault seed */ export const FEE_RECEIVER_SEED = 'fee_receiver'; /** * Reserve collateral mint seed */ export const RESERVE_COLL_MINT_SEED = 'reserve_coll_mint'; /** * Reserve collateral supply seed */ export const RESERVE_COLL_SUPPLY_SEED = 'reserve_coll_supply'; /** * User metadata seed */ export const BASE_SEED_USER_METADATA = 'user_meta'; /** * Referrer token state seed */ export const BASE_SEED_REFERRER_TOKEN_STATE = 'referrer_acc'; /** * Referrer state seed */ export const BASE_SEED_REFERRER_STATE = 'ref_state'; /** * Short url seed */ export const BASE_SEED_SHORT_URL = 'short_url'; /** * Encapsulates all the PDAs for a given reserve */ export interface ReservePdas { liquiditySupplyVault: PublicKey; collateralMint: PublicKey; collateralSupplyVault: PublicKey; feeVault: PublicKey; } /** * Returns all the PDAs for the given reserve * @param programId * @param market * @param mint * @returns ReservePdas */ export function reservePdas(programId: PublicKey, market: PublicKey, mint: PublicKey): ReservePdas { return { liquiditySupplyVault: reserveLiqSupplyPda(market, mint, programId)[0], collateralMint: reserveCollateralMintPda(market, mint, programId)[0], collateralSupplyVault: reserveCollateralSupplyPda(market, mint, programId)[0], feeVault: reserveFeeVaultPda(market, mint, programId)[0], }; } /** * Returns the PDA and bump for the lending market authority * @param lendingMarket * @param programId * @returns [authority, bump] */ export function lendingMarketAuthPda(lendingMarket: PublicKey, programId: PublicKey = PROGRAM_ID) { return PublicKey.findProgramAddressSync([Buffer.from(LENDING_MARKET_AUTH_SEED), lendingMarket.toBuffer()], programId); } /** * Returns the PDA and bump for the reserve liquidity supply * @param lendingMarket * @param mint * @param programId * @returns [pda, bump] */ export function reserveLiqSupplyPda(lendingMarket: PublicKey, mint: PublicKey, programId: PublicKey = PROGRAM_ID) { return PublicKey.findProgramAddressSync( [Buffer.from(RESERVE_LIQ_SUPPLY_SEED), lendingMarket.toBuffer(), mint.toBuffer()], programId ); } /** * Returns the PDA and bump for the reserve fee vault * @param lendingMarket * @param mint * @param programId * @returns [vaultPda, bump] */ export function reserveFeeVaultPda(lendingMarket: PublicKey, mint: PublicKey, programId: PublicKey = PROGRAM_ID) { return PublicKey.findProgramAddressSync( [Buffer.from(FEE_RECEIVER_SEED), lendingMarket.toBuffer(), mint.toBuffer()], programId ); } /** * Returns the PDA and bump for the reserve collateral mint * @param lendingMarket * @param mint * @param programId * @returns [mintPda, bump] */ export function reserveCollateralMintPda(lendingMarket: PublicKey, mint: PublicKey, programId: PublicKey = PROGRAM_ID) { return PublicKey.findProgramAddressSync( [Buffer.from(RESERVE_COLL_MINT_SEED), lendingMarket.toBuffer(), mint.toBuffer()], programId ); } /** * Returns the PDA and bump for the reserve collateral supply * @param lendingMarket * @param mint * @param programId * @returns [pda, bump] */ export function reserveCollateralSupplyPda( lendingMarket: PublicKey, mint: PublicKey, programId: PublicKey = PROGRAM_ID ) { return PublicKey.findProgramAddressSync( [Buffer.from(RESERVE_COLL_SUPPLY_SEED), lendingMarket.toBuffer(), mint.toBuffer()], programId ); } /** * Returns the PDA and bump for the user metadata state * @param user * @param programId * @returns [pda, bump] */ export function userMetadataPda(user: PublicKey, programId: PublicKey = PROGRAM_ID) { return PublicKey.findProgramAddressSync([Buffer.from(BASE_SEED_USER_METADATA), user.toBuffer()], programId); } /** * Returns the PDA and bump for the referrer account for a mint * @param referrer * @param mint * @param programId * @returns [pda, bump] */ export function referrerTokenStatePda(referrer: PublicKey, reserve: PublicKey, programId: PublicKey = PROGRAM_ID) { if (referrer.equals(PublicKey.default)) { return [programId]; } return PublicKey.findProgramAddressSync( [Buffer.from(BASE_SEED_REFERRER_TOKEN_STATE), referrer.toBuffer(), reserve.toBuffer()], programId ); } /** * Returns the PDA and bump for the referrer state * @param referrer * @param programId * @returns [pda, bump] */ export function referrerStatePda(referrer: PublicKey, programId: PublicKey = PROGRAM_ID) { return PublicKey.findProgramAddressSync([Buffer.from(BASE_SEED_REFERRER_STATE), referrer.toBuffer()], programId); } /** * Returns the PDA and bump for the short url * @param shortUrl * @param programId * @returns [pda, bump] */ export function shortUrlPda(shortUrl: string, programId: PublicKey = PROGRAM_ID) { return PublicKey.findProgramAddressSync([Buffer.from(BASE_SEED_SHORT_URL), Buffer.from(shortUrl)], programId); }