import { BN, BorshAccountsCoder, Idl } from "@coral-xyz/anchor"; import { Staking } from "../artifacts/staking"; import { StakingSpl } from "../artifacts/staking_spl"; import * as IDL from "../artifacts/staking.json"; import * as IDL_V2 from "../artifacts/staking_spl.json"; import { PublicKey } from "@solana/web3.js"; export type SolCatStakingType = Staking; export type V2StakingType = StakingSpl; export const SolCatStakingIDL = IDL as Idl; export const V2StakingIDL = IDL_V2 as Idl; export const solCatAccountsCoder = new BorshAccountsCoder(SolCatStakingIDL); export const v2AccountsCoder = new BorshAccountsCoder(V2StakingIDL); export enum AccountName { Config = "Config", FlexibleVault = "FlexibleVault", LockupVault = "LockupVault", LockupStakingAccount = "LockupStakingAccount", } export type ConfigData = { bump: number; admin: PublicKey; mint: PublicKey; } export type ConfigDataV2 = { bump: number; admin: PublicKey; feePercentage: number; } export type FlexibleVaultData = { bump: number; totalSupply: BN; rewardPerTokenStored: BN; rewardRate: BN; lastUpdateTime: BN; withdrawalDelayTime: BN; totalRewardClaimed: BN; } export type FlexibleVaultDataV2 = { bump: number; mint: PublicKey; totalSupply: BN; rewardPerTokenStored: BN; rewardRate: BN; lastUpdateTime: BN; withdrawalDelayTime: BN; totalRewardClaimed: BN; } export type LockupVaultData = { bump: number; index: BN; apy: BN; lockupDuration: BN; minStakeAmount: BN; totalLockedAmount: BN; totalRewardClaimed: BN; } export type LockupVaultDataV2 = { bump: number; mint: PublicKey; index: BN; apy: BN; lockupDuration: BN; minStakeAmount: BN; totalLockedAmount: BN; totalRewardClaimed: BN; } export type LockupStakingAccountData = { bump: number; index: BN; owner: PublicKey; lockupVault: PublicKey; committedApy: BN; lockedAmount: BN; lockedAt: BN; unlocked: boolean; } export type LockupStakingAccountDataV2 = { bump: number; mint: PublicKey; index: BN; owner: PublicKey; committedApy: BN; lockedAmount: BN; lockedAt: BN; unlocked: boolean; } export type WithdrawPositionData = { bump: number; index: number; user: PublicKey; amount: BN; startDelayTime: BN; claimed: boolean; } export type WithdrawPositionDataV2 = { bump: number; mint: PublicKey; positionIndex: number; user: PublicKey; amount: BN; startDelayTime: BN; claimed: boolean; } export type WithdrawPositionInfo = { index: number; amount: string; startDelayTime: string; unlockTime: string; claimed: boolean; } export type WithdrawPositionInfoV2 = { mint: string; positionIndex: number; amount: string; startDelayTime: string; unlockTime: string; claimed: boolean; } export type FlexibleStakingAccountData = { bump: number; owner: PublicKey; balance: BN; reward: BN; userRewardPerTokenPaid: BN; } export type FlexibleStakingAccountDataV2 = { bump: number; mint: PublicKey; owner: PublicKey; balance: BN; reward: BN; userRewardPerTokenPaid: BN; } export type ProtocolV2StakingInfo = { admin: string; stakingInfo: TokenStakingInfo; } export type TokenStakingInfo = { [key: string]: TokenStakingInfoDetails; } export type TokenStakingInfoDetails = { flexibleRewardRate: string; flexibleApr: number; flexibleWithdrawalDelayTime: string; lockupApy: number[]; lockupDuration: string[]; minLockupAmount: string[]; } export type UserFlexibleStakingInfo = { [key: string]: UserFlexibleStakingByMintDetails; } export type UserFlexibleStakingByMintDetails = { totalStakedAmount: string; currentApr: number; withdrawDelayTime: string; pendingReward: string; unstakePending: string; redeemPending: string; withdrawPositions: (WithdrawPositionInfo | WithdrawPositionInfoV2)[]; } export type UserLockupStakingInfo = { [key: string]: UserLockupStakingByMintDetails; } export type LockupStakingAccountByVault = { bump: number, index: number, lockupVault: string, lockupVaultIndex: number, lockupDuration: string, committedApy: number, lockedAmount: string, lockedAt: string, unlocked: boolean, }; export type UserLockupStakingByMintDetails = { totalLockedAmount: string; maturedAmount: string; lockupStakingAccounts: LockupStakingAccountByVault[]; } export type SolCatStakingProtocolInfo = { admin: string; mint: string; flexibleRewardRate: string; flexibleApr: number; flexibleWithdrawalDelayTime: string; totalFlexibleStaked: string; totalFlexibleReward: string; lockupApy: number[]; lockupDuration: string[]; minLockupAmount: string[]; totalLockupStaked: string[]; totalLockupReward: string[]; } export type FlexibleVaultParams = { rewardRate: BN; withdrawalDelayTime: BN; } export type LockupVaultParams = { index: number; apy: number; lockupDuration: BN; minStakeAmount: BN; }