mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 18:53:23 -03:00
test: Move P2WSH_OP_TRUE to shared test library
This commit is contained in:
parent
569b5ba1dc
commit
22220ef6d5
3 changed files with 26 additions and 15 deletions
|
@ -12,6 +12,7 @@ TEST_UTIL_H = \
|
||||||
test/util/logging.h \
|
test/util/logging.h \
|
||||||
test/util/mining.h \
|
test/util/mining.h \
|
||||||
test/util/net.h \
|
test/util/net.h \
|
||||||
|
test/util/script.h \
|
||||||
test/util/setup_common.h \
|
test/util/setup_common.h \
|
||||||
test/util/str.h \
|
test/util/str.h \
|
||||||
test/util/transaction_utils.h \
|
test/util/transaction_utils.h \
|
||||||
|
|
21
src/test/util/script.h
Normal file
21
src/test/util/script.h
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
// Copyright (c) 2021 The Bitcoin Core developers
|
||||||
|
// Distributed under the MIT software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#ifndef BITCOIN_TEST_UTIL_SCRIPT_H
|
||||||
|
#define BITCOIN_TEST_UTIL_SCRIPT_H
|
||||||
|
|
||||||
|
#include <crypto/sha256.h>
|
||||||
|
#include <script/script.h>
|
||||||
|
|
||||||
|
static const std::vector<uint8_t> WITNESS_STACK_ELEM_OP_TRUE{uint8_t{OP_TRUE}};
|
||||||
|
static const CScript P2WSH_OP_TRUE{
|
||||||
|
CScript{}
|
||||||
|
<< OP_0
|
||||||
|
<< ToByteVector([] {
|
||||||
|
uint256 hash;
|
||||||
|
CSHA256().Write(WITNESS_STACK_ELEM_OP_TRUE.data(), WITNESS_STACK_ELEM_OP_TRUE.size()).Finalize(hash.begin());
|
||||||
|
return hash;
|
||||||
|
}())};
|
||||||
|
|
||||||
|
#endif // BITCOIN_TEST_UTIL_SCRIPT_H
|
|
@ -11,6 +11,7 @@
|
||||||
#include <pow.h>
|
#include <pow.h>
|
||||||
#include <random.h>
|
#include <random.h>
|
||||||
#include <script/standard.h>
|
#include <script/standard.h>
|
||||||
|
#include <test/util/script.h>
|
||||||
#include <test/util/setup_common.h>
|
#include <test/util/setup_common.h>
|
||||||
#include <util/time.h>
|
#include <util/time.h>
|
||||||
#include <validation.h>
|
#include <validation.h>
|
||||||
|
@ -18,8 +19,6 @@
|
||||||
|
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
static const std::vector<unsigned char> V_OP_TRUE{OP_TRUE};
|
|
||||||
|
|
||||||
namespace validation_block_tests {
|
namespace validation_block_tests {
|
||||||
struct MinerTestingSetup : public RegTestingSetup {
|
struct MinerTestingSetup : public RegTestingSetup {
|
||||||
std::shared_ptr<CBlock> Block(const uint256& prev_hash);
|
std::shared_ptr<CBlock> Block(const uint256& prev_hash);
|
||||||
|
@ -64,27 +63,17 @@ std::shared_ptr<CBlock> MinerTestingSetup::Block(const uint256& prev_hash)
|
||||||
static int i = 0;
|
static int i = 0;
|
||||||
static uint64_t time = Params().GenesisBlock().nTime;
|
static uint64_t time = Params().GenesisBlock().nTime;
|
||||||
|
|
||||||
CScript pubKey;
|
auto ptemplate = BlockAssembler(*m_node.mempool, Params()).CreateNewBlock(CScript{} << i++ << OP_TRUE);
|
||||||
pubKey << i++ << OP_TRUE;
|
|
||||||
|
|
||||||
auto ptemplate = BlockAssembler(*m_node.mempool, Params()).CreateNewBlock(pubKey);
|
|
||||||
auto pblock = std::make_shared<CBlock>(ptemplate->block);
|
auto pblock = std::make_shared<CBlock>(ptemplate->block);
|
||||||
pblock->hashPrevBlock = prev_hash;
|
pblock->hashPrevBlock = prev_hash;
|
||||||
pblock->nTime = ++time;
|
pblock->nTime = ++time;
|
||||||
|
|
||||||
pubKey.clear();
|
|
||||||
{
|
|
||||||
WitnessV0ScriptHash witness_program;
|
|
||||||
CSHA256().Write(&V_OP_TRUE[0], V_OP_TRUE.size()).Finalize(witness_program.begin());
|
|
||||||
pubKey << OP_0 << ToByteVector(witness_program);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make the coinbase transaction with two outputs:
|
// Make the coinbase transaction with two outputs:
|
||||||
// One zero-value one that has a unique pubkey to make sure that blocks at the same height can have a different hash
|
// One zero-value one that has a unique pubkey to make sure that blocks at the same height can have a different hash
|
||||||
// Another one that has the coinbase reward in a P2WSH with OP_TRUE as witness program to make it easy to spend
|
// Another one that has the coinbase reward in a P2WSH with OP_TRUE as witness program to make it easy to spend
|
||||||
CMutableTransaction txCoinbase(*pblock->vtx[0]);
|
CMutableTransaction txCoinbase(*pblock->vtx[0]);
|
||||||
txCoinbase.vout.resize(2);
|
txCoinbase.vout.resize(2);
|
||||||
txCoinbase.vout[1].scriptPubKey = pubKey;
|
txCoinbase.vout[1].scriptPubKey = P2WSH_OP_TRUE;
|
||||||
txCoinbase.vout[1].nValue = txCoinbase.vout[0].nValue;
|
txCoinbase.vout[1].nValue = txCoinbase.vout[0].nValue;
|
||||||
txCoinbase.vout[0].nValue = 0;
|
txCoinbase.vout[0].nValue = 0;
|
||||||
txCoinbase.vin[0].scriptWitness.SetNull();
|
txCoinbase.vin[0].scriptWitness.SetNull();
|
||||||
|
@ -254,7 +243,7 @@ BOOST_AUTO_TEST_CASE(mempool_locks_reorg)
|
||||||
for (int num_txs = 22; num_txs > 0; --num_txs) {
|
for (int num_txs = 22; num_txs > 0; --num_txs) {
|
||||||
CMutableTransaction mtx;
|
CMutableTransaction mtx;
|
||||||
mtx.vin.push_back(CTxIn{COutPoint{last_mined->vtx[0]->GetHash(), 1}, CScript{}});
|
mtx.vin.push_back(CTxIn{COutPoint{last_mined->vtx[0]->GetHash(), 1}, CScript{}});
|
||||||
mtx.vin[0].scriptWitness.stack.push_back(V_OP_TRUE);
|
mtx.vin[0].scriptWitness.stack.push_back(WITNESS_STACK_ELEM_OP_TRUE);
|
||||||
mtx.vout.push_back(last_mined->vtx[0]->vout[1]);
|
mtx.vout.push_back(last_mined->vtx[0]->vout[1]);
|
||||||
mtx.vout[0].nValue -= 1000;
|
mtx.vout[0].nValue -= 1000;
|
||||||
txs.push_back(MakeTransactionRef(mtx));
|
txs.push_back(MakeTransactionRef(mtx));
|
||||||
|
|
Loading…
Add table
Reference in a new issue