selaz / php-eos-rpc-sdk
PHP SDK for the EOS RPC API
Requires
- guzzlehttp/guzzle: ^6.0|^7.0|^8.0
- php-curl-class/php-curl-class: ^8.1
- vlucas/phpdotenv: ^2.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.3
- mockery/mockery: 0.9.*
- phpmetrics/phpmetrics: ^2.2
- phpspec/phpspec: ~2.1
- phpunit/phpunit: ~5.0
This package is not auto-updated.
Last update: 2024-11-12 16:50:50 UTC
README
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