From e38f4e1edc0e5f8dfb92ea500b8c325797514d63 Mon Sep 17 00:00:00 2001 From: Ben Wilson Date: Sun, 30 Jul 2023 17:59:51 -0400 Subject: [PATCH] block copy --- src/models/MiningJob.ts | 10 ++++++---- src/models/StratumV1Client.spec.ts | 2 +- src/models/StratumV1Client.ts | 6 +++--- src/services/stratum-v1-jobs.service.ts | 9 +++------ 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/models/MiningJob.ts b/src/models/MiningJob.ts index 387ad1f..f6ac6b0 100644 --- a/src/models/MiningJob.ts +++ b/src/models/MiningJob.ts @@ -58,9 +58,11 @@ export class MiningJob { } - public copyAndUpdateBlock(jobTemplate: { data: IJobTemplate, blockBuffer: Buffer }, versionMask: number, nonce: number, extraNonce: string, extraNonce2: string, timestamp: number): bitcoinjs.Block { + public copyAndUpdateBlock(jobTemplate: IJobTemplate, versionMask: number, nonce: number, extraNonce: string, extraNonce2: string, timestamp: number): bitcoinjs.Block { + + const testBlock = Object.assign(new bitcoinjs.Block(), jobTemplate.block); + - const testBlock = bitcoinjs.Block.fromBuffer(jobTemplate.blockBuffer); testBlock.transactions[0] = this.coinbaseTransaction; @@ -77,12 +79,12 @@ export class MiningJob { testBlock.transactions[0].ins[0].script = Buffer.from(`${nonceScript.substring(0, nonceScript.length - 16)}${extraNonce}${extraNonce2}`, 'hex'); //recompute the root since we updated the coinbase script with the nonces - testBlock.merkleRoot = this.calculateMerkleRootHash(testBlock.transactions[0].getHash(false), jobTemplate.data.merkle_branch); + testBlock.merkleRoot = this.calculateMerkleRootHash(testBlock.transactions[0].getHash(false), jobTemplate.merkle_branch); testBlock.timestamp = timestamp; - return testBlock; + return testBlock as any; } diff --git a/src/models/StratumV1Client.spec.ts b/src/models/StratumV1Client.spec.ts index 30a5b17..8a02f55 100644 --- a/src/models/StratumV1Client.spec.ts +++ b/src/models/StratumV1Client.spec.ts @@ -255,7 +255,7 @@ describe('StratumV1Client', () => { socketEmitter(Buffer.from(MockRecording1.MINING_SUBMIT)); jest.useRealTimers(); - await new Promise((r) => setTimeout(r, 100)); + await new Promise((r) => setTimeout(r, 1000)); expect(promiseSocket.write).lastCalledWith(`{\"id\":5,\"error\":null,\"result\":true}\n`); diff --git a/src/models/StratumV1Client.ts b/src/models/StratumV1Client.ts index c746fd1..5dad297 100644 --- a/src/models/StratumV1Client.ts +++ b/src/models/StratumV1Client.ts @@ -382,19 +382,19 @@ export class StratumV1Client extends EasyUnsubscribe { if (submissionDifficulty >= this.sessionDifficulty) { - if (submissionDifficulty >= jobTemplate.data.blockData.networkDifficulty) { + if (submissionDifficulty >= jobTemplate.blockData.networkDifficulty) { console.log('!!! BLOCK FOUND !!!'); const blockHex = updatedJobBlock.toHex(false); const result = await this.bitcoinRpcService.SUBMIT_BLOCK(blockHex); await this.blocksService.save({ - height: jobTemplate.data.blockData.height, + height: jobTemplate.blockData.height, minerAddress: this.clientAuthorization.address, worker: this.clientAuthorization.worker, sessionId: this.extraNonceAndSessionId, blockData: blockHex }); - await this.notificationService.notifySubscribersBlockFound(this.clientAuthorization.address, jobTemplate.data.blockData.height, updatedJobBlock, result); + await this.notificationService.notifySubscribersBlockFound(this.clientAuthorization.address, jobTemplate.blockData.height, updatedJobBlock, result); //success if (result == null) { await this.addressSettingsService.resetBestDifficultyAndShares(); diff --git a/src/services/stratum-v1-jobs.service.ts b/src/services/stratum-v1-jobs.service.ts index e128ab5..92de707 100644 --- a/src/services/stratum-v1-jobs.service.ts +++ b/src/services/stratum-v1-jobs.service.ts @@ -34,7 +34,7 @@ export class StratumV1JobsService { public jobs: MiningJob[] = []; - public blocks: { [id: number]: { data: IJobTemplate, blockBuffer: Buffer } } = {}; + public blocks: { [id: number]: IJobTemplate } = {}; private currentBlockTemplate$: Observable<{ blockTemplate: IBlockTemplate }>; @@ -131,10 +131,7 @@ export class StratumV1JobsService { this.blocks = {}; this.jobs = []; } - this.blocks[data.blockData.id] = { - data, - blockBuffer: data.block.toBuffer() - }; + this.blocks[data.blockData.id] = data; }), shareReplay({ refCount: true, bufferSize: 1 }) ) @@ -157,7 +154,7 @@ export class StratumV1JobsService { return bytes; } - public getJobTemplateById(jobTemplateId: string): { data: IJobTemplate, blockBuffer: Buffer } { + public getJobTemplateById(jobTemplateId: string): IJobTemplate { return this.blocks[jobTemplateId]; }