@@ -17,7 +17,7 @@ use log::{debug, error, info, trace, warn};
17
17
18
18
use bitcoin:: consensus:: encode:: deserialize;
19
19
use bitcoin:: hex:: { DisplayHex , FromHex } ;
20
- use bitcoin:: { Script , Txid } ;
20
+ use bitcoin:: { FeeRate , Script , Txid } ;
21
21
22
22
#[ cfg( feature = "use-openssl" ) ]
23
23
use openssl:: ssl:: { SslConnector , SslMethod , SslStream , SslVerifyMode } ;
@@ -38,6 +38,7 @@ use rustls::{
38
38
39
39
#[ cfg( any( feature = "default" , feature = "proxy" ) ) ]
40
40
use crate :: socks:: { Socks5Stream , TargetAddr , ToTargetAddr } ;
41
+ use crate :: utils:: convert_fee_rate;
41
42
42
43
use crate :: stream:: ClonableStream ;
43
44
@@ -857,7 +858,7 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
857
858
Ok ( deserialized)
858
859
}
859
860
860
- fn estimate_fee ( & self , number : usize ) -> Result < f64 , Error > {
861
+ fn estimate_fee ( & self , number : usize ) -> Result < FeeRate , Error > {
861
862
let req = Request :: new_id (
862
863
self . last_id . fetch_add ( 1 , Ordering :: SeqCst ) ,
863
864
"blockchain.estimatefee" ,
@@ -867,10 +868,11 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
867
868
868
869
result
869
870
. as_f64 ( )
871
+ . map ( convert_fee_rate)
870
872
. ok_or_else ( || Error :: InvalidResponse ( result. clone ( ) ) )
871
873
}
872
874
873
- fn relay_fee ( & self ) -> Result < f64 , Error > {
875
+ fn relay_fee ( & self ) -> Result < FeeRate , Error > {
874
876
let req = Request :: new_id (
875
877
self . last_id . fetch_add ( 1 , Ordering :: SeqCst ) ,
876
878
"blockchain.relayfee" ,
@@ -880,6 +882,7 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
880
882
881
883
result
882
884
. as_f64 ( )
885
+ . map ( convert_fee_rate)
883
886
. ok_or_else ( || Error :: InvalidResponse ( result. clone ( ) ) )
884
887
}
885
888
@@ -1061,12 +1064,15 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
1061
1064
. collect ( )
1062
1065
}
1063
1066
1064
- fn batch_estimate_fee < ' s , I > ( & self , numbers : I ) -> Result < Vec < f64 > , Error >
1067
+ fn batch_estimate_fee < ' s , I > ( & self , numbers : I ) -> Result < Vec < FeeRate > , Error >
1065
1068
where
1066
1069
I : IntoIterator + Clone ,
1067
1070
I :: Item : Borrow < usize > ,
1068
1071
{
1069
- impl_batch_call ! ( self , numbers, estimate_fee, apply_deref)
1072
+ let fee_rate_num: Result < Vec < f64 > , Error > =
1073
+ impl_batch_call ! ( self , numbers, estimate_fee, apply_deref) ;
1074
+ let fee_rate: Vec < FeeRate > = fee_rate_num?. into_iter ( ) . map ( convert_fee_rate) . collect ( ) ;
1075
+ Ok ( fee_rate)
1070
1076
}
1071
1077
1072
1078
fn transaction_broadcast_raw ( & self , raw_tx : & [ u8 ] ) -> Result < Txid , Error > {
@@ -1149,20 +1155,21 @@ mod test {
1149
1155
assert_eq ! ( resp. hash_function, Some ( "sha256" . into( ) ) ) ;
1150
1156
assert_eq ! ( resp. pruning, None ) ;
1151
1157
}
1158
+
1152
1159
#[ test]
1153
1160
fn test_relay_fee ( ) {
1154
1161
let client = RawClient :: new ( get_test_server ( ) , None ) . unwrap ( ) ;
1155
1162
1156
- let resp = client. relay_fee ( ) . unwrap ( ) ;
1157
- assert_eq ! ( resp, 0.00001 ) ;
1163
+ let resp = client. relay_fee ( ) . unwrap ( ) . to_sat_per_vb_ceil ( ) ;
1164
+ assert ! ( resp > 0 ) ;
1158
1165
}
1159
1166
1160
1167
#[ test]
1161
1168
fn test_estimate_fee ( ) {
1162
1169
let client = RawClient :: new ( get_test_server ( ) , None ) . unwrap ( ) ;
1163
1170
1164
- let resp = client. estimate_fee ( 10 ) . unwrap ( ) ;
1165
- assert ! ( resp > 0.0 ) ;
1171
+ let resp = client. estimate_fee ( 10 ) . unwrap ( ) . to_sat_per_vb_ceil ( ) ;
1172
+ assert ! ( resp > 0 ) ;
1166
1173
}
1167
1174
1168
1175
#[ test]
@@ -1288,8 +1295,8 @@ mod test {
1288
1295
1289
1296
let resp = client. batch_estimate_fee ( vec ! [ 10 , 20 ] ) . unwrap ( ) ;
1290
1297
assert_eq ! ( resp. len( ) , 2 ) ;
1291
- assert ! ( resp[ 0 ] > 0. 0) ;
1292
- assert ! ( resp[ 1 ] > 0. 0) ;
1298
+ assert ! ( resp[ 0 ] . to_sat_per_vb_ceil ( ) > 0 ) ;
1299
+ assert ! ( resp[ 1 ] . to_sat_per_vb_ceil ( ) > 0 ) ;
1293
1300
}
1294
1301
1295
1302
#[ test]
0 commit comments