diff --git a/src/bitcoin-mine.cpp b/src/bitcoin-mine.cpp index 805c421e702e85..a993e59b2ae551 100644 --- a/src/bitcoin-mine.cpp +++ b/src/bitcoin-mine.cpp @@ -8,12 +8,14 @@ #include #include #include +#include #include #include #include #include #include #include +#include #include #include @@ -22,6 +24,9 @@ #include // #include #endif + +using common::InvalidPortErrMsg; + static const char* const HELP_USAGE{R"( bitcoin-mine is a test program for interacting with bitcoin-node via IPC. @@ -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 G_TRANSLATION_FUN = nullptr; @@ -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 mine_init{interfaces::MakeMineInit(argc, argv)}; assert(mine_init); @@ -128,6 +135,25 @@ MAIN_FUNCTION std::unique_ptr mining{node_init->makeMining()}; assert(mining); + auto tp = std::make_unique(*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); @@ -137,5 +163,9 @@ MAIN_FUNCTION UninterruptibleSleep(100ms); } + tp->Interrupt(); + tp->StopThreads(); + tp.reset(); + return EXIT_SUCCESS; }