Browse Source

Closes #2954 and #2959. Fixes Overwinter issues in sighash_tests.

pull/4/head
Simon 6 years ago
committed by Jack Grigg
parent
commit
07f94352ad
No known key found for this signature in database GPG Key ID: 665DBCD284F7DAFF
  1. 30
      src/test/sighash_tests.cpp

30
src/test/sighash_tests.cpp

@ -16,6 +16,7 @@
#include "sodium.h"
#include <iostream>
#include <random>
#include <boost/test/unit_test.hpp>
@ -93,27 +94,26 @@ void static RandomScript(CScript &script) {
script << oplist[insecure_rand() % (sizeof(oplist)/sizeof(oplist[0]))];
}
// Overwinter tx version numbers are selected randomly from current version range.
// http://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution
// https://stackoverflow.com/a/19728404
std::random_device rd;
std::mt19937 rng(rd());
std::uniform_int_distribution<int> version_dist(CTransaction::OVERWINTER_MIN_CURRENT_VERSION,
CTransaction::OVERWINTER_MAX_CURRENT_VERSION);
void static RandomTransaction(CMutableTransaction &tx, bool fSingle, uint32_t consensusBranchId) {
tx.fOverwintered = insecure_rand() % 2;
if (tx.fOverwintered) {
// Versions outside known ranges throw an exception during parsing
auto range =
CTransaction::OVERWINTER_MAX_CURRENT_VERSION - CTransaction::OVERWINTER_MIN_CURRENT_VERSION;
if (range > 0) {
tx.nVersion =
(insecure_rand() % range) +
CTransaction::OVERWINTER_MIN_CURRENT_VERSION;
} else {
tx.nVersion = CTransaction::OVERWINTER_MIN_CURRENT_VERSION;
}
tx.nVersion = version_dist(rng);
tx.nVersionGroupId = OVERWINTER_VERSION_GROUP_ID;
tx.nExpiryHeight = (insecure_rand() % 2) ? insecure_rand() : 0;
} else {
tx.nVersion = insecure_rand() & 0x7FFFFFFF;
}
tx.vin.clear();
tx.vout.clear();
tx.nLockTime = (insecure_rand() % 2) ? insecure_rand() : 0;
tx.nExpiryHeight = (insecure_rand() % 2) ? insecure_rand() : 0;
int ins = (insecure_rand() % 4) + 1;
int outs = fSingle ? ins : (insecure_rand() % 4) + 1;
int joinsplits = (insecure_rand() % 4);
@ -259,7 +259,11 @@ BOOST_AUTO_TEST_CASE(sighash_from_data)
CValidationState state;
if (tx.fOverwintered) {
if (tx.nVersion == 3 && tx.nExpiryHeight > TX_EXPIRY_HEIGHT_THRESHOLD) {
// Note that OVERWINTER_MIN_CURRENT_VERSION and OVERWINTER_MAX_CURRENT_VERSION
// are checked in IsStandardTx(), not in CheckTransactionWithoutProofVerification()
if (tx.nVersion < OVERWINTER_MIN_TX_VERSION ||
tx.nExpiryHeight >= TX_EXPIRY_HEIGHT_THRESHOLD)
{
// Transaction must be invalid
BOOST_CHECK_MESSAGE(!CheckTransactionWithoutProofVerification(tx, state), strTest);
BOOST_CHECK(!state.IsValid());
@ -267,7 +271,7 @@ BOOST_AUTO_TEST_CASE(sighash_from_data)
BOOST_CHECK_MESSAGE(CheckTransactionWithoutProofVerification(tx, state), strTest);
BOOST_CHECK(state.IsValid());
}
} else if (tx.nVersion < OVERWINTER_MIN_TX_VERSION) {
} else if (tx.nVersion < SPROUT_MIN_TX_VERSION) {
// Transaction must be invalid
BOOST_CHECK_MESSAGE(!CheckTransactionWithoutProofVerification(tx, state), strTest);
BOOST_CHECK(!state.IsValid());

Loading…
Cancel
Save