Why can a transaction get stuck?

I want to give here an overview about the common problems with stuck transaction and explain the background.

When you publish a transaction to the Bitcoin network there is no guarantee that it gets included in the blockchain.
The height of the miner fee is the essential factor how you can get better chances to get confirmed the transaction fast.
Recently the height of the fee has grown a lot and can be seen at fee estimation services like https://bitcoinfees.21.co.
Fees have been a non-issue until mid last year, but since a while and specially the last 3-5 months the fees are growing very fast.

In Bitsquare there are 3 types of transactions:

  • Trade transactions: here the tx fee is fixed and cannot be changed by the uers
  • Withdrawal tx: here you can set the tx fee in the settings
  • Funding txs: funding a trade from an external wallet (make sure u use enough tx fee from your external wallet!)

Bitsquare uses a fixed tx fee for the trade transactions. That was because it was easier to implement and it was a non issue for a long time.
We have already implemented a new model with dynamic fees and a fee estimation service but that is part of the next release with tons of other changes and needs more testing. We hope we can deploy that version 0.5 release in the next weeks.

We released 2 times now a new version with bumped up fees and it should be sufficient for most case if you use the latest version. Those changes are kind of soft forks and offers from old versions cannot be taken if you use the new version as the tx fee would not match and the trade would fail. Luckily the transition was always very fast so most users removed and created new offers quickly. Thanks to all those for their understanding and not complaining about the lost trade fees! Though such a soft fork is only the last resort and we don’t plan to do another but are working hard to get the next release out solving all those issues in a much better way.

Even with the new version which uses a high fee there might be rare cases of stuck txs.
The fee depends on the tx size and as we don’t know how many inputs are used in a tx the fee might be still too low in some cases. Another reason is if a user has old unconfirmed txs and those get used as the inputs for a trade.
Though those are rare cases, currently as most users have updated to v.0.4.9.9.3 I don’t get many disputes with stuck tx issues anymore.

If the tx gets stuck there are a few options what we can do:

  1. You can use the https://www.viabtc.com/tools/txaccelerator to get your tx faster confirmed, though in times of high block chain congestion that might not help or the service rejects your tx
  2. Wait: that is the easiest option and often the transaction gets confirmed after a few days even with very low fees.
  3. Wait until the tx is removed from the mem pool (full nodes keep unconfirmed txs in the mem pool - usually 3 days but there is not clear rule for that). Mostly it is one of the trade fee tx which got stuck and as soon that tx gets removed from the mem pool we simply can close the trade (dispute) and the funds become available again.
  4. “Child pay for Parent” (CPFP): In the trade context it is a bit difficult to use and would need more background to understand the context. Though that is the preferred way to get stuck txs confirmed if you did a withdrawal with a too low fee. If needed in the trade context I instruct you via the arbitration hat in the application.
  5. Double spend: There is a hidden feature for double spending a tx but as it should be used only in exceptional cases and is not well tested I don’t advertise it to the public. It also does not work well because most nodes ignore double spent txs so it is pretty hard to get them confirmed. It requires a clean up of the wallet as well. So that is the worst option.

If you do a withdrawal to an external wallet please make sure the tx fee in the Settings is > 100 sat/byte.
If you have an older application you might have the old default value of 20 Sat/Byte which is not sufficient anymore.

At the withdrawal popup you can see the tx fee in Sat/bytes. Make sure it is in the range you want to get the tx confirmed in the time you want (atm 300-400 Sat/byte for fast confirmation). You might need to adjust the tx fee in the settings until you reach the fee you want to have.

You can help to avoid stuck transactions if you do a CPFP tx with old unconfirmed txs in your wallet. Those might otherwise be used for a trade and could lead to a stuck trade.

Please note there is no risk in losing your funds!
Worst case is that it takes longer and requires a bit of extra work but as long you have access to your wallet your funds are in your control.
So be sure to have a backup and that you have backed up the wallet seed. If you use a wallet password (recommended) be sure to not forget that. That would be the only way to lose your BTC if you dont have any backup and lost/forgot your wallet password! In such cases nobody can help you.
Be your own bank but don’t lock yourself our of your own bank!

More info to CPFP: https://forum.bitsquare.io/t/child-pay-for-parent-tx-cpfp-to-get-rid-of-unconfirmed-transactions/2133/

1 Like

Why don’t you require 1 confirmation before deposited bitcoin can be included in an offer, so as to avoid the unconfirmed input issue?

That would decrease usability. if the fees are ok then there should not be a problem. As we will offer other markets in the next release (LTC,…) as base currency and they dont have any fee problems yet, this issue will become history (as long LTC fees are low).

1 Like