Skip to content

Commit 76ff666

Browse files
committed
add API get balance rune, inscription
1 parent fd84153 commit 76ff666

File tree

3 files changed

+47
-18
lines changed
  • packages/extension-base/src

3 files changed

+47
-18
lines changed

packages/extension-base/src/constants/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export const CRON_AUTO_RECOVER_DOTSAMA_INTERVAL = 60000;
1010
export const CRON_AUTO_RECOVER_WEB3_INTERVAL = 90000;
1111
export const ACALA_REFRESH_CROWDLOAN_INTERVAL = 300000;
1212
export const ASTAR_REFRESH_BALANCE_INTERVAL = 60000;
13+
export const BITCOIN_REFRESH_BALANCE_INTERVAL = 600000;
1314
export const SUB_TOKEN_REFRESH_BALANCE_INTERVAL = 60000;
1415
export const CRON_REFRESH_NFT_INTERVAL = 7200000;
1516
export const CRON_REFRESH_MKT_CAMPAIGN_INTERVAL = 15 * BASE_MINUTE_INTERVAL;

packages/extension-base/src/services/balance-service/helpers/subscribe/bitcoin.ts

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
// SPDX-License-Identifier: Apache-2.0
33

44
import { _AssetType, _ChainAsset, _ChainInfo } from '@subwallet/chain-list/types';
5-
import { BitcoinBalanceMetadata } from '@subwallet/extension-base/background/KoniTypes';
5+
import { APIItemState, BitcoinBalanceMetadata } from '@subwallet/extension-base/background/KoniTypes';
6+
import { BITCOIN_REFRESH_BALANCE_INTERVAL } from '@subwallet/extension-base/constants';
67
import { _BitcoinApi } from '@subwallet/extension-base/services/chain-service/types';
78
import { _getChainNativeTokenSlug } from '@subwallet/extension-base/services/chain-service/utils';
89
import { BalanceItem, UtxoResponseItem } from '@subwallet/extension-base/types';
@@ -41,7 +42,7 @@ export const getTransferableBitcoinUtxos = async (bitcoinApi: _BitcoinApi, addre
4142
}
4243
};
4344

44-
async function getBitcoinBalance (bitcoinApi: _BitcoinApi, addresses: string[]): Promise<BalanceItem[]> {
45+
async function getBitcoinBalance (bitcoinApi: _BitcoinApi, addresses: string[]) {
4546
return await Promise.all(addresses.map(async (address) => {
4647
try {
4748
const [filteredUtxos, addressSummaryInfo] = await Promise.all([
@@ -51,7 +52,9 @@ async function getBitcoinBalance (bitcoinApi: _BitcoinApi, addresses: string[]):
5152

5253
console.log('addressSummaryInfo', addressSummaryInfo);
5354
const bitcoinBalanceMetadata = {
54-
inscriptionCount: addressSummaryInfo.total_inscription
55+
inscriptionCount: addressSummaryInfo.total_inscription,
56+
runeBalance: addressSummaryInfo.balance_rune,
57+
inscriptionBalance: addressSummaryInfo.balance_inscription
5558
} as BitcoinBalanceMetadata;
5659

5760
let balanceValue = new BigN(0);
@@ -77,22 +80,45 @@ async function getBitcoinBalance (bitcoinApi: _BitcoinApi, addresses: string[]):
7780
}));
7881
}
7982

80-
export const subscribeBitcoinBalance = async (addresses: string[], bitcoinApi: _BitcoinApi, callback: (rs: BalanceItem[]) => void) => {
81-
console.log('subscribeBitcoinBalanceBalance', addresses);
82-
83-
const getBalance = async (): Promise<BalanceItem[]> => {
84-
try {
85-
const balances = await getBitcoinBalance(bitcoinApi, addresses);
86-
87-
callback(balances);
88-
} catch (e) {
89-
console.error('Error while fetching cardano balance', e);
90-
}
83+
export function subscribeBitcoinBalance (addresses: string[], bitcoinApi: _BitcoinApi, callback: (rs: BalanceItem[]) => void): () => void {
84+
const getBalance = () => {
85+
getBitcoinBalance(bitcoinApi, addresses)
86+
.then((balances) => {
87+
return balances.map(({ balance, bitcoinBalanceMetadata }, index): BalanceItem => {
88+
return {
89+
address: addresses[index],
90+
tokenSlug: 'bitcoin',
91+
state: APIItemState.READY,
92+
free: balance,
93+
locked: '0',
94+
metadata: bitcoinBalanceMetadata
95+
};
96+
});
97+
})
98+
.catch((e) => {
99+
console.error('Error on get Bitcoin balance with token bitcoin', e);
100+
101+
return addresses.map((address): BalanceItem => {
102+
return {
103+
address: address,
104+
tokenSlug: 'bitcoin',
105+
state: APIItemState.READY,
106+
free: '0',
107+
locked: '0'
108+
};
109+
});
110+
})
111+
.then((items) => {
112+
callback(items);
113+
})
114+
.catch(console.error);
91115
};
92116

93-
await getBalance();
117+
const interval = setInterval(getBalance, BITCOIN_REFRESH_BALANCE_INTERVAL);
118+
119+
getBalance();
94120

95121
return () => {
96-
console.log('unsub');
122+
clearInterval(interval);
97123
};
98-
};
124+
}

packages/extension-base/src/services/chain-service/handler/bitcoin/strategy/BlockStream/types.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ export interface BitcoinAddressSummaryInfo {
3434
tx_count: number
3535
},
3636
balance: number,
37-
total_inscription: number
37+
total_inscription: number,
38+
balance_rune: string,
39+
balance_inscription: string,
3840
}
3941

4042
// todo: combine RunesByAddressResponse & RunesCollectionInfoResponse

0 commit comments

Comments
 (0)