安装9 D: k* I3 W+ g0 b8 \
通过Composer来管理依赖关系,首先将minimum-stability设置为dev
"minimum-stability": "dev"1 i) k4 |& C& O0 E/ P/ E, C1 B
然后执行:
composer require sc0vu/web3.php dev-master! {! T/ Z9 H% J9 P9 B
或者你可以在composer.json中添加这行。
4 T& ~8 z0 {+ Q5 U$ I1 T
"sc0vu/web3.php": "dev-master". a0 P' k( J% G3 e% a: r* }$ J! u
用法
实例
- use Web3\Web3;
- $web3 = new Web3('http://localhost:8545');
- 接口调用0 n6 ?! `& g9 ?' g
- 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)));
使用回调函数调用rpc A, s; G. ~- p0 ?2 i
- $web3->clientVersion(function ($err, $version) {
- if ($err !== null) {
- // do something' \# ~! H* E5 ^
- return;
- }
- if (isset($client)) {) E7 C2 ]7 o8 X: R
- echo 'Client version: ' . $version; Q, p0 T/ Y! ~
- }; f8 Q, F1 x2 G- N
- });
- eth' C8 s1 @. Y% N
- use Web3\Web3;- `$ h; O' w5 ~" g8 `5 K
- $web3 = new Web3('http://localhost:8545');( }* F/ Z$ s5 ?0 f7 N5 x
- $eth = $web3->eth;8 N3 d0 t- N0 }" y2 L q `7 g! r
- 这样也行:
- use Web3\Eth;
- $eth = new Eth('http://localhost:8545');1 b1 ^: P* W# E6 {( `
- net
- use Web3\Web3;: P6 M% n7 I* i4 w, |2 Q
- $web3 = new Web3('http://localhost:8545');
- $net = $web3->net;/ l" o2 @# I, T& g
- 或者; C; c; K" O) z# g' b, E# k
- use Web3\Net;! Q( C. X1 P7 z" ]- n
- $net = new Net('http://localhost:8545');
- batch" R5 u& n8 o U
- web3; v1 n5 h, a0 D k3 Z" q
- $web3->batch(true);. _; J4 h ?6 J- S, E
- $web3->clientVersion();
- $web3->hash('0x1234');+ }7 q3 b" _4 {) v& k6 [" N
- $web3->execute(function ($err, $data) {0 l# b% I) R2 x2 P$ v
- if ($err !== null) {9 _; Y3 z' s; T! B' X
- // do something6 l- t n8 m. s; W5 `3 I5 N q8 T
- // it may throw exception or array of exception depends on error type
- // connection error: throw exception( i! f6 n9 u. r$ K2 \) s- F' k
- // json rpc error: array of exception
- return;
- }
- // do something
- });2 P. F( p8 J' {2 R
- eth
- $eth->batch(true);" q3 E, V' E+ N' V" F! }
- $eth->protocolVersion();( ~0 b1 `* X9 W
- $eth->syncing();0 E! e: e9 w8 z8 t3 w" ~
- $eth->provider->execute(function ($err, $data) {9 C7 S& i5 C* n/ _- P
- if ($err !== null) {
- // do something4 m: l2 }& Y {/ R! }$ H5 L
- return;$ r2 }$ S2 M2 c$ H
- }
- // do something* B! G2 j* D, @, q( M* F6 ~
- });. J. j" ~7 |- o( b2 |! w" F
- net* E5 `+ ^( X2 ]
- $net->batch(true);2 p3 C( J3 J, O) [. q# K d
- $net->version();8 d! v/ s% h5 A" g' w3 r' H, y
- $net->listening();4 x0 D9 ^% O) T! v
- $net->provider->execute(function ($err, $data) {& e+ W- B9 b( ?% F. I9 ?- y: ~
- if ($err !== null) {+ `: b) m* }+ m+ W7 [
- // do something
- return;1 v/ i' `+ E1 ~8 U
- }/ g7 n2 O% p I1 B
- // do something' W, M8 j! L) z4 k: T' O% N. ]
- });9 |! x' }% [+ F& h; u0 M
- personal* P- a, H2 ~$ e& I; V$ V# f0 D
- $personal->batch(true);
- $personal->listAccounts();
- $personal->newAccount('123456');" D' [, H1 X: A
- $personal->provider->execute(function ($err, $data) { @6 g3 z6 d/ P. S& h$ O
- if ($err !== null) {( e- d3 I( [0 R; C; M0 s
- // do something
- return;
- }
- // do something
- });* p+ c9 j2 D3 b# m( \8 C# { E
- 智能合约Contract
- use Web3\Contract;# i/ M/ l. R* \! ~
- $contract = new Contract('http://localhost:8545', $abi);
- // deploy contract& G! e$ o6 V3 f! x; L$ l7 U1 _! L
- $contract->bytecode($bytecode)->new($params, $callback);; i, R/ _# k% W, u) H4 }" j
- // call contract function& X/ M# j' o# K) d
- $contract->at($contractAddress)->call($functionName, $params, $callback);
- // change function state8 @! T8 z* Y0 O: B
- $contract->at($contractAddress)->send($functionName, $params, $callback);6 @, @. n, Z& n; m& X
- // estimate deploy contract gas3 Y7 Q% p4 ~9 s- f: Q( F( B" M
- $contract->bytecode($bytecode)->estimateGas($params, $callback);
- // estimate function gas/ F) z: T2 n7 ?6 {/ |
- $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);
- // get constructor data$ ^/ \, I! o7 }, O
- $constructorData = $contract->bytecode($bytecode)->getData($params);
- // get function data
- $functionData = $contract->at($contractAddress)->getData($functionName, $params);
- 将值分配给外部域(从回调域到域外)
- 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。: m- ^( t0 d$ {
- $newAccount = '';% b F( R8 t% w/ F& ], ]7 z) X
- $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {
- if ($err !== null) {
- echo 'Error: ' . $err->getMessage();
- return;
- }8 }) g* e6 i& q$ X
- $newAccount = $account;, V1 }' E! S* ?. u7 \/ M
- echo 'New account: ' . $account . PHP_EOL;
- });
php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。