An old btc miner project.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

stratum-client.js 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. var RPCConn = require("./rpcconn");
  2. class StratumClient {
  3. constructor(ip, port, miner) {
  4. this.name = ip+":"+port;
  5. this.waitFor = 2;
  6. this.miner = miner;
  7. this.rpc = new RPCConn(ip, port);
  8. }
  9. log(...msgs) {
  10. process.stdout.write(this.name+": ");
  11. console.log.apply(console, msgs);
  12. }
  13. async startWork() {
  14. this.log("Starting work");
  15. var res;
  16. try {
  17. res = await this.miner.startWork(this.work);
  18. } catch (err) {
  19. console.trace(err);
  20. return;
  21. }
  22. this.log("Work done,", res.toString("hex"));
  23. }
  24. async connect() {
  25. await this.rpc.wait();
  26. await this.miner.wait();
  27. this.rpc.on("mining.notify", async params => {
  28. var work = {
  29. id: params[0], prevHash: params[1],
  30. coinb1: params[2], coinb2: params[3],
  31. merkleBranch: params[4], version: params[5],
  32. nBits: params[6], nTime: params[7], cleanJobs: params[8],
  33. };
  34. this.work = work;
  35. if (this.ready <= 0)
  36. this.startWork();
  37. });
  38. this.rpc.on("mining.set_difficulty", params => {
  39. this.log("difficulty", params[0]);
  40. this.miner.setDifficulty(params[0]);
  41. if (--this.waitFor == 0)
  42. this.startWork();
  43. });
  44. var sub = await this.rpc.call("mining.subscribe");
  45. this.miner.setNounce(sub[1], sub[2]);
  46. if (--this.waitFor == 0)
  47. this.startWork();
  48. }
  49. async auth(user, pass) {
  50. var success = await this.rpc.call("mining.authorize", user, pass);
  51. if (!success)
  52. throw new Error("Incorrect username/password.");
  53. console.log("Authenticated "+user+".");
  54. }
  55. writePayload() {
  56. var rdlen = 95 - 63;
  57. var rdata = Buffer.alloc(rdlen);
  58. for (var i = 0; i < rdlen; ++i)
  59. rdata[i] = this._block[94 - i];
  60. var rmlen = 64;
  61. var rmid = Buffer.alloc(rmlen);
  62. for (var i = 0; i < rmlen; ++i)
  63. rmid[i] = this._midstate[rmlen - i - 1];
  64. var payload = Buffer.concat([rmid, rdata]);
  65. this.log("Writing '"+payload.toString("hex")+"'");
  66. this._port.write(payload);
  67. }
  68. }
  69. module.exports = StratumClient;