0-conf

The use of 0-conf can make swaps a lot faster by utilizing transactions that are not included in a block yet. But accepting 0-conf transactions doesn't come without unwarranted risk.

As a precautionary measure, Boltz enforces a few rules when it comes to 0-conf. It is important to note that:

  • In Normal Submarine Swaps in which the user sends the chain transaction, Boltz is taking the risk by accepting unconfirmed transactions.

  • In Reverse Submarine Swaps where the user receives the chain transaction from Boltz, the user is at risk for accepting the unconfirmed transaction.

0-conf Swaps are subject to network conditions and only available on UTXO chains like Bitcoin or Liquid.

Because of growing adoption ofmempoolfullrbf by a significant set of miners, Boltz is currently not accepting 0-conf transactions for Normal Submarine Swaps on the Bitcoin mainchain.

Limits

When it comes to accepting 0-conf transactions, Boltz has configurable limits in place. These limits can be found via the getpairs endpoint and are enforced only for Normal Submarine Swaps. When the user receives a chain transaction from Boltz, 0-conf acceptance is entirely up to the API client.

BIP 125 - Replace-By-Fee

If a transaction locking up bitcoin is signalling Replace-By-Fee either explicitly or inherently (unconfirmed inputs of the transaction signal RBF), Boltz will not accept 0-conf for that transaction in Normal Submarine Swaps. Also note, that Boltz never sends transactions that signal RBF. For more information about RBF please read BIP 125 - Opt-in Full Replace-by-Fee Signaling.

Miner fees

Swaps on Boltz are based on HTLCs (Hash Time Locked Contracts). In order to account for the time locked component of these contracts, transactions locking and claiming coins from such contracts have to pay a reasonably high miner fee in order to be included in a block timely.

Boltz considers fees that are equal or higher than 80% of the sat/vbyte estimations of its getfeeestimation endpoint as reasonably high. If the miner fee paid by the transaction is less than that, Boltz will not accept 0-conf and wait for the transaction to be included in a block.

Last updated