From 10f6ffa91fb3d3ecb19066834e64cba28738f45c Mon Sep 17 00:00:00 2001 From: Ben Wilson Date: Tue, 8 Aug 2023 23:39:52 -0400 Subject: [PATCH] defer session create --- src/ORM/client/client.entity.ts | 4 ++-- src/models/StratumV1Client.ts | 16 ++++++++++------ src/services/stratum-v1-jobs.service.ts | 2 -- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/ORM/client/client.entity.ts b/src/ORM/client/client.entity.ts index ddaf54a..4210036 100644 --- a/src/ORM/client/client.entity.ts +++ b/src/ORM/client/client.entity.ts @@ -4,7 +4,6 @@ import { DateTimeTransformer } from '../utils/DateTimeTransformer'; import { TrackedEntity } from '../utils/TrackedEntity.entity'; @Entity() -@Index(['address', 'clientName', 'sessionId'], { unique: true }) export class ClientEntity extends TrackedEntity { @PrimaryGeneratedColumn() @@ -20,7 +19,8 @@ export class ClientEntity extends TrackedEntity { @Column({ length: 128, type: 'varchar', nullable: true }) userAgent: string; - @Column({ length: 8, type: 'varchar' }) + @Index() + @Column({ length: 8, type: 'varchar', unique: true }) sessionId: string; @Column({ type: 'datetime', transformer: new DateTimeTransformer() }) diff --git a/src/models/StratumV1Client.ts b/src/models/StratumV1Client.ts index 3f871af..c655e66 100644 --- a/src/models/StratumV1Client.ts +++ b/src/models/StratumV1Client.ts @@ -111,12 +111,7 @@ export class StratumV1Client { 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}, ${this.socket.remoteAddress}:${this.socket.remotePort}`); - } + switch (parsedMessage.method) { case eRequestMethod.SUBSCRIBE: { @@ -133,6 +128,14 @@ export class StratumV1Client { const errors = await validate(subscriptionMessage, validatorOptions); if (errors.length === 0) { + + 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}, ${this.socket.remoteAddress}:${this.socket.remotePort}`); + } + this.clientSubscription = subscriptionMessage; const success = await this.write(JSON.stringify(this.clientSubscription.response(this.extraNonceAndSessionId)) + '\n'); if (!success) { @@ -274,6 +277,7 @@ export class StratumV1Client { if (this.stratumInitialized == false) { console.log('Submit before initalized'); await this.socket.end(); + return; } diff --git a/src/services/stratum-v1-jobs.service.ts b/src/services/stratum-v1-jobs.service.ts index f121eaf..415f6ef 100644 --- a/src/services/stratum-v1-jobs.service.ts +++ b/src/services/stratum-v1-jobs.service.ts @@ -42,8 +42,6 @@ export class StratumV1JobsService { private readonly bitcoinRpcService: BitcoinRpcService ) { - console.log(this.delay) - this.newMiningJob$ = combineLatest([this.bitcoinRpcService.newBlock$, interval(60000).pipe(delay(this.delay), startWith(-1))]).pipe( switchMap(([miningInfo, interval]) => { return from(this.bitcoinRpcService.getBlockTemplate()).pipe(map((blockTemplate) => {