安装
通过Composer来管理依赖关系,首先将minimum-stability设置为dev
"minimum-stability": "dev"% Y; ^1 C: s7 C. _" }" l4 Y& h
然后执行:. D. T, o' i) o! l; Y; e3 j
composer require sc0vu/web3.php dev-master
或者你可以在composer.json中添加这行。4 p- s: v! }. _7 M& r1 `
) n2 E7 z* Q- W
"sc0vu/web3.php": "dev-master", ?' R: K8 D2 c+ b7 F7 y% ?9 s# I* V3 x
用法1 k1 b. ]1 p8 D5 g5 q3 |5 _
实例
- use Web3\Web3;
- $web3 = new Web3('http://localhost:8545');
- 接口调用
- use Web3\Web3;. X: z. C6 f7 ]/ v# R
- use Web3\Providers\HttpProvider;' r7 J( Y8 H% z e
- use Web3\RequestManagers\HttpRequestManager;
- $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));! [) a7 |* u& K7 G8 ^" o& i
- // timeout; l7 K% H: |, [& V" |: U) v( ^1 y
- $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
使用回调函数调用rpc
- $web3->clientVersion(function ($err, $version) {
- if ($err !== null) {
- // do something
- return;" v6 J$ w6 o- l" j1 ?* `+ W
- }/ d/ T8 z% q4 N: e! I9 f1 O
- if (isset($client)) {9 v" ~ i% B& S. f
- echo 'Client version: ' . $version;
- }4 l5 N' ~1 w# L6 ~& B* G: Y7 {+ ^
- });1 D! s5 p5 g" |0 r+ F
- eth1 e$ m4 G* o0 Y1 D
- use Web3\Web3;2 ^6 R" W' k& ]* G, ^& i
- $web3 = new Web3('http://localhost:8545');1 i- W5 a' |) B, {/ v$ t, t" g
- $eth = $web3->eth;
- 这样也行:
- use Web3\Eth;
- $eth = new Eth('http://localhost:8545');; J4 y% X5 I0 D: F, J3 P
- net
- use Web3\Web3;
- $web3 = new Web3('http://localhost:8545');
- $net = $web3->net;9 O+ z& S& Y* W3 A' n
- 或者# A3 e) ~) t8 H$ u3 e
- use Web3\Net;
- $net = new Net('http://localhost:8545');( c+ J" J; Y$ J# H
- batch. F; J# Y; c( B1 v7 m5 O1 O" P
- web30 ?5 H+ r [- G
- $web3->batch(true);
- $web3->clientVersion();2 ~; U8 o. G, I) N! c# h5 Q) B
- $web3->hash('0x1234');
- $web3->execute(function ($err, $data) {8 y% Q8 z, U6 ]3 O2 G
- if ($err !== null) {
- // do something
- // it may throw exception or array of exception depends on error type" x& ~# D4 S2 O* P7 N" C& ?
- // connection error: throw exception
- // json rpc error: array of exception* @/ u8 |7 ?% s( V- ]( h
- return;
- }
- // do something3 B( h& r% r# I3 C$ L1 j% F
- });
- eth$ Z" a$ K: u5 V: z% X+ @6 h Z
- $eth->batch(true);
- $eth->protocolVersion();
- $eth->syncing();
- $eth->provider->execute(function ($err, $data) {9 [; H7 B, m [4 ]" ^( ^; g1 d
- if ($err !== null) {# u0 v: t. A F0 |4 e' N& I
- // do something
- return;# X r1 D" O7 z+ p) c4 A3 M: n
- }+ L1 p F W- z2 g T
- // do something
- });
- net
- $net->batch(true);
- $net->version();! b( b- i, d0 {# M3 t! x
- $net->listening();/ B+ B% P8 |+ M! _
- $net->provider->execute(function ($err, $data) {
- if ($err !== null) {( `7 c: |, o1 H1 ?( ~' ?
- // do something
- return;
- }+ O9 a! D! f4 {% t2 ]
- // do something
- });
- personal* ^( S a& E& l0 Q
- $personal->batch(true);
- $personal->listAccounts();
- $personal->newAccount('123456');
- $personal->provider->execute(function ($err, $data) {: I- x$ f+ Y/ B5 J5 a1 S
- if ($err !== null) {. h. W% X# @+ c( ?: F" V; Z$ ]
- // do something A7 ]% F, O6 i3 O" Y
- return;- @+ _9 j: c* L1 ^6 {
- }, h% ~6 W+ {' Z' G& ~, ] J
- // do something
- });- ?9 F9 `! w8 A( Z* T
- 智能合约Contract
- use Web3\Contract;- @( \) B m0 k) S' t! m- M/ o
- $contract = new Contract('http://localhost:8545', $abi);
- // deploy contract% A6 a) o. c% H [# @4 p
- $contract->bytecode($bytecode)->new($params, $callback);
- // call contract function/ A" N1 ~/ }% ?1 g; n5 k! l
- $contract->at($contractAddress)->call($functionName, $params, $callback);3 G7 `7 }) {3 t9 W$ w5 A8 W
- // change function state ]! ~% J) D0 s. k/ n
- $contract->at($contractAddress)->send($functionName, $params, $callback);
- // estimate deploy contract gas! E; @! P& G* P# E0 w+ f
- $contract->bytecode($bytecode)->estimateGas($params, $callback);( x$ Z! G% W, j8 [$ B& Y% F
- // estimate function gas
- $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);
- // get constructor data4 o5 ` f& x1 _+ R, w. j) |9 v$ O
- $constructorData = $contract->bytecode($bytecode)->getData($params);
- // get function data J R: c, f% d! m( E
- $functionData = $contract->at($contractAddress)->getData($functionName, $params);
- 将值分配给外部域(从回调域到域外)1 W9 P6 V! L. f* [
- 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。
- $newAccount = '';4 n/ ]" R' l g) V: K w
- $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {
- if ($err !== null) {( h5 q& b$ K7 N4 g
- echo 'Error: ' . $err->getMessage();
- return;$ q% \5 g/ j" H& @( M1 ~! X
- }
- $newAccount = $account;
- echo 'New account: ' . $account . PHP_EOL;( U1 m% ]) a; F. X/ x4 u2 Z/ C0 p
- });
" U/ D6 V+ J/ e( a: q) |6 S
php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。