diff --git a/src/models/StratumV1Client.ts b/src/models/StratumV1Client.ts index 4189872..ec16daa 100644 --- a/src/models/StratumV1Client.ts +++ b/src/models/StratumV1Client.ts @@ -36,6 +36,7 @@ export class StratumV1Client { private clientAuthorization: AuthorizationMessage; private clientSuggestedDifficulty: SuggestDifficulty; private stratumSubscription: Subscription; + private backgroundWork: NodeJS.Timer; private statistics: StratumV1ClientStatistics; private stratumInitialized = false; @@ -82,6 +83,7 @@ export class StratumV1Client { public destroy() { this.stratumSubscription.unsubscribe(); + clearInterval(this.backgroundWork); } private getRandomHexString() { @@ -275,6 +277,12 @@ export class StratumV1Client { this.stratumInitialized = true; + switch (this.clientSubscription.userAgent) { + case 'cpuminer': { + this.sessionDifficulty = 0.1; + } + } + if (this.clientSuggestedDifficulty == null) { console.log(`Setting difficulty to ${this.sessionDifficulty}`) @@ -297,14 +305,18 @@ export class StratumV1Client { ).subscribe(async (jobTemplate) => { try { await this.sendNewMiningJob(jobTemplate); - await this.checkDifficulty(); - await this.watchdog(); + } catch (e) { this.promiseSocket.socket.emit('end', true); console.error(e); } }); + this.backgroundWork = setInterval(async () => { + await this.checkDifficulty(); + await this.watchdog(); + }, 60 * 1000); + } } @@ -454,7 +466,7 @@ export class StratumV1Client { return false; } - await this.checkDifficulty(); + //await this.checkDifficulty(); return true; } diff --git a/src/models/StratumV1ClientStatistics.ts b/src/models/StratumV1ClientStatistics.ts index 60c3bc5..83012f4 100644 --- a/src/models/StratumV1ClientStatistics.ts +++ b/src/models/StratumV1ClientStatistics.ts @@ -52,13 +52,13 @@ 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) { + if (this.submissionCache.length == 0 || (new Date().getTime() - this.submissionCacheStart.getTime()) / 1000 > 60) { return this.nearestPowerOfTwo(clientDifficulty >> 1); } - if (this.submissionCache.length < CACHE_SIZE) { - return null; - } + // if (this.submissionCache.length < CACHE_SIZE) { + // return null; + // } const sum = this.submissionCache.reduce((pre, cur) => { pre += cur.difficulty; @@ -75,7 +75,6 @@ export class StratumV1ClientStatistics { } return null; - } private nearestPowerOfTwo(val): number {