mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-13 09:07:46 +02:00
kernel: Expose consensus parameters (btck_ConsensusParams)
Library users currently need to maintain a full context object to perform context-free block validation. Exposing an opaque `btck_ConsensusParams` struct allows callers to supply only the required consensus parameters, resulting in a lighter-weight API and a clearer expression of the actual validation behavior. Co-authored-by: yuvicc <yuvichh01@gmail.com>
This commit is contained in:
@@ -50,6 +50,10 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
namespace Consensus {
|
||||
struct Params;
|
||||
} // namespace Consensus
|
||||
|
||||
using kernel::ChainstateRole;
|
||||
using util::ImmediateTaskRunner;
|
||||
|
||||
@@ -496,6 +500,7 @@ struct btck_TransactionOutPoint: Handle<btck_TransactionOutPoint, COutPoint> {};
|
||||
struct btck_Txid: Handle<btck_Txid, Txid> {};
|
||||
struct btck_PrecomputedTransactionData : Handle<btck_PrecomputedTransactionData, PrecomputedTransactionData> {};
|
||||
struct btck_BlockHeader: Handle<btck_BlockHeader, CBlockHeader> {};
|
||||
struct btck_ConsensusParams: Handle<btck_ConsensusParams, Consensus::Params> {};
|
||||
|
||||
btck_Transaction* btck_transaction_create(const void* raw_transaction, size_t raw_transaction_len)
|
||||
{
|
||||
@@ -823,6 +828,11 @@ btck_ChainParameters* btck_chain_parameters_copy(const btck_ChainParameters* cha
|
||||
return btck_ChainParameters::copy(chain_parameters);
|
||||
}
|
||||
|
||||
const btck_ConsensusParams* btck_chain_parameters_get_consensus_params(const btck_ChainParameters* chain_parameters)
|
||||
{
|
||||
return btck_ConsensusParams::ref(&btck_ChainParameters::get(chain_parameters).GetConsensus());
|
||||
}
|
||||
|
||||
void btck_chain_parameters_destroy(btck_ChainParameters* chain_parameters)
|
||||
{
|
||||
delete chain_parameters;
|
||||
|
||||
@@ -225,6 +225,11 @@ typedef struct btck_Block btck_Block;
|
||||
*/
|
||||
typedef struct btck_BlockValidationState btck_BlockValidationState;
|
||||
|
||||
/**
|
||||
* Opaque data structure for holding the Consensus Params.
|
||||
*/
|
||||
typedef struct btck_ConsensusParams btck_ConsensusParams;
|
||||
|
||||
/**
|
||||
* Opaque data structure for holding the currently known best-chain associated
|
||||
* with a chainstate.
|
||||
@@ -864,6 +869,17 @@ BITCOINKERNEL_API btck_ChainParameters* BITCOINKERNEL_WARN_UNUSED_RESULT btck_ch
|
||||
BITCOINKERNEL_API btck_ChainParameters* BITCOINKERNEL_WARN_UNUSED_RESULT btck_chain_parameters_copy(
|
||||
const btck_ChainParameters* chain_parameters) BITCOINKERNEL_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* @brief Get btck_ConsensusParams from btck_ChainParameters. The returned
|
||||
* btck_ConsensusParams pointer is valid only for the lifetime of the
|
||||
* btck_ChainParameters object and must not be destroyed by the caller.
|
||||
*
|
||||
* @param[in] chain_parameters Non-null.
|
||||
* @return The btck_ConsensusParams.
|
||||
*/
|
||||
BITCOINKERNEL_API const btck_ConsensusParams* BITCOINKERNEL_WARN_UNUSED_RESULT btck_chain_parameters_get_consensus_params(
|
||||
const btck_ChainParameters* chain_parameters) BITCOINKERNEL_ARG_NONNULL(1);
|
||||
|
||||
/**
|
||||
* Destroy the chain parameters.
|
||||
*/
|
||||
|
||||
@@ -777,6 +777,12 @@ public:
|
||||
: Handle{header} {}
|
||||
};
|
||||
|
||||
class ConsensusParamsView : public View<btck_ConsensusParams>
|
||||
{
|
||||
public:
|
||||
explicit ConsensusParamsView(const btck_ConsensusParams* ptr) : View{ptr} {}
|
||||
};
|
||||
|
||||
class Block : public Handle<btck_Block, btck_block_copy, btck_block_destroy>
|
||||
{
|
||||
public:
|
||||
@@ -971,6 +977,11 @@ class ChainParams : public Handle<btck_ChainParameters, btck_chain_parameters_co
|
||||
public:
|
||||
ChainParams(ChainType chain_type)
|
||||
: Handle{btck_chain_parameters_create(static_cast<btck_ChainType>(chain_type))} {}
|
||||
|
||||
ConsensusParamsView GetConsensusParams() const
|
||||
{
|
||||
return ConsensusParamsView{btck_chain_parameters_get_consensus_params(get())};
|
||||
}
|
||||
};
|
||||
|
||||
class ContextOptions : public UniqueHandle<btck_ContextOptions, btck_context_options_destroy>
|
||||
|
||||
Reference in New Issue
Block a user