kernel: Generate a signet with a challenge

This commit is contained in:
sedited
2026-05-22 22:51:28 +02:00
parent 47da4f9b71
commit 5b4fd284f4
4 changed files with 34 additions and 1 deletions

View File

@@ -45,6 +45,7 @@
#include <functional>
#include <list>
#include <memory>
#include <optional>
#include <span>
#include <stdexcept>
#include <string>
@@ -822,6 +823,16 @@ btck_ChainParameters* btck_chain_parameters_create(const btck_ChainType chain_ty
assert(false);
}
btck_ChainParameters* btck_chain_parameters_create_signet(const void* challenge, size_t challenge_len)
{
assert(challenge != nullptr || challenge_len == 0);
const uint8_t* p = static_cast<const uint8_t*>(challenge);
CChainParams::SigNetOptions options{
.challenge = std::vector<uint8_t>{p, p + challenge_len},
};
return btck_ChainParameters::ref(const_cast<CChainParams*>(CChainParams::SigNet(options).release()));
}
btck_ChainParameters* btck_chain_parameters_copy(const btck_ChainParameters* chain_parameters)
{
return btck_ChainParameters::copy(chain_parameters);

View File

@@ -958,6 +958,18 @@ BITCOINKERNEL_API void btck_logging_connection_destroy(btck_LoggingConnection* l
BITCOINKERNEL_API btck_ChainParameters* BITCOINKERNEL_WARN_UNUSED_RESULT btck_chain_parameters_create(
btck_ChainType chain_type);
/**
* @brief Create a signet chain parameters struct with a user-provided
* challenge.
*
* @param[in] challenge The signet challenge value. Blocks must satisfy it in
* order to be valid.
* @param[in] challenge_len The length of the signet challenge.
* @return An allocated chain parameters opaque struct.
*/
BITCOINKERNEL_API btck_ChainParameters* BITCOINKERNEL_WARN_UNUSED_RESULT btck_chain_parameters_create_signet(
const void* challenge, size_t challenge_len);
/**
* Copy the chain parameters.
*/

View File

@@ -1056,9 +1056,12 @@ public:
class ChainParams : public Handle<btck_ChainParameters, btck_chain_parameters_copy, btck_chain_parameters_destroy>
{
public:
ChainParams(ChainType chain_type)
explicit ChainParams(ChainType chain_type)
: Handle{btck_chain_parameters_create(static_cast<btck_ChainType>(chain_type))} {}
explicit ChainParams(std::span<const std::byte> signet_challenge)
: Handle{btck_chain_parameters_create_signet(signet_challenge.data(), signet_challenge.size())} {}
ConsensusParamsView GetConsensusParams() const
{
return ConsensusParamsView{btck_chain_parameters_get_consensus_params(get())};

View File

@@ -651,6 +651,13 @@ BOOST_AUTO_TEST_CASE(logging_tests)
Logger logger{std::make_unique<TestLog>()};
}
BOOST_AUTO_TEST_CASE(btck_chainparams_tests)
{
ChainParams params_signet{ChainType::SIGNET};
ChainParams params_signet_challenge{hex_string_to_byte_vec("51")};
CheckHandle(params_signet, params_signet_challenge);
}
BOOST_AUTO_TEST_CASE(btck_context_tests)
{
{ // test default context