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
* PostgreSQL
* 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)
* [bignum](https://github.com/justmoon/node-bignum)
* [buffertools] (https://github.com/bnoordhuis/node-buffertools)
@ -44,6 +46,7 @@ Credits
* [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
* [TheSeven](https://github.com/TheSeven) - being super knowledgeable & helpful
* [vekexasia](https://github.com/vekexasia) - bug fixes
Donations
---------

View File

@ -53,15 +53,28 @@ var BlockTemplate = module.exports = function BlockTemplate(jobId, rpcData, publ
]);
};
this.serializeHeader = function(merkleRootBuffer, nTimeBuffer, nonceBuffer){
return Buffer.concat([
this.serializeHeader = function(merkleRoot, nTime, nonce){
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'),
this.previousHashBuffer,
merkleRootBuffer,
nTimeBuffer,
new Buffer(this.rpcData.bits, 'hex'),
nonceBuffer
]);
]);*/
};
this.serializeBlock = function(header, coinbase){

View File

@ -2,6 +2,8 @@ var events = require('events');
var binpack = require('binpack');
var bignum = require('bignum');
var scrypt = require('scrypt-hash');
var quark = require('quark-hash');
var util = require('./util.js');
var blockTemplate = require('./blockTemplate.js');
@ -98,25 +100,30 @@ var JobManager = module.exports = function JobManager(options){
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 coinbaseHash = util.doublesha(coinbaseBuffer);
var merkleRootBuffer = job.merkleTree.withFirst(coinbaseHash);
for (var i = 0; i < 8; i++)
merkleRootBuffer.writeUInt32LE(merkleRootBuffer.readUInt32BE(i * 4), i * 4);
var merkleRoot = job.merkleTree.withFirst(coinbaseHash).toString('hex');
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 targetUser = bignum.fromBuffer(
new Buffer('00000000ffff0000000000000000000000000000000000000000000000000000', 'hex')
).div(difficulty);
@ -128,7 +135,6 @@ var JobManager = module.exports = function JobManager(options){
_this.emit('blockFound', job.serializeBlock(headerBuffer, coinbaseBuffer));
}
return {result: true};
};
};

View File

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