@@ -171,33 +171,38 @@ pub struct HashrateStats {
171171 pub current_difficulty : f64 ,
172172}
173173
174- /// Bitcoin fee recommendations in sat/vB
174+ /// Bitcoin fee recommendations
175175#[ derive( Debug , Clone , Copy , PartialEq , Eq , PartialOrd , Ord , Hash , Serialize , Deserialize ) ]
176176pub struct FeeRecommendations {
177- /// Fastest confirmation fee (sat/vB)
177+ /// Fastest confirmation fee
178178 #[ serde( rename = "fastestFee" ) ]
179- pub fastest_fee : u32 ,
180- /// Fee for confirmation within 30 minutes (sat/vB)
179+ #[ serde( with = "deser::fee_rate_u64_serde" ) ]
180+ pub fastest_fee : FeeRate ,
181+ /// Fee for confirmation within 30 minutes
181182 #[ serde( rename = "halfHourFee" ) ]
182- pub half_hour_fee : u32 ,
183- /// Fee for confirmation within 1 hour (sat/vB)
183+ #[ serde( with = "deser::fee_rate_u64_serde" ) ]
184+ pub half_hour_fee : FeeRate ,
185+ /// Fee for confirmation within 1 hour
184186 #[ serde( rename = "hourFee" ) ]
185- pub hour_fee : u32 ,
186- /// Economy fee for slower confirmation (sat/vB)
187+ #[ serde( with = "deser::fee_rate_u64_serde" ) ]
188+ pub hour_fee : FeeRate ,
189+ /// Economy fee for slower confirmation
187190 #[ serde( rename = "economyFee" ) ]
188- pub economy_fee : u32 ,
189- /// Minimum fee (sat/vB)
191+ #[ serde( with = "deser::fee_rate_u64_serde" ) ]
192+ pub economy_fee : FeeRate ,
193+ /// Minimum fee
190194 #[ serde( rename = "minimumFee" ) ]
191- pub minimum_fee : u32 ,
195+ #[ serde( with = "deser::fee_rate_u64_serde" ) ]
196+ pub minimum_fee : FeeRate ,
192197}
193198
194199/// Fee histogram entry representing transactions at a specific fee rate
195200#[ derive( Debug , Clone , Copy , PartialEq , Eq , PartialOrd , Ord , Hash , Serialize , Deserialize ) ]
196201pub struct FeeHistogramEntry {
197- /// Fee rate in sat/vB (converted from API)
198- #[ serde( with = "deser::fee_rate_serde " ) ]
202+ /// Fee rate (converted from API)
203+ #[ serde( with = "deser::fee_rate_f64_serde " ) ]
199204 pub fee_rate : FeeRate ,
200- /// Virtual size of transactions at this fee rate (vB)
205+ /// Virtual size of transactions at this fee rate
201206 #[ serde( with = "deser::weight_serde" ) ]
202207 pub vsize : Weight ,
203208}
@@ -241,7 +246,7 @@ pub struct MempoolBlockFees {
241246 pub total_fees : Amount ,
242247 /// Median fee rate
243248 #[ serde( rename = "medianFee" ) ]
244- #[ serde( with = "deser::fee_rate_serde " ) ]
249+ #[ serde( with = "deser::fee_rate_f64_serde " ) ]
245250 pub median_fee : FeeRate ,
246251 /// Fee rate range
247252 #[ serde( rename = "feeRange" ) ]
@@ -290,6 +295,25 @@ mod tests {
290295 ) ;
291296 }
292297
298+ #[ test]
299+ fn test_fee_recommendations_deserialization ( ) {
300+ let json_data =
301+ r#"{"fastestFee":10,"halfHourFee":8,"hourFee":5,"economyFee":2,"minimumFee":1}"# ;
302+
303+ let fees: FeeRecommendations = serde_json:: from_str ( json_data) . unwrap ( ) ;
304+
305+ assert_eq ! (
306+ fees,
307+ FeeRecommendations {
308+ fastest_fee: FeeRate :: from_sat_per_vb_unchecked( 10 ) ,
309+ half_hour_fee: FeeRate :: from_sat_per_vb_unchecked( 8 ) ,
310+ hour_fee: FeeRate :: from_sat_per_vb_unchecked( 5 ) ,
311+ economy_fee: FeeRate :: from_sat_per_vb_unchecked( 2 ) ,
312+ minimum_fee: FeeRate :: from_sat_per_vb_unchecked( 1 ) ,
313+ }
314+ ) ;
315+ }
316+
293317 #[ test]
294318 fn test_mempool_stats_deser ( ) {
295319 let json_data = r#"{"count":4364,"vsize":4407712,"total_fee":7277557,"fee_histogram":[[8.687,50041],[5.135,50041],[4.07,50231]]}"# ;
@@ -344,7 +368,7 @@ mod tests {
344368 assert_eq ! ( block_fee. block_v_size, 746096.5 ) ;
345369 assert_eq ! ( block_fee. n_tx, 863 ) ;
346370 assert_eq ! ( block_fee. total_fees. to_sat( ) , 8875608 ) ;
347- assert_eq ! ( block_fee. median_fee. to_sat_per_kwu ( ) , 10796 ) ;
371+ assert_eq ! ( block_fee. median_fee. to_sat_per_vb_ceil ( ) , 10 ) ;
348372 assert_eq ! ( block_fee. fee_range. len( ) , 3 ) ;
349373 assert_eq ! ( block_fee. fee_range[ 0 ] . to_sat_per_kwu( ) , 1000 ) ;
350374 assert_eq ! ( block_fee. fee_range[ 1 ] . to_sat_per_kwu( ) , 2424 ) ;
0 commit comments