Skip to content

Commit 2d42d90

Browse files
author
Hanjiang Yu
committed
BTC: move mining.suggest_target handling
Miner is created after mining.authorize but mining.suggest_target is sent before mining.subscribe. Hence we need to move the handling to session level.
1 parent 318cd2f commit 2d42d90

File tree

4 files changed

+28
-19
lines changed

4 files changed

+28
-19
lines changed

src/bitcoin/StratumMinerBitcoin.cc

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ void StratumMinerBitcoin::handleRequest(
4949
const JsonNode &jroot) {
5050
if (method == "mining.submit") {
5151
handleRequest_Submit(idStr, jparams);
52-
} else if (method == "mining.suggest_target") {
53-
handleRequest_SuggestTarget(idStr, jparams);
5452
}
5553
}
5654

@@ -116,20 +114,6 @@ void StratumMinerBitcoin::handleRequest_Submit(
116114
idStr, shortJobId, extraNonce2, nonce, nTime, versionMask);
117115
}
118116

119-
void StratumMinerBitcoin::handleRequest_SuggestTarget(
120-
const string &idStr, const JsonNode &jparams) {
121-
auto &session = getSession();
122-
if (session.getState() != StratumSession::CONNECTED) {
123-
return; // suggest should be call before subscribe
124-
}
125-
126-
if (jparams.children()->size() == 0) {
127-
session.responseError(idStr, StratumStatus::ILLEGAL_PARARMS);
128-
return;
129-
}
130-
resetCurDiff(formatDifficulty(TargetToDiff(jparams.children()->at(0).str())));
131-
}
132-
133117
void StratumMinerBitcoin::handleExMessage_SubmitShare(
134118
const std::string &exMessage,
135119
const bool isWithTime,

src/bitcoin/StratumMinerBitcoin.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ class StratumMinerBitcoin : public StratumMinerBase<StratumTraitsBitcoin> {
4646

4747
private:
4848
void handleRequest_Submit(const std::string &idStr, const JsonNode &jparams);
49-
void handleRequest_SuggestTarget(
50-
const std::string &idStr, const JsonNode &jparams);
5149
void handleExMessage_SubmitShare(
5250
const std::string &exMessage,
5351
const bool isWithTime,

src/bitcoin/StratumSessionBitcoin.cc

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ StratumSessionBitcoin::StratumSessionBitcoin(
4646
: StratumSessionBase(server, bev, saddr, extraNonce1)
4747
, shortJobIdIdx_(0)
4848
, versionMask_(0)
49-
, suggestedMinDiff_(0) {
49+
, suggestedMinDiff_(0)
50+
, suggestedDiff_(0) {
5051
}
5152

5253
uint16_t
@@ -145,6 +146,8 @@ void StratumSessionBitcoin::handleRequest(
145146
handleRequest_MiningConfigure(idStr, jparams);
146147
} else if (method == "agent.get_capabilities") {
147148
handleRequest_AgentGetCapabilities(idStr, jparams);
149+
} else if (method == "mining.suggest_target") {
150+
handleRequest_SuggestTarget(idStr, jparams);
148151
} else {
149152
dispatcher_->handleRequest(idStr, method, jparams, jroot);
150153
}
@@ -390,6 +393,23 @@ void StratumSessionBitcoin::handleRequest_Authorize(
390393
return;
391394
}
392395

396+
void StratumSessionBitcoin::handleRequest_SuggestTarget(
397+
const string &idStr, const JsonNode &jparams) {
398+
if (state_ != CONNECTED) {
399+
responseError(idStr, StratumStatus::ILLEGAL_METHOD);
400+
return; // suggest should be call before subscribe
401+
}
402+
403+
if (jparams.children()->size() == 0) {
404+
responseError(idStr, StratumStatus::ILLEGAL_PARARMS);
405+
return;
406+
}
407+
408+
suggestedDiff_ =
409+
formatDifficulty(TargetToDiff(jparams.children()->at(0).str()));
410+
responseTrue(idStr);
411+
}
412+
393413
void StratumSessionBitcoin::logAuthorizeResult(bool success) {
394414
if (success) {
395415
LOG(INFO) << "authorize success, userId: " << worker_.userId_
@@ -463,5 +483,9 @@ unique_ptr<StratumMiner> StratumSessionBitcoin::createMiner(
463483
miner->setMinDiff(suggestedMinDiff_);
464484
}
465485

486+
if (suggestedDiff_ != 0) {
487+
miner->resetCurDiff(suggestedDiff_);
488+
}
489+
466490
return miner;
467491
}

src/bitcoin/StratumSessionBitcoin.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ class StratumSessionBitcoin : public StratumSessionBase<StratumTraitsBitcoin> {
5555
// request from BTCAgent
5656
void handleRequest_AgentGetCapabilities(
5757
const string &idStr, const JsonNode &jparams);
58+
void handleRequest_SuggestTarget(
59+
const std::string &idStr, const JsonNode &jparams);
5860

5961
void logAuthorizeResult(bool success) override;
6062
string getMinerInfoJson(const string &type) override;
@@ -74,6 +76,7 @@ class StratumSessionBitcoin : public StratumSessionBase<StratumTraitsBitcoin> {
7476

7577
uint32_t versionMask_; // version mask that the miner wants
7678
uint64_t suggestedMinDiff_; // min difficulty that the miner wants
79+
uint64_t suggestedDiff_; // difficulty that the miner wants
7780
};
7881

7982
#endif // #ifndef STRATUM_SESSION_BITCOIN_H_

0 commit comments

Comments
 (0)