Bitcoin Forum

Bitcoin => Development & Technical Discussion => Topic started by: dooglus on September 29, 2012, 04:03:42 PM



Title: is it possible to cancel a transaction once sent?
Post by: dooglus on September 29, 2012, 04:03:42 PM
After playing some satoshidice I had a lot of 'dust' in my wallet.  I made a transaction that combined a bunch of 0.00000001 outputs with some old large outputs in an attempt to tidy up my wallet a little.  The satoshi client determined that no fee was required, and so sent the transaction without a fee.

The miners seem to disagree.  The transaction isn't getting into blocks.  I expect if I wait long enough it will happen, but I'm wondering whether there's any way to cancel the transaction and send it again with a fee this time.

I tried using the raw transaction features of the new client, but when I try to send the raw transaction I get an error:

  error: {"code":-22,"message":"TX rejected"}

Presumably it's detecting the double-spend.

I tried using a new empty wallet which allowed me to send the raw transaction, but it's not showing up on blockchain.info so I guess now the network is rejecting it rather than my client rejecting it.


Title: Re: is it possible to cancel a transaction once sent?
Post by: misterbigg on September 29, 2012, 04:04:24 PM
I think the only thing you can do is just tiptoe around and hope that the network collectively forgets about it, which should happen given time.


Title: Re: is it possible to cancel a transaction once sent?
Post by: hamdi on September 29, 2012, 04:20:26 PM
let it take the time... it will be in the chain sooner or later.


Title: Re: is it possible to cancel a transaction once sent?
Post by: CIYAM on September 29, 2012, 04:43:00 PM
There was a suggestion for being able to "add" fees to an existing tx to ensure it does get processed but I am not sure whether this idea has been looked into in detail yet.


Title: Re: is it possible to cancel a transaction once sent?
Post by: jgarzik on September 29, 2012, 07:53:40 PM
After playing some satoshidice I had a lot of 'dust' in my wallet.  I made a transaction that combined a bunch of 0.00000001 outputs with some old large outputs in an attempt to tidy up my wallet a little.  The satoshi client determined that no fee was required, and so sent the transaction without a fee.

The miners seem to disagree.  The transaction isn't getting into blocks.  I expect if I wait long enough it will happen, but I'm wondering whether there's any way to cancel the transaction and send it again with a fee this time.

Right now the answer is lame:  wait a while.  If you don't see it confirmed, hope that it is forgotten by miners and network and initiate manual wallet coin recovery.  Double-spend with additional fees, and hope that works.

There is a proposal on bitcoin-devel for giving transactions a defined lifetime in the "memory pool", after which they are ejected.  Since the bitcoin client has designed from Day One to periodically resend unconfirmed transactions, this should increase the probability that you can cancel/update a transaction.



Title: Re: is it possible to cancel a transaction once sent?
Post by: Stephen Gornick on September 29, 2012, 07:55:43 PM
There was a suggestion for being able to "add" fees to an existing tx to ensure it does get processed but I am not sure whether this idea has been looked into in detail yet.


There is the feature where the recipient can then spend the yet unconfirmed funds and pay a fee that will incent the miner to include both transactions to earn the fee.


CreateNewBlock: Child-pays-for-parent / Add transaction fee later
 - https://github.com/bitcoin/bitcoin/pull/1647


That is in a "next" version of the client:

Please test (if you dare): next and next-test 2012-09-20
 - http://bitcointalk.org/?topic=110898.0


Also what would prevent this is:

improve dust spamming prevention algorithm
 - https://github.com/bitcoin/bitcoin/pull/1536


Title: Re: is it possible to cancel a transaction once sent?
Post by: runeks on October 01, 2012, 08:51:43 PM
There was a suggestion for being able to "add" fees to an existing tx to ensure it does get processed but I am not sure whether this idea has been looked into in detail yet.
There is the feature where the recipient can then spend the yet unconfirmed funds and pay a fee that will incent the miner to include both transactions to earn the fee.
As far as I can, see the ability to modify an unconfirmed transactions needs to be implemented at some point, since mining fees can't be properly determined unless miners are willing to replace an unconfirmed transaction with a new one that includes a higher fee.

If the punishment for not including a high enough fee is literally locking the coins in that transaction, then there is no way to determine - for a sender - how low a fee he can include.

This will, of course, make accepting unconfirmed transactions more risky, but I think accepting these is bad practice anyway, and the negative consequences of not being able to determine the lowest possible fee is worse than being somewhat able to rely on unconfirmed transactions - which were never reliable in the first place.

At some point I think the Satoshi client will need to implement this, since when mining competition increases, miners who see two transactions spending the same output will have financial incentive to include the one with the highest fees, regardless of if this transaction was sent out later. The miners trying to make unconfirmed transactions more reliable, by not including the same transaction with a higher fee if it is seen later, will lose revenue compared to the other miners, and will have a harder time staying in business.