Skip to content

Commit b20aa40

Browse files
committed
feat!: convert fees from BTC/kB to sats/vB
1 parent 64c77ee commit b20aa40

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

src/raw_client.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ use rustls::{
3434

3535
#[cfg(any(feature = "default", feature = "proxy"))]
3636
use crate::socks::{Socks5Stream, TargetAddr, ToTargetAddr};
37+
use crate::utils::convert_fee_rate;
3738

3839
use stream::ClonableStream;
3940

@@ -847,6 +848,7 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
847848

848849
result
849850
.as_f64()
851+
.map(convert_fee_rate)
850852
.ok_or_else(|| Error::InvalidResponse(result.clone()))
851853
}
852854

@@ -860,6 +862,7 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
860862

861863
result
862864
.as_f64()
865+
.map(convert_fee_rate)
863866
.ok_or_else(|| Error::InvalidResponse(result.clone()))
864867
}
865868

@@ -1046,7 +1049,9 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
10461049
I: IntoIterator + Clone,
10471050
I::Item: Borrow<usize>,
10481051
{
1049-
impl_batch_call!(self, numbers, estimate_fee, apply_deref)
1052+
let fee_rate_vec: Result<Vec<f64>, Error> =
1053+
impl_batch_call!(self, numbers, estimate_fee, apply_deref);
1054+
Ok(fee_rate_vec?.into_iter().map(convert_fee_rate).collect())
10501055
}
10511056

10521057
fn transaction_broadcast_raw(&self, raw_tx: &[u8]) -> Result<Txid, Error> {
@@ -1129,12 +1134,13 @@ mod test {
11291134
assert_eq!(resp.hash_function, Some("sha256".into()));
11301135
assert_eq!(resp.pruning, None);
11311136
}
1137+
11321138
#[test]
11331139
fn test_relay_fee() {
11341140
let client = RawClient::new(get_test_server(), None).unwrap();
11351141

11361142
let resp = client.relay_fee().unwrap();
1137-
assert_eq!(resp, 0.00001);
1143+
assert!(resp > 1.0 && resp < 1.000001);
11381144
}
11391145

11401146
#[test]

src/utils.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ use bitcoin::hashes::Hash;
66
use bitcoin::Txid;
77
use types::GetMerkleRes;
88

9+
10+
/// Satoshis in a Bitcoin.
11+
/// 1 BTC = 100,000,000 satoshis.
12+
const SATOSHIS_IN_BTC: f64 = 100_000_000.0;
13+
914
/// Verifies a Merkle inclusion proof as retrieved via [`transaction_get_merkle`] for a transaction with the
1015
/// given `txid` and `merkle_root` as included in the [`BlockHeader`].
1116
///
@@ -41,3 +46,8 @@ pub fn validate_merkle_proof(
4146

4247
cur == merkle_root.to_raw_hash()
4348
}
49+
50+
/// Converts a fee rate in BTC/kB to satoshi/vbyte.
51+
pub fn convert_fee_rate(fee_rate: f64) -> f64 {
52+
(fee_rate * SATOSHIS_IN_BTC) / 1_000.0 // 1 kB = 1_000 bytes
53+
}

0 commit comments

Comments
 (0)