Move estimate -> fee rate logic to esplora module
Currently we have duplicate code for converting the fee estimate we get back from esplora into a fee rate. This logic can be moved to a separate function and live in the `esplora` module.
This commit is contained in:
parent
27cd9bbcd6
commit
5cdc5fb58a
@ -17,6 +17,7 @@
|
|||||||
//! Please note, to configure the Esplora HTTP client correctly use one of:
|
//! Please note, to configure the Esplora HTTP client correctly use one of:
|
||||||
//! Blocking: --features='esplora,ureq'
|
//! Blocking: --features='esplora,ureq'
|
||||||
//! Async: --features='async-interface,esplora,reqwest' --no-default-features
|
//! Async: --features='async-interface,esplora,reqwest' --no-default-features
|
||||||
|
use std::collections::HashMap;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::io;
|
use std::io;
|
||||||
|
|
||||||
@ -25,6 +26,9 @@ use serde::Deserialize;
|
|||||||
use bitcoin::consensus;
|
use bitcoin::consensus;
|
||||||
use bitcoin::{BlockHash, Txid};
|
use bitcoin::{BlockHash, Txid};
|
||||||
|
|
||||||
|
use crate::error::Error;
|
||||||
|
use crate::FeeRate;
|
||||||
|
|
||||||
#[cfg(all(
|
#[cfg(all(
|
||||||
feature = "esplora",
|
feature = "esplora",
|
||||||
feature = "reqwest",
|
feature = "reqwest",
|
||||||
@ -59,6 +63,21 @@ mod ureq;
|
|||||||
))]
|
))]
|
||||||
pub use self::ureq::*;
|
pub use self::ureq::*;
|
||||||
|
|
||||||
|
fn into_fee_rate(target: usize, estimates: HashMap<String, f64>) -> Result<FeeRate, Error> {
|
||||||
|
let fee_val = estimates
|
||||||
|
.into_iter()
|
||||||
|
.map(|(k, v)| Ok::<_, std::num::ParseIntError>((k.parse::<usize>()?, v)))
|
||||||
|
.collect::<Result<Vec<_>, _>>()
|
||||||
|
.map_err(|e| Error::Generic(e.to_string()))?
|
||||||
|
.into_iter()
|
||||||
|
.take_while(|(k, _)| k <= &target)
|
||||||
|
.map(|(_, v)| v)
|
||||||
|
.last()
|
||||||
|
.unwrap_or(1.0);
|
||||||
|
|
||||||
|
Ok(FeeRate::from_sat_per_vb(fee_val as f32))
|
||||||
|
}
|
||||||
|
|
||||||
/// Data type used when fetching transaction history from Esplora.
|
/// Data type used when fetching transaction history from Esplora.
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct EsploraGetHistory {
|
pub struct EsploraGetHistory {
|
||||||
|
@ -119,19 +119,7 @@ impl Blockchain for EsploraBlockchain {
|
|||||||
|
|
||||||
fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> {
|
fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> {
|
||||||
let estimates = self.url_client._get_fee_estimates().await?;
|
let estimates = self.url_client._get_fee_estimates().await?;
|
||||||
|
super::into_fee_rate(target, estimates)
|
||||||
let fee_val = estimates
|
|
||||||
.into_iter()
|
|
||||||
.map(|(k, v)| Ok::<_, std::num::ParseIntError>((k.parse::<usize>()?, v)))
|
|
||||||
.collect::<Result<Vec<_>, _>>()
|
|
||||||
.map_err(|e| Error::Generic(e.to_string()))?
|
|
||||||
.into_iter()
|
|
||||||
.take_while(|(k, _)| k <= &target)
|
|
||||||
.map(|(_, v)| v)
|
|
||||||
.last()
|
|
||||||
.unwrap_or(1.0);
|
|
||||||
|
|
||||||
Ok(FeeRate::from_sat_per_vb(fee_val as f32))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,19 +112,7 @@ impl Blockchain for EsploraBlockchain {
|
|||||||
|
|
||||||
fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> {
|
fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> {
|
||||||
let estimates = self.url_client._get_fee_estimates()?;
|
let estimates = self.url_client._get_fee_estimates()?;
|
||||||
|
super::into_fee_rate(target, estimates)
|
||||||
let fee_val = estimates
|
|
||||||
.into_iter()
|
|
||||||
.map(|(k, v)| Ok::<_, std::num::ParseIntError>((k.parse::<usize>()?, v)))
|
|
||||||
.collect::<Result<Vec<_>, _>>()
|
|
||||||
.map_err(|e| Error::Generic(e.to_string()))?
|
|
||||||
.into_iter()
|
|
||||||
.take_while(|(k, _)| k <= &target)
|
|
||||||
.map(|(_, v)| v)
|
|
||||||
.last()
|
|
||||||
.unwrap_or(1.0);
|
|
||||||
|
|
||||||
Ok(FeeRate::from_sat_per_vb(fee_val as f32))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user