mirror of
https://github.com/aljazceru/breez-sdk-liquid.git
synced 2026-02-14 10:34:22 +01:00
Merge pull request #498 from breez/fix-lowball
Fix lowball fee rates for onchain liquid tx
This commit is contained in:
@@ -896,18 +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,
|
||||
)
|
||||
.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,
|
||||
)
|
||||
|
||||
@@ -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::STANDARD_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,27 +49,3 @@ pub(crate) fn deserialize_tx_hex(tx_hex: &str) -> Result<Transaction> {
|
||||
|err| anyhow!("Could not deserialize transaction: {err:?}"),
|
||||
)?)?)
|
||||
}
|
||||
|
||||
pub(crate) async fn derive_fee_rate_msat_per_vb(
|
||||
wallet: Arc<dyn OnchainWallet>,
|
||||
amount_sat: u64,
|
||||
recipient_address: &str,
|
||||
absolute_fees_sat: u64,
|
||||
) -> Result<f32> {
|
||||
let standard_fees_sat = wallet
|
||||
.build_tx(None, recipient_address, amount_sat)
|
||||
.await?
|
||||
.all_fees()
|
||||
.values()
|
||||
.sum::<u64>() 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 =
|
||||
STANDARD_FEE_RATE_SAT_PER_VBYTE * absolute_fees_sat as f64 / standard_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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user