Files
public-pool/src/models/stratum-messages/SubscriptionMessage.ts
T
2026-05-06 18:18:34 -04:00

55 lines
1.7 KiB
TypeScript

import { Expose, Transform } from 'class-transformer';
import { IsArray, IsString, MaxLength } from 'class-validator';
import { eRequestMethod } from '../enums/eRequestMethod';
import { EXTRANONCE2_SIZE_BYTES } from '../stratum.constants';
import { StratumBaseMessage } from './StratumBaseMessage';
export class SubscriptionMessage extends StratumBaseMessage {
@IsArray()
params: string[];
@Expose()
@IsString()
@MaxLength(128)
@Transform(({ value, key, obj, type }) => {
return obj?.params?.[0] == null ? 'unknown' : SubscriptionMessage.refineUserAgent(obj.params[0]);
})
public userAgent: string;
constructor() {
super();
this.method = eRequestMethod.SUBSCRIBE;
}
public response(clientId: string) {
return {
id: this.id,
error: null,
result: [
[
['mining.notify', clientId]
],
clientId, //Extranonce1 - Hex-encoded, per-connection unique string which will be used for coinbase serialization later. Keep it safe!
EXTRANONCE2_SIZE_BYTES //Extranonce2_size - Represents expected length of extranonce2 which will be generated by the miner.
]
}
}
public static refineUserAgent(userAgent: string): string {
// return userAgent;
userAgent = userAgent.split(' ')[0].split('/')[0].split('V')[0].split('-')[0];
if (userAgent.includes('bosminer') || userAgent.includes('bOS')) {
userAgent = 'Braiins OS';
} else if (userAgent.includes('cpuminer')) {
userAgent = 'cpuminer';
}
return userAgent;
}
}