[ADDED] Payout Queue Limiter

* [ADDED] LIMIT to getMPQueue and getAPQueue
* [ADDED] Default config payout queue size of 1000 for MP and 1000 for AP
* [UPDATED] Payouts cronjob to use this new default limits

This may help some coins that have tx count issues when doing sendmany.
Other coins can play with the values to find their sweet spot. Run the
payout multiple times in a row to force more transactions of the same
amount.

Fixes #1773 and thanks to @jrwr for the idea!
This commit is contained in:
Sebastian Grewe 2014-02-18 09:16:26 +01:00
parent cf8a10d9b0
commit 7229b5b130
3 changed files with 17 additions and 8 deletions

View File

@ -45,7 +45,7 @@ if (!$dWalletBalance = $bitcoin->getrealbalance())
$dWalletBalance = 0;
// Fetch outstanding manual-payouts
$aManualPayouts = $transaction->getMPQueue();
$aManualPayouts = $transaction->getMPQueue($config['payout']['txlimit_manual']);
// Fetch our manual payouts, process them
if ($setting->getValue('disable_manual_payouts') != 1 && $aManualPayouts) {
@ -117,7 +117,7 @@ if (!$dWalletBalance = $bitcoin->getrealbalance())
$dWalletBalance = 0;
// Fetch outstanding auto-payouts
$aAutoPayouts = $transaction->getAPQueue();
$aAutoPayouts = $transaction->getAPQueue($config['payout']['txlimit_auto']);
// Fetch our auto payouts, process them
if ($setting->getValue('disable_auto_payouts') != 1 && $aAutoPayouts) {

View File

@ -288,7 +288,7 @@ class Transaction extends Base {
* @param none
* @return data array Account settings and confirmed balances
**/
public function getAPQueue() {
public function getAPQueue($limit=250) {
$this->debug->append("STA " . __METHOD__, 4);
$stmt = $this->mysqli->prepare("
SELECT
@ -312,8 +312,9 @@ class Transaction extends Base {
ON t.account_id = a.id
WHERE t.archived = 0 AND a.ap_threshold > 0 AND a.coin_address IS NOT NULL AND a.coin_address != ''
GROUP BY t.account_id
HAVING confirmed > a.ap_threshold AND confirmed > " . $this->config['txfee_auto']);
if ($this->checkStmt($stmt) && $stmt->execute() && $result = $stmt->get_result())
HAVING confirmed > a.ap_threshold AND confirmed > " . $this->config['txfee_auto'] . "
LIMIT ?");
if ($this->checkStmt($stmt) && $stmt->bind_param('i', $limit) && $stmt->execute() && $result = $stmt->get_result())
return $result->fetch_all(MYSQLI_ASSOC);
return $this->sqlError();
}
@ -377,7 +378,7 @@ class Transaction extends Base {
* @param none
* @return data Associative array with DB Fields
**/
public function getMPQueue() {
public function getMPQueue($limit=250) {
$stmt = $this->mysqli->prepare("
SELECT
a.id,
@ -403,8 +404,9 @@ class Transaction extends Base {
ON t.block_id = b.id
WHERE p.completed = 0 AND t.archived = 0 AND a.coin_address IS NOT NULL AND a.coin_address != ''
GROUP BY t.account_id
HAVING confirmed > " . $this->config['txfee_manual']);
if ($this->checkStmt($stmt) && $stmt->execute() && $result = $stmt->get_result())
HAVING confirmed > " . $this->config['txfee_manual'] . "
LIMIT ?");
if ($this->checkStmt($stmt) && $stmt->bind_param('i', $limit) && $stmt->execute() && $result = $stmt->get_result())
return $result->fetch_all(MYSQLI_ASSOC);
return $this->sqlError('E0050');
}

View File

@ -142,6 +142,13 @@ $config['payout_system'] = 'prop';
**/
$config['sendmany']['enabled'] = false;
/**
* Transaction Limits
* Number of transactions per payout run
**/
$config['payout']['txlimit_manual'] = 1000;
$config['payout']['txlimit_auto'] = 1000;
/**
* Round Purging
* Round share purging configuration