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