tests: Avoid copies of CTransaction
This commit is contained in:
parent
b1fdfc1a8c
commit
fae58eca93
10 changed files with 39 additions and 35 deletions
|
@ -9,7 +9,7 @@
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
static void AddTx(const CTransaction& tx, const CAmount& nFee, CTxMemPool& pool)
|
static void AddTx(const CMutableTransaction& tx, const CAmount& nFee, CTxMemPool& pool)
|
||||||
{
|
{
|
||||||
int64_t nTime = 0;
|
int64_t nTime = 0;
|
||||||
unsigned int nHeight = 1;
|
unsigned int nHeight = 1;
|
||||||
|
|
|
@ -71,7 +71,7 @@ static void VerifyScriptBench(benchmark::State& state)
|
||||||
CScript scriptPubKey = CScript() << witnessversion << ToByteVector(pubkeyHash);
|
CScript scriptPubKey = CScript() << witnessversion << ToByteVector(pubkeyHash);
|
||||||
CScript scriptSig;
|
CScript scriptSig;
|
||||||
CScript witScriptPubkey = CScript() << OP_DUP << OP_HASH160 << ToByteVector(pubkeyHash) << OP_EQUALVERIFY << OP_CHECKSIG;
|
CScript witScriptPubkey = CScript() << OP_DUP << OP_HASH160 << ToByteVector(pubkeyHash) << OP_EQUALVERIFY << OP_CHECKSIG;
|
||||||
CTransaction txCredit = BuildCreditingTransaction(scriptPubKey);
|
const CMutableTransaction& txCredit = BuildCreditingTransaction(scriptPubKey);
|
||||||
CMutableTransaction txSpend = BuildSpendingTransaction(scriptSig, txCredit);
|
CMutableTransaction txSpend = BuildSpendingTransaction(scriptSig, txCredit);
|
||||||
CScriptWitness& witness = txSpend.vin[0].scriptWitness;
|
CScriptWitness& witness = txSpend.vin[0].scriptWitness;
|
||||||
witness.stack.emplace_back();
|
witness.stack.emplace_back();
|
||||||
|
|
|
@ -52,8 +52,8 @@ static CBlock BuildBlockTestCase() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Number of shared use_counts we expect for a tx we haven't touched
|
// Number of shared use_counts we expect for a tx we haven't touched
|
||||||
// == 2 (mempool + our copy from the GetSharedTx call)
|
// (block + mempool + our copy from the GetSharedTx call)
|
||||||
#define SHARED_TX_OFFSET 2
|
constexpr long SHARED_TX_OFFSET{3};
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(SimpleRoundTripTest)
|
BOOST_AUTO_TEST_CASE(SimpleRoundTripTest)
|
||||||
{
|
{
|
||||||
|
@ -61,7 +61,7 @@ BOOST_AUTO_TEST_CASE(SimpleRoundTripTest)
|
||||||
TestMemPoolEntryHelper entry;
|
TestMemPoolEntryHelper entry;
|
||||||
CBlock block(BuildBlockTestCase());
|
CBlock block(BuildBlockTestCase());
|
||||||
|
|
||||||
pool.addUnchecked(block.vtx[2]->GetHash(), entry.FromTx(*block.vtx[2]));
|
pool.addUnchecked(block.vtx[2]->GetHash(), entry.FromTx(block.vtx[2]));
|
||||||
LOCK(pool.cs);
|
LOCK(pool.cs);
|
||||||
BOOST_CHECK_EQUAL(pool.mapTx.find(block.vtx[2]->GetHash())->GetSharedTx().use_count(), SHARED_TX_OFFSET + 0);
|
BOOST_CHECK_EQUAL(pool.mapTx.find(block.vtx[2]->GetHash())->GetSharedTx().use_count(), SHARED_TX_OFFSET + 0);
|
||||||
|
|
||||||
|
@ -161,7 +161,7 @@ BOOST_AUTO_TEST_CASE(NonCoinbasePreforwardRTTest)
|
||||||
TestMemPoolEntryHelper entry;
|
TestMemPoolEntryHelper entry;
|
||||||
CBlock block(BuildBlockTestCase());
|
CBlock block(BuildBlockTestCase());
|
||||||
|
|
||||||
pool.addUnchecked(block.vtx[2]->GetHash(), entry.FromTx(*block.vtx[2]));
|
pool.addUnchecked(block.vtx[2]->GetHash(), entry.FromTx(block.vtx[2]));
|
||||||
LOCK(pool.cs);
|
LOCK(pool.cs);
|
||||||
BOOST_CHECK_EQUAL(pool.mapTx.find(block.vtx[2]->GetHash())->GetSharedTx().use_count(), SHARED_TX_OFFSET + 0);
|
BOOST_CHECK_EQUAL(pool.mapTx.find(block.vtx[2]->GetHash())->GetSharedTx().use_count(), SHARED_TX_OFFSET + 0);
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ BOOST_AUTO_TEST_CASE(NonCoinbasePreforwardRTTest)
|
||||||
BOOST_CHECK( partialBlock.IsTxAvailable(1));
|
BOOST_CHECK( partialBlock.IsTxAvailable(1));
|
||||||
BOOST_CHECK( partialBlock.IsTxAvailable(2));
|
BOOST_CHECK( partialBlock.IsTxAvailable(2));
|
||||||
|
|
||||||
BOOST_CHECK_EQUAL(pool.mapTx.find(block.vtx[2]->GetHash())->GetSharedTx().use_count(), SHARED_TX_OFFSET + 1);
|
BOOST_CHECK_EQUAL(pool.mapTx.find(block.vtx[2]->GetHash())->GetSharedTx().use_count(), SHARED_TX_OFFSET + 1); // +1 because of partialBlock
|
||||||
|
|
||||||
CBlock block2;
|
CBlock block2;
|
||||||
{
|
{
|
||||||
|
@ -203,6 +203,7 @@ BOOST_AUTO_TEST_CASE(NonCoinbasePreforwardRTTest)
|
||||||
partialBlock.FillBlock(block2, {block.vtx[1]}); // Current implementation doesn't check txn here, but don't require that
|
partialBlock.FillBlock(block2, {block.vtx[1]}); // Current implementation doesn't check txn here, but don't require that
|
||||||
partialBlock = tmp;
|
partialBlock = tmp;
|
||||||
}
|
}
|
||||||
|
BOOST_CHECK_EQUAL(pool.mapTx.find(block.vtx[2]->GetHash())->GetSharedTx().use_count(), SHARED_TX_OFFSET + 2); // +2 because of partialBlock and block2
|
||||||
bool mutated;
|
bool mutated;
|
||||||
BOOST_CHECK(block.hashMerkleRoot != BlockMerkleRoot(block2, &mutated));
|
BOOST_CHECK(block.hashMerkleRoot != BlockMerkleRoot(block2, &mutated));
|
||||||
|
|
||||||
|
@ -213,13 +214,15 @@ BOOST_AUTO_TEST_CASE(NonCoinbasePreforwardRTTest)
|
||||||
BOOST_CHECK_EQUAL(block.hashMerkleRoot.ToString(), BlockMerkleRoot(block3, &mutated).ToString());
|
BOOST_CHECK_EQUAL(block.hashMerkleRoot.ToString(), BlockMerkleRoot(block3, &mutated).ToString());
|
||||||
BOOST_CHECK(!mutated);
|
BOOST_CHECK(!mutated);
|
||||||
|
|
||||||
|
BOOST_CHECK_EQUAL(pool.mapTx.find(block.vtx[2]->GetHash())->GetSharedTx().use_count(), SHARED_TX_OFFSET + 3); // +2 because of partialBlock and block2 and block3
|
||||||
|
|
||||||
txhash = block.vtx[2]->GetHash();
|
txhash = block.vtx[2]->GetHash();
|
||||||
block.vtx.clear();
|
block.vtx.clear();
|
||||||
block2.vtx.clear();
|
block2.vtx.clear();
|
||||||
block3.vtx.clear();
|
block3.vtx.clear();
|
||||||
BOOST_CHECK_EQUAL(pool.mapTx.find(txhash)->GetSharedTx().use_count(), SHARED_TX_OFFSET + 1); // + 1 because of partialBlockCopy.
|
BOOST_CHECK_EQUAL(pool.mapTx.find(txhash)->GetSharedTx().use_count(), SHARED_TX_OFFSET + 1 - 1); // + 1 because of partialBlock; -1 because of block.
|
||||||
}
|
}
|
||||||
BOOST_CHECK_EQUAL(pool.mapTx.find(txhash)->GetSharedTx().use_count(), SHARED_TX_OFFSET + 0);
|
BOOST_CHECK_EQUAL(pool.mapTx.find(txhash)->GetSharedTx().use_count(), SHARED_TX_OFFSET - 1); // -1 because of block
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(SufficientPreforwardRTTest)
|
BOOST_AUTO_TEST_CASE(SufficientPreforwardRTTest)
|
||||||
|
@ -228,7 +231,7 @@ BOOST_AUTO_TEST_CASE(SufficientPreforwardRTTest)
|
||||||
TestMemPoolEntryHelper entry;
|
TestMemPoolEntryHelper entry;
|
||||||
CBlock block(BuildBlockTestCase());
|
CBlock block(BuildBlockTestCase());
|
||||||
|
|
||||||
pool.addUnchecked(block.vtx[1]->GetHash(), entry.FromTx(*block.vtx[1]));
|
pool.addUnchecked(block.vtx[1]->GetHash(), entry.FromTx(block.vtx[1]));
|
||||||
LOCK(pool.cs);
|
LOCK(pool.cs);
|
||||||
BOOST_CHECK_EQUAL(pool.mapTx.find(block.vtx[1]->GetHash())->GetSharedTx().use_count(), SHARED_TX_OFFSET + 0);
|
BOOST_CHECK_EQUAL(pool.mapTx.find(block.vtx[1]->GetHash())->GetSharedTx().use_count(), SHARED_TX_OFFSET + 0);
|
||||||
|
|
||||||
|
@ -268,9 +271,9 @@ BOOST_AUTO_TEST_CASE(SufficientPreforwardRTTest)
|
||||||
txhash = block.vtx[1]->GetHash();
|
txhash = block.vtx[1]->GetHash();
|
||||||
block.vtx.clear();
|
block.vtx.clear();
|
||||||
block2.vtx.clear();
|
block2.vtx.clear();
|
||||||
BOOST_CHECK_EQUAL(pool.mapTx.find(txhash)->GetSharedTx().use_count(), SHARED_TX_OFFSET + 1); // + 1 because of partialBlockCopy.
|
BOOST_CHECK_EQUAL(pool.mapTx.find(txhash)->GetSharedTx().use_count(), SHARED_TX_OFFSET + 1 - 1); // + 1 because of partialBlock; -1 because of block.
|
||||||
}
|
}
|
||||||
BOOST_CHECK_EQUAL(pool.mapTx.find(txhash)->GetSharedTx().use_count(), SHARED_TX_OFFSET + 0);
|
BOOST_CHECK_EQUAL(pool.mapTx.find(txhash)->GetSharedTx().use_count(), SHARED_TX_OFFSET - 1); // -1 because of block
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(EmptyBlockRoundTripTest)
|
BOOST_AUTO_TEST_CASE(EmptyBlockRoundTripTest)
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
BOOST_FIXTURE_TEST_SUITE(multisig_tests, BasicTestingSetup)
|
BOOST_FIXTURE_TEST_SUITE(multisig_tests, BasicTestingSetup)
|
||||||
|
|
||||||
CScript
|
CScript
|
||||||
sign_multisig(CScript scriptPubKey, std::vector<CKey> keys, CTransaction transaction, int whichIn)
|
sign_multisig(const CScript& scriptPubKey, const std::vector<CKey>& keys, const CTransaction& transaction, int whichIn)
|
||||||
{
|
{
|
||||||
uint256 hash = SignatureHash(scriptPubKey, transaction, whichIn, SIGHASH_ALL, 0, SigVersion::BASE);
|
uint256 hash = SignatureHash(scriptPubKey, transaction, whichIn, SIGHASH_ALL, 0, SigVersion::BASE);
|
||||||
|
|
||||||
|
|
|
@ -1029,7 +1029,7 @@ BOOST_AUTO_TEST_CASE(script_PushData)
|
||||||
}
|
}
|
||||||
|
|
||||||
CScript
|
CScript
|
||||||
sign_multisig(CScript scriptPubKey, std::vector<CKey> keys, CTransaction transaction)
|
sign_multisig(const CScript& scriptPubKey, const std::vector<CKey>& keys, const CTransaction& transaction)
|
||||||
{
|
{
|
||||||
uint256 hash = SignatureHash(scriptPubKey, transaction, 0, SIGHASH_ALL, 0, SigVersion::BASE);
|
uint256 hash = SignatureHash(scriptPubKey, transaction, 0, SIGHASH_ALL, 0, SigVersion::BASE);
|
||||||
|
|
||||||
|
@ -1053,7 +1053,7 @@ sign_multisig(CScript scriptPubKey, std::vector<CKey> keys, CTransaction transac
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
CScript
|
CScript
|
||||||
sign_multisig(CScript scriptPubKey, const CKey &key, CTransaction transaction)
|
sign_multisig(const CScript& scriptPubKey, const CKey& key, const CTransaction& transaction)
|
||||||
{
|
{
|
||||||
std::vector<CKey> keys;
|
std::vector<CKey> keys;
|
||||||
keys.push_back(key);
|
keys.push_back(key);
|
||||||
|
|
|
@ -23,7 +23,7 @@ protected:
|
||||||
CTransactionRef txval;
|
CTransactionRef txval;
|
||||||
public:
|
public:
|
||||||
CSerializeMethodsTestSingle() = default;
|
CSerializeMethodsTestSingle() = default;
|
||||||
CSerializeMethodsTestSingle(int intvalin, bool boolvalin, std::string stringvalin, const char* charstrvalin, CTransaction txvalin) : intval(intvalin), boolval(boolvalin), stringval(std::move(stringvalin)), txval(MakeTransactionRef(txvalin))
|
CSerializeMethodsTestSingle(int intvalin, bool boolvalin, std::string stringvalin, const char* charstrvalin, const CTransactionRef& txvalin) : intval(intvalin), boolval(boolvalin), stringval(std::move(stringvalin)), txval(txvalin)
|
||||||
{
|
{
|
||||||
memcpy(charstrval, charstrvalin, sizeof(charstrval));
|
memcpy(charstrval, charstrvalin, sizeof(charstrval));
|
||||||
}
|
}
|
||||||
|
@ -350,8 +350,9 @@ BOOST_AUTO_TEST_CASE(class_methods)
|
||||||
std::string stringval("testing");
|
std::string stringval("testing");
|
||||||
const char charstrval[16] = "testing charstr";
|
const char charstrval[16] = "testing charstr";
|
||||||
CMutableTransaction txval;
|
CMutableTransaction txval;
|
||||||
CSerializeMethodsTestSingle methodtest1(intval, boolval, stringval, charstrval, txval);
|
CTransactionRef tx_ref{MakeTransactionRef(txval)};
|
||||||
CSerializeMethodsTestMany methodtest2(intval, boolval, stringval, charstrval, txval);
|
CSerializeMethodsTestSingle methodtest1(intval, boolval, stringval, charstrval, tx_ref);
|
||||||
|
CSerializeMethodsTestMany methodtest2(intval, boolval, stringval, charstrval, tx_ref);
|
||||||
CSerializeMethodsTestSingle methodtest3;
|
CSerializeMethodsTestSingle methodtest3;
|
||||||
CSerializeMethodsTestMany methodtest4;
|
CSerializeMethodsTestMany methodtest4;
|
||||||
CDataStream ss(SER_DISK, PROTOCOL_VERSION);
|
CDataStream ss(SER_DISK, PROTOCOL_VERSION);
|
||||||
|
|
|
@ -123,7 +123,7 @@ TestChain100Setup::TestChain100Setup() : TestingSetup(CBaseChainParams::REGTEST)
|
||||||
{
|
{
|
||||||
std::vector<CMutableTransaction> noTxns;
|
std::vector<CMutableTransaction> noTxns;
|
||||||
CBlock b = CreateAndProcessBlock(noTxns, scriptPubKey);
|
CBlock b = CreateAndProcessBlock(noTxns, scriptPubKey);
|
||||||
coinbaseTxns.push_back(*b.vtx[0]);
|
m_coinbase_txns.push_back(b.vtx[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,12 +164,12 @@ TestChain100Setup::~TestChain100Setup()
|
||||||
|
|
||||||
|
|
||||||
CTxMemPoolEntry TestMemPoolEntryHelper::FromTx(const CMutableTransaction &tx) {
|
CTxMemPoolEntry TestMemPoolEntryHelper::FromTx(const CMutableTransaction &tx) {
|
||||||
CTransaction txn(tx);
|
return FromTx(MakeTransactionRef(tx));
|
||||||
return FromTx(txn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CTxMemPoolEntry TestMemPoolEntryHelper::FromTx(const CTransaction &txn) {
|
CTxMemPoolEntry TestMemPoolEntryHelper::FromTx(const CTransactionRef& tx)
|
||||||
return CTxMemPoolEntry(MakeTransactionRef(txn), nFee, nTime, nHeight,
|
{
|
||||||
|
return CTxMemPoolEntry(tx, nFee, nTime, nHeight,
|
||||||
spendsCoinbase, sigOpCost, lp);
|
spendsCoinbase, sigOpCost, lp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ struct TestChain100Setup : public TestingSetup {
|
||||||
|
|
||||||
~TestChain100Setup();
|
~TestChain100Setup();
|
||||||
|
|
||||||
std::vector<CTransaction> coinbaseTxns; // For convenience, coinbase transactions
|
std::vector<CTransactionRef> m_coinbase_txns; // For convenience, coinbase transactions
|
||||||
CKey coinbaseKey; // private/public key needed to spend coinbase transactions
|
CKey coinbaseKey; // private/public key needed to spend coinbase transactions
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -107,8 +107,8 @@ struct TestMemPoolEntryHelper
|
||||||
nFee(0), nTime(0), nHeight(1),
|
nFee(0), nTime(0), nHeight(1),
|
||||||
spendsCoinbase(false), sigOpCost(4) { }
|
spendsCoinbase(false), sigOpCost(4) { }
|
||||||
|
|
||||||
CTxMemPoolEntry FromTx(const CMutableTransaction &tx);
|
CTxMemPoolEntry FromTx(const CMutableTransaction& tx);
|
||||||
CTxMemPoolEntry FromTx(const CTransaction &tx);
|
CTxMemPoolEntry FromTx(const CTransactionRef& tx);
|
||||||
|
|
||||||
// Change the default value
|
// Change the default value
|
||||||
TestMemPoolEntryHelper &Fee(CAmount _fee) { nFee = _fee; return *this; }
|
TestMemPoolEntryHelper &Fee(CAmount _fee) { nFee = _fee; return *this; }
|
||||||
|
|
|
@ -48,7 +48,7 @@ BOOST_FIXTURE_TEST_CASE(tx_mempool_block_doublespend, TestChain100Setup)
|
||||||
{
|
{
|
||||||
spends[i].nVersion = 1;
|
spends[i].nVersion = 1;
|
||||||
spends[i].vin.resize(1);
|
spends[i].vin.resize(1);
|
||||||
spends[i].vin[0].prevout.hash = coinbaseTxns[0].GetHash();
|
spends[i].vin[0].prevout.hash = m_coinbase_txns[0]->GetHash();
|
||||||
spends[i].vin[0].prevout.n = 0;
|
spends[i].vin[0].prevout.n = 0;
|
||||||
spends[i].vout.resize(1);
|
spends[i].vout.resize(1);
|
||||||
spends[i].vout[0].nValue = 11*CENT;
|
spends[i].vout[0].nValue = 11*CENT;
|
||||||
|
@ -167,7 +167,7 @@ BOOST_FIXTURE_TEST_CASE(checkinputs_test, TestChain100Setup)
|
||||||
|
|
||||||
spend_tx.nVersion = 1;
|
spend_tx.nVersion = 1;
|
||||||
spend_tx.vin.resize(1);
|
spend_tx.vin.resize(1);
|
||||||
spend_tx.vin[0].prevout.hash = coinbaseTxns[0].GetHash();
|
spend_tx.vin[0].prevout.hash = m_coinbase_txns[0]->GetHash();
|
||||||
spend_tx.vin[0].prevout.n = 0;
|
spend_tx.vin[0].prevout.n = 0;
|
||||||
spend_tx.vout.resize(4);
|
spend_tx.vout.resize(4);
|
||||||
spend_tx.vout[0].nValue = 11*CENT;
|
spend_tx.vout[0].nValue = 11*CENT;
|
||||||
|
|
|
@ -119,14 +119,14 @@ BOOST_FIXTURE_TEST_CASE(importwallet_rescan, TestChain100Setup)
|
||||||
// will pick up both blocks, not just the first.
|
// will pick up both blocks, not just the first.
|
||||||
const int64_t BLOCK_TIME = chainActive.Tip()->GetBlockTimeMax() + 5;
|
const int64_t BLOCK_TIME = chainActive.Tip()->GetBlockTimeMax() + 5;
|
||||||
SetMockTime(BLOCK_TIME);
|
SetMockTime(BLOCK_TIME);
|
||||||
coinbaseTxns.emplace_back(*CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())).vtx[0]);
|
m_coinbase_txns.emplace_back(CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())).vtx[0]);
|
||||||
coinbaseTxns.emplace_back(*CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())).vtx[0]);
|
m_coinbase_txns.emplace_back(CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())).vtx[0]);
|
||||||
|
|
||||||
// Set key birthday to block time increased by the timestamp window, so
|
// Set key birthday to block time increased by the timestamp window, so
|
||||||
// rescan will start at the block time.
|
// rescan will start at the block time.
|
||||||
const int64_t KEY_TIME = BLOCK_TIME + TIMESTAMP_WINDOW;
|
const int64_t KEY_TIME = BLOCK_TIME + TIMESTAMP_WINDOW;
|
||||||
SetMockTime(KEY_TIME);
|
SetMockTime(KEY_TIME);
|
||||||
coinbaseTxns.emplace_back(*CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())).vtx[0]);
|
m_coinbase_txns.emplace_back(CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())).vtx[0]);
|
||||||
|
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
|
|
||||||
|
@ -157,9 +157,9 @@ BOOST_FIXTURE_TEST_CASE(importwallet_rescan, TestChain100Setup)
|
||||||
|
|
||||||
LOCK(wallet.cs_wallet);
|
LOCK(wallet.cs_wallet);
|
||||||
BOOST_CHECK_EQUAL(wallet.mapWallet.size(), 3U);
|
BOOST_CHECK_EQUAL(wallet.mapWallet.size(), 3U);
|
||||||
BOOST_CHECK_EQUAL(coinbaseTxns.size(), 103U);
|
BOOST_CHECK_EQUAL(m_coinbase_txns.size(), 103U);
|
||||||
for (size_t i = 0; i < coinbaseTxns.size(); ++i) {
|
for (size_t i = 0; i < m_coinbase_txns.size(); ++i) {
|
||||||
bool found = wallet.GetWalletTx(coinbaseTxns[i].GetHash());
|
bool found = wallet.GetWalletTx(m_coinbase_txns[i]->GetHash());
|
||||||
bool expected = i >= 100;
|
bool expected = i >= 100;
|
||||||
BOOST_CHECK_EQUAL(found, expected);
|
BOOST_CHECK_EQUAL(found, expected);
|
||||||
}
|
}
|
||||||
|
@ -178,7 +178,7 @@ BOOST_FIXTURE_TEST_CASE(importwallet_rescan, TestChain100Setup)
|
||||||
BOOST_FIXTURE_TEST_CASE(coin_mark_dirty_immature_credit, TestChain100Setup)
|
BOOST_FIXTURE_TEST_CASE(coin_mark_dirty_immature_credit, TestChain100Setup)
|
||||||
{
|
{
|
||||||
CWallet wallet("dummy", WalletDatabase::CreateDummy());
|
CWallet wallet("dummy", WalletDatabase::CreateDummy());
|
||||||
CWalletTx wtx(&wallet, MakeTransactionRef(coinbaseTxns.back()));
|
CWalletTx wtx(&wallet, m_coinbase_txns.back());
|
||||||
LOCK2(cs_main, wallet.cs_wallet);
|
LOCK2(cs_main, wallet.cs_wallet);
|
||||||
wtx.hashBlock = chainActive.Tip()->GetBlockHash();
|
wtx.hashBlock = chainActive.Tip()->GetBlockHash();
|
||||||
wtx.nIndex = 0;
|
wtx.nIndex = 0;
|
||||||
|
|
Loading…
Reference in a new issue