Use truncated diff1 (max difficulty) for algos by default. Report difficulty of low-diff shares.

This commit is contained in:
Matt 2014-04-01 16:31:34 -06:00
parent bbb759cf37
commit 1e9bd77072
2 changed files with 49 additions and 9 deletions

View File

@ -1,3 +1,4 @@
var bignum = require('bignum');
var multiHashing = require('multi-hashing'); var multiHashing = require('multi-hashing');
var util = require('./util.js'); var util = require('./util.js');
@ -99,9 +100,8 @@ var algos = module.exports = global.algos = {
shift: 24, shift: 24,
multiplier: Math.pow(2, 8), multiplier: Math.pow(2, 8),
hash: function(){ hash: function(){
return function(data, nTime){ return function(data){
var f = Buffer.concat([data, new Buffer(nTime.toString(16), 'hex')]); return multiHashing.keccak(data);
return multiHashing.keccak(f);
} }
} }
}, },
@ -173,7 +173,46 @@ function ShiftMax256Right(shiftRight){
return new Buffer(octets);; return new Buffer(octets);;
} }
function BufferToCompact(startingBuff){
var bigNum = bignum.fromBuffer(startingBuff);
var buff = bigNum.toBuffer();
buff = buff.readUInt8(0) > 0x7f ? Buffer.concat([new Buffer([0x00]), buff]) : buff;
buff = Buffer.concat([new Buffer([buff.length]), buff]);
var compact = buff.slice(0, 4);
return compact;
}
function ConvertBitsToHex(bitsBuff){
var numBytes = bitsBuff.readUInt8(0);
var bigBits = bignum.fromBuffer(bitsBuff.slice(1));
var target = bigBits.mul(
bignum(2).pow(
bignum(8).mul(
numBytes - 3
)
)
);
var resultBuff = target.toBuffer();
var buff256 = new Buffer(32);
buff256.fill(0);
resultBuff.copy(buff256, buff256.length - resultBuff.length);
var hexResult = buff256.toString('hex');
return hexResult;
}
for (var algo in algos){ for (var algo in algos){
if (!algos[algo].diff) if (!algos[algo].diff) {
algos[algo].diff = ShiftMax256Right(algos[algo].shift); var nonTruncatedDiff = ShiftMax256Right(algos[algo].shift);
var compactBits = BufferToCompact(nonTruncatedDiff);
var truncatedDiff = ConvertBitsToHex(compactBits);
algos[algo].diff = truncatedDiff;
}
} }

View File

@ -56,9 +56,9 @@ var JobManager = module.exports = function JobManager(maxDifficulty, hashDigest,
//public members //public members
this.extraNonceCounter = new ExtraNonceCounter(options.instanceId); this.extraNonceCounter = new ExtraNonceCounter(options.instanceId);
this.extraNoncePlaceholder = new Buffer('f000000ff111111f', 'hex'); this.extraNoncePlaceholder = new Buffer('f000000ff111111f', 'hex');
this.extraNonce2Size = this.extraNoncePlaceholder.length - this.extraNonceCounter.size; this.extraNonce2Size = this.extraNoncePlaceholder.length - this.extraNonceCounter.size;
this.currentJob; this.currentJob;
this.validJobs = {}; this.validJobs = {};
@ -182,6 +182,7 @@ var JobManager = module.exports = function JobManager(maxDifficulty, hashDigest,
var blockHex; var blockHex;
if (job.target.ge(headerBigNum)){ if (job.target.ge(headerBigNum)){
blockHex = job.serializeBlock(headerBuffer, coinbaseBuffer).toString('hex'); blockHex = job.serializeBlock(headerBuffer, coinbaseBuffer).toString('hex');
blockHash = util.reverseBuffer(util.sha256d(headerBuffer)).toString('hex'); blockHash = util.reverseBuffer(util.sha256d(headerBuffer)).toString('hex');
@ -189,8 +190,8 @@ var JobManager = module.exports = function JobManager(maxDifficulty, hashDigest,
else { else {
var targetUser = maxDifficulty.div(difficulty); var targetUser = maxDifficulty.div(difficulty);
if (headerBigNum.gt(targetUser)){ if (headerBigNum.gt(targetUser)){
var lowPercent = headerBigNum.sub(targetUser).div(headerBigNum).mul(100).toNumber().toFixed(10); var shareDiff = maxDifficulty.div(headerBigNum).toString();
return shareError([23, 'low difficulty share, need to be ' + lowPercent + '% higher']); return shareError([23, 'low difficulty share of ' + shareDiff]);
} }
} }
if (!!blockHex) { if (!!blockHex) {