@@ -34,7 +34,6 @@ async function getAPI(cfg: BitcoindConfig, method: string) {
34
34
return data ;
35
35
}
36
36
37
- const net = require ( 'net' )
38
37
const ElectrumClient = require ( "@lily-technologies/electrum-client" ) ;
39
38
const ELECTRUM_HOST = process . env . ELECTRUM_HOST || "electrs" ;
40
39
const ELECTRUM_PORT = process . env . ELECTRUM_PORT || 50001 ;
@@ -43,77 +42,150 @@ const electrumConfig = {
43
42
version : "1.4" ,
44
43
}
45
44
45
+ const electrumPersistencePolicy = {
46
+ retryPeriod : 10000 ,
47
+ maxRetry : 3 ,
48
+ pingPeriod : 120000 ,
49
+ callback : null
50
+ }
51
+
46
52
export async function getElectrumVersion ( ) {
47
- let electrumClient = new ElectrumClient ( ELECTRUM_PORT , ELECTRUM_HOST , "tcp" ) ;
48
- const initClient = await electrumClient . initElectrum ( electrumConfig ) ;
49
- const version = initClient . versionInfo [ 0 ]
50
- return version ;
53
+ try {
54
+ let electrumClient = new ElectrumClient ( ELECTRUM_PORT , ELECTRUM_HOST , "tcp" ) ;
55
+ const initClient = await electrumClient . initElectrum ( electrumConfig , electrumPersistencePolicy ) ;
56
+ const version = initClient . versionInfo [ 0 ]
57
+ return version ;
58
+ } catch ( error ) {
59
+ console . error ( "Error loading data from Electrum server:" , error ) ;
60
+ return null ;
61
+ }
51
62
}
52
63
53
64
export async function getElectrumBlockHeight ( ) {
54
- const electrumClient = new ElectrumClient ( ELECTRUM_PORT , ELECTRUM_HOST , "tcp" ) ;
55
- const initClient = await electrumClient . initElectrum ( electrumConfig ) ;
56
- const headers = await initClient . blockchainHeaders_subscribe ( ) ;
57
- const height = headers . height
58
- console . log ( height )
59
- return height ;
65
+ try {
66
+ const electrumClient = new ElectrumClient ( ELECTRUM_PORT , ELECTRUM_HOST , "tcp" ) ;
67
+ const initClient = await electrumClient . initElectrum ( electrumConfig ) ;
68
+ const headers = await initClient . blockchainHeaders_subscribe ( ) ;
69
+ const height = headers . height
70
+ return height ;
71
+ } catch ( error ) {
72
+ console . error ( "Error loading data from Electrum server:" , error ) ;
73
+ return null ;
74
+ }
60
75
}
61
76
62
77
export async function getBlockInfo ( ) {
63
- const json = await getAPI ( cfg , 'getblockchaininfo' ) ;
64
- const res = json . result ;
65
- return {
66
- chain : res . chain ,
67
- blocks : res . blocks ,
68
- chainSize : res . size_on_disk ,
69
- verificationProgress : res . verificationprogress ,
70
- pruned : res . pruned ,
71
- difficulty : res . difficulty ,
78
+ try {
79
+ const json = await getAPI ( cfg , 'getblockchaininfo' ) ;
80
+ const res = json . result ;
81
+ return {
82
+ chain : res . chain ,
83
+ blocks : res . blocks ,
84
+ chainSize : res . size_on_disk ,
85
+ verificationProgress : res . verificationprogress ,
86
+ pruned : res . pruned ,
87
+ difficulty : res . difficulty ,
88
+ }
89
+ } catch ( error ) {
90
+ console . error ( "Error loading data from bitcoind" , error ) ;
91
+ return {
92
+ chain : null ,
93
+ blocks : null ,
94
+ chainSize : null ,
95
+ verificationProgress : null ,
96
+ pruned : null ,
97
+ difficulty : null ,
98
+ }
72
99
}
73
100
}
74
101
75
102
export async function getConnectionCount ( ) {
76
- const json = await getAPI ( cfg , 'getconnectioncount' ) ;
77
- return ( json . result . result )
103
+ try {
104
+ const json = await getAPI ( cfg , 'getconnectioncount' ) ;
105
+ return ( json . result . result )
106
+ } catch ( error ) {
107
+ console . error ( "Error loading data from bitcoind" , error ) ;
108
+ return null ;
109
+ }
78
110
}
79
111
80
112
export async function getNetworkInfo ( ) {
81
- const json = await getAPI ( cfg , 'getnetworkinfo' ) ;
82
- return ( json . result )
113
+ try {
114
+ const json = await getAPI ( cfg , 'getnetworkinfo' ) ;
115
+ return ( json . result )
116
+ } catch ( error ) {
117
+ console . error ( "Error loading data from bitcoind" , error ) ;
118
+ return null ;
119
+ }
83
120
}
84
121
85
122
export async function getMiningInfo ( ) {
86
- const json = await getAPI ( cfg , 'getmininginfo' ) ;
87
- const res = json . result ;
88
- return {
89
- hashrate : res . networkhashps ,
123
+ try {
124
+ const json = await getAPI ( cfg , 'getmininginfo' ) ;
125
+ const res = json . result ;
126
+ return {
127
+ hashrate : res . networkhashps
128
+ }
129
+ } catch ( error ) {
130
+ console . error ( "Error loading data from bitcoind" , error ) ;
131
+ return {
132
+ hashrate : null
133
+ }
90
134
}
91
135
}
92
136
93
137
export async function getMempoolInfo ( ) {
94
- const json = await getAPI ( cfg , 'getmempoolinfo' ) ;
95
- const res = json . result ;
96
- return {
97
- transactions : res . size ,
98
- usage : res . usage ,
99
- totalFee : res . total_fee ,
100
- minFee : res . mempoolminfee ,
138
+ try {
139
+ const json = await getAPI ( cfg , 'getmempoolinfo' ) ;
140
+ const res = json . result ;
141
+ return {
142
+ transactions : res . size ,
143
+ usage : res . usage ,
144
+ totalFee : res . total_fee ,
145
+ minFee : res . mempoolminfee ,
146
+ }
147
+ } catch ( error ) {
148
+ console . error ( "Error loading data from bitcoind" , error ) ;
149
+ return {
150
+ transactions : null ,
151
+ usage : null ,
152
+ totalFee : null ,
153
+ minFee : null
154
+ }
101
155
}
102
156
}
103
157
104
158
export async function getCurrentBlock ( ) {
105
- const url = 'https://blockchain.info/latestblock' ;
106
- const response = await fetch ( url ) ;
107
- const data = await response . json ( ) ;
108
- return ( data . height ) ;
159
+ try {
160
+ const url = 'https://blockchain.info/latestblock' ;
161
+ const response = await fetch ( url ) ;
162
+ const data = await response . json ( ) ;
163
+ return ( data . height ) ;
164
+ } catch ( error ) {
165
+ console . error ( "Error loading data from blockchain.info API" , error ) ;
166
+ return null
167
+ }
109
168
}
110
169
111
170
export async function getCurrentChainSize ( ) {
112
- const url = 'https://api.blockchain.info/charts/blocks-size?timespan=1days'
113
- const response = await fetch ( url ) ;
114
- const dataJson = await response . json ( ) ;
115
- const data = dataJson . values [ 0 ] ;
116
- const date = data . x
117
- const size = data . y
118
- return ( { date : date , chainSize : size } )
171
+ try {
172
+ const url = 'https://api.blockchain.info/charts/blocks-size?timespan=1days'
173
+ const response = await fetch ( url ) ;
174
+ const dataJson = await response . json ( ) ;
175
+ const data = dataJson . values [ 0 ] ;
176
+ const date = data . x
177
+ const size = data . y
178
+ return (
179
+ {
180
+ date : date ,
181
+ chainSize : size
182
+ }
183
+ )
184
+ } catch ( error ) {
185
+ console . error ( "Error loading data from blockchain.info API" , error ) ;
186
+ return {
187
+ date : null ,
188
+ chainSize : null
189
+ }
190
+ }
119
191
}
0 commit comments