|
|
@@ -4,7 +4,8 @@ class StratumClient { |
|
|
|
constructor(ip, port, miner) { |
|
|
|
this.name = ip+":"+port; |
|
|
|
|
|
|
|
this.waitFor = 2; |
|
|
|
this.nounceReady = false; |
|
|
|
this.difficultyReady = false; |
|
|
|
this.miner = miner; |
|
|
|
this.rpc = new RPCConn(ip, port); |
|
|
|
} |
|
|
@@ -15,6 +16,9 @@ class StratumClient { |
|
|
|
} |
|
|
|
|
|
|
|
async startWork() { |
|
|
|
if (!this.work) |
|
|
|
return; |
|
|
|
|
|
|
|
this.log("Starting work", this.work.id); |
|
|
|
var res; |
|
|
|
try { |
|
|
@@ -37,23 +41,29 @@ class StratumClient { |
|
|
|
merkleBranch: params[4], version: params[5], |
|
|
|
nBits: params[6], nTime: params[7], cleanJobs: params[8], |
|
|
|
}; |
|
|
|
this.log("Got work", work.id); |
|
|
|
|
|
|
|
this.work = work; |
|
|
|
if (this.ready <= 0) |
|
|
|
if (this.difficultyReady && this.nounceReady) |
|
|
|
this.startWork(); |
|
|
|
}); |
|
|
|
this.rpc.on("mining.set_difficulty", params => { |
|
|
|
this.log("difficulty", params[0]); |
|
|
|
this.log("Got difficulty", params[0]); |
|
|
|
this.miner.setDifficulty(params[0]); |
|
|
|
|
|
|
|
if (--this.waitFor == 0) |
|
|
|
if (this.difficultyReady) |
|
|
|
return; |
|
|
|
|
|
|
|
this.difficultyReady = true; |
|
|
|
if (this.nounceReady) |
|
|
|
this.startWork(); |
|
|
|
}); |
|
|
|
|
|
|
|
var sub = await this.rpc.call("mining.subscribe"); |
|
|
|
this.log("Got nounce", sub[1]); |
|
|
|
this.miner.setNounce(sub[1], sub[2]); |
|
|
|
if (--this.waitFor == 0) |
|
|
|
this.nounceReady = true; |
|
|
|
if (this.difficultyReady) |
|
|
|
this.startWork(); |
|
|
|
} |
|
|
|
|