Skip to content

Commit 1bed656

Browse files
authored
Fix isClaimed for edgecase with non validator Ids (#6027)
1 parent e750800 commit 1bed656

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

packages/api-derive/src/staking/stakerRewards.ts

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ function parseRewards (api: DeriveApi, stashId: AccountId, [erasPoints, erasPref
8484
return {
8585
era,
8686
eraReward,
87+
// This might not always be accurate as you need validator account information in order to see if the rewards have been claimed.
88+
// This is possibly adjusted in `filterRewards` when need be.
8789
isClaimed: claimedRewardsEras.some((c) => c.eq(era)),
8890
isEmpty,
8991
isValidator,
@@ -151,12 +153,26 @@ function filterRewards (eras: EraIndex[], valInfo: [string, DeriveStakingQuery][
151153
return true;
152154
})
153155
.filter(({ validators }) => Object.keys(validators).length !== 0)
154-
.map((reward) =>
155-
objectSpread({}, reward, {
156-
isClaimed: reward.isClaimed,
156+
.map((reward) => {
157+
let isClaimed = reward.isClaimed;
158+
const valKeys = Object.keys(reward.validators);
159+
160+
if (!reward.isClaimed && valKeys.length) {
161+
for (const key of valKeys) {
162+
const info = queryValidators.find((i) => i.accountId.toString() === key);
163+
164+
if (info) {
165+
isClaimed = info.claimedRewardsEras.toArray().some((era) => era.eq(reward.era));
166+
break;
167+
}
168+
}
169+
}
170+
171+
return objectSpread({}, reward, {
172+
isClaimed,
157173
nominators: reward.nominating.filter((n) => reward.validators[n.validatorId])
158-
})
159-
);
174+
});
175+
});
160176
}
161177

162178
export function _stakerRewardsEras (instanceId: string, api: DeriveApi): (eras: EraIndex[], withActive?: boolean) => Observable<ErasResult> {

0 commit comments

Comments
 (0)