Skip to content

Commit 3641cfc

Browse files
committed
add API get balance rune, inscription
1 parent fd84153 commit 3641cfc

File tree

3 files changed

+53
-21
lines changed
  • packages/extension-base/src

3 files changed

+53
-21
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: 49 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
// Copyright 2019-2022 @subwallet/extension-base
22
// SPDX-License-Identifier: Apache-2.0
33

4-
import { _AssetType, _ChainAsset, _ChainInfo } from '@subwallet/chain-list/types';
5-
import { BitcoinBalanceMetadata } from '@subwallet/extension-base/background/KoniTypes';
4+
import { APIItemState, BitcoinBalanceMetadata } from '@subwallet/extension-base/background/KoniTypes';
5+
import { BITCOIN_REFRESH_BALANCE_INTERVAL } from '@subwallet/extension-base/constants';
66
import { _BitcoinApi } from '@subwallet/extension-base/services/chain-service/types';
7-
import { _getChainNativeTokenSlug } from '@subwallet/extension-base/services/chain-service/utils';
87
import { BalanceItem, UtxoResponseItem } from '@subwallet/extension-base/types';
98
import { filteredOutTxsUtxos, getInscriptionUtxos, getRuneUtxos } from '@subwallet/extension-base/utils';
109
import BigN from 'bignumber.js';
@@ -41,7 +40,7 @@ export const getTransferableBitcoinUtxos = async (bitcoinApi: _BitcoinApi, addre
4140
}
4241
};
4342

44-
async function getBitcoinBalance (bitcoinApi: _BitcoinApi, addresses: string[]): Promise<BalanceItem[]> {
43+
async function getBitcoinBalance (bitcoinApi: _BitcoinApi, addresses: string[]) {
4544
return await Promise.all(addresses.map(async (address) => {
4645
try {
4746
const [filteredUtxos, addressSummaryInfo] = await Promise.all([
@@ -51,7 +50,9 @@ async function getBitcoinBalance (bitcoinApi: _BitcoinApi, addresses: string[]):
5150

5251
console.log('addressSummaryInfo', addressSummaryInfo);
5352
const bitcoinBalanceMetadata = {
54-
inscriptionCount: addressSummaryInfo.total_inscription
53+
inscriptionCount: addressSummaryInfo.total_inscription,
54+
runeBalance: addressSummaryInfo.balance_rune,
55+
inscriptionBalance: addressSummaryInfo.balance_inscription
5556
} as BitcoinBalanceMetadata;
5657

5758
let balanceValue = new BigN(0);
@@ -70,29 +71,57 @@ async function getBitcoinBalance (bitcoinApi: _BitcoinApi, addresses: string[]):
7071
return {
7172
balance: '0',
7273
bitcoinBalanceMetadata: {
73-
inscriptionCount: 0
74+
inscriptionCount: 0,
75+
runeBalance: 0,
76+
inscriptionBalance: 0
7477
}
7578
};
7679
}
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-NATIVE-BTC',
91+
state: APIItemState.READY,
92+
free: balance,
93+
locked: (
94+
parseInt(bitcoinBalanceMetadata.runeBalance.toString()) +
95+
parseInt(bitcoinBalanceMetadata.inscriptionBalance.toString())
96+
).toString(),
97+
metadata: bitcoinBalanceMetadata
98+
};
99+
});
100+
})
101+
.catch((e) => {
102+
console.error('Error on get Bitcoin balance with token bitcoin', e);
103+
104+
return addresses.map((address): BalanceItem => {
105+
return {
106+
address: address,
107+
tokenSlug: 'bitcoin',
108+
state: APIItemState.READY,
109+
free: '0',
110+
locked: '0'
111+
};
112+
});
113+
})
114+
.then((items) => {
115+
callback(items);
116+
})
117+
.catch(console.error);
91118
};
92119

93-
await getBalance();
120+
const interval = setInterval(getBalance, BITCOIN_REFRESH_BALANCE_INTERVAL);
121+
122+
getBalance();
94123

95124
return () => {
96-
console.log('unsub');
125+
clearInterval(interval);
97126
};
98-
};
127+
}

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)