From 8d91aac912ac7d45edd2332d7e08d5d670af9d33 Mon Sep 17 00:00:00 2001 From: Erik Kimmo Date: Fri, 18 Apr 2014 18:24:52 +0400 Subject: [PATCH] Mining protocol made compatible with MinerGate.com Fixed incorrect nonce offset in job data. --- src/miner/simpleminer.cpp | 19 +++++++++++++++---- src/miner/simpleminer_protocol_defs.h | 4 ++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/miner/simpleminer.cpp b/src/miner/simpleminer.cpp index a9f0ceab..7078eaaa 100644 --- a/src/miner/simpleminer.cpp +++ b/src/miner/simpleminer.cpp @@ -2,7 +2,6 @@ // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. - #include "common/command_line.h" #include "misc_log_ex.h" #include "simpleminer.h" @@ -120,6 +119,7 @@ namespace mining COMMAND_RPC_LOGIN::request req = AUTO_VAL_INIT(req); req.login = m_login; req.pass = m_pass; + req.agent = "simpleminer/0.1"; COMMAND_RPC_LOGIN::response resp = AUTO_VAL_INIT(resp); if(!epee::net_utils::invoke_http_json_rpc("/", req, resp, m_http_client)) { @@ -137,7 +137,12 @@ namespace mining } pool_session_id = resp.id; //78 - if(!text_job_details_to_native_job_details(resp.job, job)) + if (resp.job.blob.empty() && resp.job.target.empty() && resp.job.job_id.empty()) + { + LOG_PRINT_L0("Job didn't change"); + continue; + } + else if(!text_job_details_to_native_job_details(resp.job, job)) { LOG_PRINT_L0("Failed to text_job_details_to_native_job_details(), disconnect and sleep...."); m_http_client.disconnect(); @@ -161,7 +166,8 @@ namespace mining COMMAND_RPC_SUBMITSHARE::response submit_response = AUTO_VAL_INIT(submit_response); submit_request.id = pool_session_id; submit_request.job_id = job.job_id; - submit_request.nonce = epee::string_tools::pod_to_hex((*((uint32_t*)&job.blob.data()[78]))); + submit_request.nonce = epee::string_tools::pod_to_hex((*((uint32_t*)&job.blob.data()[39]))); + submit_request.result = epee::string_tools::pod_to_hex(h); LOG_PRINT_L0("Share found: nonce=" << submit_request.nonce << " for job=" << job.job_id << ", submitting..."); if(!epee::net_utils::invoke_http_json_rpc("/", submit_request, submit_response, m_http_client)) { @@ -193,7 +199,12 @@ namespace mining epee::misc_utils::sleep_no_w(1000); break; } - if(!text_job_details_to_native_job_details(getjob_response, job)) + if (getjob_response.blob.empty() && getjob_response.target.empty() && getjob_response.job_id.empty()) + { + LOG_PRINT_L0("Job didn't change"); + continue; + } + else if(!text_job_details_to_native_job_details(getjob_response, job)) { LOG_PRINT_L0("Failed to text_job_details_to_native_job_details(), disconnect and sleep...."); m_http_client.disconnect(); diff --git a/src/miner/simpleminer_protocol_defs.h b/src/miner/simpleminer_protocol_defs.h index 9b70f8cb..06b6a905 100644 --- a/src/miner/simpleminer_protocol_defs.h +++ b/src/miner/simpleminer_protocol_defs.h @@ -36,10 +36,12 @@ namespace mining { std::string login; std::string pass; + std::string agent; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(login) KV_SERIALIZE(pass) + KV_SERIALIZE(agent) END_KV_SERIALIZE_MAP() }; @@ -82,11 +84,13 @@ namespace mining { std::string id; std::string nonce; + std::string result; std::string job_id; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(id) KV_SERIALIZE(nonce) + KV_SERIALIZE(result) KV_SERIALIZE(job_id) END_KV_SERIALIZE_MAP() };