Merge pull request #498 from breez/fix-lowball

Fix lowball fee rates for onchain liquid tx
This commit is contained in:
Roei Erez
2024-09-25 09:10:57 +03:00
committed by GitHub
2 changed files with 3 additions and 37 deletions

View File

@@ -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,
)

View File

@@ -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)
}