@@ -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 } ;
@@ -34,6 +34,7 @@ use rustls::{
34
34
35
35
#[ cfg( any( feature = "default" , feature = "proxy" ) ) ]
36
36
use crate :: socks:: { Socks5Stream , TargetAddr , ToTargetAddr } ;
37
+ use crate :: utils:: convert_fee_rate;
37
38
38
39
use stream:: ClonableStream ;
39
40
@@ -837,7 +838,7 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
837
838
Ok ( deserialized)
838
839
}
839
840
840
- fn estimate_fee ( & self , number : usize ) -> Result < f64 , Error > {
841
+ fn estimate_fee ( & self , number : usize ) -> Result < FeeRate , Error > {
841
842
let req = Request :: new_id (
842
843
self . last_id . fetch_add ( 1 , Ordering :: SeqCst ) ,
843
844
"blockchain.estimatefee" ,
@@ -847,10 +848,11 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
847
848
848
849
result
849
850
. as_f64 ( )
851
+ . map ( convert_fee_rate)
850
852
. ok_or_else ( || Error :: InvalidResponse ( result. clone ( ) ) )
851
853
}
852
854
853
- fn relay_fee ( & self ) -> Result < f64 , Error > {
855
+ fn relay_fee ( & self ) -> Result < FeeRate , Error > {
854
856
let req = Request :: new_id (
855
857
self . last_id . fetch_add ( 1 , Ordering :: SeqCst ) ,
856
858
"blockchain.relayfee" ,
@@ -860,6 +862,7 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
860
862
861
863
result
862
864
. as_f64 ( )
865
+ . map ( convert_fee_rate)
863
866
. ok_or_else ( || Error :: InvalidResponse ( result. clone ( ) ) )
864
867
}
865
868
@@ -1041,12 +1044,15 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
1041
1044
. collect ( )
1042
1045
}
1043
1046
1044
- fn batch_estimate_fee < ' s , I > ( & self , numbers : I ) -> Result < Vec < f64 > , Error >
1047
+ fn batch_estimate_fee < ' s , I > ( & self , numbers : I ) -> Result < Vec < FeeRate > , Error >
1045
1048
where
1046
1049
I : IntoIterator + Clone ,
1047
1050
I :: Item : Borrow < usize > ,
1048
1051
{
1049
- impl_batch_call ! ( self , numbers, estimate_fee, apply_deref)
1052
+ let fee_rate_num: Result < Vec < f64 > , Error > =
1053
+ impl_batch_call ! ( self , numbers, estimate_fee, apply_deref) ;
1054
+ let fee_rate: Vec < FeeRate > = fee_rate_num?. into_iter ( ) . map ( convert_fee_rate) . collect ( ) ;
1055
+ Ok ( fee_rate)
1050
1056
}
1051
1057
1052
1058
fn transaction_broadcast_raw ( & self , raw_tx : & [ u8 ] ) -> Result < Txid , Error > {
@@ -1129,20 +1135,21 @@ mod test {
1129
1135
assert_eq ! ( resp. hash_function, Some ( "sha256" . into( ) ) ) ;
1130
1136
assert_eq ! ( resp. pruning, None ) ;
1131
1137
}
1138
+
1132
1139
#[ test]
1133
1140
fn test_relay_fee ( ) {
1134
1141
let client = RawClient :: new ( get_test_server ( ) , None ) . unwrap ( ) ;
1135
1142
1136
- let resp = client. relay_fee ( ) . unwrap ( ) ;
1137
- assert_eq ! ( resp, 0.00001 ) ;
1143
+ let resp = client. relay_fee ( ) . unwrap ( ) . to_sat_per_vb_ceil ( ) ;
1144
+ assert_eq ! ( resp, 1 ) ;
1138
1145
}
1139
1146
1140
1147
#[ test]
1141
1148
fn test_estimate_fee ( ) {
1142
1149
let client = RawClient :: new ( get_test_server ( ) , None ) . unwrap ( ) ;
1143
1150
1144
- let resp = client. estimate_fee ( 10 ) . unwrap ( ) ;
1145
- assert ! ( resp > 0.0 ) ;
1151
+ let resp = client. estimate_fee ( 10 ) . unwrap ( ) . to_sat_per_vb_ceil ( ) ;
1152
+ assert_eq ! ( resp, 1 ) ;
1146
1153
}
1147
1154
1148
1155
#[ test]
@@ -1268,8 +1275,8 @@ mod test {
1268
1275
1269
1276
let resp = client. batch_estimate_fee ( vec ! [ 10 , 20 ] ) . unwrap ( ) ;
1270
1277
assert_eq ! ( resp. len( ) , 2 ) ;
1271
- assert ! ( resp[ 0 ] > 0. 0) ;
1272
- assert ! ( resp[ 1 ] > 0. 0) ;
1278
+ assert ! ( resp[ 0 ] . to_sat_per_vb_ceil ( ) > 0 ) ;
1279
+ assert ! ( resp[ 1 ] . to_sat_per_vb_ceil ( ) > 0 ) ;
1273
1280
}
1274
1281
1275
1282
#[ test]
0 commit comments