From 3a73ef54aed2697519a2a31f76c29fde5b2dccab Mon Sep 17 00:00:00 2001 From: Sebastian Grewe Date: Wed, 12 Mar 2014 11:53:12 +0100 Subject: [PATCH 01/11] [FIX] Remove static table reference --- public/include/classes/statistics.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/include/classes/statistics.class.php b/public/include/classes/statistics.class.php index 5b2eeacf..1a9e1b3c 100644 --- a/public/include/classes/statistics.class.php +++ b/public/include/classes/statistics.class.php @@ -469,7 +469,7 @@ class Statistics extends Base { share_id, IF(difficulty = 0, POW(2, (" . $this->config['difficulty'] . " - 16)), difficulty) AS difficulty, username - FROM shares_archive + FROM " . $this->share->getArchiveTableName() . " WHERE time > DATE_SUB(now(), INTERVAL ? SECOND) AND our_result = 'Y' ) AS t1 LEFT JOIN " . $this->user->getTableName() . " AS a From 790617dd11e54d38ad511380c4548d98634251d6 Mon Sep 17 00:00:00 2001 From: jamieede Date: Wed, 12 Mar 2014 16:48:31 +0000 Subject: [PATCH 02/11] Cryptorush API Price Ticker Simple yet effective way to get ticker cron to use the Cryptorush.in API via get=all parameter. Just enter on your global cfg file: $config['price']['url'] = 'https://cryptorush.in'; $config['price']['target'] = '/api.php?get=all&key=YOUR_API_KEY&id=YOUR_USER_ID'; $config['price']['currency'] = 'COIN'; and run the cron. Enjoy! --- public/include/classes/tools.class.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/include/classes/tools.class.php b/public/include/classes/tools.class.php index 8778a200..9a39a8e4 100644 --- a/public/include/classes/tools.class.php +++ b/public/include/classes/tools.class.php @@ -55,6 +55,8 @@ class Tools extends Base { return 'btce'; } else if (preg_match('/cryptsy.com/', $url)) { return 'cryptsy'; + } else if (preg_match('/cryptorush.in/', $url)) { + return 'cryptorush'; } $this->setErrorMessage("API URL unknown"); return false; @@ -66,6 +68,7 @@ class Tools extends Base { public function getPrice() { $aData = $this->getApi($this->config['price']['url'], $this->config['price']['target']); $strCurrency = $this->config['currency']; + $strCurrencyBTC = "$strCurrency/BTC"; // Check the API type for configured URL if (!$strApiType = $this->getApiType($this->config['price']['url'])) return false; @@ -84,6 +87,9 @@ class Tools extends Base { case 'cryptsy': return @$aData['return']['markets'][$strCurrency]['lasttradeprice']; break; + case 'cryptorush': + return @$aData[$strCurrencyBTC]['last_trade']; + break; } } else { $this->setErrorMessage("Got an invalid response from ticker API"); From 0b765417f28f567963fc2387a9cb6aa809163e35 Mon Sep 17 00:00:00 2001 From: jamieede Date: Wed, 12 Mar 2014 17:20:22 +0000 Subject: [PATCH 03/11] The hacky way simplified. Removed variable --- public/include/classes/tools.class.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/public/include/classes/tools.class.php b/public/include/classes/tools.class.php index 9a39a8e4..230508d5 100644 --- a/public/include/classes/tools.class.php +++ b/public/include/classes/tools.class.php @@ -68,7 +68,6 @@ class Tools extends Base { public function getPrice() { $aData = $this->getApi($this->config['price']['url'], $this->config['price']['target']); $strCurrency = $this->config['currency']; - $strCurrencyBTC = "$strCurrency/BTC"; // Check the API type for configured URL if (!$strApiType = $this->getApiType($this->config['price']['url'])) return false; @@ -88,7 +87,7 @@ class Tools extends Base { return @$aData['return']['markets'][$strCurrency]['lasttradeprice']; break; case 'cryptorush': - return @$aData[$strCurrencyBTC]['last_trade']; + return @$aData["$strCurrency/BTC"]['last_trade']; break; } } else { From 45851ea6544f3c2f7b917808f186ffe1af878d98 Mon Sep 17 00:00:00 2001 From: Sebastian Grewe Date: Thu, 13 Mar 2014 07:43:45 +0100 Subject: [PATCH 04/11] [FEATURE] Added Pool Bonus for Prop and PPLNS --- cronjobs/pplns_payout.php | 16 +++++++++++++--- cronjobs/proportional_payout.php | 17 ++++++++++++++--- public/include/config/global.inc.dist.php | 7 ++++--- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/cronjobs/pplns_payout.php b/cronjobs/pplns_payout.php index 08656ed7..68b3ef2d 100755 --- a/cronjobs/pplns_payout.php +++ b/cronjobs/pplns_payout.php @@ -181,8 +181,8 @@ foreach ($aAllBlocks as $iIndex => $aBlock) { } // Table header for account shares - $strLogMask = "| %5.5s | %-15.15s | %15.15s | %15.15s | %12.12s | %20.20s | %20.20s | %20.20s |"; - $log->logInfo(sprintf($strLogMask, 'ID', 'Username', 'Valid', 'Invalid', 'Percentage', 'Payout', 'Donation', 'Fee')); + $strLogMask = "| %5.5s | %-15.15s | %15.15s | %15.15s | %12.12s | %15.15s | %15.15s | %15.15s | %15.15s |"; + $log->logInfo(sprintf($strLogMask, 'ID', 'Username', 'Valid', 'Invalid', 'Percentage', 'Payout', 'Donation', 'Fee', 'Bonus')); // Loop through all accounts that have found shares for this round foreach ($aTotalAccountShares as $key => $aData) { @@ -202,15 +202,21 @@ foreach ($aAllBlocks as $iIndex => $aBlock) { $aData['fee' ] = 0; $aData['donation'] = 0; + // Calculate pool fees if ($config['fees'] > 0 && $aData['no_fees'] == 0) $aData['fee'] = round($config['fees'] / 100 * $aData['payout'], 8); + + // Calculate pool bonus if it applies, will be paid from liquid assets! + if ($config['pool_bonus'] > 0) + $aData['pool_bonus'] = round(( $config['pool_bonus'] / 100 ) * $dReward, 8); + // Calculate donation amount, fees not included $aData['donation'] = round($user->getDonatePercent($user->getUserId($aData['username'])) / 100 * ( $aData['payout'] - $aData['fee']), 8); // Verbose output of this users calculations $log->logInfo( sprintf($strLogMask, $aData['id'], $aData['username'], $aData['pplns_valid'], $aData['pplns_invalid'], - number_format($aData['percentage'], 8), number_format($aData['payout'], 8), number_format($aData['donation'], 8), number_format($aData['fee'], 8) + number_format($aData['percentage'], 8), number_format($aData['payout'], 8), number_format($aData['donation'], 8), number_format($aData['fee'], 8), number_format($aData['pool_bonus'], 8) ) ); @@ -225,6 +231,10 @@ foreach ($aAllBlocks as $iIndex => $aBlock) { if ($aData['donation'] > 0) if (!$transaction->addTransaction($aData['id'], $aData['donation'], 'Donation', $aBlock['id'])) $log->logFatal('Failed to insert new Donation transaction to database for ' . $aData['username'] . ': ' . $transaction->getCronError() . 'on block ' . $aBlock['id']); + // Add new bonus credit + if ($aData['pool_bonus'] > 0) + if (!$transaction->addTransaction($aData['id'], $aData['pool_bonus'], 'Bonus', $aBlock['id'])) + $log->logFatal('Failed to insert new Bonus transaction to database for ' . $aData['username'] . ': ' . $transaction->getCronError()); } // Add full round share statistics diff --git a/cronjobs/proportional_payout.php b/cronjobs/proportional_payout.php index a91ba7a4..7f5b163f 100755 --- a/cronjobs/proportional_payout.php +++ b/cronjobs/proportional_payout.php @@ -40,8 +40,8 @@ if (empty($aAllBlocks)) { $count = 0; // Table header for account shares -$strLogMask = "| %10.10s | %-5.5s | %15.15s | %15.15s | %12.12s | %20.20s | %20.20s | %20.20s |"; -$log->logInfo(sprintf($strLogMask, 'Block', 'ID', 'Username', 'Valid', 'Invalid', 'Percentage', 'Payout', 'Donation', 'Fee')); +$strLogMask = "| %10.10s | %-5.5s | %15.15s | %15.15s | %12.12s | %15.15s | %15.15s | %15.15s | %15.15s | %15.15s |"; +$log->logInfo(sprintf($strLogMask, 'Block', 'ID', 'Username', 'Valid', 'Invalid', 'Percentage', 'Payout', 'Donation', 'Fee', 'Bonus')); foreach ($aAllBlocks as $iIndex => $aBlock) { // If we have unaccounted blocks without share_ids, they might not have been inserted yet if (!$aBlock['share_id']) { @@ -86,18 +86,25 @@ foreach ($aAllBlocks as $iIndex => $aBlock) { // Defaults $aData['fee' ] = 0; $aData['donation'] = 0; + $aData['pool_bonus'] = 0; $aData['percentage'] = round(( 100 / $iRoundShares ) * $aData['valid'], 8); $aData['payout'] = round(( $aData['percentage'] / 100 ) * $dReward, 8); + // Calculate pool fees if they apply if ($config['fees'] > 0 && $aData['no_fees'] == 0) $aData['fee'] = round($config['fees'] / 100 * $aData['payout'], 8); + + // Calculate pool bonus if it applies, will be paid from liquid assets! + if ($config['pool_bonus'] > 0) + $aData['pool_bonus'] = round(( $config['pool_bonus'] / 100 ) * $dReward, 8); + // Calculate donation amount, fees not included $aData['donation'] = round($user->getDonatePercent($user->getUserId($aData['username'])) / 100 * ( $aData['payout'] - $aData['fee']), 8); // Verbose output of this users calculations $log->logInfo( sprintf($strLogMask, $aBlock['height'], $aData['id'], $aData['username'], $aData['valid'], $aData['invalid'], - number_format($aData['percentage'], 8), number_format($aData['payout'], 8), number_format($aData['donation'], 8), number_format($aData['fee'], 8)) + number_format($aData['percentage'], 8), number_format($aData['payout'], 8), number_format($aData['donation'], 8), number_format($aData['fee'], 8), number_format($aData['pool_bonus'], 8)) ); // Update user share statistics @@ -114,6 +121,10 @@ foreach ($aAllBlocks as $iIndex => $aBlock) { if ($aData['donation'] > 0) if (!$transaction->addTransaction($aData['id'], $aData['donation'], 'Donation', $aBlock['id'])) $log->logFatal('Failed to insert new Donation transaction to database for ' . $aData['username'] . ': ' . $transaction->getCronError()); + // Add new bonus credit + if ($aData['pool_bonus'] > 0) + if (!$transaction->addTransaction($aData['id'], $aData['pool_bonus'], 'Bonus', $aBlock['id'])) + $log->logFatal('Failed to insert new Bonus transaction to database for ' . $aData['username'] . ': ' . $transaction->getCronError()); } // Add block as accounted for into settings table diff --git a/public/include/config/global.inc.dist.php b/public/include/config/global.inc.dist.php index 2da7464e..3df03f70 100644 --- a/public/include/config/global.inc.dist.php +++ b/public/include/config/global.inc.dist.php @@ -128,12 +128,13 @@ $config['txfee_auto'] = 0.1; $config['txfee_manual'] = 0.1; /** - * Block Bonus - * Bonus in coins of block bonus + * Block & Pool Bonus + * Bonus coins for blockfinder or a pool bonus for everyone * https://github.com/MPOS/php-mpos/wiki/Config-Setup#wiki-block-bonus + * https://github.com/MPOS/php-mpos/wiki/Config-Setup#wiki-pool-bonus */ $config['block_bonus'] = 0; - +$config['pool_bonus'] = 0; /** * Payout System From d468c826940567d4b061c072051945c0735852dd Mon Sep 17 00:00:00 2001 From: Sebastian Grewe Date: Thu, 13 Mar 2014 14:25:52 +0100 Subject: [PATCH 05/11] [ADDED] Block or Payout based bonus percentage --- cronjobs/pplns_payout.php | 10 ++++++++-- cronjobs/proportional_payout.php | 9 +++++++-- public/include/config/global.inc.dist.php | 1 + 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/cronjobs/pplns_payout.php b/cronjobs/pplns_payout.php index 68b3ef2d..c256b279 100755 --- a/cronjobs/pplns_payout.php +++ b/cronjobs/pplns_payout.php @@ -201,14 +201,20 @@ foreach ($aAllBlocks as $iIndex => $aBlock) { // Defaults $aData['fee' ] = 0; $aData['donation'] = 0; + $aData['pool_bonus'] = 0; // Calculate pool fees if ($config['fees'] > 0 && $aData['no_fees'] == 0) $aData['fee'] = round($config['fees'] / 100 * $aData['payout'], 8); // Calculate pool bonus if it applies, will be paid from liquid assets! - if ($config['pool_bonus'] > 0) - $aData['pool_bonus'] = round(( $config['pool_bonus'] / 100 ) * $dReward, 8); + if ($config['pool_bonus'] > 0) { + if ($config['pool_bonus_type'] == 'block') { + $aData['pool_bonus'] = round(( $config['pool_bonus'] / 100 ) * $dReward, 8); + } else { + $aData['pool_bonus'] = round(( $config['pool_bonus'] / 100 ) * $aData['payout'], 8); + } + } // Calculate donation amount, fees not included $aData['donation'] = round($user->getDonatePercent($user->getUserId($aData['username'])) / 100 * ( $aData['payout'] - $aData['fee']), 8); diff --git a/cronjobs/proportional_payout.php b/cronjobs/proportional_payout.php index 7f5b163f..80b74231 100755 --- a/cronjobs/proportional_payout.php +++ b/cronjobs/proportional_payout.php @@ -95,8 +95,13 @@ foreach ($aAllBlocks as $iIndex => $aBlock) { $aData['fee'] = round($config['fees'] / 100 * $aData['payout'], 8); // Calculate pool bonus if it applies, will be paid from liquid assets! - if ($config['pool_bonus'] > 0) - $aData['pool_bonus'] = round(( $config['pool_bonus'] / 100 ) * $dReward, 8); + if ($config['pool_bonus'] > 0) { + if ($config['pool_bonus_type'] == 'block') { + $aData['pool_bonus'] = round(( $config['pool_bonus'] / 100 ) * $dReward, 8); + } else { + $aData['pool_bonus'] = round(( $config['pool_bonus'] / 100 ) * $aData['payout'], 8); + } + } // Calculate donation amount, fees not included $aData['donation'] = round($user->getDonatePercent($user->getUserId($aData['username'])) / 100 * ( $aData['payout'] - $aData['fee']), 8); diff --git a/public/include/config/global.inc.dist.php b/public/include/config/global.inc.dist.php index 3df03f70..b1a2d7a7 100644 --- a/public/include/config/global.inc.dist.php +++ b/public/include/config/global.inc.dist.php @@ -135,6 +135,7 @@ $config['txfee_manual'] = 0.1; */ $config['block_bonus'] = 0; $config['pool_bonus'] = 0; +$config['pool_bonus_type'] = 'payout'; /** * Payout System From 914bc6bf1a2706cf4a566e6f364a8020e2e1f11b Mon Sep 17 00:00:00 2001 From: Sebastian Grewe Date: Fri, 14 Mar 2014 10:57:35 +0100 Subject: [PATCH 06/11] [FIX] Use configured currency as target --- public/include/classes/tools.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/include/classes/tools.class.php b/public/include/classes/tools.class.php index 230508d5..a272761e 100644 --- a/public/include/classes/tools.class.php +++ b/public/include/classes/tools.class.php @@ -87,7 +87,7 @@ class Tools extends Base { return @$aData['return']['markets'][$strCurrency]['lasttradeprice']; break; case 'cryptorush': - return @$aData["$strCurrency/BTC"]['last_trade']; + return @$aData["$strCurrency/" . $this->config['price']['target']]['last_trade']; break; } } else { From d205e53649a7e18e579428acb1a3fe80cca3597f Mon Sep 17 00:00:00 2001 From: Sebastian Grewe Date: Fri, 14 Mar 2014 11:49:57 +0100 Subject: [PATCH 07/11] [CLEANUP] Percentage column shorter --- cronjobs/proportional_payout.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cronjobs/proportional_payout.php b/cronjobs/proportional_payout.php index 80b74231..58f47ee9 100755 --- a/cronjobs/proportional_payout.php +++ b/cronjobs/proportional_payout.php @@ -40,7 +40,7 @@ if (empty($aAllBlocks)) { $count = 0; // Table header for account shares -$strLogMask = "| %10.10s | %-5.5s | %15.15s | %15.15s | %12.12s | %15.15s | %15.15s | %15.15s | %15.15s | %15.15s |"; +$strLogMask = "| %10.10s | %-5.5s | %15.15s | %15.15s | %12.12s | %12.12s | %15.15s | %15.15s | %15.15s | %15.15s |"; $log->logInfo(sprintf($strLogMask, 'Block', 'ID', 'Username', 'Valid', 'Invalid', 'Percentage', 'Payout', 'Donation', 'Fee', 'Bonus')); foreach ($aAllBlocks as $iIndex => $aBlock) { // If we have unaccounted blocks without share_ids, they might not have been inserted yet From 35e67b613f7e8ac84b7da02ee374ebc199016dc9 Mon Sep 17 00:00:00 2001 From: toxicwind Date: Sun, 16 Mar 2014 18:54:47 -0600 Subject: [PATCH 08/11] Fix round share percentages Not correct math. --- public/templates/mpos/statistics/round/pplns_round_shares.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/templates/mpos/statistics/round/pplns_round_shares.tpl b/public/templates/mpos/statistics/round/pplns_round_shares.tpl index 9272a07a..207a2bd7 100644 --- a/public/templates/mpos/statistics/round/pplns_round_shares.tpl +++ b/public/templates/mpos/statistics/round/pplns_round_shares.tpl @@ -18,7 +18,7 @@ {if $PPLNSROUNDSHARES[contrib].is_anonymous|default:"0" == 1 && $GLOBAL.userdata.is_admin|default:"0" == 0}anonymous{else}{$PPLNSROUNDSHARES[contrib].username|default:"unknown"|escape}{/if} {$PPLNSROUNDSHARES[contrib].pplns_valid|number_format} {$PPLNSROUNDSHARES[contrib].pplns_invalid|number_format} - {if $PPLNSROUNDSHARES[contrib].pplns_invalid > 0 && $PPLNSROUNDSHARES[contrib].pplns_valid > 0}{($PPLNSROUNDSHARES[contrib].pplns_invalid / $PPLNSROUNDSHARES[contrib].pplns_valid * 100)|number_format:"2"|default:"0"}{else}0.00{/if} + {if $PPLNSROUNDSHARES[contrib].pplns_invalid > 0 && $PPLNSROUNDSHARES[contrib].pplns_valid > 0}{(($PPLNSROUNDSHARES[contrib].pplns_invalid / ($PPLNSROUNDSHARES[contrib].pplns_valid + $PPLNSROUNDSHARES[contrib].pplns_invalid)) * 100)|number_format:"2"|default:"0"}{else}0.00{/if} {/section} From 13e39f6eae1ccdb82379d31dd04b0302ece80740 Mon Sep 17 00:00:00 2001 From: toxicwind Date: Sun, 16 Mar 2014 18:56:30 -0600 Subject: [PATCH 09/11] Update round_shares.tpl --- public/templates/mpos/statistics/round/round_shares.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/templates/mpos/statistics/round/round_shares.tpl b/public/templates/mpos/statistics/round/round_shares.tpl index a941f917..1a9a76f1 100644 --- a/public/templates/mpos/statistics/round/round_shares.tpl +++ b/public/templates/mpos/statistics/round/round_shares.tpl @@ -19,7 +19,7 @@ {if $data.is_anonymous|default:"0" == 1 && $GLOBAL.userdata.is_admin|default:"0" == 0}anonymous{else}{$data.username|default:"unknown"|escape}{/if} {$data.valid|number_format} {$data.invalid|number_format} - {if $data.invalid > 0 }{($data.invalid / $data.valid * 100)|number_format:"2"|default:"0"}{else}0.00{/if} + {if $data.invalid > 0 }{(($data.invalid / ($data.valid + $data.invalid) * 100)|number_format:"2"|default:"0"}{else}0.00{/if} {/foreach} From 0e61aaa9fe58701bca0912bf499d8f2d2aa5f331 Mon Sep 17 00:00:00 2001 From: Boris Date: Mon, 17 Mar 2014 12:55:13 +0000 Subject: [PATCH 10/11] [FIX] Remove more static table references #1929 --- public/include/classes/statistics.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/include/classes/statistics.class.php b/public/include/classes/statistics.class.php index 1a9e1b3c..786c00d1 100644 --- a/public/include/classes/statistics.class.php +++ b/public/include/classes/statistics.class.php @@ -462,7 +462,7 @@ class Statistics extends Base { id, IF(difficulty = 0, POW(2, (" . $this->config['difficulty'] . " - 16)), difficulty) AS difficulty, username - FROM shares + FROM " . $this->share->getTableName() . " WHERE time > DATE_SUB(now(), INTERVAL ? SECOND) AND our_result = 'Y' UNION SELECT @@ -533,7 +533,7 @@ class Statistics extends Base { SELECT id, our_result, IF(difficulty = 0, POW(2, (" . $this->config['difficulty'] . " - 16)), difficulty) AS difficulty FROM - shares + " . $this->share->getTableName() . " WHERE username LIKE ? AND time > DATE_SUB(now(), INTERVAL ? SECOND) AND our_result = 'Y' @@ -541,7 +541,7 @@ class Statistics extends Base { SELECT share_id, our_result, IF(difficulty = 0, POW(2, (" . $this->config['difficulty'] . " - 16)), difficulty) AS difficulty FROM - shares_archive + " . $this->share->getArchiveTableName() . " WHERE username LIKE ? AND time > DATE_SUB(now(), INTERVAL ? SECOND) AND our_result = 'Y' From bf327a23a972fb218958cc40bf3d8ab05739059c Mon Sep 17 00:00:00 2001 From: Boris Date: Mon, 17 Mar 2014 14:49:27 +0000 Subject: [PATCH 11/11] [FIX] Remove a couple more static table references --- public/include/classes/transaction.class.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/public/include/classes/transaction.class.php b/public/include/classes/transaction.class.php index fab7cf57..09023034 100644 --- a/public/include/classes/transaction.class.php +++ b/public/include/classes/transaction.class.php @@ -70,8 +70,8 @@ class Transaction extends Base { $sql = " SELECT SUM(t.amount) AS total, t.type AS type - FROM transactions AS t - LEFT OUTER JOIN blocks AS b + FROM $this->table AS t + LEFT OUTER JOIN " . $this->block->getTableName() . " AS b ON b.id = t.block_id WHERE ( b.confirmations > 0 OR b.id IS NULL )"; if (!empty($account_id)) { @@ -211,7 +211,7 @@ class Transaction extends Base { FROM $this->table AS t LEFT JOIN " . $this->user->getTableName() . " AS a ON t.account_id = a.id - LEFT JOIN blocks AS b + LEFT JOIN " . $this->block->getTableName() . " AS b ON t.block_id = b.id WHERE ( @@ -306,9 +306,9 @@ class Transaction extends Base { ), 0 ) AS confirmed FROM $this->table AS t - LEFT JOIN blocks AS b + LEFT JOIN " . $this->block->getTableName() . " AS b ON t.block_id = b.id - LEFT JOIN accounts AS a + LEFT JOIN " . $this->user->getTableName() . " AS a 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