Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互.
5 f. n5 T6 R* y/ U' ?安装1 c$ x+ l9 ]5 I/ \" [' A* l6 ^( V8 X
通过Composer来管理依赖关系,首先将minimum-stability设置为dev" v1 e! Q2 W  B0 L% c+ G
"minimum-stability": "dev"! n3 c( P9 E' _" Q* I( T  E4 `6 f
然后执行:
/ S7 P5 J1 L. b) W2 V# c. \& b  Ccomposer require sc0vu/web3.php dev-master$ l; q7 z4 n: |/ R$ p
或者你可以在composer.json中添加这行。9 ]$ ?( X/ R- f1 S: m0 O

4 s& W, Z# r) {( U% ~: a1 b. i"sc0vu/web3.php": "dev-master"* h# Z; _: S% ]9 Y
用法/ Y( U/ [4 s+ T
实例
  @' ~+ n2 }: X+ ~: _, @
  1. use Web3\Web3;( F: k+ `" B' X0 V8 t
  2. $web3 = new Web3('http://localhost:8545');
    5 O; X& u7 M- B  Y
  3. 接口调用
    2 Q4 }: K$ B- Q' q' g
  4. use Web3\Web3;
    # J( l: k) {1 |. N. B) a1 R
  5. use Web3\Providers\HttpProvider;0 a1 B, d4 Y$ d) H' p( Y6 ?2 Z
  6. use Web3\RequestManagers\HttpRequestManager;
    7 W7 Z( D( H+ y; e2 w* V' ]
  7. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));
    7 o( h1 v9 R& K. `
  8. // timeout
    ! U- x6 A2 F* Y* X6 s1 d5 Z, W
  9. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
复制代码

1 Q6 ]' U& f; B( d+ V使用回调函数调用rpc
$ V& C3 |1 v0 O' i0 i2 u7 s# m
  1. $web3->clientVersion(function ($err, $version) {
    3 g6 _0 q' ~% k6 L: A
  2.     if ($err !== null) {
    * Q  [+ D/ m; N5 @- m+ ]
  3.         // do something
    9 d, C1 J6 B& v
  4.         return;: v8 I1 L" [+ g5 T
  5.     }3 B' k) b& \% n1 T; E4 ?$ x
  6.     if (isset($client)) {
    + `9 H8 D% i& j& ]! n& D. c
  7.         echo 'Client version: ' . $version;9 t% o* T. W; e- T( w/ t4 @6 l* K; G
  8.     }
    % \7 v/ [" L8 k# m, t1 _; T' y
  9. });9 y1 C- Z3 c. @! W
  10. eth% [' _$ }# m$ A. |
  11. use Web3\Web3;, |8 N& a5 P9 ~
  12. $web3 = new Web3('http://localhost:8545');  a) Z! S) A3 M) ]
  13. $eth = $web3->eth;5 I9 s( F* q! U6 r% U& O
  14. 这样也行:6 o6 t2 D, G- m9 G
  15. use Web3\Eth;5 G( i7 `- l! X* X7 D
  16. $eth = new Eth('http://localhost:8545');  E( g* G7 [3 D/ x3 E
  17. net
    ( `5 Z0 o. y% i& W
  18. use Web3\Web3;3 |2 M. N+ n3 Q# X+ ]! r& X( c
  19. $web3 = new Web3('http://localhost:8545');
    - C, w: E( j2 R6 P$ s! U
  20. $net = $web3->net;
    % c& n+ Z$ D* G
  21. 或者
    8 x7 X6 O; `' Z4 l9 y
  22. use Web3\Net;4 M  g9 W3 u/ ~2 x' W
  23. $net = new Net('http://localhost:8545');+ f3 e/ v+ I' A. A& v
  24. batch
    ; ^) ^* s: b( ^1 z4 y0 i
  25. web3: U: W, q, ]5 s( ?7 i% I8 G
  26. $web3->batch(true);
    ) _2 z7 Z# r9 _; N" W; p" z
  27. $web3->clientVersion();
    ) y2 e1 }) x5 `8 G
  28. $web3->hash('0x1234');
    ! a0 P9 g' Q2 j0 s
  29. $web3->execute(function ($err, $data) {6 E4 R3 H" R) l) w9 P# P
  30.     if ($err !== null) {1 I5 s3 R3 v( @+ h" w+ t5 A+ ?2 p
  31.         // do something! q$ F' S0 `4 A8 d
  32.         // it may throw exception or array of exception depends on error type
    + V+ @5 w8 W1 a( _
  33.         // connection error: throw exception
    + z5 {! x' q. J. X! m  @
  34.         // json rpc error: array of exception4 g1 T( i. U/ I$ O
  35.         return;* ^8 x6 D4 a' y* d7 b: S. s
  36.     }
    6 |, \: q# `* d2 Z' W
  37.     // do something
    - n0 l1 _$ T& t% ~  a( o+ J
  38. });! H& d0 b/ \+ |, \
  39. eth5 M2 Q! }$ L  h8 m  J' u' w0 E
  40. $eth->batch(true);
    8 {* l1 ?. f* ?0 r
  41. $eth->protocolVersion();
    $ `% c  ~2 {9 G0 B3 |) q- I( a
  42. $eth->syncing();' |# O! ~+ K- Z+ W: Y; k( u2 s0 e6 ^
  43. $eth->provider->execute(function ($err, $data) {* {) w6 ], j; C( J) y; Z# S" u9 w
  44.     if ($err !== null) {. f" Z8 l: d( E" I# B% o- c5 q  L
  45.         // do something
      \8 M6 n9 Y3 l2 z( p' A# O/ I
  46.         return;
    8 l6 I2 L0 I9 M
  47.     }: w" P& J) s- R1 |: I% ]" D5 g
  48.     // do something
    1 o7 _/ }/ h$ f- b0 ?
  49. });
    ( t# a9 z+ f, ^/ I8 I& k+ n
  50. net
    6 V8 I3 N. d+ s" m3 u3 f# k
  51. $net->batch(true);
    3 J! X& b8 o: |  h
  52. $net->version();/ @& e" R: S) l& c8 \, G% D4 o
  53. $net->listening();) U4 C$ a* Q% Z) H9 ]0 E$ \) L3 H
  54. $net->provider->execute(function ($err, $data) {& `/ F8 \! S# O% i- U# |: h* K
  55.     if ($err !== null) {
    , \% \5 B5 U- t
  56.         // do something
    4 f- x  o. J& X0 a
  57.         return;, j2 H7 x' x% e- k7 r3 q5 A
  58.     }
    + i- ^  ]1 a. _0 i4 I2 i
  59.     // do something# m  [9 o2 g0 D7 A( A5 V3 Z
  60. });
    0 Y8 \9 k9 W- k
  61. personal
    : \, X3 @8 d7 R/ o- l; G* D$ l, ]# G
  62. $personal->batch(true);4 e) B; G# p4 q: \' `7 a
  63. $personal->listAccounts();; {) n) @, g, u
  64. $personal->newAccount('123456');
    9 E) B, k* O8 K% q" [) _
  65. $personal->provider->execute(function ($err, $data) {
    / w! m1 c$ j$ F! \( X6 ]7 h& E$ l
  66.     if ($err !== null) {
    " [9 w6 y( H- t2 I; p
  67.         // do something
    " M& j9 [) c. g1 D& M
  68.         return;# i8 o* k$ D0 H$ _* H* l$ i8 m& K
  69.     }  d6 e. p& C1 B" _# I! S: S7 K2 |
  70.     // do something
    4 v2 a) c: G8 ]! T# ~
  71. });: U6 @5 L% Z* p- |
  72. 智能合约Contract
    * l' O$ S) g' {) A( X) t
  73. use Web3\Contract;# m7 V5 |4 t' e, z5 |
  74. $contract = new Contract('http://localhost:8545', $abi);8 `+ O* G3 d. {
  75. // deploy contract& x) c+ n" h. S& c( r) L
  76. $contract->bytecode($bytecode)->new($params, $callback);# L* E( ?0 L6 k: _- x
  77. // call contract function- v# I( h* X6 m8 x
  78. $contract->at($contractAddress)->call($functionName, $params, $callback);
    7 `; j& y1 ^: M: }4 b
  79. // change function state6 l. C5 j. G+ o1 r& }" W
  80. $contract->at($contractAddress)->send($functionName, $params, $callback);8 ^# S8 H5 W; c
  81. // estimate deploy contract gas  K, d1 ]9 O# X- P
  82. $contract->bytecode($bytecode)->estimateGas($params, $callback);
    ' T9 `% t0 [0 _& Y1 S
  83. // estimate function gas
    : |7 _: [* \1 W+ X3 ?
  84. $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);
    - E0 e- K2 K$ G
  85. // get constructor data
    6 \, M( J0 [+ `& y
  86. $constructorData = $contract->bytecode($bytecode)->getData($params);
    ; ^* c) D0 F. }' {) J: |2 @- x
  87. // get function data( H& g% A- B8 R& e
  88. $functionData = $contract->at($contractAddress)->getData($functionName, $params);
    , t. \0 {* \0 _" y; U; E
  89. 将值分配给外部域(从回调域到域外)* R5 y3 |2 o, z9 ?# [) Y+ l3 E6 |: e
  90. 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。
    + y& U8 V+ z* Q3 G$ x' ~/ A0 j
  91. $newAccount = '';
    4 z* ~- |5 d) i7 c; x) ^! A
  92. $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {
    + z- A5 a% F: C( j# n' Q9 J
  93.     if ($err !== null) {( z* i: n: U# L& S" G3 t4 K
  94.         echo 'Error: ' . $err->getMessage();
    4 e% D% r  Z6 j+ ]
  95.         return;9 U; F) l8 z! i2 k
  96.     }  p2 O0 @- X& n  n* }1 v/ g
  97.     $newAccount = $account;; R! z  t0 ?$ ~1 p7 E
  98.     echo 'New account: ' . $account . PHP_EOL;
    % v6 v4 L( S4 j& y. S
  99. });
复制代码

% T( `& t7 Q5 h8 D1 W2 b' i
2 d1 Z2 f5 ?% _5 e& k; Zphp以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
标签: PHP 以太坊开发
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

白吃弟弟栋 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    6