aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Todd <[email protected]>2014-03-10 17:31:46 -0400
committerlangerhans <[email protected]>2014-06-29 15:38:32 +0200
commit1479d05a792c7d73a83ecb8d81ff85cf2b1becaa (patch)
tree7f8e74ee61b57a850c8f2f7f472f76de08330cfd /src
parentRemove reference to libboost with specific version (diff)
downloaddiscoin-1479d05a792c7d73a83ecb8d81ff85cf2b1becaa.tar.xz
discoin-1479d05a792c7d73a83ecb8d81ff85cf2b1becaa.zip
Create (MANDATORY|STANDARD)_SCRIPT_VERIFY_FLAGS constants
Diffstat (limited to 'src')
-rw-r--r--src/main.cpp2
-rw-r--r--src/main.h2
-rw-r--r--src/miner.cpp5
-rw-r--r--src/rpcrawtransaction.cpp2
-rw-r--r--src/script.cpp2
-rw-r--r--src/script.h12
6 files changed, 20 insertions, 5 deletions
diff --git a/src/main.cpp b/src/main.cpp
index a95f7cf2d..c8a70488b 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -941,7 +941,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
// Check against previous transactions
// This is done last to help prevent CPU exhaustion denial-of-service attacks.
- if (!CheckInputs(tx, state, view, true, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC))
+ if (!CheckInputs(tx, state, view, true, STANDARD_SCRIPT_VERIFY_FLAGS))
{
return error("AcceptToMemoryPool: : ConnectInputs failed %s", hash.ToString());
}
diff --git a/src/main.h b/src/main.h
index 38b39d3c8..e758a374c 100644
--- a/src/main.h
+++ b/src/main.h
@@ -328,7 +328,7 @@ int GetRequiredMaturityDepth(int nHeight);
// This does not modify the UTXO set. If pvChecks is not NULL, script checks are pushed onto it
// instead of being performed inline.
bool CheckInputs(const CTransaction& tx, CValidationState &state, CCoinsViewCache &view, bool fScriptChecks = true,
- unsigned int flags = SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC,
+ unsigned int flags = STANDARD_SCRIPT_VERIFY_FLAGS,
std::vector<CScriptCheck> *pvChecks = NULL);
// Apply the effects of this transaction on the UTXO set represented by view
diff --git a/src/miner.cpp b/src/miner.cpp
index 6e5e6a656..6a1f36872 100644
--- a/src/miner.cpp
+++ b/src/miner.cpp
@@ -280,8 +280,11 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn)
if (nBlockSigOps + nTxSigOps >= MAX_BLOCK_SIGOPS)
continue;
+ // Note that flags: we don't want to set mempool/IsStandard()
+ // policy here, but we still have to ensure that the block we
+ // create only contains transactions that are valid in new blocks.
CValidationState state;
- if (!CheckInputs(tx, state, view, true, SCRIPT_VERIFY_P2SH))
+ if (!CheckInputs(tx, state, view, true, MANDATORY_SCRIPT_VERIFY_FLAGS))
continue;
CTxUndo txundo;
diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp
index cfb38e9e0..223e10b0a 100644
--- a/src/rpcrawtransaction.cpp
+++ b/src/rpcrawtransaction.cpp
@@ -722,7 +722,7 @@ Value signrawtransaction(const Array& params, bool fHelp)
{
txin.scriptSig = CombineSignatures(prevPubKey, mergedTx, i, txin.scriptSig, txv.vin[i].scriptSig);
}
- if (!VerifyScript(txin.scriptSig, prevPubKey, mergedTx, i, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC, 0))
+ if (!VerifyScript(txin.scriptSig, prevPubKey, mergedTx, i, STANDARD_SCRIPT_VERIFY_FLAGS, 0))
fComplete = false;
}
diff --git a/src/script.cpp b/src/script.cpp
index 7ef8630f5..10d79e649 100644
--- a/src/script.cpp
+++ b/src/script.cpp
@@ -1659,7 +1659,7 @@ bool SignSignature(const CKeyStore &keystore, const CScript& fromPubKey, CTransa
}
// Test solution
- return VerifyScript(txin.scriptSig, fromPubKey, txTo, nIn, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC, 0);
+ return VerifyScript(txin.scriptSig, fromPubKey, txTo, nIn, STANDARD_SCRIPT_VERIFY_FLAGS, 0);
}
bool SignSignature(const CKeyStore &keystore, const CTransaction& txFrom, CTransaction& txTo, unsigned int nIn, int nHashType)
diff --git a/src/script.h b/src/script.h
index 1742ce81f..f6e5f045a 100644
--- a/src/script.h
+++ b/src/script.h
@@ -192,6 +192,18 @@ enum
SCRIPT_VERIFY_NOCACHE = (1U << 3), // do not store results in signature cache (but do query it)
};
+// Mandatory script verification flags that all new blocks must comply with for
+// them to be valid. (but old blocks may not comply with) Currently just P2SH,
+// but in the future other flags may be added, such as a soft-fork to enforce
+// strict DER encoding.
+static const unsigned int MANDATORY_SCRIPT_VERIFY_FLAGS = SCRIPT_VERIFY_P2SH;
+
+// Standard script verification flags that standard transactions will comply
+// with. However scripts violating these flags may still be present in valid
+// blocks and we must accept those blocks.
+static const unsigned int STANDARD_SCRIPT_VERIFY_FLAGS = MANDATORY_SCRIPT_VERIFY_FLAGS |
+ SCRIPT_VERIFY_STRICTENC;
+
enum txnouttype
{
TX_NONSTANDARD,