Fix feerate calculation for esplora
This commit is contained in:
		
							parent
							
								
									3f5cb6997f
								
							
						
					
					
						commit
						732166fcb6
					
				| @ -42,17 +42,18 @@ pub use self::ureq::*; | |||||||
| mod api; | mod api; | ||||||
| 
 | 
 | ||||||
| fn into_fee_rate(target: usize, estimates: HashMap<String, f64>) -> Result<FeeRate, Error> { | fn into_fee_rate(target: usize, estimates: HashMap<String, f64>) -> Result<FeeRate, Error> { | ||||||
|     let fee_val = estimates |     let fee_val = { | ||||||
|  |         let mut pairs = estimates | ||||||
|             .into_iter() |             .into_iter() | ||||||
|         .map(|(k, v)| Ok::<_, std::num::ParseIntError>((k.parse::<usize>()?, v))) |             .filter_map(|(k, v)| Some((k.parse::<usize>().ok()?, v))) | ||||||
|         .collect::<Result<Vec<_>, _>>() |             .collect::<Vec<_>>(); | ||||||
|         .map_err(|e| Error::Generic(e.to_string()))? |         pairs.sort_unstable_by_key(|(k, _)| std::cmp::Reverse(*k)); | ||||||
|  |         pairs | ||||||
|             .into_iter() |             .into_iter() | ||||||
|         .take_while(|(k, _)| k <= &target) |             .find(|(k, _)| k <= &target) | ||||||
|             .map(|(_, v)| v) |             .map(|(_, v)| v) | ||||||
|         .last() |             .unwrap_or(1.0) | ||||||
|         .unwrap_or(1.0); |     }; | ||||||
| 
 |  | ||||||
|     Ok(FeeRate::from_sat_per_vb(fee_val as f32)) |     Ok(FeeRate::from_sat_per_vb(fee_val as f32)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -157,3 +158,55 @@ crate::bdk_blockchain_tests! { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const DEFAULT_CONCURRENT_REQUESTS: u8 = 4; | const DEFAULT_CONCURRENT_REQUESTS: u8 = 4; | ||||||
|  | 
 | ||||||
|  | #[cfg(test)] | ||||||
|  | mod test { | ||||||
|  |     use super::*; | ||||||
|  | 
 | ||||||
|  |     #[test] | ||||||
|  |     fn feerate_parsing() { | ||||||
|  |         let esplora_fees = serde_json::from_str::<HashMap<String, f64>>( | ||||||
|  |             r#"{
 | ||||||
|  |   "25": 1.015, | ||||||
|  |   "5": 2.3280000000000003, | ||||||
|  |   "12": 2.0109999999999997, | ||||||
|  |   "15": 1.018, | ||||||
|  |   "17": 1.018, | ||||||
|  |   "11": 2.0109999999999997, | ||||||
|  |   "3": 3.01, | ||||||
|  |   "2": 4.9830000000000005, | ||||||
|  |   "6": 2.2359999999999998, | ||||||
|  |   "21": 1.018, | ||||||
|  |   "13": 1.081, | ||||||
|  |   "7": 2.2359999999999998, | ||||||
|  |   "8": 2.2359999999999998, | ||||||
|  |   "16": 1.018, | ||||||
|  |   "20": 1.018, | ||||||
|  |   "22": 1.017, | ||||||
|  |   "23": 1.017, | ||||||
|  |   "504": 1, | ||||||
|  |   "9": 2.2359999999999998, | ||||||
|  |   "14": 1.018, | ||||||
|  |   "10": 2.0109999999999997, | ||||||
|  |   "24": 1.017, | ||||||
|  |   "1008": 1, | ||||||
|  |   "1": 4.9830000000000005, | ||||||
|  |   "4": 2.3280000000000003, | ||||||
|  |   "19": 1.018, | ||||||
|  |   "144": 1, | ||||||
|  |   "18": 1.018 | ||||||
|  | } | ||||||
|  | "#,
 | ||||||
|  |         ) | ||||||
|  |         .unwrap(); | ||||||
|  |         assert_eq!( | ||||||
|  |             into_fee_rate(6, esplora_fees.clone()).unwrap(), | ||||||
|  |             FeeRate::from_sat_per_vb(2.236) | ||||||
|  |         ); | ||||||
|  |         assert_eq!( | ||||||
|  |             into_fee_rate(26, esplora_fees).unwrap(), | ||||||
|  |             FeeRate::from_sat_per_vb(1.015), | ||||||
|  |             "should inherit from value for 25" | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user