message: Refactor Get{Prevout,Sequence,Outputs}Hash to Get{Prevouts,Sequences,Outputs}SHA256.
  Several proposals (Taproot, MuHash, CTV) require access to the single
  hash.
diff: @@ -1262,34 +1262,37 @@ public:
  }
  };
  +/** Compute the (single) SHA256 of the concatenation of all prevouts of a tx. */
  template <class T>
  -uint256 GetPrevoutHash(const T& txTo)
  +uint256 GetPrevoutsSHA256(const T& txTo)
  {
  CHashWriter ss(SER_GETHASH, 0);
  for (const auto& txin : txTo.vin) {
  ss << txin.prevout;
  }
  - return ss.GetHash();
  + return ss.GetSHA256();
  }
  +/** Compute the (single) SHA256 of the concatenation of all nSequences of a tx. */
  template <class T>
  -uint256 GetSequenceHash(const T& txTo)
  +uint256 GetSequencesSHA256(const T& txTo)
  {
  CHashWriter ss(SER_GETHASH, 0);
  for (const auto& txin : txTo.vin) {
  ss << txin.nSequence;
  }
  - return ss.GetHash();
  + return ss.GetSHA256();
  }
  +/** Compute the (single) SHA256 of the concatenation of all txouts of a tx. */
  template <class T>
  -uint256 GetOutputsHash(const T& txTo)
  +uint256 GetOutputsSHA256(const T& txTo)
  {
  CHashWriter ss(SER_GETHASH, 0);
  for (const auto& txout : txTo.vout) {
  ss << txout;
  }
  - return ss.GetHash();
  + return ss.GetSHA256();
  }
  } // namespace
  @@ -1301,9 +1304,9 @@ void PrecomputedTransactionData::Init(const T& txTo)
  // Cache is calculated only for transactions with witness
  if (txTo.HasWitness()) {
  - hashPrevouts = GetPrevoutHash(txTo);
  - hashSequence = GetSequenceHash(txTo);
  - hashOutputs = GetOutputsHash(txTo);
  + hashPrevouts = SHA256Uint256(GetPrevoutsSHA256(txTo));
  + hashSequence = SHA256Uint256(GetSequencesSHA256(txTo));
  + hashOutputs = SHA256Uint256(GetOutputsSHA256(txTo));
  }
  m_ready = true;
  @@ -1333,16 +1336,16 @@ uint256 SignatureHash(const CScript& scriptCode, const T& txTo, unsigned int nIn
  const bool cacheready = cache && cache->m_ready;
  if (!(nHashType & SIGHASH_ANYONECANPAY)) {
  - hashPrevouts = cacheready ? cache->hashPrevouts : GetPrevoutHash(txTo);
  + hashPrevouts = cacheready ? cache->hashPrevouts : SHA256Uint256(GetPrevoutsSHA256(txTo));
  }
  if (!(nHashType & SIGHASH_ANYONECANPAY) && (nHashType & 0x1f) != SIGHASH_SINGLE && (nHashType & 0x1f) != SIGHASH_NONE) {
  - hashSequence = cacheready ? cache->hashSequence : GetSequenceHash(txTo);
  + hashSequence = cacheready ? cache->hashSequence : SHA256Uint256(GetSequencesSHA256(txTo));
  }
  if ((nHashType & 0x1f) != SIGHASH_SINGLE && (nHashType & 0x1f) != SIGHASH_NONE) {
  - hashOutputs = cacheready ? cache->hashOutputs : GetOutputsHash(txTo);
  + hashOutputs = cacheready ? cache->hashOutputs : SHA256Uint256(GetOutputsSHA256(txTo));
  } else if ((nHashType & 0x1f) == SIGHASH_SINGLE && nIn < txTo.vout.size()) {
  CHashWriter ss(SER_GETHASH, 0);
  ss << txTo.vout[nIn];
  