Skip to content

Commit

Permalink
Run Template Provider from bitcoin-mine
Browse files Browse the repository at this point in the history
  • Loading branch information
Sjors committed Jul 17, 2024
1 parent f49fd02 commit d70406e
Showing 1 changed file with 31 additions and 1 deletion.
32 changes: 31 additions & 1 deletion src/bitcoin-mine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@
#include <chainparamsbase.h>
#include <clientversion.h>
#include <common/args.h>
#include <common/messages.h>
#include <common/system.h>
#include <compat/compat.h>
#include <init/common.h>
#include <interfaces/init.h>
#include <interfaces/ipc.h>
#include <logging.h>
#include <node/sv2_template_provider.h>
#include <tinyformat.h>
#include <util/translation.h>

Expand All @@ -22,6 +24,9 @@
#include <signal.h>
// #include <sys/stat.h>
#endif

using common::InvalidPortErrMsg;

static const char* const HELP_USAGE{R"(
bitcoin-mine is a test program for interacting with bitcoin-node via IPC.
Expand All @@ -38,7 +43,7 @@ static const char* HELP_EXAMPLES{R"(
bitcoin-mine -regtest
# Run with debug output.
bitcoin-mine -regtest -debug
bitcoin-mine -regtest -debug=sv2 -loglevel=sv2:trace
)"};

const std::function<std::string(const char*)> G_TRANSLATION_FUN = nullptr;
Expand Down Expand Up @@ -110,6 +115,8 @@ MAIN_FUNCTION
return EXIT_FAILURE;
}

ECC_Context ecc_context{};

// Connect to existing bitcoin-node process or spawn new one.
std::unique_ptr<interfaces::Init> mine_init{interfaces::MakeMineInit(argc, argv)};
assert(mine_init);
Expand All @@ -128,6 +135,25 @@ MAIN_FUNCTION
std::unique_ptr<interfaces::Mining> mining{node_init->makeMining()};
assert(mining);

auto tp = std::make_unique<Sv2TemplateProvider>(*mining);

uint16_t sv2_port;
const std::string sv2_port_arg = args.GetArg("-sv2port", "");

if (sv2_port_arg.empty()) {
sv2_port = BaseParams().Sv2Port();
} else {
if (!ParseUInt16(sv2_port_arg, &sv2_port) || sv2_port == 0) {
tfm::format(std::cerr, "%s\n", InvalidPortErrMsg("sv2port", sv2_port_arg).original);
return EXIT_FAILURE;
}
}

if (!tp->Start(Sv2TemplateProviderOptions { .port = sv2_port })) {
tfm::format(std::cerr, "Unable to start Stratum v2 Template Provider");
return EXIT_FAILURE;
}

#ifndef WIN32
registerSignalHandler(SIGTERM, HandleSIGTERM);
registerSignalHandler(SIGINT, HandleSIGTERM);
Expand All @@ -137,5 +163,9 @@ MAIN_FUNCTION
UninterruptibleSleep(100ms);
}

tp->Interrupt();
tp->StopThreads();
tp.reset();

return EXIT_SUCCESS;
}

0 comments on commit d70406e

Please sign in to comment.