public inbox for bitcoindev@googlegroups.com
 help / color / mirror / Atom feed
From: Gregory Maxwell <gmaxwell@gmail.com>
To: "Rune Kjær Svendsen" <runesvend@gmail.com>
Cc: Bitcoin Dev <bitcoin-development@lists.sourceforge.net>
Subject: Re: [Bitcoin-development] [RFC] [BIP proposal] Dealing with malleability
Date: Wed, 12 Feb 2014 10:03:21 -0800	[thread overview]
Message-ID: <CAAS2fgShVqU+T6q56H2ePZhuHvGgftdXh=zUvgeQRRG2pOP8NQ@mail.gmail.com> (raw)
In-Reply-To: <CAH2=CKzNGN7mpe1NLtsLRNSszSD2ZNwjoAsaH40EvGtA5ezDeQ@mail.gmail.com>

On Wed, Feb 12, 2014 at 7:12 AM, Rune Kjær Svendsen <runesvend@gmail.com> wrote:
> Instead of trying to remove the possibility of transaction
> malleability, would it make sense to define a new, "canonical
> transaction hash/ID" (cTxID), which would be a hash of the part of the
> transaction data which we know is not malleable, and have clients use
> this cTxID internally, thus making the traditional transaction hash
> irrelevant for a client to function correctly?

This is fine and good. But it only scratches the surface of the
problems created by malleability, especially for fancier transaction
protocols.

Mutation allows you to invalidate a chain of unconfirmed transaction
by mutating the parent. This breaks any protocol which depends on
creating a precomputed nlocked time refund transaction.

So a canonical ID can be used to prevent some buggy behavior it
doesn't actually fix the problem. Fortunately the non-fixed parts
aren't too critical today.

On Wed, Feb 12, 2014 at 8:22 AM, Alan Reiner <etotheipi@gmail.com> wrote:
> I think the solution is simply to encourage Bitcoin software developers to
> design their software to use this static ID, instead of the full transaction
> hash.    If MtGox had talked those IDs instead of the TX ID, their software
> would've correctly identified the mutated transactions and there would be
> no problem.

This is incorrect.  MtGox was automatically issuing replacement
transactions resulting in double payments.

When you attempt to replace/reissue/cancel a transaction you __MUST__
double-spend the original transaction. If the original transaction has
not been conflicted then it is possible someone will pull the original
transaction out of a hat and both your replacement and the original
will be confirmed.  It is not safe at any time to look to see if the
original has been confirmed yet, and if not reissue— not because
mutation may mean you're looking in the wrong place— but because the
state of the world could change nano-seconds after you looked.

If you do double-spend the original then there is no chance that both
will go through, you'll have atomic exclusion and only one transaction
or the other will be confirmed.



  parent reply	other threads:[~2014-02-12 18:03 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-09 23:33 [Bitcoin-development] [RFC] [BIP proposal] Dealing with malleability Pieter Wuille
2014-02-10  3:00 ` Peter Todd
2014-02-12 15:12   ` Rune Kjær Svendsen
2014-02-12 16:22     ` Alan Reiner
2014-02-12 16:38       ` Allen Piscitello
2014-02-12 16:44         ` Alan Reiner
2014-02-12 20:27           ` Mark Friedenbach
2014-02-12 22:52             ` Luke-Jr
2014-02-13  0:39               ` Alex Morcos
2014-02-13  0:47                 ` Gregory Maxwell
2014-02-19 14:11                   ` Michael Gronager
2014-02-19 14:38                     ` Pieter Wuille
2014-02-19 20:28                       ` Michael Gronager
2014-02-19 20:39                         ` Gregory Maxwell
2014-02-19 20:49                         ` Peter Todd
2014-02-19 21:05                           ` Gregory Maxwell
2014-02-19 21:11                         ` Pieter Wuille
2014-02-20  0:22                           ` Natanael
2014-02-20  1:29                             ` Allen Piscitello
2014-02-20  7:50                               ` Natanael
2014-02-20 10:59                           ` Michael Gronager
2014-02-20 14:08                             ` Mike Hearn
2014-02-20 14:15                               ` Gregory Maxwell
2014-02-20 14:29                                 ` Gavin Andresen
2014-02-20 14:36                                   ` Gregory Maxwell
2014-02-20 14:58                                     ` Gavin Andresen
2014-02-20 15:11                                       ` Pieter Wuille
2014-02-20 15:24                                         ` Gregory Maxwell
2014-02-21  6:07                                 ` Mike Hearn
2014-02-21  6:30                                   ` Gregory Maxwell
2014-02-19 19:15         ` Jeremy Spilman
2014-02-12 17:13     ` Jeff Garzik
2014-02-12 17:21       ` Pieter Wuille
2014-02-12 18:03     ` Gregory Maxwell [this message]
     [not found]       ` <CALf2ePyQeOxL3d+QoaWSYy_cCKaF9qq1StBwXFms9NyedUg3eg@mail.gmail.com>
2014-02-12 18:21         ` Alan Reiner
2014-02-10  4:39 ` Luke-Jr
2014-02-12 16:56 ` Pavol Rusnak
2014-02-12 17:22   ` Pieter Wuille

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAAS2fgShVqU+T6q56H2ePZhuHvGgftdXh=zUvgeQRRG2pOP8NQ@mail.gmail.com' \
    --to=gmaxwell@gmail.com \
    --cc=bitcoin-development@lists.sourceforge.net \
    --cc=runesvend@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox