Skip to content
Snippets Groups Projects
jsonRPCClient.php 3.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • beardedwarrior's avatar
    beardedwarrior committed
    <?php
    
    namespace Monero;
    
    
    use GuzzleHttp\Client;
    use GuzzleHttp\Exception\GuzzleException;
    use Illuminate\Support\Facades\Log;
    
    beardedwarrior's avatar
    beardedwarrior committed
    
    /**
     * Class jsonRPCClient
     * JSON 2.0 RPC Client for cryptocurrency wallet
     */
    
    class jsonRPCClient implements Contracts\WalletManager
    
    beardedwarrior's avatar
    beardedwarrior committed
    {
    
    beardedwarrior's avatar
    beardedwarrior committed
    
        /**
    
         * @param array $options
    
    beardedwarrior's avatar
    beardedwarrior committed
         */
    
        public function __construct($options, $client = null)
    
            $this->rpc = new jsonRpcBase($options, $client);
    
    beardedwarrior's avatar
    beardedwarrior committed
    
        /**
    
         * Gets the balance
         *
         * @return int the overall value after inputs unlock
    
    beardedwarrior's avatar
    beardedwarrior committed
         */
    
            $response = $this->rpc->request('get_balance');
    
    beardedwarrior's avatar
    beardedwarrior committed
    
        /**
    
         * Gets the unlocked balance
         *
         * @return int the spendable balance
    
    beardedwarrior's avatar
    beardedwarrior committed
         */
    
            $response = $this->rpc->request('get_balance');
    
    beardedwarrior's avatar
    beardedwarrior committed
    
        /**
    
    beardedwarrior's avatar
    beardedwarrior committed
         *
    
    beardedwarrior's avatar
    beardedwarrior committed
         */
    
    beardedwarrior's avatar
    beardedwarrior committed
        {
    
            $response = $this->rpc->request('get_address');
    
    beardedwarrior's avatar
    beardedwarrior committed
        }
    
        /**
    
    beardedwarrior's avatar
    beardedwarrior committed
         *
    
    beardedwarrior's avatar
    beardedwarrior committed
         */
    
    beardedwarrior's avatar
    beardedwarrior committed
        {
    
            $response = $this->rpc->request('get_height');
    
    beardedwarrior's avatar
    beardedwarrior committed
        }
    
    beardedwarrior's avatar
    beardedwarrior committed
        /**
    
    beardedwarrior's avatar
    beardedwarrior committed
         *
    
         * @param int       $account_index  account index to create subaddress (maajor index)
         * @param string    $label          label to assign to new subaddress
         * 
         * @return array ['address', 'address_index']
    
    beardedwarrior's avatar
    beardedwarrior committed
         */
    
        public function createSubaddress($account_index = 0, $label = '') : array
    
    beardedwarrior's avatar
    beardedwarrior committed
        {
    
            $response = $this->rpc->request('create_address', ['account_index' => $account_index, 'label' => $label]);
    
    beardedwarrior's avatar
    beardedwarrior committed
        }
    
        /**
    
    beardedwarrior's avatar
    beardedwarrior committed
         *
    
    beardedwarrior's avatar
    beardedwarrior committed
         */
    
        public function incomingTransfers($min_height = 0) : array
    
    beardedwarrior's avatar
    beardedwarrior committed
        {
    
            $response = $this->rpc->request('get_transfers', ['pool' => true, 'in' => true, 'min_height' => $min_height, 'filter_by_height' => $min_height > 0 ? true : false]);
    
    beardedwarrior's avatar
    beardedwarrior committed
        }
    
        /**
    
    beardedwarrior's avatar
    beardedwarrior committed
         *
    
         * @param array     $paymentIds list of payment ids to be searched for
         * @param int       $minHeight  the lowest block the search should start with
    
    beardedwarrior's avatar
    beardedwarrior committed
         *
    
         * @return array    payments received since min block height with a payment id provided
    
    beardedwarrior's avatar
    beardedwarrior committed
         */
    
        public function payments($paymentIds, $minHeight) : array
    
    beardedwarrior's avatar
    beardedwarrior committed
        {
    
            $response = $this->rpc->request('get_bulk_payments', ['payment_ids' => $paymentIds, 'min_block_height' => $minHeight]);
    
    beardedwarrior's avatar
    beardedwarrior committed
    
    
        /**
         * creates a uri for easier wallet parsing
         *
         * @param string    $address    address comprising of primary, sub or integrated address
         * @param int       $amount     atomic amount requested
    
         * @param string    $paymentId  payment id when not using integrated addresses
    
         *
         * @return string the uri string which can be used to generate a QR code
         */
    
        public function createUri($address, $amount = null, $paymentId = null) : string
    
    beardedwarrior's avatar
    beardedwarrior committed
        {
    
            $response = $this->rpc->request('make_uri', ['address' => $address, 'amount' => $amount, 'payment_id' => $paymentId]);
    
    beardedwarrior's avatar
    beardedwarrior committed
    
    
        /**
         * creates a random 64 char payment id
         *
         * @return string
         */
        public function generatePaymentId(): string
        {
            return bin2hex(openssl_random_pseudo_bytes(32));
        }
    
    beardedwarrior's avatar
    beardedwarrior committed
    }