[FIX] Fixing PPS calculations
* [FIX] PPS estimations * [FIX] PPS Value, PPS Payouts being off (too low) Tested on testnet, estimates worked perfectly and payouts worked well.
This commit is contained in:
parent
ee46e65fca
commit
0838bc7783
@ -54,19 +54,18 @@ if ($config['pps']['reward']['type'] == 'blockavg' && $block->getBlockCount() >
|
|||||||
if ($config['pps']['reward']['type'] == 'block') {
|
if ($config['pps']['reward']['type'] == 'block') {
|
||||||
if ($aLastBlock = $block->getLast()) {
|
if ($aLastBlock = $block->getLast()) {
|
||||||
$pps_reward = $aLastBlock['amount'];
|
$pps_reward = $aLastBlock['amount'];
|
||||||
$log->logInfo("PPS reward using last block, amount: " . $pps_reward . "\tdifficulty: " . $dDifficulty);
|
|
||||||
} else {
|
} else {
|
||||||
$pps_reward = $config['pps']['reward']['default'];
|
$pps_reward = $config['pps']['reward']['default'];
|
||||||
$log->logInfo("PPS reward using default, amount: " . $pps_reward . "\tdifficulty: " . $dDifficulty);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$pps_reward = $config['pps']['reward']['default'];
|
$pps_reward = $config['pps']['reward']['default'];
|
||||||
$log->logInfo("PPS reward fixed default, amount: " . $pps_reward . "\tdifficulty: " . $dDifficulty);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Per-share value to be paid out to users
|
// Per-share value to be paid out to users
|
||||||
$pps_value = round($pps_reward / (pow(2,32) * $dDifficulty) * pow(2, $config['pps_target']), 12);
|
$pps_value = round($pps_reward / (pow(2, $config['pps_target']) * $dDifficulty), 12);
|
||||||
|
echo (pow(2, $config['pps_target']) * $dDifficulty);
|
||||||
|
|
||||||
|
|
||||||
// Find our last share accounted and last inserted share for PPS calculations
|
// Find our last share accounted and last inserted share for PPS calculations
|
||||||
$iPreviousShareId = $setting->getValue('pps_last_share_id');
|
$iPreviousShareId = $setting->getValue('pps_last_share_id');
|
||||||
@ -75,11 +74,16 @@ $iLastShareId = $share->getLastInsertedShareId();
|
|||||||
// Check for all new shares, we start one higher as our last accounted share to avoid duplicates
|
// Check for all new shares, we start one higher as our last accounted share to avoid duplicates
|
||||||
$aAccountShares = $share->getSharesForAccounts($iPreviousShareId + 1, $iLastShareId);
|
$aAccountShares = $share->getSharesForAccounts($iPreviousShareId + 1, $iLastShareId);
|
||||||
|
|
||||||
$log->logInfo("ID\tUsername\tInvalid\tValid\t\tPPS Value\t\tPayout\t\tDonation\tFee");
|
if (!empty($aAccountShares)) {
|
||||||
|
// Info for this payout
|
||||||
|
$log->logInfo("PPS reward type: " . $config['pps']['reward']['type'] . ", amount: " . $pps_reward . "\tdifficulty: " . $dDifficulty . "\tPPS value: " . $pps_value);
|
||||||
|
$log->logInfo("ID\tUsername\tInvalid\tValid\t\tPPS Value\t\tPayout\t\tDonation\tFee");
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($aAccountShares as $aData) {
|
foreach ($aAccountShares as $aData) {
|
||||||
// Take our valid shares and multiply by per share value
|
// MPOS uses a base difficulty setting to avoid showing weightened shares
|
||||||
$aData['payout'] = round($aData['valid'] * $pps_value, 8);
|
// Since we need weightened shares here, we go back to the proper value for payouts
|
||||||
|
$aData['payout'] = round($aData['valid'] * pow(2, ($config['difficulty'] - 16)) * $pps_value, 8);
|
||||||
|
|
||||||
// Defaults
|
// Defaults
|
||||||
$aData['fee' ] = 0;
|
$aData['fee' ] = 0;
|
||||||
@ -94,7 +98,7 @@ foreach ($aAccountShares as $aData) {
|
|||||||
$log->logInfo($aData['id'] . "\t" .
|
$log->logInfo($aData['id'] . "\t" .
|
||||||
$aData['username'] . "\t" .
|
$aData['username'] . "\t" .
|
||||||
$aData['invalid'] . "\t" .
|
$aData['invalid'] . "\t" .
|
||||||
$aData['valid'] . "\t*\t" .
|
$aData['valid'] * pow(2, ($config['difficulty'] - 16)) . "\t*\t" .
|
||||||
number_format($pps_value, 12) . "\t=\t" .
|
number_format($pps_value, 12) . "\t=\t" .
|
||||||
number_format($aData['payout'], 8) . "\t" .
|
number_format($aData['payout'], 8) . "\t" .
|
||||||
number_format($aData['donation'], 8) . "\t" .
|
number_format($aData['donation'], 8) . "\t" .
|
||||||
|
|||||||
@ -645,14 +645,12 @@ class Statistics {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Hack so we can use this method for PPS estimates too
|
// Hack so we can use this method for PPS estimates too
|
||||||
|
// value1 = shares/s
|
||||||
|
// value2 = avg share difficulty
|
||||||
if (@$value1 > 0 && @$value2 > 0) {
|
if (@$value1 > 0 && @$value2 > 0) {
|
||||||
// Default: No fees applied so multiply by 1
|
$hour = 60 * 60;
|
||||||
$fee = 1;
|
|
||||||
if ($this->config['fees'] > 0)
|
|
||||||
$bNoFees == 0 ? $fee = round(((float)$this->config['fees'] / 100), 8) : $fee = 1;
|
|
||||||
$pps = $value1 * $value2 * $ppsvalue;
|
$pps = $value1 * $value2 * $ppsvalue;
|
||||||
$hour = 3600;
|
$aEstimates['hours1'] = $pps * $hour;
|
||||||
$aEstimates['hours1'] = $pps * $hour * $fee;
|
|
||||||
$aEstimates['hours24'] = $pps * 24 * $hour;
|
$aEstimates['hours24'] = $pps * 24 * $hour;
|
||||||
$aEstimates['days7'] = $pps * 24 * 7 * $hour;
|
$aEstimates['days7'] = $pps * 24 * 7 * $hour;
|
||||||
$aEstimates['days14'] = $pps * 14 * 24 * 7 * $hour;
|
$aEstimates['days14'] = $pps * 14 * 24 * 7 * $hour;
|
||||||
|
|||||||
@ -308,9 +308,20 @@ $config['pps']['reward']['default'] = 50;
|
|||||||
$config['pps']['reward']['type'] = 'blockavg';
|
$config['pps']['reward']['type'] = 'blockavg';
|
||||||
$config['pps']['blockavg']['blockcount'] = 10;
|
$config['pps']['blockavg']['blockcount'] = 10;
|
||||||
|
|
||||||
// pps base payout target, default 16 = difficulty 1 shares for vardiff
|
/**
|
||||||
// (1/(65536 * difficulty) * reward) = (reward / (pow(2,32) * difficulty) * pow(2, 16))
|
* Please note: Do NOT touch this if you are running MPOS in scrypt coins!
|
||||||
$config['pps_target'] = 16; // do not change unless you know what it does
|
* The VARDIFF / Stratum Settings / Target Bits system can be VERY confusing
|
||||||
|
* so unless you have spend over 2 hours talking with pooler, do not edit this.
|
||||||
|
*
|
||||||
|
* I have added this here to allow SHA256 coins in the future. For now, leave it
|
||||||
|
* at 16!
|
||||||
|
*
|
||||||
|
* Default:
|
||||||
|
* 16 = Scrypt
|
||||||
|
* Options:
|
||||||
|
* 32 = SHA256
|
||||||
|
**/
|
||||||
|
$config['pps_target'] = 16;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Memcache configuration
|
* Memcache configuration
|
||||||
|
|||||||
@ -140,7 +140,7 @@ if (@$_SESSION['USERDATA']['id']) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$aGlobal['ppsvalue'] = number_format(round($pps_reward / (pow(2,32) * $dDifficulty) * pow(2, $config['pps_target']), 12) ,12);
|
$aGlobal['ppsvalue'] = number_format(round($pps_reward / (pow(2, $config['pps_target']) * $dDifficulty), 12) ,12);
|
||||||
$aGlobal['userdata']['sharedifficulty'] = $statistics->getUserShareDifficulty($_SESSION['USERDATA']['id']);
|
$aGlobal['userdata']['sharedifficulty'] = $statistics->getUserShareDifficulty($_SESSION['USERDATA']['id']);
|
||||||
$aGlobal['userdata']['estimates'] = $statistics->getUserEstimates($aGlobal['userdata']['sharerate'], $aGlobal['userdata']['sharedifficulty'], $aGlobal['userdata']['donate_percent'], $aGlobal['userdata']['no_fees'], $aGlobal['ppsvalue']);
|
$aGlobal['userdata']['estimates'] = $statistics->getUserEstimates($aGlobal['userdata']['sharerate'], $aGlobal['userdata']['sharedifficulty'], $aGlobal['userdata']['donate_percent'], $aGlobal['userdata']['no_fees'], $aGlobal['ppsvalue']);
|
||||||
break;
|
break;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user