Skip to content

Commit

Permalink
Cache witness hash in CTransaction
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcoFalke committed May 4, 2018
1 parent faab55f commit fac1223
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 11 deletions.
10 changes: 5 additions & 5 deletions src/primitives/transaction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,18 +67,18 @@ uint256 CTransaction::ComputeHash() const
return SerializeHash(*this, SER_GETHASH, SERIALIZE_TRANSACTION_NO_WITNESS);
}

uint256 CTransaction::GetWitnessHash() const
uint256 CTransaction::ComputeWitnessHash() const
{
if (!HasWitness()) {
return GetHash();
return hash;
}
return SerializeHash(*this, SER_GETHASH, 0);
}

/* For backward compatibility, the hash is initialized to 0. TODO: remove the need for this default constructor entirely. */
CTransaction::CTransaction() : vin(), vout(), nVersion(CTransaction::CURRENT_VERSION), nLockTime(0), hash() {}
CTransaction::CTransaction(const CMutableTransaction &tx) : vin(tx.vin), vout(tx.vout), nVersion(tx.nVersion), nLockTime(tx.nLockTime), hash(ComputeHash()) {}
CTransaction::CTransaction(CMutableTransaction &&tx) : vin(std::move(tx.vin)), vout(std::move(tx.vout)), nVersion(tx.nVersion), nLockTime(tx.nLockTime), hash(ComputeHash()) {}
CTransaction::CTransaction() : vin(), vout(), nVersion(CTransaction::CURRENT_VERSION), nLockTime(0), hash{}, m_witness_hash{} {}
CTransaction::CTransaction(const CMutableTransaction& tx) : vin(tx.vin), vout(tx.vout), nVersion(tx.nVersion), nLockTime(tx.nLockTime), hash{ComputeHash()}, m_witness_hash{ComputeWitnessHash()} {}
CTransaction::CTransaction(CMutableTransaction&& tx) : vin(std::move(tx.vin)), vout(std::move(tx.vout)), nVersion(tx.nVersion), nLockTime(tx.nLockTime), hash{ComputeHash()}, m_witness_hash{ComputeWitnessHash()} {}

CAmount CTransaction::GetValueOut() const
{
Expand Down
10 changes: 4 additions & 6 deletions src/primitives/transaction.h
Original file line number Diff line number Diff line change
Expand Up @@ -286,8 +286,10 @@ class CTransaction
private:
/** Memory only. */
const uint256 hash;
const uint256 m_witness_hash;

uint256 ComputeHash() const;
uint256 ComputeWitnessHash() const;

public:
/** Construct a CTransaction that qualifies as IsNull() */
Expand All @@ -311,12 +313,8 @@ class CTransaction
return vin.empty() && vout.empty();
}

const uint256& GetHash() const {
return hash;
}

// Compute a hash that includes both transaction and witness data
uint256 GetWitnessHash() const;
const uint256& GetHash() const { return hash; }
const uint256& GetWitnessHash() const { return m_witness_hash; };

// Return sum of txouts.
CAmount GetValueOut() const;
Expand Down

0 comments on commit fac1223

Please sign in to comment.