Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互.
9 B, w- n. W" |" R( J9 E安装
% J6 A* I0 }) U- Q& r% J% g. b) G通过Composer来管理依赖关系,首先将minimum-stability设置为dev
6 S* X- T' c& S  U"minimum-stability": "dev"% Y; ^1 C: s7 C. _" }" l4 Y& h
然后执行:. D. T, o' i) o! l; Y; e3 j
composer require sc0vu/web3.php dev-master
  f  Q0 S- |6 X" q* i或者你可以在composer.json中添加这行。4 p- s: v! }. _7 M& r1 `
) n2 E7 z* Q- W
"sc0vu/web3.php": "dev-master", ?' R: K8 D2 c+ b7 F7 y% ?9 s# I* V3 x
用法1 k1 b. ]1 p8 D5 g5 q3 |5 _
实例
+ \1 t5 S& R; C% Y  L8 z! T
  1. use Web3\Web3;
    ) T3 C" Y: m- f  `: l& b! F
  2. $web3 = new Web3('http://localhost:8545');
    8 Y8 e* t$ X# j" b4 X
  3. 接口调用
    9 U5 ?& d) V) d
  4. use Web3\Web3;. X: z. C6 f7 ]/ v# R
  5. use Web3\Providers\HttpProvider;' r7 J( Y8 H% z  e
  6. use Web3\RequestManagers\HttpRequestManager;
    ) x# N! R7 Z$ n: N
  7. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));! [) a7 |* u& K7 G8 ^" o& i
  8. // timeout; l7 K% H: |, [& V" |: U) v( ^1 y
  9. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
复制代码
) N9 J* F8 l, d* G" W
使用回调函数调用rpc
3 w* D( m" c% e1 Y  b! |
  1. $web3->clientVersion(function ($err, $version) {
      E8 U( T* u/ l* H
  2.     if ($err !== null) {
    3 T2 O, O/ g0 Y1 R7 u, c
  3.         // do something
    ) {- C" L, |; \" _# q( y
  4.         return;" v6 J$ w6 o- l" j1 ?* `+ W
  5.     }/ d/ T8 z% q4 N: e! I9 f1 O
  6.     if (isset($client)) {9 v" ~  i% B& S. f
  7.         echo 'Client version: ' . $version;
    # S; A( y9 m* K3 U" m. e2 B" |
  8.     }4 l5 N' ~1 w# L6 ~& B* G: Y7 {+ ^
  9. });1 D! s5 p5 g" |0 r+ F
  10. eth1 e$ m4 G* o0 Y1 D
  11. use Web3\Web3;2 ^6 R" W' k& ]* G, ^& i
  12. $web3 = new Web3('http://localhost:8545');1 i- W5 a' |) B, {/ v$ t, t" g
  13. $eth = $web3->eth;
      E3 s$ h; @7 D( R6 [
  14. 这样也行:
    + m+ o' Z- b6 B4 A* t
  15. use Web3\Eth;
    - S! ?. }- X* \- x' \4 B  p
  16. $eth = new Eth('http://localhost:8545');; J4 y% X5 I0 D: F, J3 P
  17. net
    9 M0 A( K# ]. X, f$ f7 q8 `
  18. use Web3\Web3;
    , N0 M8 I1 Q* M2 f# X+ S
  19. $web3 = new Web3('http://localhost:8545');
    ; ?1 }1 U* @' r+ S$ j5 Y/ M, m
  20. $net = $web3->net;9 O+ z& S& Y* W3 A' n
  21. 或者# A3 e) ~) t8 H$ u3 e
  22. use Web3\Net;
    : O, }; M1 ~5 F7 F* L
  23. $net = new Net('http://localhost:8545');( c+ J" J; Y$ J# H
  24. batch. F; J# Y; c( B1 v7 m5 O1 O" P
  25. web30 ?5 H+ r  [- G
  26. $web3->batch(true);
    1 {6 v- o. ]- m% h, W, E/ o
  27. $web3->clientVersion();2 ~; U8 o. G, I) N! c# h5 Q) B
  28. $web3->hash('0x1234');
    - b- E; c) F0 D
  29. $web3->execute(function ($err, $data) {8 y% Q8 z, U6 ]3 O2 G
  30.     if ($err !== null) {
    1 Z1 V7 C7 Y* T
  31.         // do something
    9 R) P1 A, r2 M$ \, e9 U
  32.         // it may throw exception or array of exception depends on error type" x& ~# D4 S2 O* P7 N" C& ?
  33.         // connection error: throw exception
    " ]+ R# p% b7 |/ F$ A2 z
  34.         // json rpc error: array of exception* @/ u8 |7 ?% s( V- ]( h
  35.         return;
    * y, k- z* ]5 Y2 X0 ]
  36.     }
    / N5 [/ }0 H. b8 l4 D* |- P
  37.     // do something3 B( h& r% r# I3 C$ L1 j% F
  38. });
    8 p6 x- p1 ~) ]5 l1 o6 _7 X$ A
  39. eth$ Z" a$ K: u5 V: z% X+ @6 h  Z
  40. $eth->batch(true);
    # e; W. ]0 \9 N7 O
  41. $eth->protocolVersion();
    9 Q: [* K/ M6 h2 x7 z' F
  42. $eth->syncing();
    6 B* j9 C  }' f- B( K3 Q
  43. $eth->provider->execute(function ($err, $data) {9 [; H7 B, m  [4 ]" ^( ^; g1 d
  44.     if ($err !== null) {# u0 v: t. A  F0 |4 e' N& I
  45.         // do something
    2 I' D+ y, u9 G/ x
  46.         return;# X  r1 D" O7 z+ p) c4 A3 M: n
  47.     }+ L1 p  F  W- z2 g  T
  48.     // do something
    ) [, T8 c1 K, z2 r
  49. });
    % L+ Z& {; W0 {5 S% A* g4 f, t% g
  50. net
    ' c: X% p" ^" n; ^; m! p9 i
  51. $net->batch(true);
      J% x* B+ |  ?1 d/ G
  52. $net->version();! b( b- i, d0 {# M3 t! x
  53. $net->listening();/ B+ B% P8 |+ M! _
  54. $net->provider->execute(function ($err, $data) {
    / b8 Z9 P8 Z" A
  55.     if ($err !== null) {( `7 c: |, o1 H1 ?( ~' ?
  56.         // do something
    / Q" g* F7 k; Z- o) N! Z9 l6 T: S
  57.         return;
    ( b) K5 X! W. ~# [; j
  58.     }+ O9 a! D! f4 {% t2 ]
  59.     // do something
    - ?- j$ J$ Q8 {. N% e/ ~8 i
  60. });
    . Q; q$ ]9 P2 s
  61. personal* ^( S  a& E& l0 Q
  62. $personal->batch(true);
      r* V- y$ X1 U( H3 X
  63. $personal->listAccounts();
    / g! X; I, h. B' ?; `, `6 Q# Z
  64. $personal->newAccount('123456');
    & Q9 e" N  \6 D7 y
  65. $personal->provider->execute(function ($err, $data) {: I- x$ f+ Y/ B5 J5 a1 S
  66.     if ($err !== null) {. h. W% X# @+ c( ?: F" V; Z$ ]
  67.         // do something  A7 ]% F, O6 i3 O" Y
  68.         return;- @+ _9 j: c* L1 ^6 {
  69.     }, h% ~6 W+ {' Z' G& ~, ]  J
  70.     // do something
    1 ?1 z% K. s- @
  71. });- ?9 F9 `! w8 A( Z* T
  72. 智能合约Contract
    ' Q3 k& t- s2 n& g
  73. use Web3\Contract;- @( \) B  m0 k) S' t! m- M/ o
  74. $contract = new Contract('http://localhost:8545', $abi);
    , T) K2 a& s! j- Q( K% M
  75. // deploy contract% A6 a) o. c% H  [# @4 p
  76. $contract->bytecode($bytecode)->new($params, $callback);
    % `! R% A" @8 ?8 _$ B
  77. // call contract function/ A" N1 ~/ }% ?1 g; n5 k! l
  78. $contract->at($contractAddress)->call($functionName, $params, $callback);3 G7 `7 }) {3 t9 W$ w5 A8 W
  79. // change function state  ]! ~% J) D0 s. k/ n
  80. $contract->at($contractAddress)->send($functionName, $params, $callback);
    ) b5 P1 o5 h+ P7 V& P7 Z4 B/ g9 n  z
  81. // estimate deploy contract gas! E; @! P& G* P# E0 w+ f
  82. $contract->bytecode($bytecode)->estimateGas($params, $callback);( x$ Z! G% W, j8 [$ B& Y% F
  83. // estimate function gas
    3 v8 T: n1 T  W3 R' U) m
  84. $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);
    2 b! R) ^! g. c7 h
  85. // get constructor data4 o5 `  f& x1 _+ R, w. j) |9 v$ O
  86. $constructorData = $contract->bytecode($bytecode)->getData($params);
    8 j7 K& P# l5 |% K; }
  87. // get function data  J  R: c, f% d! m( E
  88. $functionData = $contract->at($contractAddress)->getData($functionName, $params);
    ! g" |7 F) H- w: \
  89. 将值分配给外部域(从回调域到域外)1 W9 P6 V! L. f* [
  90. 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。
    + O3 \6 H1 `- {$ I% ]" P0 ^1 K
  91. $newAccount = '';4 n/ ]" R' l  g) V: K  w
  92. $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {
    9 {8 S. ?8 F$ ~4 a. ^
  93.     if ($err !== null) {( h5 q& b$ K7 N4 g
  94.         echo 'Error: ' . $err->getMessage();
    3 N8 Z4 z& l2 K/ W2 K8 D! b
  95.         return;$ q% \5 g/ j" H& @( M1 ~! X
  96.     }
    1 v1 N) _# W* E) h  J; w
  97.     $newAccount = $account;
    & h' V4 s3 j- a0 Y2 v$ ~9 y& B
  98.     echo 'New account: ' . $account . PHP_EOL;( U1 m% ]) a; F. X/ x4 u2 Z/ C0 p
  99. });
复制代码

0 O9 Q5 ]4 R  n" b" U/ D6 V+ J/ e( a: q) |6 S
php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
标签: PHP 以太坊开发
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

白吃弟弟栋 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    6