Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互.1 @) X; B9 u8 c1 z) Q8 }4 n9 b
安装
6 D1 Z2 S/ e% C0 w1 E通过Composer来管理依赖关系,首先将minimum-stability设置为dev
0 e) B* _3 V% a! J  ~* e2 e0 q5 U"minimum-stability": "dev"
9 r# Y2 l9 T2 d* O0 {然后执行:# U) r! _/ y/ F" J
composer require sc0vu/web3.php dev-master" ^# M9 {4 ^' _1 F) F
或者你可以在composer.json中添加这行。
; t' }  H7 F1 `* D# Y2 ^4 E1 V7 ~& u: R* d) k2 M1 g* Y
"sc0vu/web3.php": "dev-master"
: x4 P# h! N& }) Q用法; d# l, m( i6 P. b2 N2 p
实例
& ^# t) {$ _! @7 a# A  w, k
  1. use Web3\Web3;% C3 b* ~5 S5 S
  2. $web3 = new Web3('http://localhost:8545');9 ~- E$ }) w& W: a
  3. 接口调用$ M# q" m8 i& P: T) t$ j4 b
  4. use Web3\Web3;  p- U% q2 Q+ V8 d( ^
  5. use Web3\Providers\HttpProvider;% j$ J, ?% H2 |0 p, Q2 J
  6. use Web3\RequestManagers\HttpRequestManager;8 E1 g" n! o6 C) t* g+ C
  7. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));7 f2 {  Z4 M7 h4 y
  8. // timeout2 Z: v* ~8 w: m4 Z: {; N
  9. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
复制代码
' l- ~7 w0 s- \, V( U$ S2 G6 K! u. g, N
使用回调函数调用rpc
" \" w! b$ w- f1 M: ]- s' m9 k/ M4 ?
  1. $web3->clientVersion(function ($err, $version) {% `1 i) n8 H9 m! z2 @  X
  2.     if ($err !== null) {
    # i* f; P4 k4 B
  3.         // do something) G, k8 }' }$ I- C
  4.         return;5 s: Q0 n0 _2 W/ M4 t7 D
  5.     }
    / n) Z  ]5 C, Y
  6.     if (isset($client)) {2 |- Q  ]+ Z4 k4 q
  7.         echo 'Client version: ' . $version;
    2 V  k* E/ S5 f, K
  8.     }0 y6 a3 L0 J9 a* \0 n: p
  9. });3 n, }5 ]/ I" [" g) a
  10. eth3 _# l! A2 r" c
  11. use Web3\Web3;4 {- t& H0 ~1 B
  12. $web3 = new Web3('http://localhost:8545');
    0 Q* d- V( r; t# k( J
  13. $eth = $web3->eth;. P/ T. [6 I2 a4 K$ l% K. F
  14. 这样也行:
    - g0 d. p+ S2 c
  15. use Web3\Eth;
    ' J3 x- m0 y8 ~. g( r! d/ R* D! \9 s
  16. $eth = new Eth('http://localhost:8545');1 |. P5 N, L$ K
  17. net0 ]7 z. F8 O3 J& c2 F5 q
  18. use Web3\Web3;& C$ R/ ^. Q7 L4 A" S3 h" y& F# O" L
  19. $web3 = new Web3('http://localhost:8545');' M1 v9 d! G+ b( J+ C( z, j: B- g
  20. $net = $web3->net;
    + D" V* y+ T' j; M" @4 w9 C+ U
  21. 或者
    9 H9 j$ n! i) I( l, h
  22. use Web3\Net;/ u0 V7 b+ K, i' `! Q
  23. $net = new Net('http://localhost:8545');
    6 y2 W$ ~" p$ X$ G$ _, R' W
  24. batch' A3 {- q* X0 p
  25. web37 b7 e, ?' M1 N9 i/ k& u: ~
  26. $web3->batch(true);
    * }9 K) x" a7 X' V, B
  27. $web3->clientVersion();. f6 x5 l/ s; t) ?
  28. $web3->hash('0x1234');0 R" U" }; I) M1 }3 w' ]$ X
  29. $web3->execute(function ($err, $data) {
    4 D3 ]$ J5 g% V& p0 j* q8 I
  30.     if ($err !== null) {
    4 {$ l2 H9 s* `* D4 K# Z8 n4 a  m
  31.         // do something. u7 q$ h3 I: V6 `2 s9 U+ @. n
  32.         // it may throw exception or array of exception depends on error type
    % R' a) z7 o9 M: ^
  33.         // connection error: throw exception
    1 t8 P( P2 ~' }0 G: s
  34.         // json rpc error: array of exception
    ; q& s, L1 [8 k5 S$ V
  35.         return;$ [% e! k6 j- p& X$ e1 D& A/ W
  36.     }
    ' B1 f. Q; o: f$ v# @5 b1 P- N' v4 M' O
  37.     // do something
    " q$ F$ J( t" z9 {$ u- \
  38. });
    / u, c7 ^( m, R0 H( P
  39. eth
    $ J0 |( v6 [: a0 m
  40. $eth->batch(true);- R4 x+ z2 x' e, ?+ x7 c0 a
  41. $eth->protocolVersion();
    / H: W' g5 L& e  C" ^: X6 i( @
  42. $eth->syncing();
    # ~+ o) k% M% S. {0 t$ s8 X
  43. $eth->provider->execute(function ($err, $data) {
    / ^" P! J' N. M/ x
  44.     if ($err !== null) {& X, ?+ P. q$ \% R5 b6 n" E
  45.         // do something
    + W$ b6 g  `( E* {
  46.         return;
    $ d! u' s: q( w3 {8 n6 F
  47.     }- h6 O1 t: q3 n
  48.     // do something
    ( k6 g7 j& `/ |+ H1 N8 l
  49. });( d! ?1 [& B+ S' Y* X- o# E4 B4 D
  50. net
    4 J: Z+ `# |$ ~) P: W* b
  51. $net->batch(true);5 _: \$ g- B5 k  m, j+ E$ ~
  52. $net->version();
    1 h4 F3 J( P* z- |, S
  53. $net->listening();0 V' a' t$ P6 Y$ L' M
  54. $net->provider->execute(function ($err, $data) {
    , ~& D, h/ r& w, a- k
  55.     if ($err !== null) {
    7 {( j( j/ `3 o  j5 K/ x. T
  56.         // do something, r5 ]6 W6 v4 u7 D7 x8 o1 D8 }3 L
  57.         return;
    8 M9 }* ?0 E/ m
  58.     }3 K5 A. d: ^$ s' K; ]
  59.     // do something0 l- x( E2 l: n6 F/ A
  60. });3 o5 G. W3 m: N" f
  61. personal
    % O$ Z7 o+ l( \" |; e( [- u$ N6 ~4 z
  62. $personal->batch(true);
    9 z7 O& Y$ q  M& X8 `/ L9 m
  63. $personal->listAccounts();
    $ p& _( p5 q9 Z- h
  64. $personal->newAccount('123456');- |! w! N  F- ^9 n$ ?' Z7 Y
  65. $personal->provider->execute(function ($err, $data) {6 u" T2 q5 g  u% N# z
  66.     if ($err !== null) {' v2 l' N7 Y% X3 k/ S. E# J
  67.         // do something
    4 Y- Z- M: R3 s. r+ f
  68.         return;
    8 L3 b' t; ]# T8 n
  69.     }
    $ A, ?; v0 N) {7 ], l6 K1 V
  70.     // do something
    " n3 U/ @9 ^% a/ I7 w
  71. });- }7 ]1 z5 }4 T! e; g) u
  72. 智能合约Contract8 \" z+ t" O$ N0 a- ^. _0 A
  73. use Web3\Contract;6 m4 U1 W9 F4 [3 ~8 \9 Z2 X9 O& F
  74. $contract = new Contract('http://localhost:8545', $abi);5 \0 E7 n4 f! h% D
  75. // deploy contract
    ; x: w; p1 y7 J. T4 l
  76. $contract->bytecode($bytecode)->new($params, $callback);% A3 z4 r7 T2 m; o- L6 l
  77. // call contract function
    5 K8 ]# u/ L1 V9 _
  78. $contract->at($contractAddress)->call($functionName, $params, $callback);# _7 M0 Y: Q& a8 c. \2 I
  79. // change function state/ H+ V( P  U2 U: j. B1 y/ T! ]4 b/ E
  80. $contract->at($contractAddress)->send($functionName, $params, $callback);
    $ f% T, C/ k& V6 u5 C
  81. // estimate deploy contract gas
    : S6 T6 \( D1 X: I- p# k4 ]4 I8 d
  82. $contract->bytecode($bytecode)->estimateGas($params, $callback);" D+ U  l! A6 k. f: X
  83. // estimate function gas
    " m6 g" Z1 m/ ?2 I( c9 ?
  84. $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);
    8 \. s( }0 v& O7 G* s+ _
  85. // get constructor data* }+ `4 A& K$ f6 z
  86. $constructorData = $contract->bytecode($bytecode)->getData($params);7 C5 o! z2 \" P- |* @; n
  87. // get function data0 O& s+ v8 `3 T
  88. $functionData = $contract->at($contractAddress)->getData($functionName, $params);
    1 a. l: V8 C+ E! W0 ?5 g3 n
  89. 将值分配给外部域(从回调域到域外)
    3 u" @; L4 ?) o* U
  90. 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。
    3 X5 y/ A% r, _7 z
  91. $newAccount = '';
    ! }- i, k7 ^# e1 w
  92. $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {6 d4 R2 \' t. D( V  w- A
  93.     if ($err !== null) {
    0 M) `: x- X: b
  94.         echo 'Error: ' . $err->getMessage();
    - e% J9 Y  f* J+ Z
  95.         return;
    4 y, N2 ]# a8 T/ s9 |
  96.     }* m+ ?# y# ]8 X, V( G' f5 m" Z
  97.     $newAccount = $account;. P  y, G* e; s; H& l
  98.     echo 'New account: ' . $account . PHP_EOL;, K6 w. d& H- w8 G
  99. });
复制代码

: @/ i$ H/ t! Z) O7 _0 G7 h" L( u# j/ g4 W  m2 M
php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
标签: PHP 以太坊开发
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

白吃弟弟栋 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    6