diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a21eaf4..e9009b6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -68,14 +68,14 @@ jobs: path: /usr/local/ssl key: openssl-1.1.1-ubuntu-22.04-v2 - - name: Cache Boost 1.86.0 + - name: Cache Boost 1.90.0 id: cache-boost uses: actions/cache@v4 with: path: | /usr/local/include/boost /usr/local/lib/libboost_* - key: boost-1.86.0-ubuntu-22.04-static-v2 + key: boost-1.90.0-ubuntu-22.04-static-v2 - name: Cache OpenCL 3.0.19 id: cache-opencl @@ -159,16 +159,16 @@ jobs: echo "โœ… OpenSSL 1.1.1 installed successfully" #========================================================================== - # BOOST 1.86.0 INSTALLATION + # BOOST 1.90.0 INSTALLATION #========================================================================== - - name: Install Boost 1.86.0 + - name: Install Boost 1.90.0 if: steps.cache-boost.outputs.cache-hit != 'true' run: | - # Download Boost 1.86.0 - wget --no-check-certificate https://archives.boost.io/release/1.86.0/source/boost_1_86_0.tar.gz - tar -xzf boost_1_86_0.tar.gz - cd boost_1_86_0 + # Download Boost 1.90.0 + wget --no-check-certificate https://archives.boost.io/release/1.90.0/source/boost_1_90_0.tar.gz + tar -xzf boost_1_90_0.tar.gz + cd boost_1_90_0 # Bootstrap Boost ./bootstrap.sh --prefix=/usr/local @@ -180,9 +180,9 @@ jobs: # CLEAN UP BOOST FILES cd .. echo "๐Ÿงน Cleaning up Boost installation files..." - sudo rm -rf boost_1_86_0 boost_1_86_0.tar.gz + sudo rm -rf boost_1_90_0 boost_1_90_0.tar.gz - echo "โœ… Boost 1.86.0 installed successfully" + echo "โœ… Boost 1.90.0 installed successfully" #========================================================================== # OPENCL 3.0.19 INSTALLATION @@ -385,7 +385,7 @@ jobs: echo "๐Ÿ“ฆ Platform: Ubuntu 22.04" echo "๐Ÿ“ฆ Build Type: Release" echo "๐Ÿ“ฆ CUDA: 13.1 (Blackwell support)" - echo "๐Ÿ“ฆ Boost: 1.86.0" + echo "๐Ÿ“ฆ Boost: 1.90.0" echo "๐Ÿ“ฆ OpenSSL: 1.1.1" echo "๐Ÿ“ฆ OpenCL: 3.0.19" echo "๐Ÿ“ฆ Compiler: Clang 15" diff --git a/BUILD.md b/BUILD.md index 5eb2e18..f1e8cef 100644 --- a/BUILD.md +++ b/BUILD.md @@ -4,7 +4,7 @@ - cuda 13.1 => Windows - cuda 13.1 => Ubuntu - OpenSSL 1.1.1 -- boost 1.86.0 +- boost 1.90.0 - OpenCL 3.0.19 ### Windows @@ -20,7 +20,7 @@ cuda : https://developer.nvidia.com/cuda-13-1-0-download-archive boost : -https://boostorg.jfrog.io/artifactory/main/release/1.86.0/source/boost_1_86_0.zip +https://archives.boost.io/release/1.90.0/source/boost_1_90_0.zip ```bat bootstrap.bat b2.exe debug release @@ -114,9 +114,9 @@ sudo apt-get -y install cuda-toolkit-13-1 boost : ```sh -wget --no-check-certificate https://archives.boost.io/release/1.86.0/source/boost_1_86_0.tar.gz -tar -xvf boost_1_86_0.tar.gz -cd boost_1_86_0 +wget --no-check-certificate https://archives.boost.io/release/1.90.0/source/boost_1_90_0.tar.gz +tar -xvf boost_1_90_0.tar.gz +cd boost_1_90_0 ./bootstrap.sh --prefix=/usr/local ./b2 debug release sudo ./b2 install diff --git a/CMakeLists.txt b/CMakeLists.txt index f18582b..543d1ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -119,7 +119,7 @@ endif() ################################################################################ if (WIN32) set(Boost_ROOT "C:\\Boost") - set(BOOST_INCLUDEDIR "C:\\Boost\\include\\boost-1_86") + set(BOOST_INCLUDEDIR "C:\\Boost\\include\\boost-1_90") set(Boost_COMPILER -vc${VISUAL_STUDIO_VERSION}) set(Boost_THREADAPI win32) else() @@ -218,7 +218,7 @@ endif() ################################################################################ ### FIND PACKAGE | LIBRARIES #### ################################################################################ -find_package(Boost 1.86.0 EXACT COMPONENTS atomic chrono filesystem system json thread serialization program_options) +find_package(Boost 1.90.0 EXACT COMPONENTS atomic chrono filesystem system json thread serialization program_options) if (BUILD_AMD) find_package(OpenCL COMPONENTS OpenCL) endif() diff --git a/PARAMETERS.md b/PARAMETERS.md index b9be8ec..cc6dcec 100644 --- a/PARAMETERS.md +++ b/PARAMETERS.md @@ -28,6 +28,7 @@ N/A : No default value is set. | `--cpu` | โœ… | false | Enable or disable device cpu. | `--cpu=` | | `--socks5` | โœ… | false | Enable pool connection through a SOCKS5 proxy server on localhost. | `--socks5=` | | `--socks_port` | โœ… | 9050 | The port of the SOCKS5 proxy server on localhost. | `--socks_port=9050` | +| `--socks_host` | โœ… | 127.0.0.1 | The host address of the SOCKS5 proxy server. | `--socks_host=127.0.0.1` | | `--api_port` | โœ… | 8080 | Miner API port. | `--api_port=8080` | diff --git a/sources/common/cli/cli.cpp b/sources/common/cli/cli.cpp index aa6d584..84eadb7 100644 --- a/sources/common/cli/cli.cpp +++ b/sources/common/cli/cli.cpp @@ -172,6 +172,12 @@ common::Cli::Cli() "[OPTIONAL] Port of the SOCKS proxy.\n" "--socks_port=9050" ) + ( + "socks_host", + value(), + "[OPTIONAL] Host Address of the SOCKS proxy.\n" + "--socks_host=127.0.0.1" + ) // Pool Custom ( diff --git a/sources/common/cli/cli.hpp b/sources/common/cli/cli.hpp index 1f2f54f..9ac8b19 100644 --- a/sources/common/cli/cli.hpp +++ b/sources/common/cli/cli.hpp @@ -136,5 +136,6 @@ namespace common // Socks proxy settings uint32_t getSocksPort() const; + std::optional getSocksHost() const; }; } diff --git a/sources/common/cli/cli_pool.cpp b/sources/common/cli/cli_pool.cpp index 1335abd..d37cfbe 100644 --- a/sources/common/cli/cli_pool.cpp +++ b/sources/common/cli/cli_pool.cpp @@ -119,3 +119,13 @@ uint32_t common::Cli::getSocksPort() const } return 9050u; } + + +std::optional common::Cli::getSocksHost() const +{ + if (true == contains("socks_host")) + { + return params["socks_host"].as(); + } + return "127.0.0.1"; +} \ No newline at end of file diff --git a/sources/common/config.cpp b/sources/common/config.cpp index 8f89b2c..de220c9 100644 --- a/sources/common/config.cpp +++ b/sources/common/config.cpp @@ -230,7 +230,16 @@ bool common::Config::loadCli(int argc, char** argv) mining.socksPort = SocksPort; } } + + auto const socksHost{ cli.getSocksHost() }; + + if (std::nullopt != socksHost) + { + mining.socksHost = *socksHost; + } + + //////////////////////////////////////////////////////////////////////// // RAVEN MINER //////////////////////////////////////////////////////////////////////// diff --git a/sources/common/config.hpp b/sources/common/config.hpp index 6d1324e..4fad329 100644 --- a/sources/common/config.hpp +++ b/sources/common/config.hpp @@ -37,6 +37,7 @@ namespace common bool secrureConnect{ false }; bool stale{ false }; bool socks5{ false }; + std::optional socksHost{ "" }; }; struct SmartMiningConfig diff --git a/sources/network/network.cpp b/sources/network/network.cpp index e1e5aa8..081c464 100644 --- a/sources/network/network.cpp +++ b/sources/network/network.cpp @@ -50,30 +50,54 @@ bool network::NetworkTCPClient::connect() } SAFE_DELETE(socketTCP); - socketTCP = NEW(boost_socket(ioService, context)); - + socketTCP = NEW(boost_socket(ioContext, context)); + boost_resolver resolver{ ioContext }; if (true == config.mining.socks5) { - boost_query query( host, std::to_string(port) ); - boost_endpoint socksEndpoint{ {}, static_cast(config.mining.socksPort) }; + + if (config.mining.socksHost) + { + auto const addr{ boost::asio::ip::make_address(*config.mining.socksHost, ec) }; + boost_endpoint socksEndpoint{ + addr, + static_cast(config.mining.socksPort) + }; - // DNS resolve is automatically done by the proxy_connect function - socks5::proxy_connect(socketTCP->next_layer(), query, socksEndpoint, ec); + + auto endpoints { resolver.resolve(host, std::to_string(port), ec) }; - if (socks5::result_code::ok != ec) + if (ec || endpoints.begin() == endpoints.end()) { - logErr() << "Cannot connect to " << host << ":" << port << " with SOCKS5 proxy on localhost:" << config.mining.socksPort; + logErr() << "Cannot resolve " << host << ":" << port; return false; } + + + auto targetEndpoint = *endpoints.begin(); + + socks5::proxy_connect(socketTCP->next_layer(), targetEndpoint, socksEndpoint, ec); + + + if (socks5::result_code::ok != ec) + { + logErr() << "Cannot connect to " << host << ":" << port << " with SOCKS5 proxy on " << *config.mining.socksHost << ":" << config.mining.socksPort; + return false; + } + } + + + } else { - auto const address{ boost::asio::ip::address::from_string(host, ec) }; + // from_string is no longer a memeber of boost::asio::ip::address in 1.90. + auto const address{ boost::asio::ip::make_address(host, ec) }; if (boost_error::success != ec) { - boost_resolver resolver{ ioService }; - boost_query query{ host, std::to_string(port) }; - auto endpoints{ resolver.resolve(query, ec) }; + + auto endpoints { resolver.resolve(host,std::to_string(port), + boost_resolve_flags::numeric_service,ec) }; + if (boost_error::success != ec) { @@ -128,7 +152,7 @@ bool network::NetworkTCPClient::connect() } runService.interrupt(); - runService = boost::thread{ boost::bind(&boost::asio::io_service::run, &ioService) }; + runService = boost::thread{ boost::bind(&boost::asio::io_context::run, &ioContext) }; return true; } diff --git a/sources/network/network.hpp b/sources/network/network.hpp index 7de114b..1f10a15 100644 --- a/sources/network/network.hpp +++ b/sources/network/network.hpp @@ -20,7 +20,7 @@ namespace network // boost alias using boost_socket = boost::asio::ssl::stream; using boost_error = boost::system::errc::errc_t; - using boost_query = boost::asio::ip::tcp::resolver::query; + using boost_resolve_flags = boost::asio::ip::resolver_base::flags; using boost_context = boost::asio::ssl::context; using boost_queue = boost::lockfree::queue; using boost_resolver = boost::asio::ip::tcp::resolver; @@ -46,7 +46,7 @@ namespace network boost_mutex rxMutex; boost_mutex txMutex; boost_thread runService; - boost::asio::io_service ioService; + boost::asio::io_context ioContext; boost_queue tx{ 100 }; boost_context context{ boost_context::tlsv12_client }; boost_socket* socketTCP{ nullptr }; diff --git a/sources/network/network_callback.cpp b/sources/network/network_callback.cpp index f7ae574..b338e12 100644 --- a/sources/network/network_callback.cpp +++ b/sources/network/network_callback.cpp @@ -55,7 +55,8 @@ void network::NetworkTCPClient::onReceiveAsync( if (boost_error::success == ec) { std::string msg; - msg.assign(boost::asio::buffer_cast(recvBuffer.data()), bytes); + msg.assign(boost::asio::buffers_begin(recvBuffer.data()), boost::asio::buffers_begin(recvBuffer.data()) + bytes); + recvBuffer.consume(bytes); if (false == msg.empty()) diff --git a/sources/network/socks5.hpp b/sources/network/socks5.hpp index 0906439..2422ba4 100644 --- a/sources/network/socks5.hpp +++ b/sources/network/socks5.hpp @@ -83,14 +83,8 @@ namespace socks5 { template struct core_t { using Endpoint = typename Proto::endpoint; - using Query = typename boost::asio::ip::basic_resolver::query; Endpoint _proxy; - core_t(Query const& target, Endpoint proxy) - : _proxy(proxy) - , _request(target) - { - } core_t(Endpoint const& target, Endpoint proxy) : _proxy(proxy) , _request(target) @@ -184,7 +178,7 @@ namespace socks5 { // constructors request_t(Endpoint const& ep) : port(ep.port()) { - auto& addr = ep.address(); + boost::asio::ip::address addr = ep.address(); if (addr.is_v4()) { var_address.type = addr_type::IPv4; var_address.payload.ipv4 = addr.to_v4().to_bytes(); @@ -194,18 +188,6 @@ namespace socks5 { } } - request_t(Query const& q) : port(std::stoi(q.service_name())) { - std::string const domain = q.host_name(); - var_address.type = addr_type::Domain; - - auto len = std::min(var_address.payload.domain.max_size() - 1, - domain.length()); - assert(len == domain.length() || "domain truncated"); - var_address.payload.domain[0] = len; - std::copy_n(domain.data(), len, - var_address.payload.domain.data() + 1); - } - auto buffers() const { return std::array { boost::asio::buffer(this, offsetof(request_t, var_address)),