Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互.9 z3 c# v0 U2 A% e1 m0 N
安装9 D: k* I3 W+ g0 b8 \
通过Composer来管理依赖关系,首先将minimum-stability设置为dev
) ^2 N" V2 j' Q* j( t"minimum-stability": "dev"1 i) k4 |& C& O0 E/ P/ E, C1 B
然后执行:
9 H! d# Z& N9 r* g; D3 Rcomposer require sc0vu/web3.php dev-master! {! T/ Z9 H% J9 P9 B
或者你可以在composer.json中添加这行。
" a/ Y0 }$ m# A% M# [4 T& ~8 z0 {+ Q5 U$ I1 T
"sc0vu/web3.php": "dev-master". a0 P' k( J% G3 e% a: r* }$ J! u
用法
2 s$ P8 q" Y' k" N" o& |* F7 C- o实例
  \0 ~' C! J/ x* @' W! W' X: J
  1. use Web3\Web3;
    , [" Q9 {1 A5 o
  2. $web3 = new Web3('http://localhost:8545');
    - `2 Z0 Z# H! y- @/ G
  3. 接口调用0 n6 ?! `& g9 ?' g
  4. use Web3\Web3;
    * w# _& x) {4 q) `- O. j
  5. use Web3\Providers\HttpProvider;
    ' m/ \2 ?- ?4 I/ O+ L
  6. use Web3\RequestManagers\HttpRequestManager;
    7 P8 E7 Z4 [9 F- N, ^0 y# H
  7. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));
    & K! E* s; G& H7 }' L: P: h- K
  8. // timeout
    + g# r6 f& ~2 ]# o) U! v6 w
  9. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
复制代码

6 P4 B& h, ^: G' V2 G$ i. P9 h使用回调函数调用rpc  A, s; G. ~- p0 ?2 i
  1. $web3->clientVersion(function ($err, $version) {
    ! g; D3 c# k- N- N% q$ U: q# G
  2.     if ($err !== null) {
    ! l+ G- z; E0 {$ ~
  3.         // do something' \# ~! H* E5 ^
  4.         return;
    ) |8 W) f4 x# G3 {9 R
  5.     }
    : [* Z- u9 o  ?
  6.     if (isset($client)) {) E7 C2 ]7 o8 X: R
  7.         echo 'Client version: ' . $version;  Q, p0 T/ Y! ~
  8.     }; f8 Q, F1 x2 G- N
  9. });
    * z; \  b& t4 a, T7 M/ R. f& U
  10. eth' C8 s1 @. Y% N
  11. use Web3\Web3;- `$ h; O' w5 ~" g8 `5 K
  12. $web3 = new Web3('http://localhost:8545');( }* F/ Z$ s5 ?0 f7 N5 x
  13. $eth = $web3->eth;8 N3 d0 t- N0 }" y2 L  q  `7 g! r
  14. 这样也行:
    4 }' T- b- l! k2 a) d3 Y' L  |! ~
  15. use Web3\Eth;
    * }8 r5 D# A" l: W- w" g
  16. $eth = new Eth('http://localhost:8545');1 b1 ^: P* W# E6 {( `
  17. net
    ; j2 C7 o% v8 @1 u+ Z9 Q
  18. use Web3\Web3;: P6 M% n7 I* i4 w, |2 Q
  19. $web3 = new Web3('http://localhost:8545');
    , v! q! r# L, ?$ w
  20. $net = $web3->net;/ l" o2 @# I, T& g
  21. 或者; C; c; K" O) z# g' b, E# k
  22. use Web3\Net;! Q( C. X1 P7 z" ]- n
  23. $net = new Net('http://localhost:8545');
    , h) B& A0 B( Z) d4 k
  24. batch" R5 u& n8 o  U
  25. web3; v1 n5 h, a0 D  k3 Z" q
  26. $web3->batch(true);. _; J4 h  ?6 J- S, E
  27. $web3->clientVersion();
    . i: T9 b5 I9 Z) |6 p# s7 r
  28. $web3->hash('0x1234');+ }7 q3 b" _4 {) v& k6 [" N
  29. $web3->execute(function ($err, $data) {0 l# b% I) R2 x2 P$ v
  30.     if ($err !== null) {9 _; Y3 z' s; T! B' X
  31.         // do something6 l- t  n8 m. s; W5 `3 I5 N  q8 T
  32.         // it may throw exception or array of exception depends on error type
    % L' c% c' j$ A5 k
  33.         // connection error: throw exception( i! f6 n9 u. r$ K2 \) s- F' k
  34.         // json rpc error: array of exception
    ; }! f. |& k: |* f) I
  35.         return;
    - `5 C5 e. Z0 U$ C" f2 v1 W* L7 c
  36.     }
    " ~% ~( P2 q! X. X; G( k
  37.     // do something
    2 M  Y( h& X+ J
  38. });2 P. F( p8 J' {2 R
  39. eth
    - ~0 z# C; L; v% T
  40. $eth->batch(true);" q3 E, V' E+ N' V" F! }
  41. $eth->protocolVersion();( ~0 b1 `* X9 W
  42. $eth->syncing();0 E! e: e9 w8 z8 t3 w" ~
  43. $eth->provider->execute(function ($err, $data) {9 C7 S& i5 C* n/ _- P
  44.     if ($err !== null) {
    * d9 M7 a: z  |" Z& u
  45.         // do something4 m: l2 }& Y  {/ R! }$ H5 L
  46.         return;$ r2 }$ S2 M2 c$ H
  47.     }
    # x) P! {( x8 ?0 s
  48.     // do something* B! G2 j* D, @, q( M* F6 ~
  49. });. J. j" ~7 |- o( b2 |! w" F
  50. net* E5 `+ ^( X2 ]
  51. $net->batch(true);2 p3 C( J3 J, O) [. q# K  d
  52. $net->version();8 d! v/ s% h5 A" g' w3 r' H, y
  53. $net->listening();4 x0 D9 ^% O) T! v
  54. $net->provider->execute(function ($err, $data) {& e+ W- B9 b( ?% F. I9 ?- y: ~
  55.     if ($err !== null) {+ `: b) m* }+ m+ W7 [
  56.         // do something
    2 }  Z- K# O" m  @
  57.         return;1 v/ i' `+ E1 ~8 U
  58.     }/ g7 n2 O% p  I1 B
  59.     // do something' W, M8 j! L) z4 k: T' O% N. ]
  60. });9 |! x' }% [+ F& h; u0 M
  61. personal* P- a, H2 ~$ e& I; V$ V# f0 D
  62. $personal->batch(true);
    7 i. f7 f* b) w/ L
  63. $personal->listAccounts();
    ( t" m: o* ?* _
  64. $personal->newAccount('123456');" D' [, H1 X: A
  65. $personal->provider->execute(function ($err, $data) {  @6 g3 z6 d/ P. S& h$ O
  66.     if ($err !== null) {( e- d3 I( [0 R; C; M0 s
  67.         // do something
    . A. \5 Y4 ]+ |! q- J) P4 i) ^
  68.         return;
    3 l/ P) k% A/ T1 I9 l
  69.     }
    8 B+ @/ B# t4 p' A: Y& T
  70.     // do something
    4 V# ?4 w; L- i; s2 j$ V
  71. });* p+ c9 j2 D3 b# m( \8 C# {  E
  72. 智能合约Contract
    2 R( |5 v5 `. Z: q7 ~7 s4 t
  73. use Web3\Contract;# i/ M/ l. R* \! ~
  74. $contract = new Contract('http://localhost:8545', $abi);
    : X( z# }4 N. R0 V
  75. // deploy contract& G! e$ o6 V3 f! x; L$ l7 U1 _! L
  76. $contract->bytecode($bytecode)->new($params, $callback);; i, R/ _# k% W, u) H4 }" j
  77. // call contract function& X/ M# j' o# K) d
  78. $contract->at($contractAddress)->call($functionName, $params, $callback);
    3 A1 t1 b3 @! E% E+ K4 p! R
  79. // change function state8 @! T8 z* Y0 O: B
  80. $contract->at($contractAddress)->send($functionName, $params, $callback);6 @, @. n, Z& n; m& X
  81. // estimate deploy contract gas3 Y7 Q% p4 ~9 s- f: Q( F( B" M
  82. $contract->bytecode($bytecode)->estimateGas($params, $callback);
    " V+ ?7 }4 m3 A3 A1 i8 q
  83. // estimate function gas/ F) z: T2 n7 ?6 {/ |
  84. $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);
    * ^, d  I$ x4 z- v2 M; R
  85. // get constructor data$ ^/ \, I! o7 }, O
  86. $constructorData = $contract->bytecode($bytecode)->getData($params);
    8 r, V! D% y7 G( s9 i) }1 z' m
  87. // get function data
    5 `' K& J: m, P) S  j" w
  88. $functionData = $contract->at($contractAddress)->getData($functionName, $params);
    1 t- D( ?+ G& @0 ?) g1 I
  89. 将值分配给外部域(从回调域到域外)
    1 e" F, \0 X; ]: P
  90. 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。: m- ^( t0 d$ {
  91. $newAccount = '';% b  F( R8 t% w/ F& ], ]7 z) X
  92. $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {
    ; p; p1 @. z. u* c
  93.     if ($err !== null) {
    * k% L/ @' F7 f4 j$ k
  94.         echo 'Error: ' . $err->getMessage();
    ; W5 v2 S5 c/ ~9 M
  95.         return;
    % w- Q% Y/ {% M) k4 C
  96.     }8 }) g* e6 i& q$ X
  97.     $newAccount = $account;, V1 }' E! S* ?. u7 \/ M
  98.     echo 'New account: ' . $account . PHP_EOL;
    4 M' ~. P% A, q1 G! W& I: q0 N
  99. });
复制代码

; \/ c; I6 i0 w/ [0 y# I
2 T, \' c; \% G' Ophp以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
标签: PHP 以太坊开发
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

白吃弟弟栋 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    6