@@ -63,6 +63,16 @@ impl FeeRate {
6363 FeeRate ( value)
6464 }
6565
66+ /// Create a new instance of [`FeeRate`] given a float fee rate in sats/kwu
67+ pub fn from_sat_per_kwu ( sat_per_kwu : f32 ) -> Self {
68+ FeeRate :: new_checked ( sat_per_kwu / 250.0_f32 )
69+ }
70+
71+ /// Create a new instance of [`FeeRate`] given a float fee rate in sats/kvb
72+ pub fn from_sat_per_kvb ( sat_per_kvb : f32 ) -> Self {
73+ FeeRate :: new_checked ( sat_per_kvb / 1000.0_f32 )
74+ }
75+
6676 /// Create a new instance of [`FeeRate`] given a float fee rate in btc/kvbytes
6777 ///
6878 /// ## Panics
@@ -98,7 +108,7 @@ impl FeeRate {
98108 }
99109
100110 /// Return the value as satoshi/vbyte
101- pub fn as_sat_vb ( & self ) -> f32 {
111+ pub fn as_sat_per_vb ( & self ) -> f32 {
102112 self . 0
103113 }
104114
@@ -109,7 +119,7 @@ impl FeeRate {
109119
110120 /// Calculate absolute fee in Satoshis using size in virtual bytes.
111121 pub fn fee_vb ( & self , vbytes : usize ) -> u64 {
112- ( self . as_sat_vb ( ) * vbytes as f32 ) . ceil ( ) as u64
122+ ( self . as_sat_per_vb ( ) * vbytes as f32 ) . ceil ( ) as u64
113123 }
114124}
115125
@@ -358,4 +368,34 @@ mod tests {
358368 fn test_valid_feerate_pos_zero ( ) {
359369 let _ = FeeRate :: from_sat_per_vb ( 0.0 ) ;
360370 }
371+
372+ #[ test]
373+ fn test_fee_from_btc_per_kvb ( ) {
374+ let fee = FeeRate :: from_btc_per_kvb ( 1e-5 ) ;
375+ assert ! ( ( fee. as_sat_per_vb( ) - 1.0 ) . abs( ) < f32 :: EPSILON ) ;
376+ }
377+
378+ #[ test]
379+ fn test_fee_from_sat_per_vbyte ( ) {
380+ let fee = FeeRate :: from_sat_per_vb ( 1.0 ) ;
381+ assert ! ( ( fee. as_sat_per_vb( ) - 1.0 ) . abs( ) < f32 :: EPSILON ) ;
382+ }
383+
384+ #[ test]
385+ fn test_fee_default_min_relay_fee ( ) {
386+ let fee = FeeRate :: default_min_relay_fee ( ) ;
387+ assert ! ( ( fee. as_sat_per_vb( ) - 1.0 ) . abs( ) < f32 :: EPSILON ) ;
388+ }
389+
390+ #[ test]
391+ fn test_fee_from_sat_per_kvb ( ) {
392+ let fee = FeeRate :: from_sat_per_kvb ( 1000.0 ) ;
393+ assert ! ( ( fee. as_sat_per_vb( ) - 1.0 ) . abs( ) < f32 :: EPSILON ) ;
394+ }
395+
396+ #[ test]
397+ fn test_fee_from_sat_per_kwu ( ) {
398+ let fee = FeeRate :: from_sat_per_kwu ( 250.0 ) ;
399+ assert ! ( ( fee. as_sat_per_vb( ) - 1.0 ) . abs( ) < f32 :: EPSILON ) ;
400+ }
361401}
0 commit comments