From 4bad0176130c833b538d13c84ba601b2dc662dbd Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 27 Feb 2014 01:26:43 -0700 Subject: [PATCH] Added block/network difficulty to pool on share emitter --- README.md | 7 +++++-- lib/blockTemplate.js | 4 ++++ lib/jobManager.js | 15 +++++++++++++++ lib/pool.js | 4 ++-- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 30faf58..cfe79f0 100644 --- a/README.md +++ b/README.md @@ -32,15 +32,18 @@ Features * __POW__ (proof-of-work) & __POS__ (proof-of-stake) support * Transaction messages support * Vardiff (variable difficulty / share limiter) -* Supports algorithms: +* Supports the hashing algorithms: * __SHA256__ (Bitcoin, Freicoin, Peercoin/PPCoin, Terracoin, etc..) * __Scrypt__ (Litecoin, Dogecoin, Feathercoin, etc..) - * __Scrypt-jane__ (YaCoin, CopperBars, Pennies, Tickets, etc..) + * __Scrypt-Jane__ (YaCoin, CopperBars, Pennies, Tickets, etc..) * __Quark__ (Quarkcoin [QRK]) * __X11__ (Darkcoin [DRK]) #### Under development +* [Scrypt-VRT](https://github.com/scr34m/vertcoin_scrypt) (Scrypt-Adaptive-Nfactor) (Vertcoin) algorithm +* [Skein](https://github.com/ahmedbodi/stratum-mining-maxcoin/blob/master/lib/skeinhash.py) (Skeincoin) algorithm +* [Max](https://github.com/Prydie/maxcoin-hash-python) algorithm * P2P functionality for highly efficient block updates from daemon as a peer node * Clustering to take advantage of multiple CPU cores diff --git a/lib/blockTemplate.js b/lib/blockTemplate.js index 3253178..dd22867 100644 --- a/lib/blockTemplate.js +++ b/lib/blockTemplate.js @@ -5,6 +5,7 @@ var transactions = require('./transactions.js'); var util = require('./util.js'); +var maxDifficulty = 0x00000000ffff0000000000000000000000000000000000000000000000000000; /** * The BlockTemplate class holds a single job. @@ -35,6 +36,7 @@ var BlockTemplate = module.exports = function BlockTemplate(jobId, rpcData, publ this.rpcData = rpcData; this.jobId = jobId; + /* Use the 'target' field if available, but some daemons only return the 'bits' field */ @@ -42,6 +44,8 @@ var BlockTemplate = module.exports = function BlockTemplate(jobId, rpcData, publ bignum.fromBuffer(new Buffer(rpcData.target, 'hex')) : util.bignumFromBits(rpcData.bits); + this.difficulty = Math.round(maxDifficulty / this.target.toNumber() * 1e8) / 1e8; + this.prevHashReversed = util.reverseByteOrder(new Buffer(rpcData.previousblockhash, 'hex')).toString('hex'); this.transactionData = Buffer.concat(rpcData.transactions.map(function(tx){ return new Buffer(tx.data, 'hex'); diff --git a/lib/jobManager.js b/lib/jobManager.js index edcccba..ebc058b 100644 --- a/lib/jobManager.js +++ b/lib/jobManager.js @@ -61,6 +61,7 @@ var JobManager = module.exports = function JobManager(options){ var diffDividend = bignum((function(){ switch(options.algorithm){ case 'sha256': + case 'skein': return '00000000ffff0000000000000000000000000000000000000000000000000000'; case 'scrypt': case 'scrypt-jane': @@ -68,6 +69,8 @@ var JobManager = module.exports = function JobManager(options){ case 'quark': case 'x11': return '000000ffff000000000000000000000000000000000000000000000000000000'; + case 'max': + return 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000' } })(), 16); @@ -95,6 +98,17 @@ var JobManager = module.exports = function JobManager(options){ return function(){ return x11.digest.apply(this, arguments); } + case 'max': + return function(){ + //https://github.com/phusion/node-sha3 + //https://github.com/Prydie/maxcoin-hash-python + //https://github.com/ahmedbodi/stratum-mining-maxcoin/blob/master/lib/template_registry.py + } + case 'skein': + return function(){ + //https://github.com/cruzrr/insanehash + //https://github.com/Crypto-Expert/stratum-mining/blob/master/lib/skein.py + } } })(); @@ -246,6 +260,7 @@ var JobManager = module.exports = function JobManager(options){ worker: workerName, difficulty: difficulty, height: job.rpcData.height, + difficulty: job.difficulty, solution: blockHash }, blockHex); diff --git a/lib/pool.js b/lib/pool.js index 781b4ed..22b476b 100644 --- a/lib/pool.js +++ b/lib/pool.js @@ -29,7 +29,7 @@ var pool = module.exports = function pool(options, authorizeFn){ var _this = this; var publicKeyBuffer; - var maxDifficulty = 0x00000000ffff0000000000000000000000000000000000000000000000000000; + var emitLog = function(key, text) { _this.emit('log', 'debug' , key, text); }; var emitWarningLog = function(key, text) { _this.emit('log', 'warning', key, text); }; @@ -368,7 +368,7 @@ var pool = module.exports = function pool(options, authorizeFn){ var processedNewBlock = _this.jobManager.processTemplate(result, publicKeyBuffer); if (processedNewBlock && options.varDiff.enabled) - _this.varDiff.setNetworkDifficulty(maxDifficulty / parseInt(result.target, 16)); + _this.varDiff.setNetworkDifficulty(_this.jobManager.currentJob.difficulty); callback(null, result); callback = function(){};