diff --git a/package-lock.json b/package-lock.json index 228cd36..641008f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,6 @@ "discord.js": "^14.11.0", "merkle-lib": "^2.0.10", "node-telegram-bot-api": "^0.61.0", - "promise-socket": "^7.0.0", "reflect-metadata": "^0.1.13", "rpc-bitcoin": "^2.0.0", "rxjs": "^7.2.0", @@ -4212,16 +4211,6 @@ "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "dev": true }, - "node_modules/core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -8941,36 +8930,12 @@ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz", "integrity": "sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==" }, - "node_modules/promise-duplex": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/promise-duplex/-/promise-duplex-6.0.0.tgz", - "integrity": "sha512-ZL7rquzjTFzInDBeWYcsT+qddolNvzigahk6MI6qLSbQvlyRRCJkU3JztgaVunzvkH28smRa2Qu/cY9RXtSkgA==", - "dependencies": { - "core-js": "^3.6.5", - "promise-readable": "^6.0.0", - "promise-writable": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "optional": true }, - "node_modules/promise-readable": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/promise-readable/-/promise-readable-6.0.0.tgz", - "integrity": "sha512-5NxtmUswijvX5cAM0zPSy6yiCXH/eKBpiiBq6JfAUrmngMquMbzcBhF2qA+ocs4rYYKdvAfv3cOvZxADLtL1CA==", - "dependencies": { - "core-js": "^3.6.5" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", @@ -8984,26 +8949,6 @@ "node": ">=10" } }, - "node_modules/promise-socket": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/promise-socket/-/promise-socket-7.0.0.tgz", - "integrity": "sha512-Oic9BrxmcHOPEnzKp2Js+ehFyvsbd0WxsE5khweCTHuRvdzbXjHUZmSDT6F9TW8SIkAJ0lCzoHjMYnb0WQJPiw==", - "dependencies": { - "promise-duplex": "^6.0.0", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/promise-writable": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/promise-writable/-/promise-writable-6.0.0.tgz", - "integrity": "sha512-b81zre/itgJFS7dwWzIdKNVVqvLiUxYRS/wolUB0H1YY/tAaS146XGKa4Q/5wCbsnXLyn0MCeV6f8HHe4iUHLg==", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -14558,11 +14503,6 @@ "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "dev": true }, - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==" - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -18157,30 +18097,12 @@ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz", "integrity": "sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==" }, - "promise-duplex": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/promise-duplex/-/promise-duplex-6.0.0.tgz", - "integrity": "sha512-ZL7rquzjTFzInDBeWYcsT+qddolNvzigahk6MI6qLSbQvlyRRCJkU3JztgaVunzvkH28smRa2Qu/cY9RXtSkgA==", - "requires": { - "core-js": "^3.6.5", - "promise-readable": "^6.0.0", - "promise-writable": "^6.0.0" - } - }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "optional": true }, - "promise-readable": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/promise-readable/-/promise-readable-6.0.0.tgz", - "integrity": "sha512-5NxtmUswijvX5cAM0zPSy6yiCXH/eKBpiiBq6JfAUrmngMquMbzcBhF2qA+ocs4rYYKdvAfv3cOvZxADLtL1CA==", - "requires": { - "core-js": "^3.6.5" - } - }, "promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", @@ -18191,20 +18113,6 @@ "retry": "^0.12.0" } }, - "promise-socket": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/promise-socket/-/promise-socket-7.0.0.tgz", - "integrity": "sha512-Oic9BrxmcHOPEnzKp2Js+ehFyvsbd0WxsE5khweCTHuRvdzbXjHUZmSDT6F9TW8SIkAJ0lCzoHjMYnb0WQJPiw==", - "requires": { - "promise-duplex": "^6.0.0", - "tslib": "^2.0.1" - } - }, - "promise-writable": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/promise-writable/-/promise-writable-6.0.0.tgz", - "integrity": "sha512-b81zre/itgJFS7dwWzIdKNVVqvLiUxYRS/wolUB0H1YY/tAaS146XGKa4Q/5wCbsnXLyn0MCeV6f8HHe4iUHLg==" - }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", diff --git a/package.json b/package.json index 3343400..eb0625c 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,6 @@ "discord.js": "^14.11.0", "merkle-lib": "^2.0.10", "node-telegram-bot-api": "^0.61.0", - "promise-socket": "^7.0.0", "reflect-metadata": "^0.1.13", "rpc-bitcoin": "^2.0.0", "rxjs": "^7.2.0", diff --git a/src/models/StratumV1Client.ts b/src/models/StratumV1Client.ts index 3c69a92..368ffbe 100644 --- a/src/models/StratumV1Client.ts +++ b/src/models/StratumV1Client.ts @@ -5,7 +5,6 @@ import { plainToInstance } from 'class-transformer'; import { validate, ValidatorOptions } from 'class-validator'; import * as crypto from 'crypto'; import { Socket } from 'net'; -import PromiseSocket from 'promise-socket'; import { firstValueFrom, Subscription } from 'rxjs'; import { AddressSettingsService } from '../ORM/address-settings/address-settings.service'; @@ -50,7 +49,7 @@ export class StratumV1Client { constructor( - public readonly promiseSocket: PromiseSocket, + public readonly socket: Socket, private readonly stratumV1JobsService: StratumV1JobsService, private readonly bitcoinRpcService: BitcoinRpcService, private readonly clientService: ClientService, @@ -61,7 +60,7 @@ export class StratumV1Client { private readonly addressSettingsService: AddressSettingsService ) { - this.promiseSocket.socket.on('data', (data: Buffer) => { + this.socket.on('data', (data: Buffer) => { data.toString() .split('\n') .filter(m => m.length > 0) @@ -69,7 +68,7 @@ export class StratumV1Client { try { await this.handleMessage(m); } catch (e) { - await this.promiseSocket.end(); + await this.socket.end(); console.error(e); } }) @@ -107,7 +106,7 @@ export class StratumV1Client { parsedMessage = JSON.parse(message); } catch (e) { console.log("Invalid JSON"); - await this.promiseSocket.end(); + await this.socket.end(); return; } @@ -343,7 +342,7 @@ export class StratumV1Client { try { await this.sendNewMiningJob(jobTemplate); } catch (e) { - await this.promiseSocket.end(); + await this.socket.end(); console.error(e); } }); @@ -528,7 +527,7 @@ export class StratumV1Client { }) + '\n'; - await this.promiseSocket.write(data); + await this.socket.write(data); // we need to clear the jobs so that the difficulty set takes effect. Otherwise the different miner implementations can cause issues @@ -562,14 +561,22 @@ export class StratumV1Client { private async write(message: string): Promise { try { - if (this.promiseSocket.isPromiseWritable) { - await this.promiseSocket.write(message); + if (!this.socket.destroyed && !this.socket.writableEnded) { + await new Promise((resolve, reject) => { + this.socket.write(message, (error) => { + if (error) { + reject(error); + } else { + resolve(true); + } + }); + }); return true; } else { console.error('Error: Cannot write to closed or ended socket.'); } } catch (error) { - await this.promiseSocket.end(); + await this.socket.end(); console.error('Error occurred while writing to socket:', error); } return false; diff --git a/src/services/stratum-v1.service.ts b/src/services/stratum-v1.service.ts index 583a0d7..672f133 100644 --- a/src/services/stratum-v1.service.ts +++ b/src/services/stratum-v1.service.ts @@ -1,7 +1,6 @@ import { Injectable, OnModuleInit } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { Server, Socket } from 'net'; -import { PromiseSocket } from 'promise-socket'; import { StratumV1Client } from '../models/StratumV1Client'; import { AddressSettingsService } from '../ORM/address-settings/address-settings.service'; @@ -43,10 +42,10 @@ export class StratumV1Service implements OnModuleInit { private startSocketServer() { const server = new Server(async (socket: Socket) => { - const promiseSocket = new PromiseSocket(socket); + const client = new StratumV1Client( - promiseSocket, + socket, this.stratumV1JobsService, this.bitcoinRpcService, this.clientService, @@ -58,7 +57,7 @@ export class StratumV1Service implements OnModuleInit { ); - promiseSocket.socket.on('end', async (error: Error) => { + socket.on('end', async (error: Error) => { // Handle socket disconnection client.destroy(); @@ -70,7 +69,7 @@ export class StratumV1Service implements OnModuleInit { }); - promiseSocket.socket.on('error', async (error: Error) => { + socket.on('error', async (error: Error) => { client.destroy(); @@ -79,7 +78,7 @@ export class StratumV1Service implements OnModuleInit { const clientCount = await this.clientService.connectedClientCount(); console.log(`Client disconnected, socket error, ${client.extraNonceAndSessionId}, ${clientCount} total clients`); - promiseSocket.destroy(); + socket.destroy(); });