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();
+}
+
}
std::string ToString() const;
+
+ // Return the txid which is the double SHA256 hash of the transaction.
+ uint256 GetTxid() const;
+
};
/** A mutable version of CTransaction. */
* 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