web3.php/README.md
2018-01-17 10:50:38 +08:00

191 lines
3.5 KiB
Markdown

# 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