Giter Site home page Giter Site logo

php-eos-rpc-sdk's Introduction

The PHP SDK for the EOS RPC API

A PHP wrapper for the EOS Chain/Wallet RPC API.

Background

You can check out the RPC API reference but beware that some of the newer methods are missing. Wallet RPC APIs are implemented as v1.1.0 of RPC API reference. Also, some of the examples in those docs use outdated syntax.

Installing

composer require manamine/php-eos-rpc-sdk

Configuration

Create a dotenv .env file in the project root, with your favorite RPC API host and KEOSD. You can use .env.example as a template:

cp .env.example .env

Usage

There is a shiny factory method to auto instantiate all dependencies:

$api = (new ChainFactory)->api();
$walapi = (new WalletFactory)->api();
$eos = (new EosRpc($api, $walapi));

Examples

To get you started, there is a simple example runner which covers all API commands.

Just run this via cli to see example output for all commands:

cd examples
php chain.php
php wallet.php
php eosrpc.php

API Methods

Almost Chain/Wallet API methods are covered.

Chain APIs

Get Info

Get latest information related to a node

echo $api->getInfo();

Get Block

Get information related to a block

echo $api->getBlock("1337");

Get Block Header State

Get information related to a block header state

echo $api->getBlockHeaderState("0016e48707b181d93117b07451d9837526eba34a9a37125689fb5a73a5d28a38");

Get Account

Get information related to an account

$api->getAccount("blockmatrix1");

Get Code

Fetch smart contract code

echo $api->getCode("eosio.token");

Get Table Rows

Fetch smart contract data from an account

echo $api->getTableRows("eosio", "eosio", "producers", ["limit" => 10]);

Get Currency Balance

Fetch currency balance(s) for an account

echo $api->getCurrencyBalance("eosio.token", "eosdacserver");

Get Currency Stats

Fetch stats for a currency

echo $api->getCurrencyStats("eosio.token", "EOS");

Get ABI

Get an account ABI

echo $api->getAbi("eosio.token");

Get Raw Code and ABI

Get raw code and ABI

echo $api->getRawCodeAndAbi("eosio.token");

Get Producers

List the producers

echo $api->getProducers(10);

ABI JSON To Bin

Serialize json to binary hex

echo $api->abiJsonToBin("eosio.token", "transfer", ["blockmatrix1", "blockmatrix1", "7.0000 EOS", "Testy McTest"]);

ABI Bin To JSON

Serialize back binary hex to json

echo $api->abiBinToJson("eosio.token", "transfer", "10babbd94888683c10babbd94888683c701101000000000004454f53000000000c5465737479204d6354657374");

Get Required Keys

Get the required keys needed to sign a transaction

echo $api->getRequiredKeys(
     [
         "expiration" => "2018-08-23T05.00.00",
         "ref_block_num" => 15078,
         "ref_block_prefix" => 1071971392,
         "max_net_usage_words" => 0,
         "delay_sec" => 0,
         "context_free_actions" => [],
         "actions" => [
             [
                 "account" => "eosio.token",
                 "name" => "transfer",
                 "authorization" => [
                     [
                         "actor" => "user",
                         "permission" => "active"
                     ]
                 ],
                 "data" => "00000000007015d6000000005c95b1ca102700000000000004454f53000000000c757365722d3e746573746572"
             ]
         ],
         "transaction_extensions" => []
     ],
     [
         "EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4"
     ]
 );

Push Transaction

Push a transaction

echo $api->pushTransaction("2018-08-23T05:29:39", "15780", "90170226",
    [
        "actions" => [
            [
                "account" => "eosio.token",
                "name" => "transfer",
                "authorization" => [
                    [
                        "actor" => "user",
                        "permission" => "active"
                    ]
                ],
                "data" => "00000000007015d6000000005c95b1ca102700000000000004454f53000000000c757365722d3e746573746572"
            ]
        ],
        "signatures" => [
            "SIG_K1_KaGHyi59BRqfaDUK6424TYEWcUhWxAG7BLCgYC8vwYNgaHgGLpduTUbNQEsfL8xLzboK8W9T2X69bNpqozTQVCbRSNJWFd"
        ]
    ]
);

Push Transactions

Push transactions

echo $api->pushTransactions(
    [
        [
            "compression" => "none",
            "transaction" => [
                "expiration" => "2018-08-23T06:27:26",
                "ref_block_num" => 22017,
                "ref_block_prefix" => 3920123292,
                "context_free_actions" => [],
                "actions" => [
                    [
                        "account" => "eosio.token",
                        "name" => "transfer",
                        "authorization" => [
                            [
                                "actor" => "user",
                                "permission" => "active"
                            ]
                        ],
                        "data" => "00000000007015d6000000005c95b1ca102700000000000004454f53000000000c757365722d3e746573746572"
                    ]
                ],
                "transaction_extensions" => []
            ],
            "signatures" => [
                "SIG_K1_JzN9DnpyhKfjoef3C2TZBTPA5b6ftwuEBnBpvzkueVXThJ34PFFpUFgqyayfXjeLRc15JmZmDiMYAFX99hUgX8vkGAYcnx"
            ]
        ],
        [
            "compression" => "none",
            "transaction" => [
                "expiration" => "2018-08-23T06:27:26",
                "ref_block_num" => 22017,
                "ref_block_prefix" => 3920123292,
                "context_free_actions" => [],
                "actions" => [
                    [
                        "account" => "eosio.token",
                        "name" => "transfer",
                        "authorization" => [
                            [
                                "actor" => "tester",
                                "permission" => "active"
                            ]
                        ],
                        "data" => "000000005c95b1ca00000000007015d6881300000000000004454f53000000000c7465737465722d3e75736572"
                    ]
                ],
                "transaction_extensions" => []
            ],
            "signatures" => [
                "SIG_K1_KZ2M4AG59tptdRCpqbwzMQvBv1dce5btJCJiCVVy96fTGepApGXqJAwsi17g8AQdJjUQB4R62PprfdUdRYHGdBqK1z9Sx9"
            ]
        ]
    ]
);

Wallet APIs

Create

Creates a new wallet with the given name

echo $walapi->create("testwallet");

Open

Opens an existing wallet of the given name

echo $walapi->open("testwallet");

Lock

Locks an existing wallet of the given name

echo $walapi->lock("testwallet");

Lock All

Locks all existing wallets

echo $walapi->lockAll();

Unlock

Unlocks a wallet with the given name and password

echo $walapi->unlock(["testwallet", "PW5Jb8RAZP6CBjjMLPser3T8i8k9hZXZkMBJ8kb1p6f6hAg2n68jY"]);

Import Key

Imports a private key to the wallet of the given name

echo $walapi->importKey(["testwallet", "5Jmsawgsp1tQ3GD6JyGCwy1dcvqKZgX6ugMVMdjirx85iv5VyPR"]);

Remove Key

Removes a key pair from the wallet of the given name

echo $walapi->removeKey(["testwallet", "PW5Jb8RAZP6CBjjMLPser3T8i8k9hZXZkMBJ8kb1p6f6hAg2n68jY", "EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4"]);

Create Key

Creates a key pair and import

echo $walapi->createKey(["testwallet", "K1"]);

List Wallets

Lists all wallets

echo $walapi->listWallets();

List Keys

Lists all key pairs from the wallet of the given name and password

echo $walapi->listKeys(["testwallet", "PW5Jb8RAZP6CBjjMLPser3T8i8k9hZXZkMBJ8kb1p6f6hAg2n68jY"]);

Get Public Keys

Lists all public keys across all wallets

echo $walapi->getPublicKeys();

Set Timeout

Sets wallet auto lock timeout (in seconds)

echo $walapi->setTimeout(60);

Sign Transaction

Signs a transaction

echo $walapi->signTransaction(
    [
        "expiration" => "2018-08-23T06:35:30",
        "ref_block_num" => 22985,
        "ref_block_prefix" => 3016594541,
        "max_net_usage_workds" => 0,
        "delay_sec" => 0,
        "context_free_actions" => [],
        "actions" => [
            [
                "account" => "eosio.token",
                "name" => "transfer",
                "authorization" => [
                    [
                        "actor" => "user",
                        "permission" => "active"
                    ]
                ],
                "data" => "00000000007015d6000000005c95b1ca102700000000000004454f53000000000c757365722d3e746573746572"
            ]
        ],
        "transaction_extensions" => []
    ],
    [
        "EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4"
    ],
    "cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f"
);

EOS Wrapper APIs

Prerequisites

Need to set wallet name and password

$eos->setWalletInfo("testwallet", "PW5Jb8RAZP6CBjjMLPser3T8i8k9hZXZkMBJ8kb1p6f6hAg2n68jY");

Push Transaction

Push a transaction

echo $eos->pushTransaction(
    [
        [
            "account" => "eosio.token",
            "name" => "transfer",
            "authorization" => [
                [
                    "actor" => "user",
                    "permission" => "active"
                ]
            ],
            "data" => [
                "from" => "user",
                "to" => "tester",
                "quantity" => "1.0000 EOS",
                "memo" => "memo"
            ]
        ]
    ]
);

Make Transaction

Make a transaction (useful for pushTransactions)

$trx = $eos->makeTransaction(
    [
        [
            "account" => "eosio.token",
            "name" => "transfer",
            "authorization" => [
                [
                    "actor" => "user",
                    "permission" => "active"
                ]
            ],
            "data" => [
                "from" => "user",
                "to" => "tester",
                "quantity" => "1.0000 EOS",
                "memo" => "memo"
            ]
        ]
    ]
);

Push Transactions

Push transactions

$trx_ids = $eos->pushTransactions(
    [
        $eos->makeTransaction(
            [
                [
                    "account" => "eosio.token",
                    "name" => "transfer",
                    "authorization" => [
                        [
                            "actor" => "user",
                            "permission" => "active"
                        ]
                    ],
                    "data" => [
                        "from" => "user",
                        "to" => "tester",
                        "quantity" => "1.0000 EOS",
                        "memo" => "memo"
                    ]
                ]
            ]
        ),
        $eos->makeTransaction(
            [
                [
                    "account" => "eosio.token",
                    "name" => "transfer",
                    "authorization" => [
                        [
                            "actor" => "tester",
                            "permission" => "active"
                        ]
                    ],
                    "data" => [
                        "from" => "tester",
                        "to" => "user",
                        "quantity" => "0.5000 EOS",
                        "memo" => "memo"
                    ]
                ]
            ]
        )
    ]
);
foreach ($trx_ids as $key => $value) {
    echo $trx_ids[$key]['transaction_id'] . PHP_EOL;
}

Push Action

Push an action

echo $eos->pushAction("eosio", "buyram", ["payer"=>"tester","receiver"=>"tester","quant"=>"1.0000 EOS"], ["actor"=>"tester","permission"=>"active"]);

Transfer

Transfers token

echo $eos->transfer("user", "tester", "1.0000 EOS", "memo");

Create Key Pair

Creates a key pair and returns

$keyPair = $eos->createKeyPair("K1");
echo "$keyPair[0], $keyPair[1]";

Tests

To run the test suites, simply execute:

vendor/bin/phpunit

If you wanna get fancy and check code coverage:

vendor/bin/phpunit --coverage-html tests/coverage

If you're really bored, you might wanna run some static analysis:

vendor/bin/phpmetrics --report-html="tests/static" .

Contributing

All contributions are welcome! Just fire up a PR, make sure your code style is PSR-2 compliant:

vendor/bin/php-cs-fixer fix --verbose

License

Free for everyone!

MIT License

php-eos-rpc-sdk's People

Contributors

alienzin avatar crypto2 avatar pete001 avatar skirmantasjanuskas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

php-eos-rpc-sdk's Issues

composer error

composer require manamine/php-eos-rpc-sdk

Using version ^1.5 for manamine/php-eos-rpc-sdk
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

Problem 1
- Installation request for manamine/php-eos-rpc-sdk ^1.5 -> satisfiable by manamine/php-eos-rpc-sdk[v1.5].
- Conclusion: remove vlucas/phpdotenv v3.6.0
- Conclusion: don't install vlucas/phpdotenv v3.6.0
- manamine/php-eos-rpc-sdk v1.5 requires vlucas/phpdotenv ^2.4 -> satisfiable by vlucas/phpdotenv[2.4.x-dev, 2.5.x-dev, 2.6.x-dev, v2.4.0, v2.5.0, v2.5.1, v2.5.2, v2.6.0, v2.6.1].
- Can only install one of: vlucas/phpdotenv[2.4.x-dev, v3.6.0].
- Can only install one of: vlucas/phpdotenv[2.5.x-dev, v3.6.0].
- Can only install one of: vlucas/phpdotenv[2.6.x-dev, v3.6.0].
- Can only install one of: vlucas/phpdotenv[v2.4.0, v3.6.0].
- Can only install one of: vlucas/phpdotenv[v2.5.0, v3.6.0].
- Can only install one of: vlucas/phpdotenv[v2.5.1, v3.6.0].
- Can only install one of: vlucas/phpdotenv[v2.5.2, v3.6.0].
- Can only install one of: vlucas/phpdotenv[v2.6.0, v3.6.0].
- Can only install one of: vlucas/phpdotenv[v2.6.1, v3.6.0].
- Installation request for vlucas/phpdotenv (locked at v3.6.0) -> satisfiable by vlucas/phpdotenv[v3.6.0].

Installation failed, reverting ./composer.json to its original content.

Thanks

KEOSD is required locally?

Hi, i'm trying your library.
I see the KEOSD endpoint is defined on local host, there i a way to not be forced to install it on server ?

create account

Can't you create an account?Just some query message interfaces.

requires guzzlehttp/guzzle ~6.0

manamine/php-eos-rpc-sdk dev-master requires guzzlehttp/guzzle ~6.0 -> found guzzlehttp/guzzle[6.0.0, ..., 6.5.5] but it conflicts with your root composer.json require (^7.3).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.