From da100e80f21f3ff910311b52e8403fb4828abaa3 Mon Sep 17 00:00:00 2001 From: Tarik Gul <47201679+TarikGul@users.noreply.github.com> Date: Wed, 23 Oct 2024 18:36:22 -0700 Subject: [PATCH] Add isClaimed field to `api.derive.staking._stakerRewards` (#6007) * Add isClaimed field to `api.derive.staking._stakerRewards` * Fix isClaimed: false --- packages/api-derive/src/staking/stakerRewards.ts | 6 ++++-- packages/api-derive/src/staking/types.ts | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/api-derive/src/staking/stakerRewards.ts b/packages/api-derive/src/staking/stakerRewards.ts index 1dcca87824..cee0c301d6 100644 --- a/packages/api-derive/src/staking/stakerRewards.ts +++ b/packages/api-derive/src/staking/stakerRewards.ts @@ -29,7 +29,7 @@ function extractCompatRewards (claimedRewardsEras: Vec, ledger?: PalletStak return claimedRewardsEras.toArray().concat(l); } -function parseRewards (api: DeriveApi, stashId: AccountId, [erasPoints, erasPrefs, erasRewards]: ErasResult, exposures: DeriveStakerExposure[]): DeriveStakerReward[] { +function parseRewards (api: DeriveApi, stashId: AccountId, [erasPoints, erasPrefs, erasRewards]: ErasResult, exposures: DeriveStakerExposure[], claimedRewardsEras: Vec): DeriveStakerReward[] { return exposures.map(({ era, isEmpty, isValidator, nominating, validators: eraValidators }): DeriveStakerReward => { const { eraPoints, validators: allValPoints } = erasPoints.find((p) => p.era.eq(era)) || { eraPoints: BN_ZERO, validators: {} as DeriveEraValPoints }; const { eraReward } = erasRewards.find((r) => r.era.eq(era)) || { eraReward: api.registry.createType('Balance') }; @@ -84,6 +84,7 @@ function parseRewards (api: DeriveApi, stashId: AccountId, [erasPoints, erasPref return { era, eraReward, + isClaimed: claimedRewardsEras.some((c) => c.eq(era)), isEmpty, isValidator, nominating, @@ -152,6 +153,7 @@ function filterRewards (eras: EraIndex[], valInfo: [string, DeriveStakingQuery][ .filter(({ validators }) => Object.keys(validators).length !== 0) .map((reward) => objectSpread({}, reward, { + isClaimed: filter.some((f) => reward.era.eq(f)), nominators: reward.nominating.filter((n) => reward.validators[n.validatorId]) }) ); @@ -182,7 +184,7 @@ export function _stakerRewards (instanceId: string, api: DeriveApi): (accountIds const allRewards = queries.map(({ claimedRewardsEras, stakingLedger, stashId }, index): DeriveStakerReward[] => (!stashId || (!stakingLedger && !claimedRewardsEras)) ? [] - : parseRewards(api, stashId, erasResult, exposures[index]) + : parseRewards(api, stashId, erasResult, exposures[index], claimedRewardsEras) ); if (withActive) { diff --git a/packages/api-derive/src/staking/types.ts b/packages/api-derive/src/staking/types.ts index 02bbccef5e..095d6f7605 100644 --- a/packages/api-derive/src/staking/types.ts +++ b/packages/api-derive/src/staking/types.ts @@ -93,6 +93,7 @@ export interface DeriveStakerRewardValidator { export interface DeriveStakerReward { era: EraIndex; eraReward: Balance; + isClaimed: boolean; isEmpty: boolean; isValidator: boolean; nominating: DeriveEraExposureNominating[];