mirror of
https://github.com/xmrig/xmrig.git
synced 2024-11-05 16:07:42 +00:00
Added checking for top_block_hash/hash.
This commit is contained in:
parent
074b3869d2
commit
a3b303e885
2 changed files with 43 additions and 9 deletions
|
@ -50,8 +50,21 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
namespace xmrig {
|
||||||
|
|
||||||
|
static const char *kBlocktemplateBlob = "blocktemplate_blob";
|
||||||
|
static const char *kGetHeight = "/getheight";
|
||||||
|
static const char *kGetInfo = "/getinfo";
|
||||||
|
static const char *kHash = "hash";
|
||||||
|
static const char *kHeight = "height";
|
||||||
|
static const char *kJsonRPC = "/json_rpc";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
xmrig::DaemonClient::DaemonClient(int id, IClientListener *listener) :
|
xmrig::DaemonClient::DaemonClient(int id, IClientListener *listener) :
|
||||||
BaseClient(id, listener)
|
BaseClient(id, listener),
|
||||||
|
m_monero(true)
|
||||||
{
|
{
|
||||||
m_timer = new Timer(this);
|
m_timer = new Timer(this);
|
||||||
}
|
}
|
||||||
|
@ -109,7 +122,7 @@ int64_t xmrig::DaemonClient::submit(const JobResult &result)
|
||||||
m_results[m_sequence] = SubmitResult(m_sequence, result.diff, result.actualDiff());
|
m_results[m_sequence] = SubmitResult(m_sequence, result.diff, result.actualDiff());
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
send(HTTP_POST, "/json_rpc", doc);
|
send(HTTP_POST, kJsonRPC, doc);
|
||||||
|
|
||||||
return m_sequence++;
|
return m_sequence++;
|
||||||
}
|
}
|
||||||
|
@ -155,8 +168,19 @@ void xmrig::DaemonClient::onHttpData(const HttpData &data)
|
||||||
return retry();
|
return retry();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.method == HTTP_GET && data.url == "/getheight") {
|
if (data.method == HTTP_GET) {
|
||||||
if (m_job.height() != Json::getUint64(doc, "height")) {
|
if (data.url == kGetHeight) {
|
||||||
|
if (!doc.HasMember(kHash)) {
|
||||||
|
m_monero = false;
|
||||||
|
|
||||||
|
return send(HTTP_GET, kGetInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isOutdated(Json::getUint64(doc, kHeight), Json::getString(doc, kHash))) {
|
||||||
|
getBlockTemplate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (data.url == kGetInfo && isOutdated(Json::getUint64(doc, kHeight), Json::getString(doc, "top_block_hash"))) {
|
||||||
getBlockTemplate();
|
getBlockTemplate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,27 +199,34 @@ void xmrig::DaemonClient::onTimer(const Timer *)
|
||||||
getBlockTemplate();
|
getBlockTemplate();
|
||||||
}
|
}
|
||||||
else if (m_state == ConnectedState) {
|
else if (m_state == ConnectedState) {
|
||||||
send(HTTP_GET, "/getheight");
|
send(HTTP_GET, m_monero ? kGetHeight : kGetInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool xmrig::DaemonClient::isOutdated(uint64_t height, const char *hash) const
|
||||||
|
{
|
||||||
|
return m_job.height() != height || m_prevHash != hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool xmrig::DaemonClient::parseJob(const rapidjson::Value ¶ms, int *code)
|
bool xmrig::DaemonClient::parseJob(const rapidjson::Value ¶ms, int *code)
|
||||||
{
|
{
|
||||||
Job job(m_id, false, m_pool.algorithm(), String());
|
Job job(m_id, false, m_pool.algorithm(), String());
|
||||||
|
|
||||||
String blocktemplate = Json::getString(params, "blocktemplate_blob");
|
String blocktemplate = Json::getString(params, kBlocktemplateBlob);
|
||||||
if (blocktemplate.isNull() || !job.setBlob(Json::getString(params, "blockhashing_blob"))) {
|
if (blocktemplate.isNull() || !job.setBlob(Json::getString(params, "blockhashing_blob"))) {
|
||||||
*code = 4;
|
*code = 4;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
job.setHeight(Json::getUint64(params, "height"));
|
job.setHeight(Json::getUint64(params, kHeight));
|
||||||
job.setDiff(Json::getUint64(params, "difficulty"));
|
job.setDiff(Json::getUint64(params, "difficulty"));
|
||||||
job.setId(blocktemplate.data() + blocktemplate.size() - 32);
|
job.setId(blocktemplate.data() + blocktemplate.size() - 32);
|
||||||
|
|
||||||
m_job = std::move(job);
|
m_job = std::move(job);
|
||||||
m_blocktemplate = std::move(blocktemplate);
|
m_blocktemplate = std::move(blocktemplate);
|
||||||
|
m_prevHash = Json::getString(params, "prev_hash");
|
||||||
|
|
||||||
if (m_state == ConnectingState) {
|
if (m_state == ConnectingState) {
|
||||||
setState(ConnectedState);
|
setState(ConnectedState);
|
||||||
|
@ -227,7 +258,7 @@ bool xmrig::DaemonClient::parseResponse(int64_t id, const rapidjson::Value &resu
|
||||||
}
|
}
|
||||||
|
|
||||||
int code = -1;
|
int code = -1;
|
||||||
if (result.HasMember("blocktemplate_blob") && parseJob(result, &code)) {
|
if (result.HasMember(kBlocktemplateBlob) && parseJob(result, &code)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,7 +284,7 @@ int64_t xmrig::DaemonClient::getBlockTemplate()
|
||||||
|
|
||||||
JsonRequest::create(doc, m_sequence, "getblocktemplate", params);
|
JsonRequest::create(doc, m_sequence, "getblocktemplate", params);
|
||||||
|
|
||||||
send(HTTP_POST, "/json_rpc", doc);
|
send(HTTP_POST, kJsonRPC, doc);
|
||||||
|
|
||||||
return m_sequence++;
|
return m_sequence++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,6 +59,7 @@ protected:
|
||||||
inline void tick(uint64_t) override {}
|
inline void tick(uint64_t) override {}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool isOutdated(uint64_t height, const char *hash) const;
|
||||||
bool parseJob(const rapidjson::Value ¶ms, int *code);
|
bool parseJob(const rapidjson::Value ¶ms, int *code);
|
||||||
bool parseResponse(int64_t id, const rapidjson::Value &result, const rapidjson::Value &error);
|
bool parseResponse(int64_t id, const rapidjson::Value &result, const rapidjson::Value &error);
|
||||||
int64_t getBlockTemplate();
|
int64_t getBlockTemplate();
|
||||||
|
@ -67,7 +68,9 @@ private:
|
||||||
void send(int method, const char *url, const rapidjson::Document &doc);
|
void send(int method, const char *url, const rapidjson::Document &doc);
|
||||||
void setState(SocketState state);
|
void setState(SocketState state);
|
||||||
|
|
||||||
|
bool m_monero;
|
||||||
String m_blocktemplate;
|
String m_blocktemplate;
|
||||||
|
String m_prevHash;
|
||||||
String m_tlsFingerprint;
|
String m_tlsFingerprint;
|
||||||
String m_tlsVersion;
|
String m_tlsVersion;
|
||||||
Timer *m_timer;
|
Timer *m_timer;
|
||||||
|
|
Loading…
Reference in a new issue