@@ -17,7 +17,7 @@ use log::{debug, error, info, trace, warn};
1717
1818use bitcoin:: consensus:: encode:: deserialize;
1919use bitcoin:: hex:: { DisplayHex , FromHex } ;
20- use bitcoin:: { Script , Txid } ;
20+ use bitcoin:: { FeeRate , Script , Txid } ;
2121
2222#[ cfg( feature = "use-openssl" ) ]
2323use openssl:: ssl:: { SslConnector , SslMethod , SslStream , SslVerifyMode } ;
@@ -38,6 +38,7 @@ use rustls::{
3838
3939#[ cfg( any( feature = "default" , feature = "proxy" ) ) ]
4040use crate :: socks:: { Socks5Stream , TargetAddr , ToTargetAddr } ;
41+ use crate :: utils:: convert_fee_rate;
4142
4243use crate :: stream:: ClonableStream ;
4344
@@ -857,7 +858,7 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
857858 Ok ( deserialized)
858859 }
859860
860- fn estimate_fee ( & self , number : usize ) -> Result < f64 , Error > {
861+ fn estimate_fee ( & self , number : usize ) -> Result < FeeRate , Error > {
861862 let req = Request :: new_id (
862863 self . last_id . fetch_add ( 1 , Ordering :: SeqCst ) ,
863864 "blockchain.estimatefee" ,
@@ -867,10 +868,11 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
867868
868869 result
869870 . as_f64 ( )
871+ . map ( convert_fee_rate)
870872 . ok_or_else ( || Error :: InvalidResponse ( result. clone ( ) ) )
871873 }
872874
873- fn relay_fee ( & self ) -> Result < f64 , Error > {
875+ fn relay_fee ( & self ) -> Result < FeeRate , Error > {
874876 let req = Request :: new_id (
875877 self . last_id . fetch_add ( 1 , Ordering :: SeqCst ) ,
876878 "blockchain.relayfee" ,
@@ -880,6 +882,7 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
880882
881883 result
882884 . as_f64 ( )
885+ . map ( convert_fee_rate)
883886 . ok_or_else ( || Error :: InvalidResponse ( result. clone ( ) ) )
884887 }
885888
@@ -1061,12 +1064,15 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
10611064 . collect ( )
10621065 }
10631066
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 >
10651068 where
10661069 I : IntoIterator + Clone ,
10671070 I :: Item : Borrow < usize > ,
10681071 {
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)
10701076 }
10711077
10721078 fn transaction_broadcast_raw ( & self , raw_tx : & [ u8 ] ) -> Result < Txid , Error > {
@@ -1149,20 +1155,21 @@ mod test {
11491155 assert_eq ! ( resp. hash_function, Some ( "sha256" . into( ) ) ) ;
11501156 assert_eq ! ( resp. pruning, None ) ;
11511157 }
1158+
11521159 #[ test]
11531160 fn test_relay_fee ( ) {
11541161 let client = RawClient :: new ( get_test_server ( ) , None ) . unwrap ( ) ;
11551162
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 ) ;
11581165 }
11591166
11601167 #[ test]
11611168 fn test_estimate_fee ( ) {
11621169 let client = RawClient :: new ( get_test_server ( ) , None ) . unwrap ( ) ;
11631170
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 ) ;
11661173 }
11671174
11681175 #[ test]
@@ -1288,8 +1295,8 @@ mod test {
12881295
12891296 let resp = client. batch_estimate_fee ( vec ! [ 10 , 20 ] ) . unwrap ( ) ;
12901297 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 ) ;
12931300 }
12941301
12951302 #[ test]
0 commit comments