Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互.+ o) `% L  Y; j; L  h4 |
安装
9 D8 e; z0 f7 _# \通过Composer来管理依赖关系,首先将minimum-stability设置为dev
) [% O# @) I) @" }% f7 W4 ^"minimum-stability": "dev"
3 k0 ^) a* w0 O! x! [% D- `  P' K然后执行:% m6 n; \/ c$ ]9 k& ]! N
composer require sc0vu/web3.php dev-master, d( ~. ~; u6 \8 U% D7 w
或者你可以在composer.json中添加这行。! A  s2 U/ s& F0 o0 @4 _

. ~5 {2 }8 G& E: w" n5 E"sc0vu/web3.php": "dev-master"# i0 y7 d4 ~$ }$ f- g0 W
用法, R8 e3 Z# B+ O: N( T
实例( w( d  Z+ S, W' i
  1. use Web3\Web3;
    7 j$ F9 D! n$ `+ y
  2. $web3 = new Web3('http://localhost:8545');
    7 `6 j! w  z$ G% I; Z& c
  3. 接口调用
    ! i& E8 S3 ]5 g+ Y/ y
  4. use Web3\Web3;& d8 T$ a% Y& ?. y" f, I$ q
  5. use Web3\Providers\HttpProvider;' x, f9 n! D& i% g3 V
  6. use Web3\RequestManagers\HttpRequestManager;5 E0 }7 w+ G7 P/ M3 p9 x
  7. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));! E, }' Z: ?' |/ I5 a* P- i
  8. // timeout
    9 _$ l' k" u4 E1 c) o. J( p: q
  9. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
复制代码

) F0 J3 ?. e9 L" G使用回调函数调用rpc
3 p+ V- u. o, v/ n$ M
  1. $web3->clientVersion(function ($err, $version) {8 ]# B) F" s! F
  2.     if ($err !== null) {" N9 D% L, r0 M& a: E; S( `
  3.         // do something( P5 T1 x8 u! V: H1 S/ V8 S5 U. F
  4.         return;, h" t& l% J! R" ], F
  5.     }8 o5 B' a5 ~3 r0 d' z2 q
  6.     if (isset($client)) {; k& v  S0 L* {. J9 m6 R2 D( _" d; v% a
  7.         echo 'Client version: ' . $version;
    5 r) U8 p% T' q9 x5 J
  8.     }
    ) \& s, W* e% T) j
  9. });
    0 p2 x7 J/ k! P) e
  10. eth, S  k5 z& f: ~) t3 Y, p7 V
  11. use Web3\Web3;) M# Q5 Q" c( H$ c. g
  12. $web3 = new Web3('http://localhost:8545');
    7 R" O" {% L' L
  13. $eth = $web3->eth;3 Y6 q# L1 X$ q& K# f. ]
  14. 这样也行:
    + @3 q2 w% ?9 U
  15. use Web3\Eth;, P& R- N9 d# L7 l7 u$ P- d
  16. $eth = new Eth('http://localhost:8545');5 T" l. c+ O/ C
  17. net* V2 S) D. M, o% {2 G
  18. use Web3\Web3;
    ) i3 p$ L" x1 [6 W! i% _
  19. $web3 = new Web3('http://localhost:8545');
    " c6 k' q& s7 q7 k1 _5 `$ ?
  20. $net = $web3->net;
    & }8 w$ K$ J0 F; b% w
  21. 或者
    ! s* B, W! U0 H% t" c/ r! _+ `% D+ I
  22. use Web3\Net;
    9 ^& A" C0 h- h* S$ C( e! t
  23. $net = new Net('http://localhost:8545');; e' u& ^) m6 B& f1 _, O4 Q6 R% k
  24. batch
    6 k) p* P; @8 m% H9 u
  25. web31 H# i7 b9 G; A; s( S
  26. $web3->batch(true);0 q3 ]$ T9 `  A# }  O5 X( Q
  27. $web3->clientVersion();0 n0 v; q& p8 I
  28. $web3->hash('0x1234');
    ' d; b3 g. W& U+ P% R0 z* c- ?
  29. $web3->execute(function ($err, $data) {( ?* A: M; T2 d  {/ p, v& h
  30.     if ($err !== null) {: x2 O# r2 X( \/ G( i; _
  31.         // do something4 `' H# G" Y' n
  32.         // it may throw exception or array of exception depends on error type
    * a: S$ X' ]7 U. y' K
  33.         // connection error: throw exception
    ) J- i& h! K; ?# G. `
  34.         // json rpc error: array of exception3 J' n4 X- r# c$ n- a: r$ T% v
  35.         return;/ }' p. G1 v9 b9 L6 g$ D1 s* [8 l
  36.     }
    2 c; y1 _+ e1 t7 I
  37.     // do something
    0 D' g$ i  |8 R5 N
  38. });. @* ?+ \, o* G! r
  39. eth3 X% ~2 j7 k3 Y$ z, {( D$ f3 m
  40. $eth->batch(true);
    5 W7 z( p% |0 W3 V  c$ W; {
  41. $eth->protocolVersion();2 n, E5 I1 g+ t* F# k1 l# J
  42. $eth->syncing();# X5 N7 l- {7 R: i) f4 g/ n
  43. $eth->provider->execute(function ($err, $data) {& L2 d) \4 x" O6 N  S# o
  44.     if ($err !== null) {! q5 X" U2 b  U& F
  45.         // do something
      e* W) U$ Z+ z$ q1 B
  46.         return;+ `& i, m" C1 @. ]2 c: \
  47.     }
    6 D) Z0 Q% x+ g9 x" Z9 Y7 R4 X
  48.     // do something
    , l$ h; H, e% \1 L7 r- V$ w" T% q
  49. });
    6 v, D+ d2 W. Y3 B5 c1 R* u
  50. net6 }! M% z0 o& t9 E1 `+ H+ Q+ `- p
  51. $net->batch(true);; w; m, [5 {' V1 }; Y
  52. $net->version();/ ?: K( X- h7 s
  53. $net->listening();. B  s6 |2 e, F8 g
  54. $net->provider->execute(function ($err, $data) {
    - v1 }" F' F* ?& U& d- t6 E; X
  55.     if ($err !== null) {2 h; k5 Y5 d$ z+ z4 G+ t+ U4 @+ g
  56.         // do something
    6 K) O+ g: l# o: |
  57.         return;8 U& ?( p9 O% t! o
  58.     }
    , ]! D/ T8 J& f$ ]& i# m+ ~# G
  59.     // do something9 w* r) E- K  m; m
  60. });
    " {) v4 d* h/ C/ Z3 E
  61. personal
    " ?& F: f* g. F. V" O; ~1 N
  62. $personal->batch(true);
    $ P! L" B0 g# m. ^/ f7 }) [
  63. $personal->listAccounts();% n% D' [; N* _; x
  64. $personal->newAccount('123456');
    ) \3 q2 Q6 l# z- _$ ~% R' y
  65. $personal->provider->execute(function ($err, $data) {
    . L9 e* K' c+ V% w+ a: M! y
  66.     if ($err !== null) {" W  h* Z; x* n8 `; `
  67.         // do something& u2 h9 n9 ^7 e( s
  68.         return;3 B" E: h: U' }) _: R8 s' u
  69.     }! Q) p  i. t1 n( @0 V4 |
  70.     // do something
    & H) w4 {1 i1 Z
  71. });  P/ y) j+ ?/ S* {! a' }% J
  72. 智能合约Contract4 u1 _% d, X. `0 U+ n2 z
  73. use Web3\Contract;4 }7 K! K: R* p/ `- e
  74. $contract = new Contract('http://localhost:8545', $abi);
    6 n6 s* V! I& a; H" I! J2 V
  75. // deploy contract9 P7 S) ^1 v! G
  76. $contract->bytecode($bytecode)->new($params, $callback);" y/ R& ]8 k7 S" ~3 ]( S9 y6 [) X+ W
  77. // call contract function# `, B* E- P7 I. |0 X( k
  78. $contract->at($contractAddress)->call($functionName, $params, $callback);
    + ?& G9 p5 Y2 \4 H' A" d
  79. // change function state
    : q% _* |" `* a5 G) E; ^
  80. $contract->at($contractAddress)->send($functionName, $params, $callback);" |/ k! u% Q2 F6 J; D" e
  81. // estimate deploy contract gas
    $ o) h* J0 ^5 ?9 j7 |: n
  82. $contract->bytecode($bytecode)->estimateGas($params, $callback);
    / b+ b9 A; A- v( C
  83. // estimate function gas
    6 v+ `- l5 u& O. z( S# h
  84. $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);
    ! z5 |! b0 X( P4 Q8 k
  85. // get constructor data; [( L9 B% ]$ s8 M# A, y0 i
  86. $constructorData = $contract->bytecode($bytecode)->getData($params);
    . m- G5 P. `  R' ^% H% z0 J
  87. // get function data
    - O  G0 ]# S" F( N4 O) q& \
  88. $functionData = $contract->at($contractAddress)->getData($functionName, $params);
    , C' j8 z& v" f9 ]
  89. 将值分配给外部域(从回调域到域外)  N. e* d$ u4 r
  90. 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。
    & K9 \8 ?! B) F! g. s$ d; m
  91. $newAccount = '';- W: g+ H7 f6 M  O9 h. P7 G0 M& B1 S
  92. $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {
    2 h% }/ l9 w6 i8 r& h* |: H
  93.     if ($err !== null) {
    4 H9 F! m" n# h) ^6 _. i; O
  94.         echo 'Error: ' . $err->getMessage();2 V( }/ Y8 J" C) Q) X
  95.         return;$ U7 z# B$ Q$ ?! ?
  96.     }) {' w: B& z" o. r- T* Y
  97.     $newAccount = $account;
    : A9 L6 M3 D7 f
  98.     echo 'New account: ' . $account . PHP_EOL;
    , o2 I- X. `7 N9 D
  99. });
复制代码
0 c& p& G8 X" ~. c& m. a* }

8 F! T! ]9 n3 d0 n4 {" Y4 ~, v4 rphp以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
标签: PHP 以太坊开发
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

白吃弟弟栋 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    6