From 602449625b36326643ea79e2608f464c42aefbca Mon Sep 17 00:00:00 2001 From: Ben Wilson Date: Thu, 13 Jul 2023 09:28:34 -0400 Subject: [PATCH] extra to coinbase script, low diff support --- src/ORM/client/client.entity.ts | 3 ++- src/models/MiningJob.ts | 6 +++--- src/models/StratumV1Client.ts | 2 +- src/models/StratumV1ClientStatistics.ts | 16 +++++----------- 4 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/ORM/client/client.entity.ts b/src/ORM/client/client.entity.ts index a82d8a9..bb2a9ab 100644 --- a/src/ORM/client/client.entity.ts +++ b/src/ORM/client/client.entity.ts @@ -1,9 +1,10 @@ -import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; +import { Column, Entity, Index, PrimaryGeneratedColumn } from 'typeorm'; import { DateTimeTransformer } from '../utils/DateTimeTransformer'; import { TrackedEntity } from '../utils/TrackedEntity.entity'; @Entity() +@Index(['address', 'clientName', 'sessionId'], { unique: true }) export class ClientEntity extends TrackedEntity { @PrimaryGeneratedColumn() diff --git a/src/models/MiningJob.ts b/src/models/MiningJob.ts index 130e916..ddd0b18 100644 --- a/src/models/MiningJob.ts +++ b/src/models/MiningJob.ts @@ -49,9 +49,9 @@ export class MiningJob { // 32-byte - Commitment hash: Double-SHA256(witness root hash|witness reserved value) // 39th byte onwards: Optional data with no consensus meaning - coinbaseTransaction.ins[0].script = Buffer.concat([Buffer.from([littleEndianBlockHeight.byteLength]), littleEndianBlockHeight, Buffer.alloc(8, 0)]); - //const extra = Buffer.from('\\public-pool\\'); - //coinbaseTransaction.addOutput(bitcoinjs.script.compile([bitcoinjs.opcodes.OP_RETURN, Buffer.concat([segwitMagicBits, this.block.witnessCommit, extra])]), 0); + const extra = Buffer.from('\\public-pool\\'); + coinbaseTransaction.ins[0].script = Buffer.concat([Buffer.from([littleEndianBlockHeight.byteLength]), littleEndianBlockHeight, extra, Buffer.alloc(8, 0)]); + coinbaseTransaction.addOutput(bitcoinjs.script.compile([bitcoinjs.opcodes.OP_RETURN, Buffer.concat([segwitMagicBits, this.block.witnessCommit])]), 0); // get the non-witness coinbase tx diff --git a/src/models/StratumV1Client.ts b/src/models/StratumV1Client.ts index 19a38a6..edfbdda 100644 --- a/src/models/StratumV1Client.ts +++ b/src/models/StratumV1Client.ts @@ -367,7 +367,7 @@ export class StratumV1Client extends EasyUnsubscribe { worker: this.clientAuthorization.worker, sessionId: this.extraNonce, blockData: blockHex - }) + }); await this.notificationService.notifySubscribersBlockFound(this.clientAuthorization.address, job.blockTemplate.height, updatedJobBlock, result); } try { diff --git a/src/models/StratumV1ClientStatistics.ts b/src/models/StratumV1ClientStatistics.ts index 74a1ba9..693f74a 100644 --- a/src/models/StratumV1ClientStatistics.ts +++ b/src/models/StratumV1ClientStatistics.ts @@ -64,6 +64,9 @@ export class StratumV1ClientStatistics { } private nearestPowerOfTwo(val) { + if (val === 0) { + return null; + } let x = val | (val >> 1); x = x | (x >> 2); x = x | (x >> 4); @@ -71,17 +74,8 @@ export class StratumV1ClientStatistics { x = x | (x >> 16); x = x | (x >> 32); const res = x - (x >> 1); - if (res < 1) { - if (val < 0.01) { - return 0.01; - } - let y = (val * 100) | ((val * 100) >> 1); - y = y | (y >> 2); - y = y | (y >> 4); - y = y | (y >> 8); - y = y | (y >> 16); - y = y | (y >> 32); - return (y - (y >> 1)) / 100; + if (res == 0) { + return this.nearestPowerOfTwo(val * 100) / 100; } return res; }