diff --git a/src/app.module.ts b/src/app.module.ts index 8154a0d..0617c7d 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -38,7 +38,7 @@ const ORMModules = [ synchronize: true, autoLoadEntities: true, cache: true, - logging: false, + logging: true, enableWAL: true, busyTimeout: 30 * 1000, }), diff --git a/src/models/StratumV1Client.ts b/src/models/StratumV1Client.ts index 0b92a14..c4133ed 100644 --- a/src/models/StratumV1Client.ts +++ b/src/models/StratumV1Client.ts @@ -75,13 +75,13 @@ export class StratumV1Client { }) }); - this.sessionStart = new Date(); - this.statistics = new StratumV1ClientStatistics(this.clientStatisticsService, this.clientService); - this.extraNonceAndSessionId = this.getRandomHexString(); - console.log(`New client ID: : ${this.extraNonceAndSessionId}`); + } - public destroy() { + public async destroy() { + + await this.clientService.delete(this.extraNonceAndSessionId); + if (this.stratumSubscription != null) { this.stratumSubscription.unsubscribe(); } @@ -99,18 +99,24 @@ export class StratumV1Client { private async handleMessage(message: string) { - // console.log(`Received from ${this.extraNonceAndSessionId}`, message); + console.log(`Received from ${this.extraNonceAndSessionId}`, message); // Parse the message and check if it's the initial subscription message let parsedMessage = null; try { parsedMessage = JSON.parse(message); } catch (e) { - console.log("Invalid JSON"); + //console.log("Invalid JSON"); await this.socket.end(); return; } + if (this.sessionStart == null) { + this.sessionStart = new Date(); + this.statistics = new StratumV1ClientStatistics(this.clientStatisticsService, this.clientService); + this.extraNonceAndSessionId = this.getRandomHexString(); + console.log(`New client ID: : ${this.extraNonceAndSessionId}`); + } switch (parsedMessage.method) { case eRequestMethod.SUBSCRIBE: { @@ -264,6 +270,13 @@ export class StratumV1Client { break; } case eRequestMethod.SUBMIT: { + + if (this.stratumInitialized == false) { + console.log('Submit before initalized'); + await this.socket.end(); + } + + const miningSubmitMessage = plainToInstance( MiningSubmitMessage, parsedMessage, diff --git a/src/models/StratumV1ClientStatistics.ts b/src/models/StratumV1ClientStatistics.ts index f0f3c5e..45d3391 100644 --- a/src/models/StratumV1ClientStatistics.ts +++ b/src/models/StratumV1ClientStatistics.ts @@ -49,14 +49,14 @@ export class StratumV1ClientStatistics { public getSuggestedDifficulty(clientDifficulty: number) { // miner hasn't submitted shares in one minute - if (this.submissionCache.length == 0 || (new Date().getTime() - this.submissionCacheStart.getTime()) / 1000 > 60) { - return this.nearestPowerOfTwo(clientDifficulty >> 1); + if (this.submissionCache.length == 0) { + if ((new Date().getTime() - this.submissionCacheStart.getTime()) / 1000 > 60) { + return this.nearestPowerOfTwo(clientDifficulty >> 1); + } else { + return null; + } } - // if (this.submissionCache.length < CACHE_SIZE) { - // return null; - // } - const sum = this.submissionCache.reduce((pre, cur) => { pre += cur.difficulty; return pre; diff --git a/src/services/app.service.ts b/src/services/app.service.ts index 1202315..909713d 100644 --- a/src/services/app.service.ts +++ b/src/services/app.service.ts @@ -36,11 +36,8 @@ export class AppService implements OnModuleInit { } } - @Cron(CronExpression.EVERY_5_MINUTES) + @Cron(CronExpression.EVERY_SECOND) private async killDeadClients() { - - if (process.env.NODE_APP_INSTANCE == null || process.env.NODE_APP_INSTANCE == '0') { - await this.clientService.killDeadClients(); - } + await this.clientService.killDeadClients(); } } \ No newline at end of file diff --git a/src/services/stratum-v1.service.ts b/src/services/stratum-v1.service.ts index 672f133..e47a2a3 100644 --- a/src/services/stratum-v1.service.ts +++ b/src/services/stratum-v1.service.ts @@ -58,28 +58,20 @@ export class StratumV1Service implements OnModuleInit { socket.on('end', async (error: Error) => { - // Handle socket disconnection - client.destroy(); - - await this.clientService.delete(client.extraNonceAndSessionId); - - const clientCount = await this.clientService.connectedClientCount(); - - console.log(`Client disconnected, ${client.extraNonceAndSessionId}, ${clientCount} total clients`); - + if (client.extraNonceAndSessionId != null) { + // Handle socket disconnection + await client.destroy(); + console.log(`Client disconnected, ${client.extraNonceAndSessionId}`); + } }); socket.on('error', async (error: Error) => { - - client.destroy(); - - await this.clientService.delete(client.extraNonceAndSessionId); - - const clientCount = await this.clientService.connectedClientCount(); - console.log(`Client disconnected, socket error, ${client.extraNonceAndSessionId}, ${clientCount} total clients`); + if (client.extraNonceAndSessionId != null) { + await client.destroy(); + console.log(`Client disconnected, socket error, ${client.extraNonceAndSessionId}`); + } socket.destroy(); - }); });