aboutsummaryrefslogtreecommitdiff
path: root/src/policy
diff options
context:
space:
mode:
authorPieter Wuille <pieter@wuille.net>2020-10-15 20:57:58 -0700
committerPieter Wuille <pieter@wuille.net>2020-10-30 15:52:19 -0700
commit525cbd425e2f6a1dbd0febc53d7ada22cec4661f (patch)
tree20e972c680f5d5cb3d22060d9abb730a33d6e7ea /src/policy
parent42b66a6b814bca130a9ccf0a3f747cf33d628232 (diff)
downloadbitcoin-525cbd425e2f6a1dbd0febc53d7ada22cec4661f.tar.xz
Only relay Taproot spends if next block has it active
Diffstat (limited to 'src/policy')
-rw-r--r--src/policy/policy.cpp5
-rw-r--r--src/policy/policy.h5
2 files changed, 7 insertions, 3 deletions
diff --git a/src/policy/policy.cpp b/src/policy/policy.cpp
index 69f2b456f1..91997aa883 100644
--- a/src/policy/policy.cpp
+++ b/src/policy/policy.cpp
@@ -155,7 +155,7 @@ bool IsStandardTx(const CTransaction& tx, bool permit_bare_multisig, const CFeeR
*
* Note that only the non-witness portion of the transaction is checked here.
*/
-bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs)
+bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs, bool taproot_active)
{
if (tx.IsCoinBase())
return true; // Coinbases don't use vin normally
@@ -183,6 +183,9 @@ bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs)
if (subscript.GetSigOpCount(true) > MAX_P2SH_SIGOPS) {
return false;
}
+ } else if (whichType == TxoutType::WITNESS_V1_TAPROOT) {
+ // Don't allow Taproot spends unless Taproot is active.
+ if (!taproot_active) return false;
}
}
diff --git a/src/policy/policy.h b/src/policy/policy.h
index 51d67b9390..8090dff4c6 100644
--- a/src/policy/policy.h
+++ b/src/policy/policy.h
@@ -95,10 +95,11 @@ bool IsStandard(const CScript& scriptPubKey, TxoutType& whichType);
bool IsStandardTx(const CTransaction& tx, bool permit_bare_multisig, const CFeeRate& dust_relay_fee, std::string& reason);
/**
* Check for standard transaction types
- * @param[in] mapInputs Map of previous transactions that have outputs we're spending
+ * @param[in] mapInputs Map of previous transactions that have outputs we're spending
+ * @param[in] taproot_active Whether or taproot consensus rules are active (used to decide whether spends of them are permitted)
* @return True if all inputs (scriptSigs) use only standard transaction forms
*/
-bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs);
+bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs, bool taproot_active);
/**
* Check if the transaction is over standard P2WSH resources limit:
* 3600bytes witnessScript size, 80bytes per witness stack element, 100 witness stack elements