1
1
// Copyright 2019-2022 @subwallet/extension-base
2
2
// SPDX-License-Identifier: Apache-2.0
3
3
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 ' ;
6
6
import { _BitcoinApi } from '@subwallet/extension-base/services/chain-service/types' ;
7
- import { _getChainNativeTokenSlug } from '@subwallet/extension-base/services/chain-service/utils' ;
8
7
import { BalanceItem , UtxoResponseItem } from '@subwallet/extension-base/types' ;
9
8
import { filteredOutTxsUtxos , getInscriptionUtxos , getRuneUtxos } from '@subwallet/extension-base/utils' ;
10
9
import BigN from 'bignumber.js' ;
@@ -41,7 +40,7 @@ export const getTransferableBitcoinUtxos = async (bitcoinApi: _BitcoinApi, addre
41
40
}
42
41
} ;
43
42
44
- async function getBitcoinBalance ( bitcoinApi : _BitcoinApi , addresses : string [ ] ) : Promise < BalanceItem [ ] > {
43
+ async function getBitcoinBalance ( bitcoinApi : _BitcoinApi , addresses : string [ ] ) {
45
44
return await Promise . all ( addresses . map ( async ( address ) => {
46
45
try {
47
46
const [ filteredUtxos , addressSummaryInfo ] = await Promise . all ( [
@@ -51,7 +50,9 @@ async function getBitcoinBalance (bitcoinApi: _BitcoinApi, addresses: string[]):
51
50
52
51
console . log ( 'addressSummaryInfo' , addressSummaryInfo ) ;
53
52
const bitcoinBalanceMetadata = {
54
- inscriptionCount : addressSummaryInfo . total_inscription
53
+ inscriptionCount : addressSummaryInfo . total_inscription ,
54
+ runeBalance : addressSummaryInfo . balance_rune ,
55
+ inscriptionBalance : addressSummaryInfo . balance_inscription
55
56
} as BitcoinBalanceMetadata ;
56
57
57
58
let balanceValue = new BigN ( 0 ) ;
@@ -70,29 +71,57 @@ async function getBitcoinBalance (bitcoinApi: _BitcoinApi, addresses: string[]):
70
71
return {
71
72
balance : '0' ,
72
73
bitcoinBalanceMetadata : {
73
- inscriptionCount : 0
74
+ inscriptionCount : 0 ,
75
+ runeBalance : 0 ,
76
+ inscriptionBalance : 0
74
77
}
75
78
} ;
76
79
}
77
80
} ) ) ;
78
81
}
79
82
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 ) ;
91
118
} ;
92
119
93
- await getBalance ( ) ;
120
+ const interval = setInterval ( getBalance , BITCOIN_REFRESH_BALANCE_INTERVAL ) ;
121
+
122
+ getBalance ( ) ;
94
123
95
124
return ( ) => {
96
- console . log ( 'unsub' ) ;
125
+ clearInterval ( interval ) ;
97
126
} ;
98
- } ;
127
+ }
0 commit comments