Merge pull request #2776 from lubuzzo/development

Recents Bitcoin's Change (> v0.17)
This commit is contained in:
Sebastian Grewe 2019-07-27 12:11:01 +02:00 committed by GitHub
commit f3914098fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 116 additions and 40 deletions

View File

@ -40,7 +40,7 @@ class BitcoinWrapper extends BitcoinClient {
else
return $this->memcache->setCache(__FUNCTION__, parent::getblockchaininfo()['chain'] == 'test', 30);
}
public function getmininginfo() {
$this->oDebug->append("STA " . __METHOD__, 4);
if ($data = $this->memcache->get(__FUNCTION__)) return $data;
@ -55,15 +55,21 @@ class BitcoinWrapper extends BitcoinClient {
// Wrapper method to get the real main account balance
public function getrealbalance() {
$this->oDebug->append("STA " . __METHOD__, 4);
$aAccounts = parent::listaccounts();
$dBalance = parent::getbalance('');
$aAccounts = [];
try {
$aAccounts = parent::listaccounts();
} catch (Exception $e) {
if ($e->getCode() == 404)
$aAccounts = array( '*' => parent::getbalance("*") );
}
// Account checks
if (count($aAccounts) == 1) {
// We only have a single account so getbalance will be fine
return $dBalance;
return parent::getbalance("*");
} else {
$dMainBalance = $aAccounts[''];
return $dMainBalance;
return $aAccounts[0];
}
}
public function getdifficulty() {

View File

@ -0,0 +1,12 @@
<?php
$defflip = (!cfip()) ? exit(header('HTTP/1.1 401 Unauthorized')) : 1;
/**
* We extend our CoinBase class
* No need to change anything, base class supports
* scrypt and sha256d
**/
class Coin extends CoinBase {
protected $target_bits = 32;
protected $share_difficulty_precision = 6;
}

View File

@ -7,7 +7,7 @@ $aErrorCodes['E0002'] = 'Upstream shares not found';
$aErrorCodes['E0003'] = 'Failed to change shares order';
$aErrorCodes['E0004'] = 'Failed to reset previous block';
$aErrorCodes['E0005'] = 'Unable to fetch blocks upstream share';
$aErrorCodes['E0006'] = 'Unable to conenct to RPC server backend';
$aErrorCodes['E0006'] = 'Unable to connect to RPC server backend';
$aErrorCodes['E0007'] = 'Out of Order Share detected, autofixed';
$aErrorCodes['E0008'] = 'Failed to delete archived shares';
$aErrorCodes['E0009'] = 'Cron disabled by admin';

View File

@ -58,7 +58,7 @@ class jsonRPCClient {
*/
public function __construct($url, $debug = false) {
$this->url = $url;
$this->debug = $debug;
$this->debug = $debug;
$this->debug_output = '';
$this->id = rand(1, 100);
}
@ -97,7 +97,7 @@ class jsonRPCClient {
'id' => $this->id
);
$request = json_encode($request);
if ($this->debug) $this->debug_output[] = 'Request: '.$request;
if ($this->debug) $this->debug_output = 'Request: '.$request[0];
// performs the HTTP POST
// extract information from URL for proper authentication
@ -112,12 +112,12 @@ class jsonRPCClient {
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$response = curl_exec($ch);
if (curl_errno($ch)) throw new Exception('RPC call failed: ' . curl_error($ch));
if ($this->debug) $this->debug_output[] = 'Response: ' . $response;
if ($this->debug) $this->debug_output = 'Response: ' . $response[0];
$response = json_decode($response, true);
$resultStatus = curl_getinfo($ch);
if ($resultStatus['http_code'] != '200') {
if ($resultStatus['http_code'] == '401') throw new Exception('RPC call did not return 200: Authentication failed');
throw new Exception('RPC call did not return 200: HTTP error: ' . $resultStatus['http_code'] . ' - JSON Response: [' . @$response['error']['code'] . '] ' . @$response['error']['message']);
throw new Exception('RPC call did not return 200: HTTP error: ' . $resultStatus['http_code'] . ' - JSON Response: [' . @$response['error']['code'] . '] ' . @$response['error']['message'], $resultStatus['http_code']);
}
curl_close($ch);

View File

@ -35,11 +35,17 @@ try {
$newerror['description'] = "Blockchain download progress is at an estimated $dDownloadPercentage%. It may take a while to complete.";
$newerror['configvalue'] = "wallet.host";
$newerror['helplink'] = "https://github.com/MPOS/php-mpos/wiki/Config-Setup#wiki-local-wallet-rpc";
$error[] = $newerror;
$error[] = $newerror;
$newerror = null;
}
// check if there is more than one account set on wallet
$accounts = $bitcoin->listaccounts();
try {
$accounts = $bitcoin->listaccounts();
} catch (Exception $e) {
if ($e->getCode() == 404)
$accounts = $bitcoin->listwallets();
}
if (count($accounts) > 1 && $accounts[''] <= 0) {
$newerror = array();
$newerror['name'] = "Coin daemon";

View File

@ -11,14 +11,32 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) {
$debug->append('No cached version available, fetching from backend', 3);
if ($bitcoin->can_connect() === true) {
$dBalance = $bitcoin->getrealbalance();
$labelsCommand = false;
try {
$dWalletAccounts = $bitcoin->listaccounts();
} catch (Exception $e) {
if ($e->getCode() == 404) {
$dWalletAccounts = $bitcoin->listlabels();
$labelsCommand = true;
}
}
$dWalletAccounts = $bitcoin->listaccounts();
$dAddressCount = count($dWalletAccounts);
$dAccountAddresses = array();
foreach($dWalletAccounts as $key => $value)
{
$dAccountAddresses[$key] = $bitcoin->getaddressesbyaccount((string)$key);
if (!($labelsCommand))
$dAccountAddresses[$key] = $bitcoin->getaddressesbyaccount((string)$key);
else {
if (strlen($value) == 0)
$value = "";
foreach ($bitcoin->getaddressesbylabel((string)$value) as $key2 => $value2) {
$dAccountAddresses[$key][$key2] = $value2;
}
}
}
$aGetInfo = $bitcoin->getinfo();
@ -26,7 +44,7 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) {
if ($aGetInfo['connections'] == 0) $aGetInfo['errors'] = 'No peers';
# Check if daemon is downloading the blockchain, estimated
if ($dDownloadPercentage = $bitcoin->getblockchaindownload()) $aGetInfo['errors'] = "Downloading: $dDownloadPercentage%";
$aGetTransactions = $bitcoin->listtransactions('', (int)$setting->getValue('wallet_transaction_limit', 25));
$aGetTransactions = $bitcoin->listtransactions('*', (int)$setting->getValue('wallet_transaction_limit', 25));
if (is_array($aGetInfo) && array_key_exists('newmint', $aGetInfo)) {
$dNewmint = $aGetInfo['newmint'];
} else {
@ -69,6 +87,7 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) {
$smarty->assign("PEERINFO", $aGetPeerInfo);
$smarty->assign('PRECISION', $coin->getCoinValuePrevision());
$smarty->assign("TRANSACTIONS", $aGetTransactions);
$smarty->assign("LABELSCOMMAND", $labelsCommand);
} else {
$debug->append('Using cached page', 3);
}

View File

@ -2,50 +2,75 @@
<div class="col-lg-12">
<div class="panel panel-info">
<div class="panel-heading">
<i class="fa fa-users fa-fw"></i> Wallet Accounts
{if $LABELSCOMMAND}
<i class="fa fa-users fa-fw"></i> Wallet Labels
{else}
<i class="fa fa-users fa-fw"></i> Wallet Accounts
{/if}
</div>
<div class="panel-body ">
<div class="panel-group">
{foreach key=NAME item=VALUE from=$ACCOUNTS}
<div class="panel panel-default">
<div class="panel-heading">
<i class="fa fa-user fa-fw"></i> Account: {$NAME|default:"Default"}
{if $LABELSCOMMAND}
<i class="fa fa-user fa-fw"></i> Label: {$VALUE|default:"Default"}
{else}
<i class="fa fa-user fa-fw"></i> Account: {$NAME|default:"Default"}
{/if}
</div>
<div class="panel-body">
<div class="col-lg-4">
<div class="panel panel-info">
<div class="panel-heading">
<i class="fa fa-money fa-fw"></i> Balance Info
</div>
<div class="table-responsive panel-body no-padding">
<table class="table table-striped table-bordered table-hover">
<tr>
<td class="col-lg-4">Balance</td>
<td class="col-lg-12">{$VALUE|number_format:"8"}</td>
</tr>
</table>
{if (not ($LABELSCOMMAND))}
<div class="col-lg-4">
<div class="panel panel-info">
<div class="panel-heading">
<i class="fa fa-money fa-fw"></i> Balance Info
</div>
<div class="table-responsive panel-body no-padding">
<table class="table table-striped table-bordered table-hover">
<tr>
<td class="col-lg-4">Balance</td>
<td class="col-lg-12">{$VALUE|number_format:"8"}</td>
</tr>
</table>
</div>
</div>
</div>
</div>
{/if}
{foreach key=ACCOUNT item=ADDRESS from=$ACCOUNTADDRESSES}
{if $ACCOUNT == $NAME}
{if $LABELSCOMMAND}
<div class="col-lg-12">
{else}
<div class="col-lg-8">
{/if}
<div class="panel panel-info">
<div class="panel-heading">
<i class="fa fa-book fa-fw"></i> Addresses assigned to Account {$ACCOUNT|default:"Default"}
{if $LABELSCOMMAND}
<i class="fa fa-book fa-fw"></i> Addresses assigned to Label {$VALUE|default:"Default"}
{else}
<i class="fa fa-book fa-fw"></i> Addresses assigned to Account {$ACCOUNT|default:"Default"}
{/if}
</div>
<div class="table-responsive panel-body no-padding">
<table class="table table-striped table-bordered table-hover">
<tbody>
{foreach from=$ACCOUNTADDRESSES[$ACCOUNT] key=ACCOUNT1 item=ADDRESS1}
{if $ADDRESS1@iteration is even by 1}
<td>{$ADDRESS1}</td>
</tr>
{if not $LABELSCOMMAND}
{if $ADDRESS1@iteration is even by 1}
<td>{$ADDRESS1}</td>
</tr>
{else}
<tr>
<td>{$ADDRESS1}</td>
{/if}
{else}
<tr>
<td>{$ADDRESS1}</td>
{foreach from=$ACCOUNT1 key=ACCOUNT2 item=ADDRESS2}
<tr>
<td>{$ADDRESS2}</td>
</tr>
{/foreach}
{/if}
{/foreach}
<tbody>

View File

@ -14,7 +14,11 @@
<th>Peers</th>
<th>Status</th>
<th>Blocks</th>
<th>Accounts</th>
{if $LABELSCOMMAND}
<th>Labels</th>
{else}
<th>Accounts</th>
{/if}
</tr>
</thead>
<tbody>

View File

@ -9,7 +9,11 @@
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th class="text-center">Account</th>
{if $LABELSCOMMAND}
<th class="text-center">Label</th>
{else}
<th class="text-center">Account</th>
{/if}
<th class="text-center">Address</th>
<th class="text-center">Category</th>
<th class="text-right">Amount</th>