removed promise sockets

This commit is contained in:
Ben Wilson
2023-08-06 11:08:53 -04:00
parent 4da96c6b68
commit 16328d8d03
4 changed files with 22 additions and 109 deletions
-92
View File
@@ -27,7 +27,6 @@
"discord.js": "^14.11.0", "discord.js": "^14.11.0",
"merkle-lib": "^2.0.10", "merkle-lib": "^2.0.10",
"node-telegram-bot-api": "^0.61.0", "node-telegram-bot-api": "^0.61.0",
"promise-socket": "^7.0.0",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"rpc-bitcoin": "^2.0.0", "rpc-bitcoin": "^2.0.0",
"rxjs": "^7.2.0", "rxjs": "^7.2.0",
@@ -4212,16 +4211,6 @@
"integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==",
"dev": true "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": { "node_modules/core-util-is": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "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", "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz",
"integrity": "sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==" "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": { "node_modules/promise-inflight": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
"integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
"optional": true "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": { "node_modules/promise-retry": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
@@ -8984,26 +8949,6 @@
"node": ">=10" "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": { "node_modules/prompts": {
"version": "2.4.2", "version": "2.4.2",
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
@@ -14558,11 +14503,6 @@
"integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==",
"dev": true "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": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "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", "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz",
"integrity": "sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==" "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": { "promise-inflight": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
"integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
"optional": true "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": { "promise-retry": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
@@ -18191,20 +18113,6 @@
"retry": "^0.12.0" "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": { "prompts": {
"version": "2.4.2", "version": "2.4.2",
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
-1
View File
@@ -38,7 +38,6 @@
"discord.js": "^14.11.0", "discord.js": "^14.11.0",
"merkle-lib": "^2.0.10", "merkle-lib": "^2.0.10",
"node-telegram-bot-api": "^0.61.0", "node-telegram-bot-api": "^0.61.0",
"promise-socket": "^7.0.0",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"rpc-bitcoin": "^2.0.0", "rpc-bitcoin": "^2.0.0",
"rxjs": "^7.2.0", "rxjs": "^7.2.0",
+17 -10
View File
@@ -5,7 +5,6 @@ import { plainToInstance } from 'class-transformer';
import { validate, ValidatorOptions } from 'class-validator'; import { validate, ValidatorOptions } from 'class-validator';
import * as crypto from 'crypto'; import * as crypto from 'crypto';
import { Socket } from 'net'; import { Socket } from 'net';
import PromiseSocket from 'promise-socket';
import { firstValueFrom, Subscription } from 'rxjs'; import { firstValueFrom, Subscription } from 'rxjs';
import { AddressSettingsService } from '../ORM/address-settings/address-settings.service'; import { AddressSettingsService } from '../ORM/address-settings/address-settings.service';
@@ -50,7 +49,7 @@ export class StratumV1Client {
constructor( constructor(
public readonly promiseSocket: PromiseSocket<Socket>, public readonly socket: Socket,
private readonly stratumV1JobsService: StratumV1JobsService, private readonly stratumV1JobsService: StratumV1JobsService,
private readonly bitcoinRpcService: BitcoinRpcService, private readonly bitcoinRpcService: BitcoinRpcService,
private readonly clientService: ClientService, private readonly clientService: ClientService,
@@ -61,7 +60,7 @@ export class StratumV1Client {
private readonly addressSettingsService: AddressSettingsService private readonly addressSettingsService: AddressSettingsService
) { ) {
this.promiseSocket.socket.on('data', (data: Buffer) => { this.socket.on('data', (data: Buffer) => {
data.toString() data.toString()
.split('\n') .split('\n')
.filter(m => m.length > 0) .filter(m => m.length > 0)
@@ -69,7 +68,7 @@ export class StratumV1Client {
try { try {
await this.handleMessage(m); await this.handleMessage(m);
} catch (e) { } catch (e) {
await this.promiseSocket.end(); await this.socket.end();
console.error(e); console.error(e);
} }
}) })
@@ -107,7 +106,7 @@ export class StratumV1Client {
parsedMessage = JSON.parse(message); parsedMessage = JSON.parse(message);
} catch (e) { } catch (e) {
console.log("Invalid JSON"); console.log("Invalid JSON");
await this.promiseSocket.end(); await this.socket.end();
return; return;
} }
@@ -343,7 +342,7 @@ export class StratumV1Client {
try { try {
await this.sendNewMiningJob(jobTemplate); await this.sendNewMiningJob(jobTemplate);
} catch (e) { } catch (e) {
await this.promiseSocket.end(); await this.socket.end();
console.error(e); console.error(e);
} }
}); });
@@ -528,7 +527,7 @@ export class StratumV1Client {
}) + '\n'; }) + '\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 // 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<boolean> { private async write(message: string): Promise<boolean> {
try { try {
if (this.promiseSocket.isPromiseWritable) { if (!this.socket.destroyed && !this.socket.writableEnded) {
await this.promiseSocket.write(message); await new Promise((resolve, reject) => {
this.socket.write(message, (error) => {
if (error) {
reject(error);
} else {
resolve(true);
}
});
});
return true; return true;
} else { } else {
console.error('Error: Cannot write to closed or ended socket.'); console.error('Error: Cannot write to closed or ended socket.');
} }
} catch (error) { } catch (error) {
await this.promiseSocket.end(); await this.socket.end();
console.error('Error occurred while writing to socket:', error); console.error('Error occurred while writing to socket:', error);
} }
return false; return false;
+5 -6
View File
@@ -1,7 +1,6 @@
import { Injectable, OnModuleInit } from '@nestjs/common'; import { Injectable, OnModuleInit } from '@nestjs/common';
import { ConfigService } from '@nestjs/config'; import { ConfigService } from '@nestjs/config';
import { Server, Socket } from 'net'; import { Server, Socket } from 'net';
import { PromiseSocket } from 'promise-socket';
import { StratumV1Client } from '../models/StratumV1Client'; import { StratumV1Client } from '../models/StratumV1Client';
import { AddressSettingsService } from '../ORM/address-settings/address-settings.service'; import { AddressSettingsService } from '../ORM/address-settings/address-settings.service';
@@ -43,10 +42,10 @@ export class StratumV1Service implements OnModuleInit {
private startSocketServer() { private startSocketServer() {
const server = new Server(async (socket: Socket) => { const server = new Server(async (socket: Socket) => {
const promiseSocket = new PromiseSocket(socket);
const client = new StratumV1Client( const client = new StratumV1Client(
promiseSocket, socket,
this.stratumV1JobsService, this.stratumV1JobsService,
this.bitcoinRpcService, this.bitcoinRpcService,
this.clientService, 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 // Handle socket disconnection
client.destroy(); 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(); client.destroy();
@@ -79,7 +78,7 @@ export class StratumV1Service implements OnModuleInit {
const clientCount = await this.clientService.connectedClientCount(); const clientCount = await this.clientService.connectedClientCount();
console.log(`Client disconnected, socket error, ${client.extraNonceAndSessionId}, ${clientCount} total clients`); console.log(`Client disconnected, socket error, ${client.extraNonceAndSessionId}, ${clientCount} total clients`);
promiseSocket.destroy(); socket.destroy();
}); });