<div dir="ltr">I would really like to be able to create transactions that are immune to transaction ID malleability now, so I have been thinking of the simplest solution possible, in order to get a BIP through without too much trouble.<div><br></div><div>An opcode we could call OP_TXHASHVERIFY could be introduced. It would be defined to work only if added to a scriptSig as the very first operation, and would abort if the hash of the transaction **with all OP_TXHASHVERIFY operations (including stack push) removed** does not match what has been pushed on the stack.</div><div><br></div><div>So, in order to produce a transaction with one or more inputs protected against tx ID malleability, one would:</div><div><br></div><div>1. Calculate tx ID of the tx: TX_HASH</div><div>2. For each input you wish to protect, add &quot;0x32 $TX_HASH OP_TXHASHVERIFY&quot; to the beginning of the scriptSig</div><div><br></div><div>When evaluating OP_TXHASHVERIFY, we make a copy of the tx in question, and remove the &quot;0x32 &lt;32 bytes&gt; OP_TXHASHVERIFY&quot; sequence from the beginning of all scriptSigs (if present), and abort if the tx copy hash does not match the top stack item.</div><div><br></div><div>This is a very simple solution that only adds 34 bytes per input, and when something better becomes available (eg. Segwit), we will stop using this. But in the meantime it&#39;s very valuable to be able to not worry about tx ID malleability.</div><div><br></div><div>Please let me know what you think.</div><div><br></div><div><br></div><div><br></div><div>            /Rune</div></div>