include tx fees and pool fees in minimumReserve check and adjust pool fees accordingly

This commit is contained in:
Eugene@ubuntu 2014-03-26 23:59:59 +04:00
parent df68d33983
commit 0be59cb34f

View File

@ -27,6 +27,7 @@ function SetupForPool(logger, poolOptions){
var logSystem = 'Payments'; var logSystem = 'Payments';
var logComponent = coin; var logComponent = coin;
var paytxfee;
var daemon = new Stratum.daemon.interface([processingConfig.daemon]); var daemon = new Stratum.daemon.interface([processingConfig.daemon]);
@ -38,6 +39,14 @@ function SetupForPool(logger, poolOptions){
logger.error(logSystem, logComponent, 'Daemon does not own pool address - payment processing can not be done with this daemon'); logger.error(logSystem, logComponent, 'Daemon does not own pool address - payment processing can not be done with this daemon');
} }
}); });
daemon.cmd('getinfo', [], function(result){
if (!result[0].response || !result[0].response.paytxfee){
paytxfee = 0;
logger.error(logSystem, logComponent, 'Daemon does not have paytxfee property on getinfo method results - payment processing could be broken with this daemon');
return;
}
paytxfee = result[0].response.paytxfee;
});
}).once('connectionFailed', function(error){ }).once('connectionFailed', function(error){
logger.error(logSystem, logComponent, 'Failed to connect to daemon for payment processing: ' + JSON.stringify(error)); logger.error(logSystem, logComponent, 'Failed to connect to daemon for payment processing: ' + JSON.stringify(error));
}).on('error', function(error){ }).on('error', function(error){
@ -293,7 +302,9 @@ function SetupForPool(logger, poolOptions){
} }
var balanceLeftOver = totalBalance - toBePaid; var feeAmountToBeCollected = parseFloat((toBePaid / (1 - processingConfig.feePercent) * processingConfig.feePercent).toFixed(coinPrecision));
var txFee = Object.keys(workerPayments).length * paytxfee;
var balanceLeftOver = totalBalance - toBePaid - feeAmountToBeCollected - txFee;
var minReserveSatoshis = processingConfig.minimumReserve * magnitude; var minReserveSatoshis = processingConfig.minimumReserve * magnitude;
if (balanceLeftOver < minReserveSatoshis){ if (balanceLeftOver < minReserveSatoshis){
@ -369,7 +380,6 @@ function SetupForPool(logger, poolOptions){
addressAmounts[address] = coinUnits; addressAmounts[address] = coinUnits;
totalAmountUnits += coinUnits; totalAmountUnits += coinUnits;
} }
var feeAmountUnits = parseFloat((totalAmountUnits / (1 - processingConfig.feePercent) * processingConfig.feePercent).toFixed(coinPrecision));
logger.debug(logSystem, logComponent, 'Payments about to be sent to: ' + JSON.stringify(addressAmounts)); logger.debug(logSystem, logComponent, 'Payments about to be sent to: ' + JSON.stringify(addressAmounts));
daemon.cmd('sendmany', ['', addressAmounts], function(results){ daemon.cmd('sendmany', ['', addressAmounts], function(results){
@ -381,12 +391,14 @@ function SetupForPool(logger, poolOptions){
var totalWorkers = Object.keys(workerPayments).length; var totalWorkers = Object.keys(workerPayments).length;
logger.debug(logSystem, logComponent, 'Payments sent, a total of ' + totalAmountUnits + logger.debug(logSystem, logComponent, 'Payments sent, a total of ' + totalAmountUnits +
' was sent to ' + totalWorkers + ' miners'); ' was sent to ' + totalWorkers + ' miners');
daemon.cmd('move', ['', processingConfig.feeCollectAccount, feeAmountUnits], function(results){ var feeAmountUnits = parseFloat((totalAmountUnits / (1 - processingConfig.feePercent) * processingConfig.feePercent).toFixed(coinPrecision));
var txFee = totalWorkers * paytxfee;
var collectableFee = feeAmountUnits - txFee;
daemon.cmd('move', ['', processingConfig.feeCollectAccount, collectableFee], function(results){
if (results[0].error){ if (results[0].error){
callback('Check finished - error with move ' + JSON.stringify(results[0].error)); callback('Check finished - error with move ' + JSON.stringify(results[0].error));
return; return;
} }
var totalWorkers = Object.keys(workerPayments).length;
logger.debug(logSystem, logComponent, feeAmountUnits + ' collected as fee'); logger.debug(logSystem, logComponent, feeAmountUnits + ' collected as fee');
}); });
}); });
@ -410,7 +422,7 @@ function SetupForPool(logger, poolOptions){
daemon.cmd('getbalance', [processingConfig.feeCollectAccount], function(results){ daemon.cmd('getbalance', [processingConfig.feeCollectAccount], function(results){
var withdrawalAmount = results[0].response; var withdrawalAmount = results[0].response - paytxfee;
if (withdrawalAmount < processingConfig.feeWithdrawalThreshold){ if (withdrawalAmount < processingConfig.feeWithdrawalThreshold){
logger.debug(logSystem, logComponent, 'Not enough profit to withdrawal yet'); logger.debug(logSystem, logComponent, 'Not enough profit to withdrawal yet');