updated
This commit is contained in:
parent
6d01d3bfff
commit
64ee9c76c5
@ -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
|
||||
---------
|
||||
|
||||
@ -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){
|
||||
|
||||
@ -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};
|
||||
};
|
||||
};
|
||||
|
||||
5
util.js
5
util.js
@ -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;
|
||||
};
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user