1
1
use crate :: logger:: { log_error, log_trace, Logger } ;
2
- use crate :: Error ;
2
+ use crate :: { Config , Error } ;
3
3
4
4
use lightning:: chain:: chaininterface:: {
5
5
ConfirmationTarget , FeeEstimator , FEERATE_FLOOR_SATS_PER_KW ,
@@ -8,28 +8,30 @@ use lightning::chain::chaininterface::{
8
8
use bdk:: FeeRate ;
9
9
use esplora_client:: AsyncClient as EsploraClient ;
10
10
11
+ use bitcoin:: Network ;
11
12
use bitcoin:: blockdata:: weight:: Weight ;
12
13
13
14
use std:: collections:: HashMap ;
14
15
use std:: ops:: Deref ;
15
- use std:: sync:: RwLock ;
16
+ use std:: sync:: { Arc , RwLock } ;
16
17
17
18
pub ( crate ) struct OnchainFeeEstimator < L : Deref >
18
19
where
19
20
L :: Target : Logger ,
20
21
{
21
22
fee_rate_cache : RwLock < HashMap < ConfirmationTarget , FeeRate > > ,
22
23
esplora_client : EsploraClient ,
24
+ config : Arc < Config > ,
23
25
logger : L ,
24
26
}
25
27
26
28
impl < L : Deref > OnchainFeeEstimator < L >
27
29
where
28
30
L :: Target : Logger ,
29
31
{
30
- pub ( crate ) fn new ( esplora_client : EsploraClient , logger : L ) -> Self {
32
+ pub ( crate ) fn new ( esplora_client : EsploraClient , config : Arc < Config > , logger : L ) -> Self {
31
33
let fee_rate_cache = RwLock :: new ( HashMap :: new ( ) ) ;
32
- Self { fee_rate_cache, esplora_client, logger }
34
+ Self { fee_rate_cache, esplora_client, config , logger }
33
35
}
34
36
35
37
pub ( crate ) async fn update_fee_estimates ( & self ) -> Result < ( ) , Error > {
61
63
Error :: FeerateEstimationUpdateFailed
62
64
} ) ?;
63
65
66
+ if estimates. is_empty ( ) && self . config . network == Network :: Bitcoin {
67
+ // Ensure we fail if we didn't receive any estimates.
68
+ log_error ! (
69
+ self . logger,
70
+ "Failed to retrieve fee rate estimates for {:?}: empty fee estimates are dissallowed on Mainnet." ,
71
+ target,
72
+ ) ;
73
+ return Err ( Error :: FeerateEstimationUpdateFailed ) ;
74
+ }
75
+
64
76
let converted_estimates = esplora_client:: convert_fee_rate ( num_blocks, estimates)
65
77
. map_err ( |e| {
66
78
log_error ! (
0 commit comments