Merge remote-tracking branch 'origin/master' into bluecircle
This commit is contained in:
commit
df5ed6d29b
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
node_modules/
|
node_modules/
|
||||||
.idea/
|
.idea/
|
||||||
|
config.json
|
||||||
21
README.md
21
README.md
@ -103,7 +103,7 @@ npm update
|
|||||||
#### 2) Configuration
|
#### 2) Configuration
|
||||||
|
|
||||||
##### Portal config
|
##### Portal config
|
||||||
Inside the `config.json` file, ensure the default configuration will work for your environment.
|
Inside the `config_example.json` file, ensure the default configuration will work for your environment, then copy the file to `config.json`.
|
||||||
|
|
||||||
Explanation for each field:
|
Explanation for each field:
|
||||||
````javascript
|
````javascript
|
||||||
@ -156,7 +156,7 @@ Here is an example of the required fields:
|
|||||||
````
|
````
|
||||||
|
|
||||||
For additional documentation how to configure coins *(especially important for scrypt-n and scrypt-jane coins)*
|
For additional documentation how to configure coins *(especially important for scrypt-n and scrypt-jane coins)*
|
||||||
see [these instructions](https://github.com/zone117x/node-stratum-pool/edit/master/README.md#module-usage).
|
see [these instructions](//github.com/zone117x/node-stratum-pool#module-usage).
|
||||||
|
|
||||||
|
|
||||||
##### Pool config
|
##### Pool config
|
||||||
@ -204,16 +204,16 @@ Description of options:
|
|||||||
/* (2% default) What percent fee your pool takes from the block reward. */
|
/* (2% default) What percent fee your pool takes from the block reward. */
|
||||||
"feePercent": 0.02,
|
"feePercent": 0.02,
|
||||||
|
|
||||||
/* Name of the account to use when moving coin profit within daemon wallet. */
|
/* Name of the daemon account to use when moving coin profit within daemon wallet. */
|
||||||
"feeCollectAccount": "feesCollected",
|
"feeCollectAccount": "feesCollected",
|
||||||
|
|
||||||
/* Your address that receives pool revenue from fees. */
|
/* Your address that receives pool revenue from fees. */
|
||||||
"feeReceiveAddress": "LZz44iyF4zLCXJTU8RxztyyJZBntdS6fvv",
|
"feeReceiveAddress": "LZz44iyF4zLCXJTU8RxztyyJZBntdS6fvv",
|
||||||
|
|
||||||
/* (Not implemented yet) How many coins from fee revenue must accumulate on top of the
|
/* How many coins from fee revenue must accumulate on top of the
|
||||||
minimum reserve amount in order to trigger withdrawal to fee address. The higher
|
minimum reserve amount in order to trigger withdrawal to fee address. The higher
|
||||||
this threshold, the less of your profit goes to transactions fees. */
|
this threshold, the less of your profit goes to transactions fees. */
|
||||||
//"feeWithdrawalThreshold": 5,
|
"feeWithdrawalThreshold": 5,
|
||||||
|
|
||||||
/* This daemon is used to send out payments. It MUST be for the daemon that owns the
|
/* This daemon is used to send out payments. It MUST be for the daemon that owns the
|
||||||
configured 'address' that receives the block rewards, otherwise the daemon will not
|
configured 'address' that receives the block rewards, otherwise the daemon will not
|
||||||
@ -232,7 +232,9 @@ Description of options:
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"mpos": { //Enabled this and shares will be inserted into share table in a MySQL database
|
/* Enabled mpos and shares will be inserted into share table in a MySQL database. You may
|
||||||
|
also want to use the "emitInvalidBlockHashes" option below if you require it. */
|
||||||
|
"mpos": {
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"host": "localhost", //MySQL db host
|
"host": "localhost", //MySQL db host
|
||||||
"port": 3306, //MySQL db port
|
"port": 3306, //MySQL db port
|
||||||
@ -255,6 +257,10 @@ Description of options:
|
|||||||
job broadcast. */
|
job broadcast. */
|
||||||
"txRefreshInterval": 20000,
|
"txRefreshInterval": 20000,
|
||||||
|
|
||||||
|
/* Some miner software is bugged and will consider the pool offline if it doesn't receive
|
||||||
|
anything for around a minute, so every time we broadcast jobs, set a timeout to rebroadcast
|
||||||
|
in this many seconds unless we find a new job. Set to zero or remove to disable this. */
|
||||||
|
"jobRebroadcastTimeout": 55,
|
||||||
|
|
||||||
//instanceId: 37, //Recommend not using this because a crypto-random one will be generated
|
//instanceId: 37, //Recommend not using this because a crypto-random one will be generated
|
||||||
|
|
||||||
@ -263,6 +269,9 @@ Description of options:
|
|||||||
detects those and disconnects them. */
|
detects those and disconnects them. */
|
||||||
"connectionTimeout": 600, //Remove workers that haven't been in contact for this many seconds
|
"connectionTimeout": 600, //Remove workers that haven't been in contact for this many seconds
|
||||||
|
|
||||||
|
/* Sometimes you want the block hashes even for shares that aren't block candidates. */
|
||||||
|
"emitInvalidBlockHashes": false,
|
||||||
|
|
||||||
/* If a worker is submitting a high threshold of invalid shares we can temporarily ban them
|
/* If a worker is submitting a high threshold of invalid shares we can temporarily ban them
|
||||||
to reduce system/network load. Also useful to fight against flooding attacks. */
|
to reduce system/network load. Also useful to fight against flooding attacks. */
|
||||||
"banning": {
|
"banning": {
|
||||||
|
|||||||
5
coins/365coin.json
Normal file
5
coins/365coin.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"name": "365coin",
|
||||||
|
"symbol": "365",
|
||||||
|
"algorithm": "keccak"
|
||||||
|
}
|
||||||
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Helixcoin",
|
"name": "Helixcoin",
|
||||||
"symbol": "HXC",
|
"symbol": "HXC",
|
||||||
"algorithm": "max"
|
"algorithm": "keccak"
|
||||||
}
|
}
|
||||||
25
init.js
25
init.js
@ -3,15 +3,18 @@ var path = require('path');
|
|||||||
var os = require('os');
|
var os = require('os');
|
||||||
var cluster = require('cluster');
|
var cluster = require('cluster');
|
||||||
|
|
||||||
var async = require('async');
|
var async = require('async');
|
||||||
var posix = require('posix');
|
var posix = require('posix');
|
||||||
var PoolLogger = require('./libs/logUtil.js');
|
var PoolLogger = require('./libs/logUtil.js');
|
||||||
var BlocknotifyListener = require('./libs/blocknotifyListener.js');
|
var BlocknotifyListener = require('./libs/blocknotifyListener.js');
|
||||||
var RedisBlocknotifyListener = require('./libs/redisblocknotifyListener.js');
|
var RedisBlocknotifyListener = require('./libs/redisblocknotifyListener.js');
|
||||||
var WorkerListener = require('./libs/workerListener.js');
|
var WorkerListener = require('./libs/workerListener.js');
|
||||||
var PoolWorker = require('./libs/poolWorker.js');
|
var PoolWorker = require('./libs/poolWorker.js');
|
||||||
var PaymentProcessor = require('./libs/paymentProcessor.js');
|
var PaymentProcessor = require('./libs/paymentProcessor.js');
|
||||||
var Website = require('./libs/website.js');
|
var Website = require('./libs/website.js');
|
||||||
|
|
||||||
|
var algos = require('stratum-pool/lib/algoProperties.js');
|
||||||
|
|
||||||
JSON.minify = JSON.minify || require("node-json-minify");
|
JSON.minify = JSON.minify || require("node-json-minify");
|
||||||
|
|
||||||
var portalConfig = JSON.parse(JSON.minify(fs.readFileSync("config.json", {encoding: 'utf8'})));
|
var portalConfig = JSON.parse(JSON.minify(fs.readFileSync("config.json", {encoding: 'utf8'})));
|
||||||
@ -88,6 +91,12 @@ var buildPoolConfigs = function(){
|
|||||||
var coinProfile = JSON.parse(JSON.minify(fs.readFileSync(coinFilePath, {encoding: 'utf8'})));
|
var coinProfile = JSON.parse(JSON.minify(fs.readFileSync(coinFilePath, {encoding: 'utf8'})));
|
||||||
poolOptions.coin = coinProfile;
|
poolOptions.coin = coinProfile;
|
||||||
configs[poolOptions.coin.name] = poolOptions;
|
configs[poolOptions.coin.name] = poolOptions;
|
||||||
|
|
||||||
|
if (!(coinProfile.algorithm in algos)){
|
||||||
|
logger.error('Master', coinProfile.name, 'Cannot run a pool for unsupported algorithm "' + coinProfile.algorithm + '"');
|
||||||
|
delete configs[poolOptions.coin.name];
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
return configs;
|
return configs;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -70,7 +70,7 @@ module.exports = function(logger, poolConfig){
|
|||||||
isValidBlock ? 'Y' : 'N',
|
isValidBlock ? 'Y' : 'N',
|
||||||
shareData.difficulty,
|
shareData.difficulty,
|
||||||
typeof(shareData.error) === 'undefined' ? null : shareData.error,
|
typeof(shareData.error) === 'undefined' ? null : shareData.error,
|
||||||
typeof(shareData.solution) === 'undefined' ? '' : shareData.solution
|
shareData.blockHash ? shareData.blockHash : (shareData.blockHashInvalid ? shareData.blockHashInvalid : '')
|
||||||
];
|
];
|
||||||
connection.query(
|
connection.query(
|
||||||
'INSERT INTO `shares` SET time = NOW(), rem_host = ?, username = ?, our_result = ?, upstream_result = ?, difficulty = ?, reason = ?, solution = ?',
|
'INSERT INTO `shares` SET time = NOW(), rem_host = ?, username = ?, our_result = ?, upstream_result = ?, difficulty = ?, reason = ?, solution = ?',
|
||||||
|
|||||||
@ -123,9 +123,6 @@ function SetupForPool(logger, poolOptions, setupFinished){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Number.toFixed gives us the decimal places we want, but as a string. parseFloat turns it back into number
|
/* Number.toFixed gives us the decimal places we want, but as a string. parseFloat turns it back into number
|
||||||
we don't care about trailing zeros in this case. */
|
we don't care about trailing zeros in this case. */
|
||||||
var toPrecision = function(value, precision){
|
var toPrecision = function(value, precision){
|
||||||
@ -163,7 +160,7 @@ function SetupForPool(logger, poolOptions, setupFinished){
|
|||||||
var details = r.split(':');
|
var details = r.split(':');
|
||||||
return {
|
return {
|
||||||
category: details[0].category,
|
category: details[0].category,
|
||||||
solution: details[0],
|
blockHash: details[0],
|
||||||
txHash: details[1],
|
txHash: details[1],
|
||||||
height: details[2],
|
height: details[2],
|
||||||
reward: details[3],
|
reward: details[3],
|
||||||
@ -194,20 +191,20 @@ function SetupForPool(logger, poolOptions, setupFinished){
|
|||||||
txDetails.forEach(function(tx, i){
|
txDetails.forEach(function(tx, i){
|
||||||
var round = rounds[i];
|
var round = rounds[i];
|
||||||
|
|
||||||
if (tx.error && tx.error.code === -5){
|
if (tx.error && tx.error.code === -5 || round.blockHash !== tx.result.blockhash){
|
||||||
|
|
||||||
/* Block was dropped from coin daemon even after it happily accepted it earlier. */
|
/* Block was dropped from coin daemon even after it happily accepted it earlier. */
|
||||||
|
|
||||||
//If we find another block at the same height then this block was drop-kicked orphaned
|
//If we find another block at the same height then this block was drop-kicked orphaned
|
||||||
var dropKicked = !!rounds.filter(function(r){
|
var dropKicked = rounds.filter(function(r){
|
||||||
return r.height === round.height && r.solution !== round.solution && r.category !== 'dropkicked';
|
return r.height === round.height && r.blockHash !== round.blockHash && r.category !== 'dropkicked';
|
||||||
}).length;
|
}).length > 0;
|
||||||
|
|
||||||
if (dropKicked){
|
if (dropKicked){
|
||||||
logger.warning(logSystem, logComponent,
|
logger.warning(logSystem, logComponent,
|
||||||
'A block was drop-kicked orphaned'
|
'A block was drop-kicked orphaned'
|
||||||
+ ' - we found a better block at the same height, solution '
|
+ ' - we found a better block at the same height, blockHash '
|
||||||
+ round.solution + " round " + round.height);
|
+ round.blockHash + " round " + round.height);
|
||||||
round.category = 'dropkicked';
|
round.category = 'dropkicked';
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -301,7 +298,7 @@ function SetupForPool(logger, poolOptions, setupFinished){
|
|||||||
|
|
||||||
if (!workerShares){
|
if (!workerShares){
|
||||||
logger.error(logSystem, logComponent, 'No worker shares for round: '
|
logger.error(logSystem, logComponent, 'No worker shares for round: '
|
||||||
+ round.height + ' solution: ' + round.solution);
|
+ round.height + ' blockHash: ' + round.blockHash);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -489,6 +486,7 @@ function SetupForPool(logger, poolOptions, setupFinished){
|
|||||||
if (toBePaid !== 0)
|
if (toBePaid !== 0)
|
||||||
finalRedisCommands.push(['hincrbyfloat', coin + '_stats', 'totalPaid', (toBePaid / magnitude).toFixed(coinPrecision)]);
|
finalRedisCommands.push(['hincrbyfloat', coin + '_stats', 'totalPaid', (toBePaid / magnitude).toFixed(coinPrecision)]);
|
||||||
|
|
||||||
|
finalRedisCommands.push(['bgsave']);
|
||||||
|
|
||||||
callback(null, magnitude, workerPayments, finalRedisCommands);
|
callback(null, magnitude, workerPayments, finalRedisCommands);
|
||||||
|
|
||||||
@ -536,8 +534,10 @@ function SetupForPool(logger, poolOptions, setupFinished){
|
|||||||
finalizeRedisTx();
|
finalizeRedisTx();
|
||||||
|
|
||||||
var totalWorkers = Object.keys(workerPayments).length;
|
var totalWorkers = Object.keys(workerPayments).length;
|
||||||
logger.debug(logSystem, logComponent, 'Payments sent, a total of ' + totalAmountUnits + ' ' + poolOptions.coin.symbol +
|
|
||||||
' was sent to ' + totalWorkers + ' miners');
|
logger.debug(logSystem, logComponent, 'Payments sent, a total of ' + totalAmountUnits
|
||||||
|
+ ' ' + poolOptions.coin.symbol + ' was sent to ' + totalWorkers + ' miners');
|
||||||
|
|
||||||
daemon.cmd('gettransaction', [results[0].response], function(results){
|
daemon.cmd('gettransaction', [results[0].response], function(results){
|
||||||
if (results[0].error){
|
if (results[0].error){
|
||||||
callback('Check finished - error with gettransaction ' + JSON.stringify(results[0].error));
|
callback('Check finished - error with gettransaction ' + JSON.stringify(results[0].error));
|
||||||
@ -595,11 +595,12 @@ function SetupForPool(logger, poolOptions, setupFinished){
|
|||||||
|
|
||||||
daemon.cmd('sendmany', [processingConfig.feeCollectAccount, withdrawal], function(results){
|
daemon.cmd('sendmany', [processingConfig.feeCollectAccount, withdrawal], function(results){
|
||||||
if (results[0].error){
|
if (results[0].error){
|
||||||
logger.debug(logSystem, logComponent, 'Profit withdrawal finished - error with sendmany ' + JSON.stringify(results[0].error));
|
logger.debug(logSystem, logComponent, 'Profit withdrawal finished - error with sendmany '
|
||||||
|
+ JSON.stringify(results[0].error));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
logger.debug(logSystem, logComponent, 'Profit sent, a total of ' + withdrawalAmount + ' ' + poolOptions.coin.symbol +
|
logger.debug(logSystem, logComponent, 'Profit sent, a total of ' + withdrawalAmount
|
||||||
' was sent to ' + processingConfig.feeReceiveAddress);
|
+ ' ' + poolOptions.coin.symbol + ' was sent to ' + processingConfig.feeReceiveAddress);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@ -118,11 +118,11 @@ module.exports = function(logger){
|
|||||||
|
|
||||||
var shareData = JSON.stringify(data);
|
var shareData = JSON.stringify(data);
|
||||||
|
|
||||||
if (data.solution && !isValidBlock)
|
if (data.blockHash && !isValidBlock)
|
||||||
logger.debug(logSystem, logComponent, logSubCat, 'We thought a block solution was found but it was rejected by the daemon, share data: ' + shareData);
|
logger.debug(logSystem, logComponent, logSubCat, 'We thought a block was found but it was rejected by the daemon, share data: ' + shareData);
|
||||||
|
|
||||||
else if (isValidBlock)
|
else if (isValidBlock)
|
||||||
logger.debug(logSystem, logComponent, logSubCat, 'Block solution found: ' + data.solution);
|
logger.debug(logSystem, logComponent, logSubCat, 'Block found: ' + data.blockHash);
|
||||||
|
|
||||||
|
|
||||||
if (isValidShare)
|
if (isValidShare)
|
||||||
|
|||||||
@ -61,10 +61,10 @@ module.exports = function(logger, poolConfig){
|
|||||||
|
|
||||||
if (isValidBlock){
|
if (isValidBlock){
|
||||||
redisCommands.push(['rename', coin + '_shares:roundCurrent', coin + '_shares:round' + shareData.height]);
|
redisCommands.push(['rename', coin + '_shares:roundCurrent', coin + '_shares:round' + shareData.height]);
|
||||||
redisCommands.push(['sadd', coin + '_blocksPending', [shareData.solution, shareData.tx, shareData.height, shareData.reward].join(':')]);
|
redisCommands.push(['sadd', coin + '_blocksPending', [shareData.blockHash, shareData.txHash, shareData.height, shareData.reward].join(':')]);
|
||||||
redisCommands.push(['hincrby', coin + '_stats', 'validBlocks', 1]);
|
redisCommands.push(['hincrby', coin + '_stats', 'validBlocks', 1]);
|
||||||
}
|
}
|
||||||
else if (shareData.solution){
|
else if (shareData.blockHash){
|
||||||
redisCommands.push(['hincrby', coin + '_stats', 'invalidBlocks', 1]);
|
redisCommands.push(['hincrby', coin + '_stats', 'invalidBlocks', 1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,65 +0,0 @@
|
|||||||
{
|
|
||||||
"enabled": false,
|
|
||||||
"coin": "bitcoin.json",
|
|
||||||
|
|
||||||
"shareProcessing": {
|
|
||||||
"internal": {
|
|
||||||
"enabled": true,
|
|
||||||
"validateWorkerAddress": true,
|
|
||||||
"paymentInterval": 60,
|
|
||||||
"minimumPayment": 100.001,
|
|
||||||
"minimumReserve": 10,
|
|
||||||
"feePercent": 0.02,
|
|
||||||
"feeCollectAccount": "feesCollected",
|
|
||||||
"feeReceiveAddress": "msjLr1XfpB6aAL1wi8e2CDnDSNhF4WrJ5n",
|
|
||||||
"feeWithdrawalThreshold": 5,
|
|
||||||
"daemon": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 18332,
|
|
||||||
"user": "testuser",
|
|
||||||
"password": "testpass"
|
|
||||||
},
|
|
||||||
"redis": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 6379
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mpos": {
|
|
||||||
"enabled": false,
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 3306,
|
|
||||||
"user": "me",
|
|
||||||
"password": "mypass",
|
|
||||||
"database": "ltc",
|
|
||||||
"stratumAuth": "password"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"address": "mtCiLWzBy9EpuxzkLwizPYiPFDy69HTd4b",
|
|
||||||
"blockRefreshInterval": 1000,
|
|
||||||
"txRefreshInterval": 20000,
|
|
||||||
"connectionTimeout": 600,
|
|
||||||
|
|
||||||
"banning": {
|
|
||||||
"enabled": true,
|
|
||||||
"time": 600,
|
|
||||||
"invalidPercent": 50,
|
|
||||||
"checkThreshold": 500,
|
|
||||||
"purgeInterval": 300
|
|
||||||
},
|
|
||||||
|
|
||||||
"ports": {
|
|
||||||
"6774": {
|
|
||||||
"diff": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"daemons": [
|
|
||||||
{
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 18332,
|
|
||||||
"user": "testuser",
|
|
||||||
"password": "testpass"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,65 +0,0 @@
|
|||||||
{
|
|
||||||
"enabled": false,
|
|
||||||
"coin": "darkcoin.json",
|
|
||||||
|
|
||||||
"shareProcessing": {
|
|
||||||
"internal": {
|
|
||||||
"enabled": true,
|
|
||||||
"validateWorkerAddress": true,
|
|
||||||
"paymentInterval": 60,
|
|
||||||
"minimumPayment": 100.001,
|
|
||||||
"minimumReserve": 10,
|
|
||||||
"feePercent": 0.02,
|
|
||||||
"feeCollectAccount": "feesCollected",
|
|
||||||
"feeReceiveAddress": "XfkoYutJ8KYtLxZ4TgnMqC6SCmxuc3LEDY",
|
|
||||||
"feeWithdrawalThreshold": 5,
|
|
||||||
"daemon": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 18342,
|
|
||||||
"user": "darkcoinrpc1",
|
|
||||||
"password": "testpass"
|
|
||||||
},
|
|
||||||
"redis": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 6379
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mpos": {
|
|
||||||
"enabled": false,
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 3306,
|
|
||||||
"user": "me",
|
|
||||||
"password": "mypass",
|
|
||||||
"database": "ltc",
|
|
||||||
"stratumAuth": "password"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"address": "XfkoYutJ8KYtLxZ4TgnMqC6SCmxuc3LEDY",
|
|
||||||
"blockRefreshInterval": 1000,
|
|
||||||
"txRefreshInterval": 20000,
|
|
||||||
"connectionTimeout": 600,
|
|
||||||
|
|
||||||
"banning": {
|
|
||||||
"enabled": true,
|
|
||||||
"time": 600,
|
|
||||||
"invalidPercent": 50,
|
|
||||||
"checkThreshold": 500,
|
|
||||||
"purgeInterval": 300
|
|
||||||
},
|
|
||||||
|
|
||||||
"ports": {
|
|
||||||
"4073": {
|
|
||||||
"diff": 0.002
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"daemons": [
|
|
||||||
{
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 18342,
|
|
||||||
"user": "darkcoinrpc1",
|
|
||||||
"password": "testpass"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,58 +0,0 @@
|
|||||||
{
|
|
||||||
"enabled": false,
|
|
||||||
"coin": "execoin.json",
|
|
||||||
|
|
||||||
"shareProcessing": {
|
|
||||||
"internal": {
|
|
||||||
"enabled": true,
|
|
||||||
"validateWorkerAddress": true,
|
|
||||||
"paymentInterval": 60,
|
|
||||||
"minimumPayment": 100.001,
|
|
||||||
"minimumReserve": 10,
|
|
||||||
"feePercent": 0.02,
|
|
||||||
"feeCollectAccount": "feesCollected",
|
|
||||||
"feeReceiveAddress": "ESfYVyfh1yZx1AkqJnu6rJje5nWE3f2C3r",
|
|
||||||
"feeWithdrawalThreshold": 5,
|
|
||||||
"daemon": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 19847,
|
|
||||||
"user": "testuser",
|
|
||||||
"password": "testpass"
|
|
||||||
},
|
|
||||||
"redis": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 6379
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mpos": {
|
|
||||||
"enabled": false,
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 3306,
|
|
||||||
"user": "me",
|
|
||||||
"password": "mypass",
|
|
||||||
"database": "ltc",
|
|
||||||
"stratumAuth": "password"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"address": "EabPhjVKcmus3LKFViAcwq3dfo8kzqpMkQ",
|
|
||||||
"blockRefreshInterval": 1000,
|
|
||||||
"txRefreshInterval": 20000,
|
|
||||||
"connectionTimeout": 600,
|
|
||||||
|
|
||||||
|
|
||||||
"ports": {
|
|
||||||
"6368": {
|
|
||||||
"diff": 8
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"daemons": [
|
|
||||||
{
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 19847,
|
|
||||||
"user": "testuser",
|
|
||||||
"password": "testpass"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,56 +0,0 @@
|
|||||||
{
|
|
||||||
"enabled": false,
|
|
||||||
"coin": "galleon.json",
|
|
||||||
|
|
||||||
"address": "GRAiuGCWLrL8Psdr6pkhLpxrQGHdYfrSEz",
|
|
||||||
"blockRefreshInterval": 1000,
|
|
||||||
"txRefreshInterval": 20000,
|
|
||||||
"connectionTimeout": 600,
|
|
||||||
|
|
||||||
"shareProcessing": {
|
|
||||||
"internal": {
|
|
||||||
"enabled": true,
|
|
||||||
"validateWorkerAddress": true,
|
|
||||||
"paymentInterval": 60,
|
|
||||||
"minimumPayment": 100.001,
|
|
||||||
"minimumReserve": 10,
|
|
||||||
"feePercent": 0.02,
|
|
||||||
"feeCollectAccount": "feesCollected",
|
|
||||||
"feeReceiveAddress": "GRAiuGCWLrL8Psdr6pkhLpxrQGHdYfrSEz",
|
|
||||||
"feeWithdrawalThreshold": 5,
|
|
||||||
"daemon": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 19632,
|
|
||||||
"user": "testuser",
|
|
||||||
"password": "testpass"
|
|
||||||
},
|
|
||||||
"redis": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 6379
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"ports": {
|
|
||||||
"3537": {
|
|
||||||
"diff": 4
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"daemons": [
|
|
||||||
{
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 19632,
|
|
||||||
"user": "testuser",
|
|
||||||
"password": "testpass"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
|
|
||||||
"p2p": {
|
|
||||||
"enabled": false,
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 19333,
|
|
||||||
"protocolVersion": 70002,
|
|
||||||
"magic": "fcc1b7dc"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,57 +0,0 @@
|
|||||||
{
|
|
||||||
"enabled": false,
|
|
||||||
"coin": "helixcoin.json",
|
|
||||||
|
|
||||||
"shareProcessing": {
|
|
||||||
"internal": {
|
|
||||||
"enabled": true,
|
|
||||||
"validateWorkerAddress": true,
|
|
||||||
"paymentInterval": 60,
|
|
||||||
"minimumPayment": 70,
|
|
||||||
"minimumReserve": 10,
|
|
||||||
"feePercent": 0.05,
|
|
||||||
"feeCollectAccount": "feesCollected",
|
|
||||||
"feeReceiveAddress": "mppaGeNaSbG1Q7S6V3gL5uJztMhucgL9Vh",
|
|
||||||
"feeWithdrawalThreshold": 5,
|
|
||||||
"daemon": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 19332,
|
|
||||||
"user": "litecoinrpc",
|
|
||||||
"password": "testnet"
|
|
||||||
},
|
|
||||||
"redis": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 6379
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"address": "H9xyrh45LzLX4uXCP6jG6ZGrWho8srUgiG",
|
|
||||||
"blockRefreshInterval": 1000,
|
|
||||||
"txRefreshInterval": 20000,
|
|
||||||
"connectionTimeout": 600,
|
|
||||||
|
|
||||||
|
|
||||||
"ports": {
|
|
||||||
"3737": {
|
|
||||||
"diff": 0.2
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"daemons": [
|
|
||||||
{
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 16385,
|
|
||||||
"user": "testuser",
|
|
||||||
"password": "testpass"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
|
|
||||||
"p2p": {
|
|
||||||
"enabled": false,
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 19333,
|
|
||||||
"protocolVersion": 70002,
|
|
||||||
"magic": "fcc1b7dc"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,66 +0,0 @@
|
|||||||
{
|
|
||||||
"enabled": false,
|
|
||||||
"coin": "hirocoin.json",
|
|
||||||
|
|
||||||
"shareProcessing": {
|
|
||||||
"internal": {
|
|
||||||
"enabled": true,
|
|
||||||
"validateWorkerAddress": true,
|
|
||||||
"paymentInterval": 60,
|
|
||||||
"minimumPayment": 100.001,
|
|
||||||
"minimumReserve": 10,
|
|
||||||
"feePercent": 0.02,
|
|
||||||
"feeCollectAccount": "feesCollected",
|
|
||||||
"feeReceiveAddress": "HR6WNSR19kvaXSbwKymrba6uNx36BBjinS",
|
|
||||||
"feeWithdrawalThreshold": 5,
|
|
||||||
"daemon": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 19389,
|
|
||||||
"user": "hirocoin",
|
|
||||||
"password": "testpass"
|
|
||||||
},
|
|
||||||
"redis": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 6379
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mpos": {
|
|
||||||
"enabled": false,
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 3306,
|
|
||||||
"user": "me",
|
|
||||||
"password": "mypass",
|
|
||||||
"database": "ltc",
|
|
||||||
"stratumAuth": "password"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
"address": "HR6WNSR19kvaXSbwKymrba6uNx36BBjinS",
|
|
||||||
"blockRefreshInterval": 1000,
|
|
||||||
"txRefreshInterval": 20000,
|
|
||||||
"connectionTimeout": 600,
|
|
||||||
|
|
||||||
"banning": {
|
|
||||||
"enabled": true,
|
|
||||||
"time": 600,
|
|
||||||
"invalidPercent": 50,
|
|
||||||
"checkThreshold": 500,
|
|
||||||
"purgeInterval": 300
|
|
||||||
},
|
|
||||||
|
|
||||||
"ports": {
|
|
||||||
"3073": {
|
|
||||||
"diff": 0.002
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"daemons": [
|
|
||||||
{
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 19389,
|
|
||||||
"user": "hirocoin",
|
|
||||||
"password": "testpass"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,65 +0,0 @@
|
|||||||
{
|
|
||||||
"enabled": false,
|
|
||||||
"coin": "hobonickels.json",
|
|
||||||
|
|
||||||
"shareProcessing": {
|
|
||||||
"internal": {
|
|
||||||
"enabled": false,
|
|
||||||
"validateWorkerAddress": true,
|
|
||||||
"paymentInterval": 60,
|
|
||||||
"minimumPayment": 100.001,
|
|
||||||
"minimumReserve": 10,
|
|
||||||
"feePercent": 0.02,
|
|
||||||
"feeReceiveAddress": "EhA4HXF7VPWfnV8TXerAP6p12BiEpXbiYR",
|
|
||||||
"feeWithdrawalThreshold": 5,
|
|
||||||
"daemon": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 19339,
|
|
||||||
"user": "hobonickelsrpc",
|
|
||||||
"password": "testpass"
|
|
||||||
},
|
|
||||||
"redis": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 6379
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mpos": {
|
|
||||||
"enabled": false,
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 3306,
|
|
||||||
"user": "me",
|
|
||||||
"password": "mypass",
|
|
||||||
"database": "ltc",
|
|
||||||
"stratumAuth": "password"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
"address": "EzGiarU2S56jyRkYpS7FKssXCS6AAJChdU",
|
|
||||||
"blockRefreshInterval": 1000,
|
|
||||||
"txRefreshInterval": 20000,
|
|
||||||
"connectionTimeout": 600,
|
|
||||||
|
|
||||||
"banning": {
|
|
||||||
"enabled": true,
|
|
||||||
"time": 600,
|
|
||||||
"invalidPercent": 50,
|
|
||||||
"checkThreshold": 500,
|
|
||||||
"purgeInterval": 300
|
|
||||||
},
|
|
||||||
|
|
||||||
"ports": {
|
|
||||||
"3033": {
|
|
||||||
"diff": 8
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"daemons": [
|
|
||||||
{
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 19339,
|
|
||||||
"user": "hobonickelsrpc",
|
|
||||||
"password": "testpass"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -6,7 +6,7 @@
|
|||||||
"internal": {
|
"internal": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"validateWorkerAddress": true,
|
"validateWorkerAddress": true,
|
||||||
"paymentInterval": 60,
|
"paymentInterval": 20,
|
||||||
"minimumPayment": 70,
|
"minimumPayment": 70,
|
||||||
"minimumReserve": 10,
|
"minimumReserve": 10,
|
||||||
"feePercent": 0.05,
|
"feePercent": 0.05,
|
||||||
@ -35,10 +35,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
"address": "n4jSe18kZMCdGcZqaYprShXW6EH1wivUK1",
|
"address": "n4jSe18kZMCdGcZqaYprShXW6EH1wivUK1",
|
||||||
"blockRefreshInterval": 1000,
|
"blockRefreshInterval": 1000,
|
||||||
"txRefreshInterval": 20000,
|
"txRefreshInterval": 20000,
|
||||||
|
"jobRebroadcastTimeout": 55,
|
||||||
"connectionTimeout": 600,
|
"connectionTimeout": 600,
|
||||||
|
|
||||||
"banning": {
|
"banning": {
|
||||||
@ -50,7 +50,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
"ports": {
|
"ports": {
|
||||||
"3008":{
|
"3008": {
|
||||||
"diff": 8,
|
"diff": 8,
|
||||||
"varDiff": {
|
"varDiff": {
|
||||||
"minDiff": 8,
|
"minDiff": 8,
|
||||||
|
|||||||
@ -1,48 +0,0 @@
|
|||||||
{
|
|
||||||
"enabled": false,
|
|
||||||
"coin": "maxcoin.json",
|
|
||||||
|
|
||||||
"address": "tKWkadAkT2vqK6v2PHLJmV1RTVvF7XZEgN",
|
|
||||||
"blockRefreshInterval": 1000,
|
|
||||||
"txRefreshInterval": 20000,
|
|
||||||
"connectionTimeout": 600,
|
|
||||||
|
|
||||||
"shareProcessing": {
|
|
||||||
"internal": {
|
|
||||||
"enabled": true,
|
|
||||||
"validateWorkerAddress": true,
|
|
||||||
"paymentInterval": 60,
|
|
||||||
"minimumPayment": 100.001,
|
|
||||||
"minimumReserve": 10,
|
|
||||||
"feePercent": 0.02,
|
|
||||||
"feeCollectAccount": "feesCollected",
|
|
||||||
"feeReceiveAddress": "tQ2TKXXk2jh7EX2RJQ4ZxpZYEdRx7fdiaw",
|
|
||||||
"feeWithdrawalThreshold": 5,
|
|
||||||
"daemon": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 27932,
|
|
||||||
"user": "testuser",
|
|
||||||
"password": "testpass"
|
|
||||||
},
|
|
||||||
"redis": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 6379
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"ports": {
|
|
||||||
"5547": {
|
|
||||||
"diff": 2
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"daemons": [
|
|
||||||
{
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 27932,
|
|
||||||
"user": "testuser",
|
|
||||||
"password": "testpass"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,65 +0,0 @@
|
|||||||
{
|
|
||||||
"enabled": false,
|
|
||||||
"coin": "ultracoin.json",
|
|
||||||
|
|
||||||
"shareProcessing": {
|
|
||||||
"internal": {
|
|
||||||
"enabled": true,
|
|
||||||
"validateWorkerAddress": true,
|
|
||||||
"paymentInterval": 60,
|
|
||||||
"minimumPayment": 100.001,
|
|
||||||
"minimumReserve": 10,
|
|
||||||
"feePercent": 0.02,
|
|
||||||
"feeCollectAccount": "feesCollected",
|
|
||||||
"feeReceiveAddress": "UZ3cz7EKjC4eRKbhiN9tA6xcaDGSVoESc8",
|
|
||||||
"feeWithdrawalThreshold": 5,
|
|
||||||
"daemon": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 18365,
|
|
||||||
"user": "testuser",
|
|
||||||
"password": "testpass"
|
|
||||||
},
|
|
||||||
"redis": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 6379
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mpos": {
|
|
||||||
"enabled": false,
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 3306,
|
|
||||||
"user": "me",
|
|
||||||
"password": "mypass",
|
|
||||||
"database": "ltc",
|
|
||||||
"stratumAuth": "password"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"address": "UhyKVr4m516TPsrLwm91pYL4f99VGrJ1oC",
|
|
||||||
"blockRefreshInterval": 1000,
|
|
||||||
"txRefreshInterval": 20000,
|
|
||||||
"connectionTimeout": 600,
|
|
||||||
|
|
||||||
"banning": {
|
|
||||||
"enabled": true,
|
|
||||||
"time": 600,
|
|
||||||
"invalidPercent": 50,
|
|
||||||
"checkThreshold": 500,
|
|
||||||
"purgeInterval": 300
|
|
||||||
},
|
|
||||||
|
|
||||||
"ports": {
|
|
||||||
"6856": {
|
|
||||||
"diff": 8
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"daemons": [
|
|
||||||
{
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 18365,
|
|
||||||
"user": "testuser",
|
|
||||||
"password": "testpass"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,58 +0,0 @@
|
|||||||
{
|
|
||||||
"enabled": false,
|
|
||||||
"coin": "vertcoin.json",
|
|
||||||
|
|
||||||
"shareProcessing": {
|
|
||||||
"internal": {
|
|
||||||
"enabled": true,
|
|
||||||
"validateWorkerAddress": true,
|
|
||||||
"paymentInterval": 60,
|
|
||||||
"minimumPayment": 100.001,
|
|
||||||
"minimumReserve": 10,
|
|
||||||
"feePercent": 0.02,
|
|
||||||
"feeCollectAccount": "feesCollected",
|
|
||||||
"feeReceiveAddress": "VrcunuCcNUULMBoiw66v9SAdQq2m1FpP3C",
|
|
||||||
"feeWithdrawalThreshold": 5,
|
|
||||||
"daemon": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 13295,
|
|
||||||
"user": "testuser",
|
|
||||||
"password": "testpass"
|
|
||||||
},
|
|
||||||
"redis": {
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 6379
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mpos": {
|
|
||||||
"enabled": false,
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 3306,
|
|
||||||
"user": "me",
|
|
||||||
"password": "mypass",
|
|
||||||
"database": "ltc",
|
|
||||||
"stratumAuth": "password"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"address": "VrcunuCcNUULMBoiw66v9SAdQq2m1FpP3C",
|
|
||||||
"blockRefreshInterval": 1000,
|
|
||||||
"txRefreshInterval": 20000,
|
|
||||||
"connectionTimeout": 600,
|
|
||||||
|
|
||||||
|
|
||||||
"ports": {
|
|
||||||
"6381": {
|
|
||||||
"diff": 8
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"daemons": [
|
|
||||||
{
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 13295,
|
|
||||||
"user": "testuser",
|
|
||||||
"password": "testpass"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user