From b147eff49a4ed7cdef9be799e9b4217caa1aead1 Mon Sep 17 00:00:00 2001 From: Ben Wilson Date: Sat, 1 Jul 2023 06:51:37 -0400 Subject: [PATCH] stratum error init --- src/models/StratumV1Client.ts | 13 +++++++++- src/models/enums/eStratumErrorCode.ts | 8 ++++++ .../stratum-messages/StratumErrorMessage.ts | 25 +++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 src/models/enums/eStratumErrorCode.ts create mode 100644 src/models/stratum-messages/StratumErrorMessage.ts diff --git a/src/models/StratumV1Client.ts b/src/models/StratumV1Client.ts index 36075d5..975e6cb 100644 --- a/src/models/StratumV1Client.ts +++ b/src/models/StratumV1Client.ts @@ -15,10 +15,12 @@ import { EasyUnsubscribe } from '../utils/AutoUnsubscribe'; import { IBlockTemplate } from './bitcoin-rpc/IBlockTemplate'; import { eRequestMethod } from './enums/eRequestMethod'; import { eResponseMethod } from './enums/eResponseMethod'; +import { eStratumErrorCode } from './enums/eStratumErrorCode'; import { MiningJob } from './MiningJob'; import { AuthorizationMessage } from './stratum-messages/AuthorizationMessage'; import { ConfigurationMessage } from './stratum-messages/ConfigurationMessage'; import { MiningSubmitMessage } from './stratum-messages/MiningSubmitMessage'; +import { StratumErrorMessage } from './stratum-messages/StratumErrorMessage'; import { SubscriptionMessage } from './stratum-messages/SubscriptionMessage'; import { SuggestDifficulty } from './stratum-messages/SuggestDifficultyMessage'; import { StratumV1ClientStatistics } from './StratumV1ClientStatistics'; @@ -107,7 +109,16 @@ export class StratumV1Client extends EasyUnsubscribe { socket.write(JSON.stringify(this.clientSubscription.response(this.extraNonce)) + '\n'); } else { - console.error(errors); + + const err = new StratumErrorMessage( + subscriptionMessage.id, + eStratumErrorCode.OtherUnknown, + 'Subscription error', + errors).response(); + + console.error(err); + socket.write(err); + } break; diff --git a/src/models/enums/eStratumErrorCode.ts b/src/models/enums/eStratumErrorCode.ts new file mode 100644 index 0000000..65f3820 --- /dev/null +++ b/src/models/enums/eStratumErrorCode.ts @@ -0,0 +1,8 @@ +export enum eStratumErrorCode { + 'OtherUnknown' = 20, + 'JobNotFound' = 21, // (=stale) + 'DuplicateShare' = 22, + 'LowDifficultyShare' = 23, + 'UnauthorizedWorker' = 24, + 'NotSubscribed' = 25 +} \ No newline at end of file diff --git a/src/models/stratum-messages/StratumErrorMessage.ts b/src/models/stratum-messages/StratumErrorMessage.ts new file mode 100644 index 0000000..8cddc75 --- /dev/null +++ b/src/models/stratum-messages/StratumErrorMessage.ts @@ -0,0 +1,25 @@ +import { ValidationError } from 'class-validator'; + +import { eStratumErrorCode } from '../enums/eStratumErrorCode'; + +export class StratumErrorMessage { + + constructor( + private id: number = null, + private errorCode: eStratumErrorCode, + private errorMessage: string, + private validationErrors: ValidationError[] + ) { + + } + + public response(): string { + + const error = { + id: this.id, + result: null, + error: [this.errorCode, this.errorMessage, this.validationErrors.reduce((pre, cur) => `${pre}, ${cur.value}`, '')] + } + return JSON.stringify(error + '\n'); + } +} \ No newline at end of file