kernel: Expose consensus parameters (`btck_ConsensusParams`)
What changed, and why it matters
This commit adds a new public API to the Bitcoin Core library that lets outside programs read the network's consensus parameters (like block timing rules) from the existing chain parameters object. It does not change any validation logic or security behavior; it only exposes data that was already available internally in a more convenient way for library users.
No security action required. Reviewers may want to confirm the lifetime documentation is clear to C API consumers, but the change is not security-relevant.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch introduces an opaque btck_ConsensusParams handle and a getter btck_chain_parameters_get_consensus_params() that returns a const pointer to the underlying Consensus::Params owned by a btck_ChainParameters instance. A corresponding C++ wrapper ConsensusParamsView is added. The returned pointer’s lifetime is tied to the parent ChainParameters object and must not be freed by callers. This is a pure API surface expansion with no logic changes.
Changed components
src/kernel/bitcoinkernel.cppsrc/kernel/bitcoinkernel.hsrc/kernel/bitcoinkernel_wrapper.hInspect captured patch +37 / −0
diff --git a/src/kernel/bitcoinkernel.cpp b/src/kernel/bitcoinkernel.cpp
index 4216bf92..b1180894 100644
--- a/src/kernel/bitcoinkernel.cpp
+++ b/src/kernel/bitcoinkernel.cpp
@@ -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;
diff --git a/src/kernel/bitcoinkernel.h b/src/kernel/bitcoinkernel.h
index fe5bc3f9..971c5380 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 fd234857..5f22fb8f 100644
--- a/src/kernel/bitcoinkernel_wrapper.h
+++ b/src/kernel/bitcoinkernel_wrapper.h
@@ -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>
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.