# Unconfirmed transaction. How to make my wallet made whole

I am running a node with an unconfirmed transaction. I tried shutting down my btc qt so the transaction would be forgotten. To no avail it keeps rebroadcasting the transaction. I am in the process of upgrading and syncing my btc qt now too. But it's taking forever to sync. What will happen if I import my keys to a software wallet, electrum? Will my electrum wallet be made whole from the unconfirmed transaction? Any suggestions? I'm not in love with running a node anymore or coinbases ability to retrieve my transaction. Coinbase was the supposed recipient. It's been two weeks.

• If you once provided "zapwallettxes" parameter to bitcoin-qt, it would start rescan process, this would be more tricky if you had pruning enabled... – Chris Chen Oct 20 '19 at 14:53
• It's possible to make your own node forget the unconfirmed transaction, but the process would be a little complicated: en.bitcoin.it/wiki/Fee_bumping#Bitcoin_Core_GUI You would need to temporarily break connectivity. You also have to be sure that the newer transaction is spending same coins with the older transaction, thus the two transactions would conflict with each other. You are still not able to make every node on the network to forget the unconfirmed transaction transaction, that's why you should do such "double-spend". – Chris Chen Oct 20 '19 at 14:54
• Should I export my keys to a software wallet, like electrum? How do I actually do the double spend? Can you refer a link or bitchute channel? Or something, lol. It's been two weeks and I'm kind of getting worried about coinbase. That's who the transaction was to. Do you know if they offer any customer service to remedy this? – dave Oct 20 '19 at 16:14

It's not possible to remove your transmitted transaction from the network.

Even if you shut down and clean your own local client, other clients around the world have it in their mempool. That's why your local client reflects the balance minus the amount you sent, even though it's not confirmed. That's how it's supposed to work, Bitcoin TX's are supposed to be irreversible even before being mined.

So, Bitcoin does not have a TX revocation network message available.

Only thing you can do is, before this unwanted TX is confirmed, to use another client, which either didn't see your TX or allows you to craft TX's and broadcast them, to submit a new transaction containing a much higher fee and same UTXO's. (Double spending on purpose.)

This new TX will cost you the fee, but if you set your own address as beneficiary, the funds will return to your wallet and the old transaction will get discarded by the network as a double spend. This higher fee is your cost to revoke the old unwanted TX. All this has to be done before the old TX is confirmed in a block.

• Do you recommend a client/wallet that won't rebroadcast the tx? I don't want to be too much of a bother but could you refer a link so I can get back my satoshis. Any help would be appreciated. Thanks. – dave Oct 20 '19 at 17:05
• You can use Bitcoin Core itself to create a raw transaction. Then you send the funds to yourself using a bigger fee: stackoverflow.com/questions/38493893/… – Jose Fonseca Oct 20 '19 at 19:23
• Blockchain.info doesn't even recognize the hash. Can you explain why? – dave Oct 22 '19 at 1:53

According to your description (having problems while syncing full node), I wonder if your "unconfirmed transaction" is really unconfirmed? Is it already confirmed, or discarded (due to double-spending etc)?

The first problem: "stuck" 0-confirmation transaction

First of all, replace-by-fee is there to deal with "low-fee stuck transactions" problem, you would be able to bump fee with ease if the transaction had RBF enabled.

If your stuck transaction is not so urgent, you may just wait for the mempool to be cleared naturally, then your transaction will finally be confirmed, since the mempool is not so crowded (like old times in 2017) nowadays.

Just watch the last "Mempool size in MB" chart here: https://core.jochen-hoenicke.de/queue/#24h

If you want to "accelerate" or "revert" this transaction, you have two options.

The first option: you may contact a mining pool which provides "transaction accelerating (prioritising)" service, like Poolin or BTC.COM. However, this option can be expensive, and, there won't be any refund.

The second option: "double-spend" by yourself with Electrum, which is usually much cheaper than transaction prioritising services mentioned above, but a bit complicated.

1. Find out the previous transaction(s) which the stuck transaction is spending from. You may use the getrawtransaction STUCK_TXID true (replace STUCK_TXID with your own stuck transaction ID) command in debug console of Bitcoin Core, or just query it on an online block explorer like https://blockstream.info.

Blockstream explorer shows previous outpoints clearly, where the outpoint is represented in TXID(long alphanumeric text string):INDEX(number) format. For example: this transaction spent 2 previous transactions, which have TXIDs of 00f5854cebdcd318edd325ab07e4157964f225a659302f3f5949ffe07020db4e and 6d4a34592200324f716a92d8d84db8c85bc97189610b1d4bee4fcb7d56713857

2. Copy raw transaction data of previous transaction(s). You may simply double-click each transaction showed on Bitcoin Core GUI in turn, to find them by transaction ID, and then right-click -> Copy raw transaction.

You may also use the getrawtransaction PREVIOUS_TXID command instead, you need to run this command separately on each PREVIOUS_TXID, if multiple previous transactions were spent.

3. Create a new Electrum wallet on an offline device, then choose the Import Bitcoin addresses or private keys option.

4. Import your private keys to Electrum. The wallet won't sync, because there's no internet - that's fine, because we don't want Electrum to fetch back the stuck transaction.

5. Import the previous transaction(s) by clicking Tools menu -> Load transaction -> From text.

6. Click the View menu -> Show Coins to show the Coins tab. Then switch to the Coins tab, select all of them, and right-click -> Spend.

Of course, if you are sure about exactly which coins were spent, you won't need to spend all available coins this time, which could reduce the fee cost a bit - but this situation is relatively rare. To keep yourself from off-by-one human errors, you'd better just spend all of them.

7. Now, you are about to construct a double-spending transaction which will send these coins back to your own wallet, or any other address(es) you want, by clicking Preview button. This time you should choose a higher fee rate (sat/Byte), at least higher than the stuck transaction.

By the way, it is highly recommended to enable replace-by-fee on this transaction, in case of further fee-bumping.

8. Electrum is able to show QR code of this double-spending transaction. Use another online device to scan it with Electrum, then it could be sent out. You may also try to send it directly after reconnecting the device to Internet. If the stuck transaction has not yet expired on the Electrum server you are using, broadcasting the double-spending transaction might face some errors. You may try to broadcast it through other methods, eg. block explorers, and sendrawtransaction of Bitcoin Core.

The second problem: Bitcoin Core full node is painful to sync

First, the performance bottleneck usually lies at frequent I/O operations on the chainstate subdirectory, which stores the UTXO database, especially the data directory was placed on an HDD (which is supposed to make the situation worse if the HDD is SMR).

Second, currently, I'm personally not in favor of pruning, because almost all historical transaction history (which is exactly what the gigantic block chain contains) is discarded, thus rescanning becomes limited within recent blocks only. Rescanning happens if you are importing keys/addresses/wallet.dat, or zapwallettxes. In the future, this problem might be finally relieved by some improvements.

If your computer has plenty of available RAM, you may allocate more than 6GB (depends on historical peak UTXO size) of RAM for the database cache (see the Options window) of Bitcoin Core. This tweak effectively removes the I/O bottleneck. (well, you may still face this problem if you are catching up from some date before, you may cat (Linux/Mac) or type all files (use the * wildcard) into /dev/null (Linux/Mac) or nul (Windows) to force the OS to read them once, then they could be cached into the RAM)

If you have both HDD and SSD, you can configure the blocksdir parameter to migrate the gigantic block chain to a cheap-but-slow HDD, while keeping the frequently-accessed chainstate etc on a fast-but-expensive SSD.

• Thank you for your answer. You offer way more than coinbase customer support (who my stuck transaction is to). Is there anything they can do? They barely return my emails. I told them the could debit my account the fee to get the block confirmed. I don't think they even understand what's going on. I'm worried they are going to change my btc coinbase receiving address. It's going on 2 weeks now. At this point I wouldn't recommend coinbase to anyone. – dave Oct 21 '19 at 0:04
• I've done transactions with coinbase before but never had a problem. I'm just so disappointed with there understanding of everything. They are basically turning me into a programmer for one transaction. They should have to give me a job as head of engineering after this. People respond to me on this platform more than coinbase does about my stuck transaction. And they are supposed to be a billion dollar company. Than stack exchange is a trillion dollars company. I've lost faith in even getting this transaction back and am starting to think fiat has its benefits. Coinbase is awful. – dave Oct 21 '19 at 0:12
• I have checked the mempool and block size status just now, it seems that even the transactions which paid the lowest 1sat/Byte fee could already have been confirmed. Is your "unconfirmed transaction" really unconfirmed? If you still have problems with your full node, you may check that "unconfirmed transaction" on an online block explorer. – Chris Chen Oct 21 '19 at 2:57
• Pointing fingers at Coinbase or someone else cannot solve the problem. Theoritically, Coinbase could do the "child-pay-for-parent" (Electrum provides this feature directly to both sender and receiver, but it's more expensive than RBF however) trick to bump the fee, thus prioritising the stuck transaction. However, they might have their own wallet management policies which may sacrifice convenience and flexibility in exchange for security. – Chris Chen Oct 21 '19 at 3:00
• If coinbase provides a new depositing address to you, this should be totally fine, Coinbase guaranteed that "all addresses that have been generated for your account will remain associated with your account forever" here: support.coinbase.com/customer/en/portal/articles/… – Chris Chen Oct 21 '19 at 3:13