diff --git a/src/bench/verify_script.cpp b/src/bench/verify_script.cpp index 9e1f957b12..3ed950da07 100644 --- a/src/bench/verify_script.cpp +++ b/src/bench/verify_script.cpp @@ -68,6 +68,7 @@ static void VerifyScriptBench(benchmark::Bench& bench) CDataStream streamVal(SER_NETWORK, PROTOCOL_VERSION); streamVal << txCredit.vout[0].nValue; int csuccess = bitcoinconsensus_verify_script_with_amount( + NULL, txCredit.vout[0].scriptPubKey.data(), txCredit.vout[0].scriptPubKey.size(), (const unsigned char*)&streamVal[0], streamVal.size(), diff --git a/src/chainparams.h b/src/chainparams.h index 0deb0b50c1..cfb1b9a13a 100644 --- a/src/chainparams.h +++ b/src/chainparams.h @@ -128,7 +128,8 @@ public: const ChainTxData& TxData() const { return chainTxData; } // ELEMENTS extra fields: - const uint256 ParentGenesisBlockHash() const { return parentGenesisBlockHash; } + const uint256& ParentGenesisBlockHash() const { return parentGenesisBlockHash; } + const uint256& HashGenesisBlock() const { return consensus.hashGenesisBlock; } bool anyonecanspend_aremine; const std::string& ParentBech32HRP() const { return parent_bech32_hrp; } const std::string& ParentBlech32HRP() const { return parent_blech32_hrp; } diff --git a/src/psbt.cpp b/src/psbt.cpp index 84c2302fe6..a11874ed3d 100644 --- a/src/psbt.cpp +++ b/src/psbt.cpp @@ -578,7 +578,7 @@ PrecomputedTransactionData PrecomputePSBTData(const PartiallySignedTransaction& for (size_t idx = 0; idx < psbt.inputs.size(); ++idx) { if (!psbt.inputs[idx].GetUTXO(utxos[idx])) have_all_spent_outputs = false; } - PrecomputedTransactionData txdata; + PrecomputedTransactionData txdata{Params().HashGenesisBlock()}; if (have_all_spent_outputs) { txdata.Init(tx, std::move(utxos), true); } else { diff --git a/src/pubkey.cpp b/src/pubkey.cpp index c0057e2678..b6f8a94866 100644 --- a/src/pubkey.cpp +++ b/src/pubkey.cpp @@ -194,16 +194,16 @@ bool XOnlyPubKey::VerifySchnorr(const uint256& msg, Span si return secp256k1_schnorrsig_verify(secp256k1_context_verify, sigbytes.data(), msg.begin(), &pubkey); } -static const CHashWriter HASHER_TAPTWEAK = TaggedHash("TapTweak"); +static const CHashWriter HASHER_TAPTWEAK_ELEMENTS = TaggedHash("TapTweak/elements"); uint256 XOnlyPubKey::ComputeTapTweakHash(const uint256* merkle_root) const { if (merkle_root == nullptr) { // We have no scripts. The actual tweak does not matter, but follow BIP341 here to // allow for reproducible tweaking. - return (CHashWriter(HASHER_TAPTWEAK) << m_keydata).GetSHA256(); + return (CHashWriter(HASHER_TAPTWEAK_ELEMENTS) << m_keydata).GetSHA256(); } else { - return (CHashWriter(HASHER_TAPTWEAK) << m_keydata << *merkle_root).GetSHA256(); + return (CHashWriter(HASHER_TAPTWEAK_ELEMENTS) << m_keydata << *merkle_root).GetSHA256(); } } diff --git a/src/rpc/rawtransaction_util.cpp b/src/rpc/rawtransaction_util.cpp index 90bf812e91..c5a1a4bba5 100644 --- a/src/rpc/rawtransaction_util.cpp +++ b/src/rpc/rawtransaction_util.cpp @@ -561,7 +561,7 @@ void SignTransaction(CMutableTransaction& mtx, const SigningProvider* keystore, std::map input_errors; bool immature_pegin = ValidateTransactionPeginInputs(mtx, active_chain_tip, input_errors); - bool complete = SignTransaction(mtx, keystore, coins, nHashType, input_errors); + bool complete = SignTransaction(mtx, keystore, coins, nHashType, Params().HashGenesisBlock(), input_errors); SignTransactionResultToJSON(mtx, complete, coins, input_errors, immature_pegin, result); } diff --git a/src/script/bitcoinconsensus.cpp b/src/script/bitcoinconsensus.cpp index 9eef806d16..ef9453c7fa 100644 --- a/src/script/bitcoinconsensus.cpp +++ b/src/script/bitcoinconsensus.cpp @@ -8,6 +8,7 @@ #include #include #include