mirror of
https://github.com/comit-network/xmr-btc-swap.git
synced 2025-11-24 09:53:09 -05:00
feat(asb, cli): Add safety margin to chosen Bitcoin fee for pre-signed transactions (#355)
This commit is contained in:
parent
24a011d411
commit
2133e33ca1
2 changed files with 16 additions and 1 deletions
|
|
@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
- We add a safety margin of 25% to the Bitcoin fee estimation. This ensures pre-signed transactions will get confirmed in time.
|
||||
|
||||
## [1.1.2] - 2025-05-24
|
||||
|
||||
- Docs: Document `external_bitcoin_address` option for using a specific
|
||||
|
|
|
|||
|
|
@ -49,6 +49,18 @@ const MAX_RELATIVE_TX_FEE: Decimal = dec!(0.20);
|
|||
const MAX_ABSOLUTE_TX_FEE: Decimal = dec!(100_000);
|
||||
const DUST_AMOUNT: Amount = Amount::from_sat(546);
|
||||
|
||||
// We add a safety margin on top of the estimation by the Electrum server
|
||||
//
|
||||
// If we don't get confirmed in time, the user will have to refund which takes another two
|
||||
// Bitcoin transactions (which cost money)
|
||||
//
|
||||
// Therefore it's worth overpaying a bit to ensure that the transaction is confirmed in time
|
||||
// and we don't have to refund.
|
||||
//
|
||||
// Some of the pre signed transactions won't be published for 6h-36h
|
||||
// The mempool might fill up by then which is another reason to overpay here.
|
||||
const SAFETY_MARGIN_TX_FEE: Decimal = dec!(0.25);
|
||||
|
||||
/// This is our wrapper around a bdk wallet and a corresponding
|
||||
/// bdk electrum client.
|
||||
/// It unifies all the functionality we need when interacting
|
||||
|
|
@ -1581,8 +1593,9 @@ fn estimate_fee(
|
|||
let weight = Decimal::from(weight);
|
||||
let weight_factor = dec!(4.0);
|
||||
let fee_rate = Decimal::from_u64(fee_rate_svb).context("Failed to parse fee rate")?;
|
||||
let fee_rate_with_margin = fee_rate * (Decimal::ONE + SAFETY_MARGIN_TX_FEE);
|
||||
|
||||
let sats_per_vbyte = weight / weight_factor * fee_rate;
|
||||
let sats_per_vbyte = weight / weight_factor * fee_rate_with_margin;
|
||||
|
||||
tracing::debug!(
|
||||
%weight,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue