Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互.
9 [* ~5 [4 b" C/ o9 a' f安装4 e) @" k$ n8 C
通过Composer来管理依赖关系,首先将minimum-stability设置为dev. j* C. x, I( t5 _
"minimum-stability": "dev"
) ^3 C. C/ E$ w: q% S' c然后执行:/ \% R/ y% n) L$ Q& T# M  ^
composer require sc0vu/web3.php dev-master  E, C) o% z1 f" w2 [
或者你可以在composer.json中添加这行。8 i* A+ Q; ^  @  i% A" |

) h+ R( U6 h9 V2 Q% F. R7 R- c' [& S"sc0vu/web3.php": "dev-master": v7 @+ N' I# @) F" B8 v
用法
2 P  f# j# G' Z& K- [# _+ O实例
5 C# @" O, @* |3 n
  1. use Web3\Web3;0 }' I$ ?9 H6 b0 M' a; f9 p% e: Z% W
  2. $web3 = new Web3('http://localhost:8545');& D6 ]7 f$ [5 p
  3. 接口调用1 m8 E: O9 S# d$ u* l
  4. use Web3\Web3;
    9 m: @1 x5 E) o5 W# d
  5. use Web3\Providers\HttpProvider;
      z' E+ C5 m7 y2 }" L8 }" l
  6. use Web3\RequestManagers\HttpRequestManager;
      i' f+ s- G2 @' o; h( R9 R- s' f
  7. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));
    & q" _5 s; ~9 u8 n- v2 f
  8. // timeout' K: y4 S8 n- W6 k
  9. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
复制代码
2 Z& C# |9 v! I4 g# S! d& d& s& q
使用回调函数调用rpc
  q, Y# n$ @+ J6 ~$ a& e- w5 l# T5 ~- v
  1. $web3->clientVersion(function ($err, $version) {6 O0 a" l/ K6 A) p! c- [
  2.     if ($err !== null) {9 w: ^( g1 S5 |4 Q% n' h/ D
  3.         // do something; M. ]3 F7 W& t3 Z$ i  B$ U
  4.         return;2 [6 ~; D( L- o+ O; X2 \: V
  5.     }) |9 p5 O9 C6 q6 x" [. n' T* \
  6.     if (isset($client)) {4 s2 y$ o) ?$ |. ], P
  7.         echo 'Client version: ' . $version;
    2 l! {, u+ I. v$ [4 w8 M9 q
  8.     }2 g" ]; j! p* K2 O9 u8 f
  9. });$ n" f/ j  H! \5 |! X: z3 O
  10. eth; @2 P9 d) P4 P6 y
  11. use Web3\Web3;
    3 A) l& W& m- z0 K+ B
  12. $web3 = new Web3('http://localhost:8545');/ ]4 j. M! i- T9 B
  13. $eth = $web3->eth;
    ; t2 w! c3 d0 R# w4 L
  14. 这样也行:
    : e2 @. t, l  w! z% Q+ r% a2 P
  15. use Web3\Eth;) A2 Q$ o6 X: X& A$ o( U
  16. $eth = new Eth('http://localhost:8545');
    ; ]4 Z% W- f4 h/ ~+ I5 B
  17. net+ ]) X! ^4 O( D6 c' b, G( R
  18. use Web3\Web3;7 _7 y% I" _/ h' U; u% S
  19. $web3 = new Web3('http://localhost:8545');
    " A; T4 J# b/ U% V
  20. $net = $web3->net;* ~3 f) \8 S# n
  21. 或者
    1 j- R4 I, N2 B7 U& ?
  22. use Web3\Net;/ |0 Z; {" p/ {; c
  23. $net = new Net('http://localhost:8545');
    + W# {) y% q/ {. T  y
  24. batch
    9 e$ V+ X5 c, e/ I. s5 l/ U
  25. web3
    , I" r9 e( K' d# m5 p1 ~/ |$ G
  26. $web3->batch(true);5 V* L% f7 ?9 ?" n+ f
  27. $web3->clientVersion();
    ; u- R& S7 {. O- i! I1 D, {
  28. $web3->hash('0x1234');
    : g3 @5 r& q: x
  29. $web3->execute(function ($err, $data) {
    2 S( L$ n% ~+ p( _
  30.     if ($err !== null) {; s. y; ^+ h& S2 _% K8 q1 B
  31.         // do something  k+ m4 I/ o) A0 S: X) K
  32.         // it may throw exception or array of exception depends on error type; v- R8 q6 x5 C: E* l4 y$ K# G; Q
  33.         // connection error: throw exception
    5 J. h& x! ]$ t- P
  34.         // json rpc error: array of exception% h& R+ m) k" x
  35.         return;
    " o5 |! B( D% y! [9 _% P$ d
  36.     }- A9 |1 x& g. A; x' j  X
  37.     // do something
    2 T. m+ a2 M% r7 C, \4 O7 {: D, O
  38. });: \% l; h( `- L' a. }# ?4 k
  39. eth+ T# K( d8 K! ~  i. N
  40. $eth->batch(true);
    1 g% |+ M. Y, x/ y0 F5 J: A" p
  41. $eth->protocolVersion();( u8 k7 T4 {( m$ }* g# o
  42. $eth->syncing();
    ; I6 }9 ^% I) y  D: S  s8 r
  43. $eth->provider->execute(function ($err, $data) {% \" E1 s9 \" j: t
  44.     if ($err !== null) {0 Q8 K& ~6 N: M- p
  45.         // do something: J$ P8 M0 @6 P/ c$ {; _$ Y8 \* }
  46.         return;
    + `9 O, t0 z' U. O. @1 @) m9 `
  47.     }8 [* h' Q- {) P' }. \
  48.     // do something" O% h! p; K" L) @
  49. });
    . B# o1 ?  ~" j
  50. net6 }7 p" i8 ~9 w4 |+ d. L* O2 `6 J
  51. $net->batch(true);
    # r5 ~* \' z3 P2 z
  52. $net->version();, q( m9 t  _" z" F8 ?$ p8 q
  53. $net->listening();
    - \0 T7 E& D( D2 l- {$ f! x( |
  54. $net->provider->execute(function ($err, $data) {
    / a0 p) a# R' ^, S' e
  55.     if ($err !== null) {3 l* |$ Q/ `% f3 d
  56.         // do something
    $ V6 l& J/ x: L1 K( A
  57.         return;
    , x( c7 w) m/ p3 b, s
  58.     }" r) l3 \$ J' @9 z( E
  59.     // do something
    1 U3 A" s* o, G3 K3 @. v, N" M" b
  60. });6 Q- z; j0 [  {0 R8 X8 A
  61. personal9 ]& p7 {, G% G: H6 p
  62. $personal->batch(true);$ y. p' y, k- t1 d7 u
  63. $personal->listAccounts();3 A7 c( A2 o( w; W4 g- s; m# O
  64. $personal->newAccount('123456');* ?; Q/ }9 N% {% i* [
  65. $personal->provider->execute(function ($err, $data) {
    # b7 l/ S, W, B  p
  66.     if ($err !== null) {* s) r3 G4 |) z& d! S
  67.         // do something
    1 p) @$ t. G! u3 n
  68.         return;
    # J: W  N: F; s1 R& D% {. Q
  69.     }
    " D! B5 \6 z; L6 U7 o
  70.     // do something
    ( |, Z1 {, G' ?! x* f/ p
  71. });% `: V& W3 r* r8 v
  72. 智能合约Contract
    5 Q) S0 d% H" @1 \, {1 I  X0 a2 V
  73. use Web3\Contract;! X: U( x" I" A& m
  74. $contract = new Contract('http://localhost:8545', $abi);
      w/ X' `# {$ C
  75. // deploy contract
    5 J/ U/ L# X2 R  a
  76. $contract->bytecode($bytecode)->new($params, $callback);
    8 e2 `  i) u" c  v
  77. // call contract function
    ' a" b! z8 B4 @( |; }8 y
  78. $contract->at($contractAddress)->call($functionName, $params, $callback);
    1 [. d( s" ~" A& h
  79. // change function state
    3 c" T6 F2 n9 ^  Z7 O& H
  80. $contract->at($contractAddress)->send($functionName, $params, $callback);
    ) h% G% o: Y. E' P$ x) t- @# h
  81. // estimate deploy contract gas
    ; d; D% G9 l% U* Q7 A$ B$ O7 W+ O' p
  82. $contract->bytecode($bytecode)->estimateGas($params, $callback);, @6 G! y1 W1 ~5 _1 |6 U
  83. // estimate function gas
    % S1 P! J( ]5 [$ v# W/ E% w
  84. $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);# ^2 \( e) A  H4 f5 z% m+ K2 }
  85. // get constructor data+ ^  I* L3 }" ]: |2 y" ?
  86. $constructorData = $contract->bytecode($bytecode)->getData($params);( o, w" B9 p. g" Y
  87. // get function data
      e$ g6 T$ a$ |( C9 K
  88. $functionData = $contract->at($contractAddress)->getData($functionName, $params);
    % c5 {7 z9 Y" `; K/ u, E
  89. 将值分配给外部域(从回调域到域外)& M- I8 u# V/ M7 d2 w$ N
  90. 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。
    " d: l" f4 q+ p: C" E
  91. $newAccount = '';# u6 [) s3 F" c; `) q/ `- D6 ~& s# M
  92. $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {( _3 z' I+ e2 y
  93.     if ($err !== null) {7 m3 _' v) @$ |( Y5 l( [
  94.         echo 'Error: ' . $err->getMessage();
    ) z' C1 |- t. e  z( w8 e+ D1 h. Z
  95.         return;2 V+ m; J1 u( [9 l6 y. J
  96.     }
    . I: {+ K, n* K. T7 p. `- E
  97.     $newAccount = $account;
    " Q' ?/ F# i% @5 _! D% g
  98.     echo 'New account: ' . $account . PHP_EOL;
    # o0 u* s# T! _3 Y0 D
  99. });
复制代码

$ ~# O6 }6 [& b  g( @
3 {. P* }5 E, ~  H% d$ Aphp以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
标签: PHP 以太坊开发
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

白吃弟弟栋 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    6