This commit is contained in:
Matthew Little 2014-01-08 14:05:51 -05:00
parent 6d01d3bfff
commit 64ee9c76c5
4 changed files with 38 additions and 17 deletions

View File

@ -31,6 +31,8 @@ Requirements
* coin daemon * coin daemon
* PostgreSQL * PostgreSQL
* npm dependencies * npm dependencies
* [scrypt256-hash](https://github.com/zone117x/node-scrypt256-hash)
* [quark-hash](https://github.com/zone117x/node-quark-hash)
* [binpack](https://github.com/russellmcc/node-binpack) * [binpack](https://github.com/russellmcc/node-binpack)
* [bignum](https://github.com/justmoon/node-bignum) * [bignum](https://github.com/justmoon/node-bignum)
* [buffertools] (https://github.com/bnoordhuis/node-buffertools) * [buffertools] (https://github.com/bnoordhuis/node-buffertools)
@ -44,6 +46,7 @@ Credits
* [viperaus](https://github.com/viperaus/stratum-mining) - scrypt adaptions to python code * [viperaus](https://github.com/viperaus/stratum-mining) - scrypt adaptions to python code
* [ahmedbodi](https://github.com/ahmedbodi/stratum-mining) - more algo adaptions to python code * [ahmedbodi](https://github.com/ahmedbodi/stratum-mining) - more algo adaptions to python code
* [TheSeven](https://github.com/TheSeven) - being super knowledgeable & helpful * [TheSeven](https://github.com/TheSeven) - being super knowledgeable & helpful
* [vekexasia](https://github.com/vekexasia) - bug fixes
Donations Donations
--------- ---------

View File

@ -53,15 +53,28 @@ var BlockTemplate = module.exports = function BlockTemplate(jobId, rpcData, publ
]); ]);
}; };
this.serializeHeader = function(merkleRootBuffer, nTimeBuffer, nonceBuffer){ this.serializeHeader = function(merkleRoot, nTime, nonce){
return Buffer.concat([
var header = new Buffer(80);
var position = 0;
header.writeUInt32BE(nonce, position);
header.write(rpcData.bits, position += 4, 4, 'hex');
header.writeUInt32BE(nTime, position += 4);
header.write(merkleRoot, position += 4, 32, 'hex');
header.write(rpcData.previousblockhash, position += 32, 32, 'hex');
header.writeUInt32BE(rpcData.version, position + 32);
//var header = reverseBuffer(header);
return header;
/*return Buffer.concat([
binpack.packInt32(rpcData.version, 'big'), binpack.packInt32(rpcData.version, 'big'),
this.previousHashBuffer, this.previousHashBuffer,
merkleRootBuffer, merkleRootBuffer,
nTimeBuffer, nTimeBuffer,
new Buffer(this.rpcData.bits, 'hex'), new Buffer(this.rpcData.bits, 'hex'),
nonceBuffer nonceBuffer
]); ]);*/
}; };
this.serializeBlock = function(header, coinbase){ this.serializeBlock = function(header, coinbase){

View File

@ -2,6 +2,8 @@ var events = require('events');
var binpack = require('binpack'); var binpack = require('binpack');
var bignum = require('bignum'); var bignum = require('bignum');
var scrypt = require('scrypt-hash');
var quark = require('quark-hash');
var util = require('./util.js'); var util = require('./util.js');
var blockTemplate = require('./blockTemplate.js'); var blockTemplate = require('./blockTemplate.js');
@ -98,25 +100,30 @@ var JobManager = module.exports = function JobManager(options){
var extraNonce2Buffer = new Buffer(extraNonce2, 'hex'); var extraNonce2Buffer = new Buffer(extraNonce2, 'hex');
var nTimeBuffer = new Buffer(nTime, 'hex');
var nonceBuffer = new Buffer(nonce, 'hex');
var coinbaseBuffer = job.serializeCoinbase(extraNonce1Buffer, extraNonce2Buffer); var coinbaseBuffer = job.serializeCoinbase(extraNonce1Buffer, extraNonce2Buffer);
var coinbaseHash = util.doublesha(coinbaseBuffer); var coinbaseHash = util.doublesha(coinbaseBuffer);
var merkleRootBuffer = job.merkleTree.withFirst(coinbaseHash); var merkleRoot = job.merkleTree.withFirst(coinbaseHash).toString('hex');
for (var i = 0; i < 8; i++)
merkleRootBuffer.writeUInt32LE(merkleRootBuffer.readUInt32BE(i * 4), i * 4);
var headerBuffer = job.serializeHeader(merkleRoot, nTime, nonce);
var headerHash = (function(){
switch(options.algorithm){
case 'sha256':
return util.doublesha(headerBuffer);
case 'scrypt':
return scrypt.digest(headerBuffer);
case 'scrypt-jane':
return scryptJane.digest(headerBuffer);
case 'quark':
return quark.digest(headerBuffer);
}
})();
var headerBuffer = job.serializeHeader(merkleRootBuffer, nTimeBuffer, nonceBuffer);
for (var i = 0; i < 20; i++) headerBuffer.writeUInt32LE(headerBuffer.readUInt32BE(i * 4), i * 4);
var headerHash = util.doublesha(headerBuffer);
var headerBigNum = bignum.fromBuffer(headerHash); var headerBigNum = bignum.fromBuffer(headerHash);
var targetUser = bignum.fromBuffer( var targetUser = bignum.fromBuffer(
new Buffer('00000000ffff0000000000000000000000000000000000000000000000000000', 'hex') new Buffer('00000000ffff0000000000000000000000000000000000000000000000000000', 'hex')
).div(difficulty); ).div(difficulty);
@ -128,7 +135,6 @@ var JobManager = module.exports = function JobManager(options){
_this.emit('blockFound', job.serializeBlock(headerBuffer, coinbaseBuffer)); _this.emit('blockFound', job.serializeBlock(headerBuffer, coinbaseBuffer));
} }
return {result: true}; return {result: true};
}; };
}; };

View File

@ -37,9 +37,8 @@ exports.doublesha = function(buffer){
exports.reverseBuffer = function(buff){ exports.reverseBuffer = function(buff){
var reversed = new Buffer(buff.length); var reversed = new Buffer(buff.length);
for (var i = 0; i < buff.length; i++){ for (var i = buff.length - 1; i >= 0; i--)
reversed[buff.length - (i + 1)] = buff[i]; reversed[buff.length - i - 1] = buff[i];
}
return reversed; return reversed;
}; };