mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-21 15:50:07 +01:00
Merge bitcoin/bitcoin#31318: Drop script_pub_key arg from createNewBlock
52fd1511a7test: drop scriptPubKeyIn arg from CreateNewBlock (Sjors Provoost)ff41b9e296Drop script_pub_key arg from createNewBlock (Sjors Provoost)7ab733ede4rpc: rename coinbase_script to coinbase_output_script (Sjors Provoost) Pull request description: Providing a script for the coinbase transaction is only done in test code and for (unoptimized) CPU solo mining. Production miners use the `getblocktemplate` RPC which omits the coinbase transaction entirely from its block template, leaving it to external (pool) software to construct it. This commit removes the `script_pub_key argument` from `createNewBlock()` in the Mining interface. A coinbase script can still be passed via `BlockCreateOptions` instead. Tests are modified to do so. ACKs for top commit: ryanofsky: Code review ACK52fd1511a7. No change since last review other than rebase TheCharlatan: Re-ACK52fd1511a7vasild: ACK52fd1511a7Tree-SHA512: c4b3a53774d9a5dc90950e77f47a64dbb68f971baffbb9a0d8f59332ef8e52d0c039130c925bde73135b3d0e79e65d91d1df30dc4cff13f32d8a72e5c56669d8
This commit is contained in:
@@ -1004,11 +1004,11 @@ public:
|
||||
return TestBlockValidity(state, chainman().GetParams(), chainman().ActiveChainstate(), block, tip, /*fCheckPOW=*/false, check_merkle_root);
|
||||
}
|
||||
|
||||
std::unique_ptr<BlockTemplate> createNewBlock(const CScript& script_pub_key, const BlockCreateOptions& options) override
|
||||
std::unique_ptr<BlockTemplate> createNewBlock(const BlockCreateOptions& options) override
|
||||
{
|
||||
BlockAssembler::Options assemble_options{options};
|
||||
ApplyArgsManOptions(*Assert(m_node.args), assemble_options);
|
||||
return std::make_unique<BlockTemplateImpl>(BlockAssembler{chainman().ActiveChainstate(), context()->mempool.get(), assemble_options}.CreateNewBlock(script_pub_key), m_node);
|
||||
return std::make_unique<BlockTemplateImpl>(BlockAssembler{chainman().ActiveChainstate(), context()->mempool.get(), assemble_options}.CreateNewBlock(), m_node);
|
||||
}
|
||||
|
||||
NodeContext* context() override { return &m_node; }
|
||||
|
||||
@@ -106,7 +106,7 @@ void BlockAssembler::resetBlock()
|
||||
nFees = 0;
|
||||
}
|
||||
|
||||
std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& scriptPubKeyIn)
|
||||
std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock()
|
||||
{
|
||||
const auto time_start{SteadyClock::now()};
|
||||
|
||||
@@ -151,7 +151,7 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
|
||||
coinbaseTx.vin.resize(1);
|
||||
coinbaseTx.vin[0].prevout.SetNull();
|
||||
coinbaseTx.vout.resize(1);
|
||||
coinbaseTx.vout[0].scriptPubKey = scriptPubKeyIn;
|
||||
coinbaseTx.vout[0].scriptPubKey = m_options.coinbase_output_script;
|
||||
coinbaseTx.vout[0].nValue = nFees + GetBlockSubsidy(nHeight, chainparams.GetConsensus());
|
||||
coinbaseTx.vin[0].scriptSig = CScript() << nHeight << OP_0;
|
||||
pblock->vtx[0] = MakeTransactionRef(std::move(coinbaseTx));
|
||||
|
||||
@@ -169,8 +169,8 @@ public:
|
||||
|
||||
explicit BlockAssembler(Chainstate& chainstate, const CTxMemPool* mempool, const Options& options);
|
||||
|
||||
/** Construct a new block template with coinbase to scriptPubKeyIn */
|
||||
std::unique_ptr<CBlockTemplate> CreateNewBlock(const CScript& scriptPubKeyIn);
|
||||
/** Construct a new block template */
|
||||
std::unique_ptr<CBlockTemplate> CreateNewBlock();
|
||||
|
||||
inline static std::optional<int64_t> m_last_block_num_txs{};
|
||||
inline static std::optional<int64_t> m_last_block_weight{};
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
//! @file node/types.h is a home for public enum and struct type definitions
|
||||
//! that are used by internally by node code, but also used externally by wallet
|
||||
//! or GUI code.
|
||||
//! that are used by internally by node code, but also used externally by wallet,
|
||||
//! mining or GUI code.
|
||||
//!
|
||||
//! This file is intended to define only simple types that do not have external
|
||||
//! dependencies. More complicated types should be defined in dedicated header
|
||||
@@ -14,6 +14,7 @@
|
||||
#define BITCOIN_NODE_TYPES_H
|
||||
|
||||
#include <cstddef>
|
||||
#include <script/script.h>
|
||||
|
||||
namespace node {
|
||||
enum class TransactionError {
|
||||
@@ -43,6 +44,22 @@ struct BlockCreateOptions {
|
||||
* transaction outputs.
|
||||
*/
|
||||
size_t coinbase_output_max_additional_sigops{400};
|
||||
/**
|
||||
* Script to put in the coinbase transaction. The default is an
|
||||
* anyone-can-spend dummy.
|
||||
*
|
||||
* Should only be used for tests, when the default doesn't suffice.
|
||||
*
|
||||
* Note that higher level code like the getblocktemplate RPC may omit the
|
||||
* coinbase transaction entirely. It's instead constructed by pool software
|
||||
* using fields like coinbasevalue, coinbaseaux and default_witness_commitment.
|
||||
* This software typically also controls the payout outputs, even for solo
|
||||
* mining.
|
||||
*
|
||||
* The size and sigops are not checked against
|
||||
* coinbase_max_additional_weight and coinbase_output_max_additional_sigops.
|
||||
*/
|
||||
CScript coinbase_output_script{CScript() << OP_TRUE};
|
||||
};
|
||||
} // namespace node
|
||||
|
||||
|
||||
Reference in New Issue
Block a user