Browse Source

Add GetTxid() which returns a non-malleable txid.

pull/4/head
Simon 8 years ago
parent
commit
49689a574c
  1. 28
      src/primitives/transaction.cpp
  2. 7
      src/primitives/transaction.h

28
src/primitives/transaction.cpp

@ -223,3 +223,31 @@ std::string CTransaction::ToString() const
str += " " + vout[i].ToString() + "\n";
return str;
}
// Return a txid which is non-malleable.
// Signature data is cleared before the transaction is serialized and hashed.
uint256 CTransaction::GetTxid() const
{
// Create a deep copy of this transaction
CMutableTransaction tx(*this);
// Clear sigscript from all transaction inputs.
for (CTxIn & txIn : tx.vin) {
txIn.scriptSig.clear();
}
// Clear joinSplitSig by filling the buffer with zero
tx.joinSplitSig.assign(0);
// Return double SHA256 hash
return tx.GetHash();
}
// Return a txid which is non-malleable.
uint256 CMutableTransaction::GetTxid() const
{
CTransaction tx(*this);
return tx.GetTxid();
}

7
src/primitives/transaction.h

@ -373,6 +373,10 @@ public:
}
std::string ToString() const;
// Return the txid which is the double SHA256 hash of the transaction.
uint256 GetTxid() const;
};
/** A mutable version of CTransaction. */
@ -411,6 +415,9 @@ struct CMutableTransaction
* fly, as opposed to GetHash() in CTransaction, which uses a cached result.
*/
uint256 GetHash() const;
// Compute a non-malleable txid on the fly.
uint256 GetTxid() const;
};
#endif // BITCOIN_PRIMITIVES_TRANSACTION_H

Loading…
Cancel
Save