A PHP interface for interacting with the Ethereum blockchain and ecosystem.
Inspired by the great work of all previous contributors on web3p/web3.php
Install
Add this to your composer.json
"repositories": [ { "type": "vcs", "url": "https://github.com/thtg88/web3.php" } ], "require": { "web3p/web3.php": "dev-master" }
Then execute the following from terminal
composer require web3p/web3.php
Usage
New instance
use Web3\Web3; $web3 = new Web3('http://localhost:8545');
Using provider
use Web3\Web3; use Web3\Providers\HttpProvider; use Web3\RequestManagers\HttpRequestManager; $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545'))); // timeout $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
You can use callback to each rpc call:
[$err, $version] = $web3->clientVersion(); if ($err !== null) { // do something return; } echo 'Client version: ' . $version;
Eth
use Web3\Web3; $web3 = new Web3('http://localhost:8545'); $eth = $web3->eth;
Or
use Web3\Eth; $eth = new Eth('http://localhost:8545');
Net
use Web3\Web3; $web3 = new Web3('http://localhost:8545'); $net = $web3->net;
Or
use Web3\Net; $net = new Net('http://localhost:8545');
Batch
web3
[$errors, $data] = $web3->batch() ->clientVersion() ->hash('0x1234') ->execute(); if ($errors !== null) { // do something // it may throw exception or array of exception depends on error type // connection error: throw exception // json rpc error: array of exception return; } // do something
eth
$eth->batch() ->protocolVersion() ->syncing() ->execute(); if ($errors !== null) { // do something return; } // do something
net
$net->batch() ->version() ->listening() ->execute(); if ($errors !== null) { // do something return; } // do something
personal
$personal->batch() ->listAccounts() ->newAccount('123456') ->execute(); if ($errors !== null) { // do something return; } // do something
Contract
use Web3\Contract; $contract = new Contract('http://localhost:8545', $abi); // deploy contract $contract->bytecode($bytecode)->new($params, $callback); // call contract function $contract->at($contractAddress)->call($functionName, $params, $callback); // change function state $contract->at($contractAddress)->send($functionName, $params, $callback); // estimate deploy contract gas $contract->bytecode($bytecode)->estimateGas($params, $callback); // estimate function gas $contract->at($contractAddress)->estimateGas($functionName, $params, $callback); // get constructor data $constructorData = $contract->bytecode($bytecode)->getData($params); // get function data $functionData = $contract->at($contractAddress)->getData($functionName, $params);
Assign value to outside scope(from callback scope to outside scope)
$newAccount = ''; [$err, $account] = $web3->personal->newAccount('123456'); if ($err !== null) { echo 'Error: ' . $err->getMessage(); return; } $newAccount = $account; echo 'New account: ' . $account . PHP_EOL;
Examples
To run examples, you need to run ethereum blockchain local (testrpc).
You can use Ganache to set up a testchain and expose it on port 8545
Develop
Local php cli installed
- Clone the repo and install packages.
git clone https://github.com/thtg88/web3.php.git && cd web3.php && composer install
-
Start Ganache workspace on port 8545
-
Change testHost in
TestCase.php
/**
* testHost
*
* @var string
*/
protected $testHost = 'http://127.0.0.1:8545';
- Run test script
API
Todo.
License
MIT