A PHP interface for interacting with the Ethereum blockchain and ecosystem.
Inspired by the great work of all previous contributors on web3p/web3.php
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
use Web3\Web3;
$web3 = new Web3('http://localhost:8545');
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)));
[$err, $version] = $web3->clientVersion();
if ($err !== null) {
// do something
return;
}
echo 'Client version: ' . $version;
use Web3\Web3;
$web3 = new Web3('http://localhost:8545');
$eth = $web3->eth;
Or
use Web3\Eth;
$eth = new Eth('http://localhost:8545');
use Web3\Web3;
$web3 = new Web3('http://localhost:8545');
$net = $web3->net;
Or
use Web3\Net;
$net = new Net('http://localhost:8545');
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
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);
$newAccount = '';
[$err, $account] = $web3->personal->newAccount('123456');
if ($err !== null) {
echo 'Error: ' . $err->getMessage();
return;
}
$newAccount = $account;
echo 'New account: ' . $account . PHP_EOL;
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
- 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
vendor/bin/phpunit
Todo.
MIT