diff --git a/packages/wallet/src/services/BalanceTracker.ts b/packages/wallet/src/services/BalanceTracker.ts index 9a4b30af9f6..710ae9693f6 100644 --- a/packages/wallet/src/services/BalanceTracker.ts +++ b/packages/wallet/src/services/BalanceTracker.ts @@ -31,6 +31,24 @@ export const createBalanceTracker = ( delegationTracker: DelegationTracker ): BalanceTracker => ({ rewardAccounts: { + availableRewards$: delegationTracker.rewardAccounts$.pipe( + map((accounts) => + accounts + .filter(({ dRepDelegatee }) => { + if (!dRepDelegatee) return false; + + const { delegateRepresentative } = dRepDelegatee; + + return ( + Cardano.isDRepAlwaysAbstain(delegateRepresentative) || + Cardano.isDRepAlwaysNoConfidence(delegateRepresentative) || + (Cardano.isDrepInfo(delegateRepresentative) && delegateRepresentative.active) + ); + }) + .reduce((sum, { rewardBalance }) => sum + rewardBalance, 0n) + ), + distinctUntilChanged() + ), // 'Unregistering' balance will be reflected in utxo deposit$: computeDepositCoin( protocolParameters$, diff --git a/packages/wallet/src/services/types.ts b/packages/wallet/src/services/types.ts index 2bf95d378be..677fba6e783 100644 --- a/packages/wallet/src/services/types.ts +++ b/packages/wallet/src/services/types.ts @@ -21,6 +21,7 @@ export interface TransactionalObservables { export interface BalanceTracker { rewardAccounts: { + availableRewards$: Observable; rewards$: Observable; deposit$: Observable; }; diff --git a/packages/wallet/test/integration/CustomObservableWallet.test.ts b/packages/wallet/test/integration/CustomObservableWallet.test.ts index 69732bded40..16a4cfa6a4d 100644 --- a/packages/wallet/test/integration/CustomObservableWallet.test.ts +++ b/packages/wallet/test/integration/CustomObservableWallet.test.ts @@ -93,6 +93,7 @@ describe('CustomObservableWallet', () => { }), balance: { rewardAccounts: { + availableRewards$: of(100_000n), // can entirely bypass SDK and it's utils, providing custom observables deposit$: of(200_000n), rewards$: pollProvider({ diff --git a/packages/web-extension/src/observableWallet/util.ts b/packages/web-extension/src/observableWallet/util.ts index f2152b042bc..1c89b206a86 100644 --- a/packages/web-extension/src/observableWallet/util.ts +++ b/packages/web-extension/src/observableWallet/util.ts @@ -103,6 +103,7 @@ export const observableWalletProperties: RemoteApiProperties = assetInfo$: RemoteApiPropertyType.HotObservable, balance: { rewardAccounts: { + availableRewards$: RemoteApiPropertyType.HotObservable, deposit$: RemoteApiPropertyType.HotObservable, rewards$: RemoteApiPropertyType.HotObservable },