From 70235968a6a3b4808b257fbc553ac44996a7f213 Mon Sep 17 00:00:00 2001 From: Roei Erez Date: Tue, 24 Sep 2024 23:03:37 +0300 Subject: [PATCH 1/2] fix lowball fee rates for onchain liquid tx --- lib/core/src/sdk.rs | 3 +++ lib/core/src/utils.rs | 9 +++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/core/src/sdk.rs b/lib/core/src/sdk.rs index 900c756..10504b9 100644 --- a/lib/core/src/sdk.rs +++ b/lib/core/src/sdk.rs @@ -902,6 +902,9 @@ impl LiquidSdk { receiver_amount_sat, &address_data.address, fees_sat, + self.config + .lowball_fee_rate_msat_per_vbyte() + .map(|v| v as f32), ) .await?; let tx = self diff --git a/lib/core/src/utils.rs b/lib/core/src/utils.rs index 191e018..e6eca64 100644 --- a/lib/core/src/utils.rs +++ b/lib/core/src/utils.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use std::time::{SystemTime, UNIX_EPOCH}; use crate::error::{PaymentError, SdkResult}; -use crate::prelude::STANDARD_FEE_RATE_SAT_PER_VBYTE; +use crate::prelude::LOWBALL_FEE_RATE_SAT_PER_VBYTE; use crate::wallet::OnchainWallet; use anyhow::{anyhow, Result}; use log::debug; @@ -59,9 +59,10 @@ pub(crate) async fn derive_fee_rate_msat_per_vb( amount_sat: u64, recipient_address: &str, absolute_fees_sat: u64, + fee_rate: Option, ) -> Result { - let standard_fees_sat = wallet - .build_tx(None, recipient_address, amount_sat) + let lowball_fees_sat = wallet + .build_tx(fee_rate, recipient_address, amount_sat) .await? .all_fees() .values() @@ -70,7 +71,7 @@ pub(crate) async fn derive_fee_rate_msat_per_vb( // Multiply sats/vb value by 1000 i.e. 1.0 sat/byte = 1000.0 sat/kvb = 1000.0 millisat/vb // We calculate using f64 and convert to f32 in the last step, so we keep the maximum precision possible let result_sat_per_vb = - STANDARD_FEE_RATE_SAT_PER_VBYTE * absolute_fees_sat as f64 / standard_fees_sat; + LOWBALL_FEE_RATE_SAT_PER_VBYTE * absolute_fees_sat as f64 / lowball_fees_sat; let result_msat_per_vb = result_sat_per_vb * 1000.0; let result_msat_per_vb_f32 = result_msat_per_vb as f32; debug!("derive_fee_rate_msat_per_vb: result_msat_per_vb_f32 {} from inputs: absolute_fees_sat {}, result_msat_per_vb: {}", From 7afa6fd4c17b19fec470f0a995f3832691f1848d Mon Sep 17 00:00:00 2001 From: yse Date: Tue, 24 Sep 2024 22:51:49 +0200 Subject: [PATCH 2/2] fix: remove `derive_fee_rate` method --- lib/core/src/sdk.rs | 15 +++------------ lib/core/src/utils.rs | 29 ----------------------------- 2 files changed, 3 insertions(+), 41 deletions(-) diff --git a/lib/core/src/sdk.rs b/lib/core/src/sdk.rs index 10504b9..ef814ac 100644 --- a/lib/core/src/sdk.rs +++ b/lib/core/src/sdk.rs @@ -896,21 +896,12 @@ impl LiquidSdk { }); } - // Ensure we use the same fee-rate from the `PrepareSendResponse` - let fee_rate_msat_per_vb = utils::derive_fee_rate_msat_per_vb( - self.onchain_wallet.clone(), - receiver_amount_sat, - &address_data.address, - fees_sat, - self.config - .lowball_fee_rate_msat_per_vbyte() - .map(|v| v as f32), - ) - .await?; let tx = self .onchain_wallet .build_tx( - Some(fee_rate_msat_per_vb), + self.config + .lowball_fee_rate_msat_per_vbyte() + .map(|v| v as f32), &address_data.address, receiver_amount_sat, ) diff --git a/lib/core/src/utils.rs b/lib/core/src/utils.rs index e6eca64..14e8e12 100644 --- a/lib/core/src/utils.rs +++ b/lib/core/src/utils.rs @@ -1,12 +1,8 @@ use std::str::FromStr; -use std::sync::Arc; use std::time::{SystemTime, UNIX_EPOCH}; use crate::error::{PaymentError, SdkResult}; -use crate::prelude::LOWBALL_FEE_RATE_SAT_PER_VBYTE; -use crate::wallet::OnchainWallet; use anyhow::{anyhow, Result}; -use log::debug; use lwk_wollet::elements::encode::deserialize; use lwk_wollet::elements::hex::FromHex; use lwk_wollet::elements::{ @@ -53,28 +49,3 @@ pub(crate) fn deserialize_tx_hex(tx_hex: &str) -> Result { |err| anyhow!("Could not deserialize transaction: {err:?}"), )?)?) } - -pub(crate) async fn derive_fee_rate_msat_per_vb( - wallet: Arc, - amount_sat: u64, - recipient_address: &str, - absolute_fees_sat: u64, - fee_rate: Option, -) -> Result { - let lowball_fees_sat = wallet - .build_tx(fee_rate, recipient_address, amount_sat) - .await? - .all_fees() - .values() - .sum::() as f64; - - // Multiply sats/vb value by 1000 i.e. 1.0 sat/byte = 1000.0 sat/kvb = 1000.0 millisat/vb - // We calculate using f64 and convert to f32 in the last step, so we keep the maximum precision possible - let result_sat_per_vb = - LOWBALL_FEE_RATE_SAT_PER_VBYTE * absolute_fees_sat as f64 / lowball_fees_sat; - let result_msat_per_vb = result_sat_per_vb * 1000.0; - let result_msat_per_vb_f32 = result_msat_per_vb as f32; - debug!("derive_fee_rate_msat_per_vb: result_msat_per_vb_f32 {} from inputs: absolute_fees_sat {}, result_msat_per_vb: {}", - result_msat_per_vb_f32, absolute_fees_sat, result_msat_per_vb); - Ok(result_msat_per_vb_f32) -}