Skip to content

Commit

Permalink
Merge pull request #20 from ROZ-MOFUMOFU-ME/dev
Browse files Browse the repository at this point in the history
Update Node.js versions in .travis.yml
  • Loading branch information
ROZ-MOFUMOFU-ME authored Nov 9, 2024
2 parents 66fb793 + 046cc97 commit 844dd06
Show file tree
Hide file tree
Showing 11 changed files with 824 additions and 171 deletions.
9 changes: 4 additions & 5 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
language: node_js
node_js:
- '8'
- '9'
- '10'
- '11'
- '12'
- '16'
- '18'
- '20'
- '22'
30 changes: 30 additions & 0 deletions lib/algoProperties.js
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,14 @@ var algos = module.exports = global.algos = {
}
}
},
x16rv2: {
multiplier: Math.pow(2, 8),
hash: function () {
return function () {
return multiHashing.x16rv2.apply(this, arguments);
}
}
},
x17: {
hash: function () {
return function () {
Expand Down Expand Up @@ -184,6 +192,14 @@ var algos = module.exports = global.algos = {
}
}
},
blake2s: {
multiplier: Math.pow(2, 0),
hash: function () {
return function () {
return multiHashing.blake2s.apply(this, arguments);
}
}
},
skein: {
hash: function () {
return function () {
Expand All @@ -199,6 +215,13 @@ var algos = module.exports = global.algos = {
}
}
},
groestlmyriad: {
hash: function () {
return function () {
return multiHashing.groestlmyriad.apply(this, arguments);
}
}
},
fugue: {
multiplier: Math.pow(2, 8),
hash: function () {
Expand Down Expand Up @@ -229,6 +252,13 @@ var algos = module.exports = global.algos = {
}
}
},
minotaur: {
hash: function () {
return function () {
return multiHashing.minotaur.apply(this, arguments);
}
}
},
lyra2: {
multiplier: Math.pow(2, 8),
hash: function () {
Expand Down
4 changes: 2 additions & 2 deletions lib/blockTemplate.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ var BlockTemplate = module.exports = function BlockTemplate(jobId, rpcData, pool
var headerSize;
if (rpcData.version == 5 && rpcData.finalsaplingroothash) {
headerSize = 112;
/*} else if (rpcData.hashstateroot && rpcData.hashutxoroot) {
headerSize = 181;*/
/*} else if (rpcData.hashstateroot && rpcData.hashutxoroot) {
headerSize = 181;*/
} else {
headerSize = 80;
}
Expand Down
2 changes: 1 addition & 1 deletion lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ exports.daemon = require('./daemon.js');
exports.varDiff = require('./varDiff.js');


exports.createPool = function(poolOptions, authorizeFn){
exports.createPool = function (poolOptions, authorizeFn) {
var newPool = new pool(poolOptions, authorizeFn);
return newPool;
};
72 changes: 42 additions & 30 deletions lib/jobManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,18 +78,29 @@ var JobManager = module.exports = function JobManager(options) {

var blockHasher = (function () {
switch (options.coin.algorithm) {
case 'scrypt':
if (options.coin.reward === 'POS') {
return function (d) {
return util.reverseBuffer(hashDigest.apply(this, arguments));
};
case 'blake':
case 'blake2s':
case 'neoscrypt':
case 'lyra2':
case 'lyra2re2':
case 'allium':
case 'lyra2v2':
case 'lyra2v3':
case 'qubit':
case 'skein':
case 'x11':
case 'x16r':
case 'x16rv2':
case 'x17':
case 'odo':
case 'minotaur':
case 'groestl':
case 'groestlmyriad':
return function () {
return util.reverseBuffer(util.sha256d.apply(this, arguments));
}
case 'scrypt':
case 'scrypt-og':
if (options.coin.reward === 'POS') {
return function (d) {
return util.reverseBuffer(hashDigest.apply(this, arguments));
};
}
case 'scrypt-jane':
if (options.coin.reward === 'POS') {
return function (d) {
Expand Down Expand Up @@ -194,23 +205,24 @@ var JobManager = module.exports = function JobManager(options) {

};

this.processShare = function (jobId, previousDifficulty, difficulty, extraNonce1, extraNonce2, nTime, nonce, ipAddress, port, workerName, versionMask) {
this.processShare = function (jobId, previousDifficulty, difficulty, extraNonce1, extraNonce2, nTime, nonce, ipAddress, port, workerName, versionMask, isSoloMining) {
var shareError = function (error) {
_this.emit('share', {
job: jobId,
ip: ipAddress,
worker: workerName,
difficulty: difficulty,
isSoloMining: isSoloMining,
error: error[1]
});
return { error: error, result: null };
};

var submitTime = Date.now() / 1000 | 0;

if (extraNonce2.length / 2 !== _this.extraNonce2Size)
return shareError([20, 'incorrect size of extranonce2']);

var job = this.validJobs[jobId];
if (typeof job === 'undefined' || job.jobId != jobId) {
return shareError([21, 'job not found']);
Expand All @@ -228,30 +240,30 @@ var JobManager = module.exports = function JobManager(options) {
if (!job.registerSubmit(extraNonce1, extraNonce2, nTime, nonce)) {
return shareError([22, 'duplicate share']);
}

var extraNonce1Buffer = Buffer.from(extraNonce1, 'hex');
var extraNonce2Buffer = Buffer.from(extraNonce2, 'hex');

var coinbaseBuffer = job.serializeCoinbase(extraNonce1Buffer, extraNonce2Buffer);
var coinbaseHash = coinbaseHasher(coinbaseBuffer);

var merkleRoot = util.reverseBuffer(job.merkleTree.withFirst(coinbaseHash)).toString('hex');

var headerBuffer = job.serializeHeader(merkleRoot, nTime, nonce, versionMask);
var headerHash = hashDigest(headerBuffer, nTimeInt);
var headerBigNum = BigInt('0x' + util.reverseBuffer(headerHash).toString('hex'));

var blockHashInvalid;
var blockHash;
var blockHex;

var algorithm = job.algorithm || options.coin.algorithm;
var algoProps = algos[algorithm];

if (!algoProps) {
return shareError([24, `Algorithm properties not found for ${algorithm}`]);
}

var diff1;
try {
// Ensure algoProps.diff is defined; if not, set a default value
Expand All @@ -260,23 +272,23 @@ var JobManager = module.exports = function JobManager(options) {
return shareError([25, 'Cannot convert diff to BigInt: ' + e.message]);
}
var multiplier = algoProps.multiplier || 1;

var shareDiff = Number(diff1) / Number(headerBigNum) * multiplier;

var blockDiffAdjusted = job.difficulty * multiplier;

blockHexInvalid = job.serializeBlock(headerBuffer, coinbaseBuffer).toString('hex');

blockHashInvalid = blockHasher(headerBuffer, nTime).toString('hex');

// Check if share is a block candidate (matched network difficulty)
if (job.target >= headerBigNum) {
blockHex = job.serializeBlock(headerBuffer, coinbaseBuffer).toString('hex');
blockHash = blockHasher(headerBuffer, nTime).toString('hex');
} else {
if (options.emitInvalidBlockHashes)
blockHashInvalid = util.reverseBuffer(util.sha256d(headerBuffer)).toString('hex');

// Check if share didn't reach the miner's difficulty
if (shareDiff / difficulty < 0.99) {
// Check if share matched a previous difficulty from before a vardiff retarget
Expand All @@ -287,7 +299,7 @@ var JobManager = module.exports = function JobManager(options) {
}
}
}

_this.emit('share', {
job: jobId,
ip: ipAddress,
Expand All @@ -302,7 +314,7 @@ var JobManager = module.exports = function JobManager(options) {
blockHash: blockHash,
blockHashInvalid: blockHashInvalid
}, blockHex);

return { result: true, error: null, blockHash: blockHash };
};
};
Expand Down
18 changes: 9 additions & 9 deletions lib/merkleTree.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,23 @@ Ported from https://github.com/slush0/stratum-mining/blob/master/lib/merkletree.

var util = require('./util.js');

var MerkleTree = module.exports = function MerkleTree(data){
var MerkleTree = module.exports = function MerkleTree(data) {

function merkleJoin(h1, h2){
function merkleJoin(h1, h2) {
var joined = Buffer.concat([h1, h2]);
var dhashed = util.sha256d(joined);
return dhashed;
}

function calculateSteps(data){
function calculateSteps(data) {
var L = data;
var steps = [];
var PreL = [null];
var StartL = 2;
var Ll = L.length;

if (Ll > 1){
while (true){
if (Ll > 1) {
while (true) {

if (Ll === 1)
break;
Expand All @@ -34,23 +34,23 @@ var MerkleTree = module.exports = function MerkleTree(data){

var Ld = [];
var r = util.range(StartL, Ll, 2);
r.forEach(function(i){
r.forEach(function (i) {
Ld.push(merkleJoin(L[i], L[i + 1]));
});
L = PreL.concat(Ld);
Ll = L.length;
}
}
return steps;
return steps;
}

this.data = data;
this.steps = calculateSteps(data);

}
MerkleTree.prototype = {
withFirst: function(f){
this.steps.forEach(function(s){
withFirst: function (f) {
this.steps.forEach(function (s) {
f = util.sha256d(Buffer.concat([f, s]));
});
return f;
Expand Down
Loading

0 comments on commit 844dd06

Please sign in to comment.