Skip to content

Commit 3fcbf6b

Browse files
authored
Add total balance calculation with private
Feature/add firo network
2 parents c69d076 + 1ee08ae commit 3fcbf6b

4 files changed

Lines changed: 60 additions & 4 deletions

File tree

packages/extension/src/providers/bitcoin/types/bitcoin-network.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,34 @@ import type HaskoinAPI from '@/providers/bitcoin/libs/api';
2020
import type SSAPI from '@/providers/bitcoin/libs/api-ss';
2121
import type FiroAPI from '@/providers/bitcoin/libs/api-firo';
2222
import { NFTCollection } from '@/types/nft';
23+
import { calculateCurrentSparkBalance } from '@/libs/utils/updateAndSync/calculateCurrentSparkBalance';
24+
25+
type PrivateBalanceResolver = () => Promise<string>;
26+
27+
const privateBalanceResolvers: Record<string, PrivateBalanceResolver> = {
28+
FIRO: calculateCurrentSparkBalance,
29+
};
30+
31+
const getFormattedBalanceTotal = async ({
32+
networkName,
33+
publicBalance,
34+
decimals,
35+
}: {
36+
networkName: string;
37+
publicBalance: string;
38+
decimals: number;
39+
}) => {
40+
const resolvePrivateBalance = privateBalanceResolvers[networkName.toUpperCase()];
41+
if (!resolvePrivateBalance) return '';
42+
43+
const privateBalance = await resolvePrivateBalance();
44+
const privateBalanceFormatted = fromBase(privateBalance, decimals);
45+
const totalBalance = new BigNumber(publicBalance)
46+
.plus(privateBalanceFormatted)
47+
.toString();
48+
49+
return formatFloatingPointValue(totalBalance).value;
50+
};
2351

2452
export enum PaymentType {
2553
P2PKH = 'p2pkh',
@@ -127,6 +155,12 @@ export class BitcoinNetwork extends BaseNetwork {
127155
const usdBalance = new BigNumber(userBalance).times(
128156
marketData[0]?.current_price ?? 0,
129157
);
158+
const balanceTotal = await getFormattedBalanceTotal({
159+
networkName: this.currencyName,
160+
publicBalance: userBalance,
161+
decimals: this.decimals,
162+
});
163+
130164
const nativeAsset: AssetsType = {
131165
balance: balance,
132166
balancef: formatFloatingPointValue(userBalance).value,
@@ -137,6 +171,7 @@ export class BitcoinNetwork extends BaseNetwork {
137171
symbol: this.currencyName,
138172
value: marketData[0]?.current_price?.toString() ?? '0',
139173
valuef: marketData[0]?.current_price?.toString() ?? '0',
174+
balanceTotal,
140175
contract: '',
141176
decimals: this.decimals,
142177
sparkline: marketData.length

packages/extension/src/types/provider.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ export interface AssetsType {
219219
icon: string;
220220
balance: string;
221221
balancef: string;
222+
balanceTotal?: string;
222223
balanceUSD: number;
223224
balanceUSDf: string;
224225
value: string;

packages/extension/src/ui/action/views/asset-detail-view/index.vue

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,21 @@
5656
</div>
5757
<div class="asset-detail-view__balance-amount">
5858
<span class="asset-detail-view__balance-value">{{
59-
token.balancef
59+
token.balanceTotal || token.balancef
6060
}}</span>
6161
<span class="asset-detail-view__balance-symbol">{{
6262
token.symbol
6363
}}</span>
6464
</div>
6565
<p class="asset-detail-view__balance-usd">
66-
≈ {{ $filters.parseCurrency(token.balanceUSDf) }}
66+
67+
{{
68+
$filters.parseCurrency(
69+
token.balanceTotal
70+
? Number(token.balanceTotal) * Number(token.valuef)
71+
: token.balanceUSDf,
72+
)
73+
}}
6774
</p>
6875
</div>
6976

packages/extension/src/ui/action/views/network-assets/components/network-assets-item.vue

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
</h4>
1717
</tooltip>
1818
<p class="asset-item__balance">
19-
{{ token.balancef }}
19+
{{ token.balanceTotal || token.balancef }}
2020
<span v-if="token.symbol.length <= 6" class="asset-item__symbol">
2121
{{ token.symbol }}
2222
</span>
@@ -48,7 +48,7 @@
4848
<!-- Value -->
4949
<div class="asset-item__value">
5050
<h4 class="asset-item__usd">
51-
{{ $filters.parseCurrency(token.balanceUSD) }}
51+
{{ $filters.parseCurrency(displayBalanceUSD) }}
5252
</h4>
5353
<p class="asset-item__price">
5454
{{ $filters.parseCurrency(token.value) }}
@@ -169,6 +169,19 @@ const isCustomToken = computed(() => {
169169
);
170170
});
171171
172+
const displayBalanceUSD = computed(() => {
173+
const hasExtraBalance = !!props.token.balanceTotal;
174+
if (!hasExtraBalance) return props.token.balanceUSD;
175+
176+
const totalBalance = Number(props.token.balanceTotal);
177+
const tokenPrice = Number(props.token.value);
178+
if (!Number.isFinite(totalBalance) || !Number.isFinite(tokenPrice)) {
179+
return props.token.balanceUSD;
180+
}
181+
182+
return totalBalance * tokenPrice;
183+
});
184+
172185
const emit = defineEmits<{
173186
(e: 'update:tokens'): void;
174187
(e: 'open:buy-action', token: AssetsType): void;

0 commit comments

Comments
 (0)