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, stakePool: PublicKey, poolId: number, epochToUpdate: number, isStartingEpoch: boolean ) => { const poolAccounts = await pdas.deriveRewardPoolPdas( program.programId, stakePool, poolId, epochToUpdate - 1 ); if (isStartingEpoch) { return await program.methods.updateRewardRecord().accounts({ stakePool, rewardPool: poolAccounts.rewardPool, curRewardRecord: poolAccounts.nextRewardRecord, prevRewardRecord: poolAccounts.nextRewardRecord, rewardTokenAccount: poolAccounts.rewardTokenAccount, allocatedTokenAccount: poolAccounts.allocatedTokenAccount, }); } return await program.methods.updateRewardRecord().accounts({ stakePool, rewardPool: poolAccounts.rewardPool, curRewardRecord: poolAccounts.nextRewardRecord, prevRewardRecord: poolAccounts.rewardRecord, rewardTokenAccount: poolAccounts.rewardTokenAccount, allocatedTokenAccount: poolAccounts.allocatedTokenAccount, }); }; export const updateRewardRecordInstruction = async ( program: Program, stakePool: PublicKey, poolId: number, epochToUpdate: number, isStartingEpoch: boolean ) => { return ( await getMethodBuilder( program, stakePool, poolId, epochToUpdate, isStartingEpoch ) ).instruction(); }; export const updateRewardRecordRpc = async ( program: Program, stakePool: PublicKey, poolId: number, epochToUpdate: number, isStartingEpoch: boolean, signers: Signer[] ) => { return ( await getMethodBuilder( program, stakePool, poolId, epochToUpdate, isStartingEpoch ) ) .signers(signers) .rpc(); };