diff --git a/governance/pyth_staking_sdk/src/pyth-staking-client.ts b/governance/pyth_staking_sdk/src/pyth-staking-client.ts index 64cabaa0c2..cd43179183 100644 --- a/governance/pyth_staking_sdk/src/pyth-staking-client.ts +++ b/governance/pyth_staking_sdk/src/pyth-staking-client.ts @@ -172,7 +172,9 @@ export class PythStakingClient { publisher: PublicKey, ) { return this.integrityPoolProgram.account.delegationRecord - .fetch(getDelegationRecordAddress(stakeAccountPositions, publisher)) + .fetchNullable( + getDelegationRecordAddress(stakeAccountPositions, publisher), + ) .then((record) => convertBNToBigInt(record)); } @@ -685,10 +687,23 @@ export class PythStakingClient { ), ); + const delegationRecords = await Promise.all( + publishers.map(({ pubkey }) => + this.getDelegationRecord(stakeAccountPositions, pubkey), + ), + ); + + const currentEpoch = await getCurrentEpoch(this.connection); + + // Filter out delegationRecord that are up to date + const filteredPublishers = publishers.filter((_, index) => { + return !(delegationRecords[index]?.lastEpoch === currentEpoch); + }); + // anchor does not calculate the correct pda for other programs // therefore we need to manually calculate the pdas const advanceDelegationRecordInstructions = await Promise.all( - publishers.map(({ pubkey, stakeAccount }) => + filteredPublishers.map(({ pubkey, stakeAccount }) => this.integrityPoolProgram.methods .advanceDelegationRecord() .accountsPartial({ @@ -761,7 +776,7 @@ export class PythStakingClient { totalRewards += BigInt("0x" + buffer.toString("hex")); } - const delegationRecords = await Promise.allSettled( + const delegationRecords = await Promise.all( instructions.publishers.map(({ pubkey }) => this.getDelegationRecord(stakeAccountPositions, pubkey), ), @@ -769,11 +784,11 @@ export class PythStakingClient { let lowestEpoch: bigint | undefined; for (const record of delegationRecords) { - if (record.status === "fulfilled") { - const { lastEpoch } = record.value; - if (lowestEpoch === undefined || lastEpoch < lowestEpoch) { - lowestEpoch = lastEpoch; - } + if ( + record !== null && + (lowestEpoch === undefined || record.lastEpoch < lowestEpoch) + ) { + lowestEpoch = record.lastEpoch; } }