php-mpos/public/include/classes/bitcoinwrapper.class.php
Sebastian Grewe 71aca7e0af [UPDATE] Getbalance wrapper
We need to wrap our getbalance call due to issues in the coind and
payout systems in the RPC. Apparently it's having issues with multiple
accounts setup in a single wallet. Sendmany can not properly use other
accounts added to the wallet as the payout account.

Hence we wrap our getbalance call in the RPC and only return the default
account balance at all times. Since this is used for all payouts and for
payments from blocks, there should be no issue. Those pools running
multiple accounts in their wallet will have to move their coins into the
default wallet!
2014-02-12 16:21:24 +01:00

88 lines
3.7 KiB
PHP

<?php
$defflip = (!cfip()) ? exit(header('HTTP/1.1 401 Unauthorized')) : 1;
/**
* We use a wrapper class around BitcoinClient to add
* some basic caching functionality and some debugging
**/
class BitcoinWrapper extends BitcoinClient {
public function __construct($type, $username, $password, $host, $debug_level, $debug_object, $memcache) {
$this->type = $type;
$this->username = $username;
$this->password = $password;
$this->host = $host;
// $this->debug is already used
$this->oDebug = $debug_object;
$this->memcache = $memcache;
$debug_level > 0 ? $debug_level = true : $debug_level = false;
return parent::__construct($this->type, $this->username, $this->password, $this->host, '', $debug_level);
}
/**
* Wrap variouns methods to add caching
**/
// Caching this, used for each can_connect call
public function getinfo() {
$this->oDebug->append("STA " . __METHOD__, 4);
if ($data = $this->memcache->get(__FUNCTION__)) return $data;
return $this->memcache->setCache(__FUNCTION__, parent::getinfo(), 30);
}
public function getmininginfo() {
$this->oDebug->append("STA " . __METHOD__, 4);
if ($data = $this->memcache->get(__FUNCTION__)) return $data;
return $this->memcache->setCache(__FUNCTION__, parent::getmininginfo(), 30);
}
// Wrapper to check our wallet balance from the DEFAULT account only
public function getbalance() {
$this->oDebug->append("STA " . __METHOD__, 4);
$aAccounts = parent::listaccounts();
return $aAccounts[''];
}
public function getblockcount() {
$this->oDebug->append("STA " . __METHOD__, 4);
if ($data = $this->memcache->get(__FUNCTION__)) return $data;
return $this->memcache->setCache(__FUNCTION__, parent::getblockcount(), 30);
}
public function getdifficulty() {
$this->oDebug->append("STA " . __METHOD__, 4);
if ($data = $this->memcache->get(__FUNCTION__)) return $data;
$data = parent::getdifficulty();
// Check for PoS/PoW coins
if (is_array($data) && array_key_exists('proof-of-work', $data))
$data = $data['proof-of-work'];
return $this->memcache->setCache(__FUNCTION__, $data, 30);
}
public function getestimatedtime($iCurrentPoolHashrate) {
$this->oDebug->append("STA " . __METHOD__, 4);
if ($iCurrentPoolHashrate == 0) return 0;
if ($data = $this->memcache->get(__FUNCTION__)) return $data;
$dDifficulty = $this->getdifficulty();
return $this->memcache->setCache(__FUNCTION__, $dDifficulty * pow(2,32) / $iCurrentPoolHashrate, 30);
}
public function getnetworkhashps() {
$this->oDebug->append("STA " . __METHOD__, 4);
if ($data = $this->memcache->get(__FUNCTION__)) return $data;
try {
$dNetworkHashrate = $this->getmininginfo();
if (is_array($dNetworkHashrate)) {
if (array_key_exists('networkhashps', $dNetworkHashrate)) {
$dNetworkHashrate = $dNetworkHashrate['networkhashps'];
} else if (array_key_exists('hashespersec', $dNetworkHashrate)) {
$dNetworkHashrate = $dNetworkHashrate['hashespersec'];
} else if (array_key_exists('netmhashps', $dNetworkHashrate)) {
$dNetworkHashrate = $dNetworkHashrate['netmhashps'] * 1000 * 1000;
} else {
// Unsupported implementation
$dNetworkHashrate = 0;
}
}
} catch (Exception $e) {
// getmininginfo does not exist, cache for an hour
return $this->memcache->setCache(__FUNCTION__, 0, 3600);
}
return $this->memcache->setCache(__FUNCTION__, $dNetworkHashrate, 30);
}
}
// Load this wrapper
$bitcoin = new BitcoinWrapper($config['wallet']['type'], $config['wallet']['username'], $config['wallet']['password'], $config['wallet']['host'], $config['DEBUG'], $debug, $memcache);