# web3.php [![Build Status](https://travis-ci.org/sc0Vu/web3.php.svg?branch=master)](https://travis-ci.org/sc0Vu/web3.php) [![codecov](https://codecov.io/gh/sc0Vu/web3.php/branch/master/graph/badge.svg)](https://codecov.io/gh/sc0Vu/web3.php) [![Join the chat at https://gitter.im/web3-php/web3.php](https://img.shields.io/badge/gitter-join%20chat-brightgreen.svg)](https://gitter.im/web3-php/web3.php) A php interface for interacting with the Ethereum blockchain and ecosystem. # Install Set minimum stability to dev ``` "minimum-stability": "dev" ``` Then ``` composer require sc0vu/web3.php dev-master ``` Or you can add this line in composer.json ``` "sc0vu/web3.php": "dev-master" ``` # 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'))); ``` ### You can use callback to each rpc call: ``` $web3->clientVersion(function ($err, $version) { if ($err !== null) { // do something return; } if (isset($client)) { 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 ``` $web3->batch(true); $web3->clientVersion(); $web3->hash('0x1234'); $web3->execute(function ($err, $data) { if ($err !== 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(true); $eth->protocolVersion(); $eth->syncing(); $eth->provider->execute(function ($err, $data) { if ($err !== null) { // do something return; } // do something }); ``` net ``` $net->batch(true); $net->version(); $net->listening(); $net->provider->execute(function ($err, $data) { if ($err !== null) { // do something return; } // do something }); ``` personal ``` $personal->batch(true); $personal->listAccounts(); $personal->newAccount('123456'); $personal->provider->execute(function ($err, $data) { if ($err !== 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->bytecode($bytecode)->estimateGas($functionName, $params, $callback); ``` # Examples To run examples, you need to run ethereum blockchain local (testrpc). If you are using docker as development machain, you can try [ethdock](https://github.com/sc0vu/ethdock) to run local ethereum blockchain, just simply run `docker-compose up -d testrpc` and expose the `8545` port. # API Todo. # License MIT