From 71f827c3c2b83f181d8eff7749b8c1f71987f5e0 Mon Sep 17 00:00:00 2001 From: w0xlt <94266259+w0xlt@users.noreply.github.com> Date: Wed, 19 Nov 2025 10:40:35 -0800 Subject: [PATCH] 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 --- src/kernel/bitcoinkernel.cpp | 10 ++++++++++ src/kernel/bitcoinkernel.h | 16 ++++++++++++++++ src/kernel/bitcoinkernel_wrapper.h | 11 +++++++++++ 3 files changed, 37 insertions(+) diff --git a/src/kernel/bitcoinkernel.cpp b/src/kernel/bitcoinkernel.cpp index 4216bf921ff..b1180894738 100644 --- a/src/kernel/bitcoinkernel.cpp +++ b/src/kernel/bitcoinkernel.cpp @@ -50,6 +50,10 @@ #include #include +namespace Consensus { +struct Params; +} // namespace Consensus + using kernel::ChainstateRole; using util::ImmediateTaskRunner; @@ -496,6 +500,7 @@ struct btck_TransactionOutPoint: Handle {}; struct btck_Txid: Handle {}; struct btck_PrecomputedTransactionData : Handle {}; struct btck_BlockHeader: Handle {}; +struct btck_ConsensusParams: Handle {}; 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; diff --git a/src/kernel/bitcoinkernel.h b/src/kernel/bitcoinkernel.h index fe5bc3f91b5..971c5380ec7 100644 --- a/src/kernel/bitcoinkernel.h +++ b/src/kernel/bitcoinkernel.h @@ -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. */ diff --git a/src/kernel/bitcoinkernel_wrapper.h b/src/kernel/bitcoinkernel_wrapper.h index fd234857875..5f22fb8ffb6 100644 --- a/src/kernel/bitcoinkernel_wrapper.h +++ b/src/kernel/bitcoinkernel_wrapper.h @@ -777,6 +777,12 @@ public: : Handle{header} {} }; +class ConsensusParamsView : public View +{ +public: + explicit ConsensusParamsView(const btck_ConsensusParams* ptr) : View{ptr} {} +}; + class Block : public Handle { public: @@ -971,6 +977,11 @@ class ChainParams : public Handle(chain_type))} {} + + ConsensusParamsView GetConsensusParams() const + { + return ConsensusParamsView{btck_chain_parameters_get_consensus_params(get())}; + } }; class ContextOptions : public UniqueHandle