Changeset View
Changeset View
Standalone View
Standalone View
src/test/util/setup_common.cpp
Show First 20 Lines • Show All 319 Lines • ▼ Show 20 Lines | CBlock TestChain100Setup::CreateAndProcessBlock( | ||||
std::shared_ptr<const CBlock> shared_pblock = | std::shared_ptr<const CBlock> shared_pblock = | ||||
std::make_shared<const CBlock>(block); | std::make_shared<const CBlock>(block); | ||||
Assert(m_node.chainman) | Assert(m_node.chainman) | ||||
->ProcessNewBlock(config, shared_pblock, true, nullptr); | ->ProcessNewBlock(config, shared_pblock, true, nullptr); | ||||
return block; | return block; | ||||
} | } | ||||
CMutableTransaction TestChain100Setup::CreateValidMempoolTransaction( | |||||
CTransactionRef input_transaction, int input_vout, int input_height, | |||||
CKey input_signing_key, CScript output_destination, Amount output_amount) { | |||||
// Transaction we will submit to the mempool | |||||
CMutableTransaction mempool_txn; | |||||
// Create an input | |||||
COutPoint outpoint_to_spend(input_transaction->GetId(), input_vout); | |||||
CTxIn input(outpoint_to_spend); | |||||
mempool_txn.vin.push_back(input); | |||||
// Create an output | |||||
CTxOut output(output_amount, output_destination); | |||||
mempool_txn.vout.push_back(output); | |||||
// Sign the transaction | |||||
// - Add the signing key to a keystore | |||||
FillableSigningProvider keystore; | |||||
keystore.AddKey(input_signing_key); | |||||
// - Populate a CoinsViewCache with the unspent output | |||||
CCoinsView coins_view; | |||||
CCoinsViewCache coins_cache(&coins_view); | |||||
AddCoins(coins_cache, *input_transaction.get(), input_height); | |||||
// - Use GetCoin to properly populate utxo_to_spend, | |||||
Coin utxo_to_spend; | |||||
assert(coins_cache.GetCoin(outpoint_to_spend, utxo_to_spend)); | |||||
// - Then add it to a map to pass in to SignTransaction | |||||
std::map<COutPoint, Coin> input_coins; | |||||
input_coins.insert({outpoint_to_spend, utxo_to_spend}); | |||||
// - Default signature hashing type | |||||
SigHashType nHashType{SIGHASH_ALL}; | |||||
std::map<int, std::string> input_errors; | |||||
assert(SignTransaction(mempool_txn, &keystore, input_coins, nHashType, | |||||
input_errors)); | |||||
// Add transaction to the mempool | |||||
{ | |||||
LOCK(cs_main); | |||||
const MempoolAcceptResult result = AcceptToMemoryPool( | |||||
m_node.chainman->ActiveChainstate(), GetConfig(), | |||||
*m_node.mempool.get(), MakeTransactionRef(mempool_txn), | |||||
/* bypass_limits */ false); | |||||
assert(result.m_result_type == MempoolAcceptResult::ResultType::VALID); | |||||
} | |||||
return mempool_txn; | |||||
} | |||||
TestChain100Setup::~TestChain100Setup() { | TestChain100Setup::~TestChain100Setup() { | ||||
if (m_deterministic) { | if (m_deterministic) { | ||||
SetMockTime(0); | SetMockTime(0); | ||||
} | } | ||||
} | } | ||||
CTxMemPoolEntry | CTxMemPoolEntry | ||||
TestMemPoolEntryHelper::FromTx(const CMutableTransaction &tx) const { | TestMemPoolEntryHelper::FromTx(const CMutableTransaction &tx) const { | ||||
▲ Show 20 Lines • Show All 115 Lines • Show Last 20 Lines |