forked from bitcoin/bitcoin
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge bitcoin#30200: Introduce Mining interface
a9716c5 rpc: call IsInitialBlockDownload via miner interface (Sjors Provoost) dda0b08 rpc: minize getTipHash() calls in gbt (Sjors Provoost) 7b4d324 rpc: call processNewBlock via miner interface (Sjors Provoost) 9e22835 rpc: getTransactionsUpdated via miner interface (Sjors Provoost) 64ebb0f Always pass options to BlockAssembler constructor (Sjors Provoost) 4bf2e36 rpc: call CreateNewBlock via miner interface (Sjors Provoost) 404b01c rpc: getblocktemplate getTipHash() via Miner interface (Sjors Provoost) d8a3496 rpc: call TestBlockValidity via miner interface (Sjors Provoost) 8ecb681 Introduce Mining interface (Sjors Provoost) Pull request description: Introduce a `Mining` interface for the `getblocktemplate`, `generateblock` and other mining RPCs to use now, and for Stratum v2 to use later. Suggested here: bitcoin#29346 (comment) The selection of methods added to the interface is mostly based on what the Template Provider in bitcoin#29432 uses. It could be expanded further so that `rpc/mining.cpp` no longer needs `EnsureMemPool` and `EnsureChainman`. This PR should be a pure refactor. ACKs for top commit: tdb3: re ACK a9716c5 itornaza: Code review and std-tests ACK a9716c5 ryanofsky: Code review ACK a9716c5 with one minor suggestion in case you update. Only changes since last review were other small changes to the interface. Tree-SHA512: cf97f87d6e9ed89da3835a0730da3b24a7b14c8605ea221149103a5915e79598cf082a95f2bc88e33f1c450e3d4aad88aed1163a29195acca88bcace055af724
- Loading branch information
Showing
21 changed files
with
226 additions
and
52 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
// Copyright (c) 2024 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_INTERFACES_MINING_H | ||
#define BITCOIN_INTERFACES_MINING_H | ||
|
||
#include <optional> | ||
#include <uint256.h> | ||
|
||
namespace node { | ||
struct CBlockTemplate; | ||
struct NodeContext; | ||
} // namespace node | ||
|
||
class BlockValidationState; | ||
class CBlock; | ||
class CScript; | ||
|
||
namespace interfaces { | ||
|
||
//! Interface giving clients (RPC, Stratum v2 Template Provider in the future) | ||
//! ability to create block templates. | ||
|
||
class Mining | ||
{ | ||
public: | ||
virtual ~Mining() {} | ||
|
||
//! If this chain is exclusively used for testing | ||
virtual bool isTestChain() = 0; | ||
|
||
//! Returns whether IBD is still in progress. | ||
virtual bool isInitialBlockDownload() = 0; | ||
|
||
//! Returns the hash for the tip of this chain | ||
virtual std::optional<uint256> getTipHash() = 0; | ||
|
||
/** | ||
* Construct a new block template | ||
* | ||
* @param[in] script_pub_key the coinbase output | ||
* @param[in] use_mempool set false to omit mempool transactions | ||
* @returns a block template | ||
*/ | ||
virtual std::unique_ptr<node::CBlockTemplate> createNewBlock(const CScript& script_pub_key, bool use_mempool = true) = 0; | ||
/** | ||
* Processes new block. A valid new block is automatically relayed to peers. | ||
* | ||
* @param[in] block The block we want to process. | ||
* @param[out] new_block A boolean which is set to indicate if the block was first received via this call | ||
* @returns If the block was processed, independently of block validity | ||
*/ | ||
virtual bool processNewBlock(const std::shared_ptr<const CBlock>& block, bool* new_block) = 0; | ||
|
||
//! Return the number of transaction updates in the mempool, | ||
//! used to decide whether to make a new block template. | ||
virtual unsigned int getTransactionsUpdated() = 0; | ||
|
||
/** | ||
* Check a block is completely valid from start to finish. | ||
* Only works on top of our current best block. | ||
* Does not check proof-of-work. | ||
* | ||
* @param[out] state details of why a block failed to validate | ||
* @param[in] block the block to validate | ||
* @param[in] check_merkle_root call CheckMerkleRoot() | ||
* @returns false if any of the checks fail | ||
*/ | ||
virtual bool testBlockValidity(BlockValidationState& state, const CBlock& block, bool check_merkle_root = true) = 0; | ||
|
||
//! Get internal node context. Useful for RPC and testing, | ||
//! but not accessible across processes. | ||
virtual node::NodeContext* context() { return nullptr; } | ||
}; | ||
|
||
//! Return implementation of Mining interface. | ||
std::unique_ptr<Mining> MakeMining(node::NodeContext& node); | ||
|
||
} // namespace interfaces | ||
|
||
#endif // BITCOIN_INTERFACES_MINING_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.