diff --git a/src/models/StratumV1Client.ts b/src/models/StratumV1Client.ts index 1761eb5..5256ccb 100644 --- a/src/models/StratumV1Client.ts +++ b/src/models/StratumV1Client.ts @@ -217,6 +217,9 @@ export class StratumV1Client { if (errors.length === 0) { this.clientAuthorization = authorizationMessage; + if (this.clientSuggestedDifficulty == null && this.clientAuthorization.startingDiff != null && this.clientAuthorization.startingDiff > this.sessionDifficulty) { + this.sessionDifficulty = this.clientAuthorization.startingDiff; + } const success = await this.write(JSON.stringify(this.clientAuthorization.response()) + '\n'); if (!success) { return; diff --git a/src/models/stratum-messages/AuthorizationMessage.ts b/src/models/stratum-messages/AuthorizationMessage.ts index 324007a..0977016 100644 --- a/src/models/stratum-messages/AuthorizationMessage.ts +++ b/src/models/stratum-messages/AuthorizationMessage.ts @@ -1,5 +1,5 @@ import { Expose, Transform } from 'class-transformer'; -import { ArrayMaxSize, ArrayMinSize, IsArray, IsOptional, IsString, MaxLength } from 'class-validator'; +import { ArrayMaxSize, ArrayMinSize, IsArray, IsNumber, IsOptional, IsString, MaxLength } from 'class-validator'; import { eRequestMethod } from '../enums/eRequestMethod'; import { IsBitcoinAddress } from '../validators/bitcoin-address.validator'; @@ -8,7 +8,7 @@ import { StratumBaseMessage } from './StratumBaseMessage'; export class AuthorizationMessage extends StratumBaseMessage { @IsArray() - @ArrayMinSize(2) + @ArrayMinSize(1) @ArrayMaxSize(2) params: string[]; @@ -24,11 +24,28 @@ export class AuthorizationMessage extends StratumBaseMessage { @IsString() @MaxLength(64) @Transform(({ value, key, obj, type }) => { - return obj.params[0].split('.')[1] == null ? 'worker' : obj.params[0].split('.')[1]; + const workerName = obj.params[0].split('.')[1]; + if (workerName == null) { + return 'worker'; + } + return workerName; }) public worker: string; + @Expose() + @IsNumber() + @Transform(({ value, key, obj, type }) => { + const password: string | null = obj.params[1]; + if (password?.includes('d=')) { + return parseInt(password.split('d=')[1]); + } + return null; + }) + @IsOptional() + public startingDiff: number; + + @Expose() @IsString() @Transform(({ value, key, obj, type }) => {