Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互.9 W5 s$ {* T+ t- F4 `* R
安装& @4 p2 k7 t$ b% y  N2 M3 X
通过Composer来管理依赖关系,首先将minimum-stability设置为dev
& }* H2 s" S  J  w0 z# t) q' S"minimum-stability": "dev"
. ~- f! ^! M/ T+ R- l# a  W然后执行:/ I9 s) S6 a4 _4 j
composer require sc0vu/web3.php dev-master; `& H; i2 y5 M
或者你可以在composer.json中添加这行。
3 K5 s5 F* O6 w6 k# u% {! y0 E- v4 B, a3 H4 h. \1 n
"sc0vu/web3.php": "dev-master"4 r& O8 O/ B$ T  Q, N7 S
用法
, S; u/ M' l" r9 r0 H0 Q. ^实例
9 q, E& ^% h# f9 s3 S
  1. use Web3\Web3;9 X$ ~7 \* C3 W* D2 D  o; \/ S0 _
  2. $web3 = new Web3('http://localhost:8545');
    ) k& ]" B% H8 D9 u. U$ C0 p; y
  3. 接口调用/ i! V( N0 L) m0 Y6 ^
  4. use Web3\Web3;
    # H; N2 d4 }* v1 s% C
  5. use Web3\Providers\HttpProvider;
    / R/ g9 S" z, o1 p$ _4 @/ [) f
  6. use Web3\RequestManagers\HttpRequestManager;; e6 }3 e" K! ^- V* _# T' f. M4 M
  7. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));
    ! B7 L3 B  K* G. C/ ]5 Y
  8. // timeout
    ( v" H- c! T7 s3 ^& j
  9. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
复制代码

* }# W, X. v% ^( P使用回调函数调用rpc1 S% f# D4 Y; M" z! d, T* y3 y
  1. $web3->clientVersion(function ($err, $version) {6 `+ v1 F: z  t: j' }; j0 y/ q
  2.     if ($err !== null) {! l5 w! A* L% a5 u! A. O; G* Z$ `
  3.         // do something
    8 B  g  c% |3 @3 T0 f
  4.         return;
    & G$ P! E' \- \% T
  5.     }! Y+ h" @  w, Y4 j( X+ N
  6.     if (isset($client)) {
    " j- M/ I! O3 t( `) m* l8 B
  7.         echo 'Client version: ' . $version;
    9 G# E. p' M) J+ Z) m0 o
  8.     }1 ]- U  }2 h1 i2 T8 d; t, C
  9. });
    ) y  f5 M+ r& a( p/ U; {
  10. eth& u; C& y+ L+ O4 t8 U, r7 O2 h
  11. use Web3\Web3;
    . R5 q. k, D' ], r
  12. $web3 = new Web3('http://localhost:8545');# H/ ]; f5 z! g8 [) O4 x! Y' o
  13. $eth = $web3->eth;
    6 Z6 V. v* w" i; C' U
  14. 这样也行:
    ' x1 ^9 |: U: d
  15. use Web3\Eth;
    % r" a, ]. a+ k5 d% z
  16. $eth = new Eth('http://localhost:8545');
    7 N6 E3 d# c* F
  17. net7 A% ?2 p/ x) M0 L' t
  18. use Web3\Web3;; b; x& A4 `& v, P- A3 r
  19. $web3 = new Web3('http://localhost:8545');
    : `7 t: f3 s5 B/ |' X  `8 o
  20. $net = $web3->net;
    & \! O  y$ A( P' }' v* E
  21. 或者5 |. G% A3 v& [5 B/ s
  22. use Web3\Net;
    ' G% r  a2 L$ ^( J4 q( b) a
  23. $net = new Net('http://localhost:8545');2 f7 t3 C% @" m. A
  24. batch
    6 @) f3 ]0 r* @& ]3 b9 B
  25. web3
    , Y/ Q  A; \  g9 Z: _/ `. d
  26. $web3->batch(true);- I; {9 a0 B" A) y' `) N
  27. $web3->clientVersion();$ w+ j' ~6 v; p  \9 ~6 J9 X% X
  28. $web3->hash('0x1234');
    $ j& B3 e* z; K
  29. $web3->execute(function ($err, $data) {
    % x6 X+ c5 i3 X8 q( b  q4 i- }
  30.     if ($err !== null) {
    ; [2 T0 V8 A  [2 w  ]; d5 S  b" g) X* L
  31.         // do something9 C8 c- b' Y& h% g. L6 F
  32.         // it may throw exception or array of exception depends on error type
    9 N! n# P2 V4 w% _
  33.         // connection error: throw exception$ A5 @6 `$ k; C
  34.         // json rpc error: array of exception0 F) _, Q& ?, p3 c2 `4 O  c
  35.         return;
    : b; D) t3 c9 j5 C
  36.     }% r$ }  D" P+ N2 h/ }) H# Q: V& r  F
  37.     // do something4 {1 H( }* k+ J
  38. });7 B$ W+ B8 \! _7 w. A& ~
  39. eth
    / ~% B$ Z) X- f* M7 ?4 X6 Z  K
  40. $eth->batch(true);- o1 g& m5 Z# R% R5 o6 v% @3 B, _
  41. $eth->protocolVersion();
    7 C" r' L& ^; n3 l6 \$ H9 @
  42. $eth->syncing();
    6 L: z+ H# h5 R, I6 U
  43. $eth->provider->execute(function ($err, $data) {
    . t! m/ k, e' {# s
  44.     if ($err !== null) {% b7 f$ `1 c2 C/ f0 H4 N  A5 T. t- e
  45.         // do something
    4 f7 Z% T; B' v; |5 F+ q/ @: Y
  46.         return;
    ( r3 ?; f* e  r1 X0 E; ?
  47.     }* m$ L. B8 {( \6 W+ Z
  48.     // do something; O5 a; O; k3 [4 P! Q! \
  49. });8 X* G, O( c" u4 B+ K! e, q# d. n. F
  50. net
    9 ^5 {" m  L) d) ]& H7 c
  51. $net->batch(true);
    2 d8 S0 F. j9 h2 f; s) l1 y
  52. $net->version();
    ! `* m+ f$ D& O
  53. $net->listening();
    : z6 x0 x6 D0 P" y0 Z- a
  54. $net->provider->execute(function ($err, $data) {1 j1 c/ Q& I" b9 D* C, f  ~
  55.     if ($err !== null) {& k, n3 L- z: b7 \& g! z
  56.         // do something
    : ~- P+ C: _+ z9 n) d5 |
  57.         return;
    / m* Y- m/ p8 H- |
  58.     }
    2 D# _$ y0 J- }( s
  59.     // do something* \0 G$ v1 b) N: x8 r9 \- j
  60. });7 \; e( A; u% j# r" ]
  61. personal7 m2 ~* t) Q8 `# x$ I& b" ^. d0 s
  62. $personal->batch(true);
    1 O' o$ Y% z* n8 {& w7 s1 ^7 C
  63. $personal->listAccounts();8 }5 n9 W8 x% H8 J5 z5 r
  64. $personal->newAccount('123456');' i6 k: Z3 ]$ C9 r3 c6 }
  65. $personal->provider->execute(function ($err, $data) {
    ) V/ a9 E6 x4 ?9 n, l
  66.     if ($err !== null) {
    7 C4 `3 c7 p1 L6 K( [  o9 I
  67.         // do something
      g9 h5 z* b  x5 d$ s0 t
  68.         return;
    : I) \4 e- K- A+ ~2 T
  69.     }1 P7 d9 M9 J3 j6 Q4 l2 h+ Q
  70.     // do something5 m; [3 }  u8 H# }2 E) ~
  71. });* w2 ~; w. T" p% _  W3 k
  72. 智能合约Contract& Z$ d4 g' e/ I- i
  73. use Web3\Contract;$ E# h* e- p/ i3 ]/ Z4 O
  74. $contract = new Contract('http://localhost:8545', $abi);  i! g8 \2 \- r: [& S2 V
  75. // deploy contract
    6 W( ?5 ]3 ]  C* C8 G: o/ W
  76. $contract->bytecode($bytecode)->new($params, $callback);5 p* X- f! Z. O9 d/ c
  77. // call contract function( A/ W$ X, y" d0 m% [
  78. $contract->at($contractAddress)->call($functionName, $params, $callback);0 _1 @5 Q8 J0 U- n
  79. // change function state
    ( K" Y0 f3 k( f# p6 A
  80. $contract->at($contractAddress)->send($functionName, $params, $callback);
    $ k9 L6 v, _: B. l' K% J
  81. // estimate deploy contract gas' A& H6 T) Z. X$ X: |1 n
  82. $contract->bytecode($bytecode)->estimateGas($params, $callback);3 i7 b, T: J9 Q% C( Z+ Z" ]5 p
  83. // estimate function gas
    ) {( m: t( ]  ]" m* g7 D( A
  84. $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);5 s) v2 D8 L: S: {# f/ u& d
  85. // get constructor data' b" E' K0 K0 g, G5 n
  86. $constructorData = $contract->bytecode($bytecode)->getData($params);
    , w& Z6 i1 c- a0 F
  87. // get function data
    * B, H. E( ^% p5 m5 D/ W% f! j
  88. $functionData = $contract->at($contractAddress)->getData($functionName, $params);& d* e: ?* i0 q. I' D/ }
  89. 将值分配给外部域(从回调域到域外)+ O  x+ h" x* _. z
  90. 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。, t" M$ c8 P9 ~) V+ ]0 s7 i. K( l9 u
  91. $newAccount = '';1 u! r( _' S' b* ^  }/ b( a
  92. $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {
    & }  D- b3 X- a7 F( Z5 |( F8 U
  93.     if ($err !== null) {1 [; Y8 R5 f+ S* b$ S! S, L
  94.         echo 'Error: ' . $err->getMessage();
    ) ^6 f" e! n: h- d  C
  95.         return;$ i% O, u6 E$ |: n5 c- T
  96.     }: q" R$ p; v1 s# S
  97.     $newAccount = $account;1 L: q7 a+ X" V8 g) w- ]1 t1 T
  98.     echo 'New account: ' . $account . PHP_EOL;
    5 s% s! Y% J) a' e3 U6 A1 d0 N
  99. });
复制代码
5 P: O6 i8 q& y) ?3 w* u
9 V# d2 H2 a: P' L7 j7 M
php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
标签: PHP 以太坊开发
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

白吃弟弟栋 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    6