Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互.' A! h% N+ N3 v& W$ Z6 t
安装
7 ]+ j. D" T! L# Y, f* \" i通过Composer来管理依赖关系,首先将minimum-stability设置为dev
/ w* k8 B9 x/ \/ t# v"minimum-stability": "dev"
8 t7 d; g0 k4 G7 m然后执行:5 Y8 A1 m3 ]8 q3 n% v  f& D
composer require sc0vu/web3.php dev-master2 k; C6 q: t* p/ W1 R1 w" n5 G, v
或者你可以在composer.json中添加这行。4 h7 h5 N8 O9 G+ V
2 y) |9 u8 P" H! c6 K" ], J
"sc0vu/web3.php": "dev-master"
, B) ~; Y3 H6 P' ~- L7 s8 b用法
# r: L/ d) a3 G实例. O3 |8 V# {% Y  K& l' T/ l1 }
  1. use Web3\Web3;7 ?( j3 |# ^5 Z$ a4 _
  2. $web3 = new Web3('http://localhost:8545');3 s6 u1 g# L3 p3 o2 S1 P
  3. 接口调用% R4 Q( J0 a0 L! H! I( }0 E
  4. use Web3\Web3;
    , I3 ^8 i1 C7 n1 y. O
  5. use Web3\Providers\HttpProvider;
    * L! J; p* y3 N1 ~! o7 T
  6. use Web3\RequestManagers\HttpRequestManager;
    ! G2 M; R- G7 b
  7. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));
    + s9 i& `/ J" ?* X6 V+ @. N, l6 _
  8. // timeout
      g' D9 G3 P* O
  9. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
复制代码

2 \1 y6 E( \5 h0 h. p: ?7 B使用回调函数调用rpc
5 Y: K$ j: k& M/ `! f' Y0 O
  1. $web3->clientVersion(function ($err, $version) {4 |3 |" \' y6 x0 B9 |2 r! W
  2.     if ($err !== null) {
    ! z2 F; i8 c) e- Z. M' e* A9 W
  3.         // do something+ W( \2 m7 a% n: [' _8 q0 F, I
  4.         return;( [/ h4 ]! W9 Y; z" M. b! ~
  5.     }" M8 l3 Z) o3 ]- V
  6.     if (isset($client)) {
    4 L5 O4 |4 y$ E8 N& W
  7.         echo 'Client version: ' . $version;
    # I* X9 F( u1 ]3 g/ x2 k
  8.     }
    5 t/ u5 T4 K& H- l( T) g4 c) P
  9. });( @* B; @/ Q# H) G, O
  10. eth
    ' {! E+ `! F8 v" H& m7 n
  11. use Web3\Web3;
    # N& o2 ^: h, \$ t: @! ?
  12. $web3 = new Web3('http://localhost:8545');
    # D4 G4 M9 Q, `& `
  13. $eth = $web3->eth;
    ( z; l4 U" Z$ [
  14. 这样也行:
    2 q) h6 h( ?  H' L1 o8 C; ?+ Z6 D
  15. use Web3\Eth;4 I2 _& p, ?/ Z) ]
  16. $eth = new Eth('http://localhost:8545');
    5 L, ~9 T, G& B9 U3 Z
  17. net
    ) s# j* ^1 b7 j* Q
  18. use Web3\Web3;- n: |2 M  Q. U6 O) _) Z6 a
  19. $web3 = new Web3('http://localhost:8545');
    7 i( {  I7 k2 n
  20. $net = $web3->net;+ L9 I' a* v, x/ I2 |& \2 t
  21. 或者
    0 U5 h. J. e* V; ?, n) n( y! @
  22. use Web3\Net;
    . p+ O/ d4 m# C- c- K
  23. $net = new Net('http://localhost:8545');- y+ Q+ Y3 K, r: Y4 A; w
  24. batch
    & |+ f% N0 u3 O9 l
  25. web33 a* ?/ D/ k, D+ n+ S1 m
  26. $web3->batch(true);
    / b/ h1 x9 Z4 ]; ~* A
  27. $web3->clientVersion();1 s0 s" N* F: H2 y6 m
  28. $web3->hash('0x1234');! {# y3 a' A# u; X! E
  29. $web3->execute(function ($err, $data) {. j6 P9 `# B, O- Z6 `
  30.     if ($err !== null) {; S- V3 ?4 C, ~1 A4 m) H6 v, g6 g
  31.         // do something
    ' z0 n6 g" X& B  I" P* E
  32.         // it may throw exception or array of exception depends on error type; M3 B& N1 t' O: `4 y
  33.         // connection error: throw exception
    ! \; j6 R4 a7 U
  34.         // json rpc error: array of exception
    : [- X! m3 e, Z+ r3 w
  35.         return;
    ( }& z* A6 ~; a. m
  36.     }; v  d6 @% s1 P$ j0 V6 F. X
  37.     // do something9 s% Q) s6 n( e! u
  38. });
    * {; W* H. A8 M+ K: j7 z/ l$ m+ t% H
  39. eth/ ^4 B6 p# I8 ^# ^, p1 \
  40. $eth->batch(true);! N6 f3 f' b4 g  r5 H& v  \
  41. $eth->protocolVersion();% [- ^5 V* m' |
  42. $eth->syncing();
    0 h/ y. A5 n, I, o9 ?4 X
  43. $eth->provider->execute(function ($err, $data) {
    8 x3 ^* J7 }, u+ x
  44.     if ($err !== null) {
    7 x1 S, I) [# b' E7 P$ w
  45.         // do something
    6 W1 N8 v6 X' ^+ f- V3 D
  46.         return;& D1 V0 e& [# T/ f
  47.     }2 N1 s! f9 Q; N, W7 w% D  ^
  48.     // do something
      m2 A2 B) P7 F: l! d, M2 M2 w
  49. });& |2 t9 g/ `( |6 [
  50. net! T) E  K. g/ U2 e) M5 ]. k  V
  51. $net->batch(true);3 f/ J! x* ?  P1 X
  52. $net->version();( i2 i, G5 N: Q( f" m% K/ j
  53. $net->listening();
    : k; s5 A) W! q( e
  54. $net->provider->execute(function ($err, $data) {
    3 q5 u  A1 c) x+ C! P
  55.     if ($err !== null) {
    1 A1 h: i+ O( K+ {  m
  56.         // do something
    % a' y+ U' w7 c
  57.         return;
    ' y0 a# e6 |% I
  58.     }8 Y% O8 g' v3 z  I% G% u9 K
  59.     // do something! l! F1 b" B. {: j( s" S$ N+ U
  60. });
    ) d, Q: b. O5 Y* S6 b8 }
  61. personal
    3 B; a+ C6 m6 ~' E2 q3 Y
  62. $personal->batch(true);; C# V6 b% A9 K# b& T) f; O
  63. $personal->listAccounts();; L8 A, g9 ^7 Z$ i2 t! }
  64. $personal->newAccount('123456');/ F* h* k% ^" W4 o. a+ q+ a
  65. $personal->provider->execute(function ($err, $data) {
    4 I% Q  \# \. G1 z3 s  V, B
  66.     if ($err !== null) {
    6 c% p1 c( }' M" v
  67.         // do something
    9 _3 ]' E) s  N2 F1 c  c" K. X' b
  68.         return;& W4 O7 I  u* o4 B& b4 g3 e9 p: G
  69.     }# P/ y6 U. U" a1 E
  70.     // do something
    1 Y! x( \4 U. ~( r
  71. });
    / T% B: Q- K0 S
  72. 智能合约Contract
    , F! @" b+ b2 N+ e& S5 P+ m
  73. use Web3\Contract;
    . t8 O* `9 \/ u7 k8 w
  74. $contract = new Contract('http://localhost:8545', $abi);
    * _  g2 Z3 b) T, W7 X" p
  75. // deploy contract0 Y5 ]" V# e: y
  76. $contract->bytecode($bytecode)->new($params, $callback);: v4 Q2 F) |3 I5 f% K+ t
  77. // call contract function) r8 u# k, {, N( f" I
  78. $contract->at($contractAddress)->call($functionName, $params, $callback);
    ; w4 S$ h, U/ X, k
  79. // change function state
    1 _1 D% }  o. ]5 t4 f4 W& b
  80. $contract->at($contractAddress)->send($functionName, $params, $callback);
    - t# S1 m9 E$ L( l
  81. // estimate deploy contract gas+ Q* N( w+ {0 B9 ?5 f; l
  82. $contract->bytecode($bytecode)->estimateGas($params, $callback);& x, |9 T! o2 C! e. V
  83. // estimate function gas' b. E5 V. C) Z9 R9 J* f
  84. $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);
    7 C% i6 J0 m! t, Y
  85. // get constructor data8 _) W! v6 X! W! O8 e
  86. $constructorData = $contract->bytecode($bytecode)->getData($params);: ^* n) V' Y: ^, h" N- E
  87. // get function data
    6 W9 H9 U' w  o) P; P) n1 ^
  88. $functionData = $contract->at($contractAddress)->getData($functionName, $params);
    6 P5 z9 y7 z3 Y
  89. 将值分配给外部域(从回调域到域外)# }& G5 t4 V( z- ?
  90. 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。
    , k6 M2 ~, @5 @# y1 _% i# j: L
  91. $newAccount = '';
    # o3 t- V1 ]7 M5 Y
  92. $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {
    ; ]# x" q% D- ]" H( h
  93.     if ($err !== null) {
    8 ~8 }, p0 p; g. J# G( a
  94.         echo 'Error: ' . $err->getMessage();
    + n% C5 m7 \2 q% l  ^+ e& [
  95.         return;
    0 s8 L1 \+ m/ J2 l
  96.     }
    : Z( _, L8 F8 G! U. C; T  q1 y, K
  97.     $newAccount = $account;, i! X, a8 h2 K- z6 |7 }' ~
  98.     echo 'New account: ' . $account . PHP_EOL;# \/ P: N% n/ N5 A) u8 O* {
  99. });
复制代码
/ x7 u( L1 D0 s- U& d& P2 H% `  E

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

本版积分规则

成为第一个吐槽的人

白吃弟弟栋 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    6