I've been struggling to understand the problem of "
transaction malleability". As a beginner, I was looking for a simple understanding of this concept in layman terms.
I've looked a number of places, but nowhere could I find an answer I could easily understand.
For example, the answer provided on the
bitcoin wiki page is way to complicated to me, and demands some technical knowledge of cryptography, transaction formats, etc.
In the following, I will try to summarize my current understanding of it, so please feel free to step in and further clarify the matters, if and when needed:
So what is transaction malleability as I currently understand it?
Say, Bob sends some bitcoins to Ann.
Before the transaction is even confirmed, another person, Tom, may see this transaction and decide to copy it, make small changes to it, and broadcast the changed transaction back to the system.
Tom
cannot change the important details of the transaction. Tom cannot change:
- the sender, Bob (or rather Bob's address)
- the recipient, Ann
- the amount of bitcoins sent
- the part of the signature confirming that Bob is the owner of the funds
- I guess Tom cannot change the fee, as well, right?
Tom
can change some unimportant details about the transaction:
- add some meaningless data to it, ---> To clear this more, what exactly can he add/change?
- tweak the signature slightly, but only the part that doesn't affect anything important --> To clear this more, what can Tom tweak, and how can he change such an important part as the signature, even a tiny bit of it?
It is not difficult to understand the consequences of Tom's action.
The miners may notice this new transaction before the original Bob's transaction. So the original Tom's transaction will never appear on the blockchain.
As no important things are changed, Ann will still get her money, but if she was monitoring that particular original transaction, she might have been puzzled how is it that she received the money, but the particular original transaction never appeared on the blockchain.
Is this logic correct?
Is there anything else important about transaction malleability that needs to be understood?
Thanks in advance.