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