[ADDED] Validate Payouts script added

* Validate all DB transactions against your payouts in the RPC
* Does not use TXID to search for records but rather a combination of
  address and amount
* May help debugging issues
This commit is contained in:
Sebastian Grewe 2014-02-11 10:31:23 +01:00
parent a9d9fe4b64
commit de8137aa64

82
scripts/validate_payouts.php Executable file
View File

@ -0,0 +1,82 @@
#!/usr/bin/php
<?php
/*
Copyright:: 2013, Sebastian Grewe
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/**
* Simple script to fetch all user accounts and their coin addresses, then runs
* them against the RPC to validate. Will allow admins to find users with invalid addresses.
**/
// Change to working directory
chdir(dirname(__FILE__));
// Include all settings and classes
require_once('shared.inc.php');
// Command line options
$options = getopt("l:r:");
isset($options['l']) ? $limit = (int)$options['l'] : $limit = (int)1000;
isset($options['r']) ? $rpclimit = (int)$options['r'] : $rpclimit = (int)10000;
// Fetch and merge MP and AP payouts
$aAllMPDebitTxs = $transaction->getTransactions(0, array('type' => 'Debit_MP'), $limit);
$aAllAPDebitTxs = $transaction->getTransactions(0, array('type' => 'Debit_AP'), $limit);
$aAllDebitTxs = array_merge($aAllMPDebitTxs, $aAllAPDebitTxs);
// Fetch transactions from RPC
$aListTransactions = $bitcoin->listtransactions('', $rpclimit);
// We don't need to loop through non-send transaction types
foreach ($aListTransactions as $key => $aTransaction) {
if ($aTransaction['category'] != 'send') {
unset($aListTransactions[$key]);
}
}
// Initilize counters
$total=count($aListTransactions);
$found=0;
$notfound=0;
// Output mask and header
$mask = "| %-15.15s | %-34.34s | %20.20s | %10.10s | %-64.64s |" . PHP_EOL;
printf($mask, 'Username', 'Address', 'Amount', 'Status', 'TXID');
// Loop through our DB records
foreach ($aAllDebitTxs as $aDebitTx) {
$bFound = false;
$txid = 'n/a';
foreach($aListTransactions as $key => $aTransaction) {
// Search for match NOT by txid
if (isset($aTransaction['address']) && $aTransaction['address'] == $aDebitTx['coin_address'] && ($aTransaction['amount'] == ($aDebitTx['amount'] * -1) || $aTransaction['amount'] == ($aDebitTx['amount'] * -1 - $config['txfee_manual']) || $aTransaction['amount'] == ($aDebitTx['amount'] * -1 - $config['txfee_auto']) )) {
unset($aListTransactions[$key]);
$found++;
$bFound = true;
$status = 'FOUND';
$txid = $aTransaction['txid'];
}
}
if (!$bFound) $status = 'MISSING';
printf($mask, $aDebitTx['username'], $aDebitTx['coin_address'], $aDebitTx['amount'], $status, $txid);
}
// Small summary
echo PHP_EOL . 'Summary: ' . PHP_EOL;
echo ' Total Send TX Records: ' . $total . PHP_EOL;
echo ' Total Debit Records: ' . count($aAllDebitTxs) . PHP_EOL;
echo ' Total Records Found: ' . $found . PHP_EOL;