mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 23:07:59 +01:00
refactor: Pass script verify flags as uint32_t
They are cast to unsigned anyway when calling VerifyScript, bitcoinconsensus_verify_script*, or CountWitnessSigOps.
This commit is contained in:
parent
9c1ec689f3
commit
fa621ededd
8 changed files with 16 additions and 17 deletions
|
@ -21,7 +21,7 @@ static void VerifyScriptBench(benchmark::Bench& bench)
|
||||||
const ECCVerifyHandle verify_handle;
|
const ECCVerifyHandle verify_handle;
|
||||||
ECC_Start();
|
ECC_Start();
|
||||||
|
|
||||||
const int flags = SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2SH;
|
const uint32_t flags{SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2SH};
|
||||||
const int witnessversion = 0;
|
const int witnessversion = 0;
|
||||||
|
|
||||||
// Key pair.
|
// Key pair.
|
||||||
|
|
|
@ -135,7 +135,7 @@ unsigned int GetP2SHSigOpCount(const CTransaction& tx, const CCoinsViewCache& in
|
||||||
return nSigOps;
|
return nSigOps;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t GetTransactionSigOpCost(const CTransaction& tx, const CCoinsViewCache& inputs, int flags)
|
int64_t GetTransactionSigOpCost(const CTransaction& tx, const CCoinsViewCache& inputs, uint32_t flags)
|
||||||
{
|
{
|
||||||
int64_t nSigOps = GetLegacySigOpCount(tx) * WITNESS_SCALE_FACTOR;
|
int64_t nSigOps = GetLegacySigOpCount(tx) * WITNESS_SCALE_FACTOR;
|
||||||
|
|
||||||
|
|
|
@ -49,10 +49,10 @@ unsigned int GetP2SHSigOpCount(const CTransaction& tx, const CCoinsViewCache& ma
|
||||||
* Compute total signature operation cost of a transaction.
|
* Compute total signature operation cost of a transaction.
|
||||||
* @param[in] tx Transaction for which we are computing the cost
|
* @param[in] tx Transaction for which we are computing the cost
|
||||||
* @param[in] inputs Map of previous transactions that have outputs we're spending
|
* @param[in] inputs Map of previous transactions that have outputs we're spending
|
||||||
* @param[out] flags Script verification flags
|
* @param[in] flags Script verification flags
|
||||||
* @return Total signature operation cost of tx
|
* @return Total signature operation cost of tx
|
||||||
*/
|
*/
|
||||||
int64_t GetTransactionSigOpCost(const CTransaction& tx, const CCoinsViewCache& inputs, int flags);
|
int64_t GetTransactionSigOpCost(const CTransaction& tx, const CCoinsViewCache& inputs, uint32_t flags);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if transaction is final and can be included in a block with the
|
* Check if transaction is final and can be included in a block with the
|
||||||
|
|
|
@ -39,8 +39,7 @@ enum
|
||||||
* All flags are intended to be soft forks: the set of acceptable scripts under
|
* All flags are intended to be soft forks: the set of acceptable scripts under
|
||||||
* flags (A | B) is a subset of the acceptable scripts under flag (A).
|
* flags (A | B) is a subset of the acceptable scripts under flag (A).
|
||||||
*/
|
*/
|
||||||
enum
|
enum : uint32_t {
|
||||||
{
|
|
||||||
SCRIPT_VERIFY_NONE = 0,
|
SCRIPT_VERIFY_NONE = 0,
|
||||||
|
|
||||||
// Evaluate P2SH subscripts (BIP16).
|
// Evaluate P2SH subscripts (BIP16).
|
||||||
|
|
|
@ -258,7 +258,7 @@ FUZZ_TARGET_INIT(coins_view, initialize_coins_view)
|
||||||
// consensus/tx_verify.cpp:130: unsigned int GetP2SHSigOpCount(const CTransaction &, const CCoinsViewCache &): Assertion `!coin.IsSpent()' failed.
|
// consensus/tx_verify.cpp:130: unsigned int GetP2SHSigOpCount(const CTransaction &, const CCoinsViewCache &): Assertion `!coin.IsSpent()' failed.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const int flags = fuzzed_data_provider.ConsumeIntegral<int>();
|
const auto flags{fuzzed_data_provider.ConsumeIntegral<uint32_t>()};
|
||||||
if (!transaction.vin.empty() && (flags & SCRIPT_VERIFY_WITNESS) != 0 && (flags & SCRIPT_VERIFY_P2SH) == 0) {
|
if (!transaction.vin.empty() && (flags & SCRIPT_VERIFY_WITNESS) != 0 && (flags & SCRIPT_VERIFY_P2SH) == 0) {
|
||||||
// Avoid:
|
// Avoid:
|
||||||
// script/interpreter.cpp:1705: size_t CountWitnessSigOps(const CScript &, const CScript &, const CScriptWitness *, unsigned int): Assertion `(flags & SCRIPT_VERIFY_P2SH) != 0' failed.
|
// script/interpreter.cpp:1705: size_t CountWitnessSigOps(const CScript &, const CScript &, const CScriptWitness *, unsigned int): Assertion `(flags & SCRIPT_VERIFY_P2SH) != 0' failed.
|
||||||
|
|
|
@ -123,7 +123,7 @@ static ScriptError_t ParseScriptError(const std::string& name)
|
||||||
|
|
||||||
BOOST_FIXTURE_TEST_SUITE(script_tests, BasicTestingSetup)
|
BOOST_FIXTURE_TEST_SUITE(script_tests, BasicTestingSetup)
|
||||||
|
|
||||||
void DoTest(const CScript& scriptPubKey, const CScript& scriptSig, const CScriptWitness& scriptWitness, int flags, const std::string& message, int scriptError, CAmount nValue = 0)
|
void DoTest(const CScript& scriptPubKey, const CScript& scriptSig, const CScriptWitness& scriptWitness, uint32_t flags, const std::string& message, int scriptError, CAmount nValue = 0)
|
||||||
{
|
{
|
||||||
bool expect = (scriptError == SCRIPT_ERR_OK);
|
bool expect = (scriptError == SCRIPT_ERR_OK);
|
||||||
if (flags & SCRIPT_VERIFY_CLEANSTACK) {
|
if (flags & SCRIPT_VERIFY_CLEANSTACK) {
|
||||||
|
@ -139,8 +139,8 @@ void DoTest(const CScript& scriptPubKey, const CScript& scriptSig, const CScript
|
||||||
|
|
||||||
// Verify that removing flags from a passing test or adding flags to a failing test does not change the result.
|
// Verify that removing flags from a passing test or adding flags to a failing test does not change the result.
|
||||||
for (int i = 0; i < 16; ++i) {
|
for (int i = 0; i < 16; ++i) {
|
||||||
int extra_flags = InsecureRandBits(16);
|
uint32_t extra_flags(InsecureRandBits(16));
|
||||||
int combined_flags = expect ? (flags & ~extra_flags) : (flags | extra_flags);
|
uint32_t combined_flags{expect ? (flags & ~extra_flags) : (flags | extra_flags)};
|
||||||
// Weed out some invalid flag combinations.
|
// Weed out some invalid flag combinations.
|
||||||
if (combined_flags & SCRIPT_VERIFY_CLEANSTACK && ~combined_flags & (SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_WITNESS)) continue;
|
if (combined_flags & SCRIPT_VERIFY_CLEANSTACK && ~combined_flags & (SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_WITNESS)) continue;
|
||||||
if (combined_flags & SCRIPT_VERIFY_WITNESS && ~combined_flags & SCRIPT_VERIFY_P2SH) continue;
|
if (combined_flags & SCRIPT_VERIFY_WITNESS && ~combined_flags & SCRIPT_VERIFY_P2SH) continue;
|
||||||
|
@ -150,7 +150,7 @@ void DoTest(const CScript& scriptPubKey, const CScript& scriptSig, const CScript
|
||||||
#if defined(HAVE_CONSENSUS_LIB)
|
#if defined(HAVE_CONSENSUS_LIB)
|
||||||
CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);
|
CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);
|
||||||
stream << tx2;
|
stream << tx2;
|
||||||
int libconsensus_flags = flags & bitcoinconsensus_SCRIPT_FLAGS_VERIFY_ALL;
|
uint32_t libconsensus_flags{flags & bitcoinconsensus_SCRIPT_FLAGS_VERIFY_ALL};
|
||||||
if (libconsensus_flags == flags) {
|
if (libconsensus_flags == flags) {
|
||||||
int expectedSuccessCode = expect ? 1 : 0;
|
int expectedSuccessCode = expect ? 1 : 0;
|
||||||
if (flags & bitcoinconsensus_SCRIPT_FLAGS_VERIFY_WITNESS) {
|
if (flags & bitcoinconsensus_SCRIPT_FLAGS_VERIFY_WITNESS) {
|
||||||
|
@ -258,7 +258,7 @@ private:
|
||||||
bool havePush;
|
bool havePush;
|
||||||
std::vector<unsigned char> push;
|
std::vector<unsigned char> push;
|
||||||
std::string comment;
|
std::string comment;
|
||||||
int flags;
|
uint32_t flags;
|
||||||
int scriptError;
|
int scriptError;
|
||||||
CAmount nValue;
|
CAmount nValue;
|
||||||
|
|
||||||
|
@ -278,7 +278,7 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TestBuilder(const CScript& script_, const std::string& comment_, int flags_, bool P2SH = false, WitnessMode wm = WitnessMode::NONE, int witnessversion = 0, CAmount nValue_ = 0) : script(script_), havePush(false), comment(comment_), flags(flags_), scriptError(SCRIPT_ERR_OK), nValue(nValue_)
|
TestBuilder(const CScript& script_, const std::string& comment_, uint32_t flags_, bool P2SH = false, WitnessMode wm = WitnessMode::NONE, int witnessversion = 0, CAmount nValue_ = 0) : script(script_), havePush(false), comment(comment_), flags(flags_), scriptError(SCRIPT_ERR_OK), nValue(nValue_)
|
||||||
{
|
{
|
||||||
CScript scriptPubKey = script;
|
CScript scriptPubKey = script;
|
||||||
if (wm == WitnessMode::PKH) {
|
if (wm == WitnessMode::PKH) {
|
||||||
|
@ -1677,7 +1677,7 @@ static void AssetTest(const UniValue& test)
|
||||||
const std::vector<CTxOut> prevouts = TxOutsFromJSON(test["prevouts"]);
|
const std::vector<CTxOut> prevouts = TxOutsFromJSON(test["prevouts"]);
|
||||||
BOOST_CHECK(prevouts.size() == mtx.vin.size());
|
BOOST_CHECK(prevouts.size() == mtx.vin.size());
|
||||||
size_t idx = test["index"].get_int64();
|
size_t idx = test["index"].get_int64();
|
||||||
unsigned int test_flags = ParseScriptFlags(test["flags"].get_str());
|
uint32_t test_flags{ParseScriptFlags(test["flags"].get_str())};
|
||||||
bool fin = test.exists("final") && test["final"].get_bool();
|
bool fin = test.exists("final") && test["final"].get_bool();
|
||||||
|
|
||||||
if (test.exists("success")) {
|
if (test.exists("success")) {
|
||||||
|
|
|
@ -67,7 +67,7 @@ BOOST_AUTO_TEST_CASE(GetSigOpCount)
|
||||||
* Verifies script execution of the zeroth scriptPubKey of tx output and
|
* Verifies script execution of the zeroth scriptPubKey of tx output and
|
||||||
* zeroth scriptSig and witness of tx input.
|
* zeroth scriptSig and witness of tx input.
|
||||||
*/
|
*/
|
||||||
static ScriptError VerifyWithFlag(const CTransaction& output, const CMutableTransaction& input, int flags)
|
static ScriptError VerifyWithFlag(const CTransaction& output, const CMutableTransaction& input, uint32_t flags)
|
||||||
{
|
{
|
||||||
ScriptError error;
|
ScriptError error;
|
||||||
CTransaction inputi(input);
|
CTransaction inputi(input);
|
||||||
|
@ -121,7 +121,7 @@ BOOST_AUTO_TEST_CASE(GetTxSigOpCost)
|
||||||
key.MakeNewKey(true);
|
key.MakeNewKey(true);
|
||||||
CPubKey pubkey = key.GetPubKey();
|
CPubKey pubkey = key.GetPubKey();
|
||||||
// Default flags
|
// Default flags
|
||||||
int flags = SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2SH;
|
const uint32_t flags{SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2SH};
|
||||||
|
|
||||||
// Multisig script (legacy counting)
|
// Multisig script (legacy counting)
|
||||||
{
|
{
|
||||||
|
|
|
@ -446,7 +446,7 @@ static void CreateCreditAndSpend(const FillableSigningProvider& keystore, const
|
||||||
assert(input.vin[0].scriptWitness.stack == inputm.vin[0].scriptWitness.stack);
|
assert(input.vin[0].scriptWitness.stack == inputm.vin[0].scriptWitness.stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CheckWithFlag(const CTransactionRef& output, const CMutableTransaction& input, int flags, bool success)
|
static void CheckWithFlag(const CTransactionRef& output, const CMutableTransaction& input, uint32_t flags, bool success)
|
||||||
{
|
{
|
||||||
ScriptError error;
|
ScriptError error;
|
||||||
CTransaction inputi(input);
|
CTransaction inputi(input);
|
||||||
|
|
Loading…
Add table
Reference in a new issue