@kamino-finance/kliquidity-sdk
Version:
Typescript SDK for interacting with the Kamino Liquidity (kliquidity) protocol
192 lines (181 loc) • 6.42 kB
text/typescript
import { address, Address } from "@solana/kit" // eslint-disable-line @typescript-eslint/no-unused-vars
import BN from "bn.js" // eslint-disable-line @typescript-eslint/no-unused-vars
import * as types from "../types" // eslint-disable-line @typescript-eslint/no-unused-vars
import * as borsh from "@coral-xyz/borsh"
import { borshAddress } from "../utils"
export interface RewardInfoFields {
/** Reward state */
rewardState: number
/** Reward open time */
openTime: BN
/** Reward end time */
endTime: BN
/** Reward last update time */
lastUpdateTime: BN
/** Q64.64 number indicates how many tokens per second are earned per unit of liquidity. */
emissionsPerSecondX64: BN
/** The total amount of reward emissioned */
rewardTotalEmissioned: BN
/** The total amount of claimed reward */
rewardClaimed: BN
/** Reward token mint. */
tokenMint: Address
/** Reward vault token account. */
tokenVault: Address
/** The owner that has permission to set reward param */
authority: Address
/**
* Q64.64 number that tracks the total tokens earned per unit of liquidity since the reward
* emissions were turned on.
*/
rewardGrowthGlobalX64: BN
}
export interface RewardInfoJSON {
/** Reward state */
rewardState: number
/** Reward open time */
openTime: string
/** Reward end time */
endTime: string
/** Reward last update time */
lastUpdateTime: string
/** Q64.64 number indicates how many tokens per second are earned per unit of liquidity. */
emissionsPerSecondX64: string
/** The total amount of reward emissioned */
rewardTotalEmissioned: string
/** The total amount of claimed reward */
rewardClaimed: string
/** Reward token mint. */
tokenMint: string
/** Reward vault token account. */
tokenVault: string
/** The owner that has permission to set reward param */
authority: string
/**
* Q64.64 number that tracks the total tokens earned per unit of liquidity since the reward
* emissions were turned on.
*/
rewardGrowthGlobalX64: string
}
export class RewardInfo {
/** Reward state */
readonly rewardState: number
/** Reward open time */
readonly openTime: BN
/** Reward end time */
readonly endTime: BN
/** Reward last update time */
readonly lastUpdateTime: BN
/** Q64.64 number indicates how many tokens per second are earned per unit of liquidity. */
readonly emissionsPerSecondX64: BN
/** The total amount of reward emissioned */
readonly rewardTotalEmissioned: BN
/** The total amount of claimed reward */
readonly rewardClaimed: BN
/** Reward token mint. */
readonly tokenMint: Address
/** Reward vault token account. */
readonly tokenVault: Address
/** The owner that has permission to set reward param */
readonly authority: Address
/**
* Q64.64 number that tracks the total tokens earned per unit of liquidity since the reward
* emissions were turned on.
*/
readonly rewardGrowthGlobalX64: BN
constructor(fields: RewardInfoFields) {
this.rewardState = fields.rewardState
this.openTime = fields.openTime
this.endTime = fields.endTime
this.lastUpdateTime = fields.lastUpdateTime
this.emissionsPerSecondX64 = fields.emissionsPerSecondX64
this.rewardTotalEmissioned = fields.rewardTotalEmissioned
this.rewardClaimed = fields.rewardClaimed
this.tokenMint = fields.tokenMint
this.tokenVault = fields.tokenVault
this.authority = fields.authority
this.rewardGrowthGlobalX64 = fields.rewardGrowthGlobalX64
}
static layout(property?: string) {
return borsh.struct(
[
borsh.u8("rewardState"),
borsh.u64("openTime"),
borsh.u64("endTime"),
borsh.u64("lastUpdateTime"),
borsh.u128("emissionsPerSecondX64"),
borsh.u64("rewardTotalEmissioned"),
borsh.u64("rewardClaimed"),
borshAddress("tokenMint"),
borshAddress("tokenVault"),
borshAddress("authority"),
borsh.u128("rewardGrowthGlobalX64"),
],
property
)
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
static fromDecoded(obj: any) {
return new RewardInfo({
rewardState: obj.rewardState,
openTime: obj.openTime,
endTime: obj.endTime,
lastUpdateTime: obj.lastUpdateTime,
emissionsPerSecondX64: obj.emissionsPerSecondX64,
rewardTotalEmissioned: obj.rewardTotalEmissioned,
rewardClaimed: obj.rewardClaimed,
tokenMint: obj.tokenMint,
tokenVault: obj.tokenVault,
authority: obj.authority,
rewardGrowthGlobalX64: obj.rewardGrowthGlobalX64,
})
}
static toEncodable(fields: RewardInfoFields) {
return {
rewardState: fields.rewardState,
openTime: fields.openTime,
endTime: fields.endTime,
lastUpdateTime: fields.lastUpdateTime,
emissionsPerSecondX64: fields.emissionsPerSecondX64,
rewardTotalEmissioned: fields.rewardTotalEmissioned,
rewardClaimed: fields.rewardClaimed,
tokenMint: fields.tokenMint,
tokenVault: fields.tokenVault,
authority: fields.authority,
rewardGrowthGlobalX64: fields.rewardGrowthGlobalX64,
}
}
toJSON(): RewardInfoJSON {
return {
rewardState: this.rewardState,
openTime: this.openTime.toString(),
endTime: this.endTime.toString(),
lastUpdateTime: this.lastUpdateTime.toString(),
emissionsPerSecondX64: this.emissionsPerSecondX64.toString(),
rewardTotalEmissioned: this.rewardTotalEmissioned.toString(),
rewardClaimed: this.rewardClaimed.toString(),
tokenMint: this.tokenMint,
tokenVault: this.tokenVault,
authority: this.authority,
rewardGrowthGlobalX64: this.rewardGrowthGlobalX64.toString(),
}
}
static fromJSON(obj: RewardInfoJSON): RewardInfo {
return new RewardInfo({
rewardState: obj.rewardState,
openTime: new BN(obj.openTime),
endTime: new BN(obj.endTime),
lastUpdateTime: new BN(obj.lastUpdateTime),
emissionsPerSecondX64: new BN(obj.emissionsPerSecondX64),
rewardTotalEmissioned: new BN(obj.rewardTotalEmissioned),
rewardClaimed: new BN(obj.rewardClaimed),
tokenMint: address(obj.tokenMint),
tokenVault: address(obj.tokenVault),
authority: address(obj.authority),
rewardGrowthGlobalX64: new BN(obj.rewardGrowthGlobalX64),
})
}
toEncodable() {
return RewardInfo.toEncodable(this)
}
}