An old btc miner project.
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

stratum-client.js 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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", this.work.id);
  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.log("Got nounce", sub[1]);
  46. this.miner.setNounce(sub[1], sub[2]);
  47. if (--this.waitFor == 0)
  48. this.startWork();
  49. }
  50. async auth(user, pass) {
  51. var success = await this.rpc.call("mining.authorize", user, pass);
  52. if (!success)
  53. throw new Error("Incorrect username/password.");
  54. this.log("Authenticated "+user+".");
  55. }
  56. writePayload() {
  57. var rdlen = 95 - 63;
  58. var rdata = Buffer.alloc(rdlen);
  59. for (var i = 0; i < rdlen; ++i)
  60. rdata[i] = this._block[94 - i];
  61. var rmlen = 64;
  62. var rmid = Buffer.alloc(rmlen);
  63. for (var i = 0; i < rmlen; ++i)
  64. rmid[i] = this._midstate[rmlen - i - 1];
  65. var payload = Buffer.concat([rmid, rdata]);
  66. this.log("Writing '"+payload.toString("hex")+"'");
  67. this._port.write(payload);
  68. }
  69. }
  70. module.exports = StratumClient;