import { BN, Program } from "@project-serum/anchor"; import { PublicKey, Signer } from "@solana/web3.js"; import { PsyStake } from "../../psy_stake"; import * as pdas from "../../pdas"; const getMethodBuilder = async ( program: Program, recordOwner: PublicKey, stakePool: PublicKey, ownerTokenAccount: PublicKey, startRewardRecordEpoch: number, endRewardRecordEpoch: number, poolId: number ) => { const [stakingRecord] = await pdas.deriveStakingRecord( program.programId, recordOwner, stakePool ); const [rewardPool] = await pdas.deriveRewardPool( program.programId, stakePool, poolId ); const [allocatedTokenAccount] = await pdas.deriveAllocatedTokenAccount( program.programId, rewardPool ); const [startRewardRecord] = await pdas.deriveRewardRecord( program.programId, rewardPool, startRewardRecordEpoch ); const [endRewardRecord] = await pdas.deriveRewardRecord( program.programId, rewardPool, endRewardRecordEpoch ); return await program.methods.claimReward().accounts({ recordOwner: recordOwner, stakePool, stakingRecord, rewardPool, startRewardRecord, endRewardRecord, ownerTokenAccount, allocatedTokenAccount, }); }; export const claimRewardInstruction = async ( program: Program, recordOwner: PublicKey, stakePool: PublicKey, ownerTokenAccount: PublicKey, startRewardRecordEpoch: number, endRewardRecordEpoch: number, poolId: number ) => { return ( await getMethodBuilder( program, recordOwner, stakePool, ownerTokenAccount, startRewardRecordEpoch, endRewardRecordEpoch, poolId ) ).instruction(); }; export const claimRewardRpc = async ( program: Program, recordOwner: PublicKey, stakePool: PublicKey, ownerTokenAccount: PublicKey, startRewardRecordEpoch: number, endRewardRecordEpoch: number, poolId: number, signers: Signer[] ) => { return ( await getMethodBuilder( program, recordOwner, stakePool, ownerTokenAccount, startRewardRecordEpoch, endRewardRecordEpoch, poolId ) ) .signers(signers) .rpc(); };