Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互.! X5 ?+ \& }9 V: K
安装
3 ~& f- ^! ?8 m- M+ d" I通过Composer来管理依赖关系,首先将minimum-stability设置为dev+ B' j$ I& ?4 ]! \
"minimum-stability": "dev"2 z( f1 }  l. V
然后执行:
& d; x5 @  \' f* S3 Dcomposer require sc0vu/web3.php dev-master
5 J" t6 R3 n3 x% L2 k或者你可以在composer.json中添加这行。5 P; y' j' J1 F

' N. @& R* B4 t# P: A8 C/ q"sc0vu/web3.php": "dev-master"
: ^$ G$ t6 C2 Y- p; i8 K" ^8 T  _用法5 j/ P; ?& w1 L# o
实例
  r4 S% ]4 c6 M/ f/ b2 H' s2 G/ ?
  1. use Web3\Web3;5 y5 `! ~& M2 E
  2. $web3 = new Web3('http://localhost:8545');8 {' C( i1 _" l6 G" X
  3. 接口调用5 L, L: A6 f; W
  4. use Web3\Web3;
    # w! T/ R% n* r6 g& X8 T1 x' e6 M
  5. use Web3\Providers\HttpProvider;
    " J8 v( J' e2 {
  6. use Web3\RequestManagers\HttpRequestManager;
    7 _2 H+ s, r% d* S# E
  7. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));4 g6 W! I& j# T# s# c: k) `% o- D
  8. // timeout0 T, R, z* {; X5 ~# B0 F
  9. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
复制代码

6 L/ ~+ I5 ?8 ~% j3 f" c使用回调函数调用rpc9 s5 ^. u  Y0 V% r* v5 Y) X
  1. $web3->clientVersion(function ($err, $version) {
    , X- u1 R( |8 q* H7 b6 J
  2.     if ($err !== null) {
    8 n8 Q+ N/ H: \7 }( ?% J2 F
  3.         // do something
    - b/ n# _) T  U; x1 L7 v5 b
  4.         return;8 F, w6 T9 p; Q  N2 G  V
  5.     }
    & p2 c# m: S$ z: A/ _1 ~1 H% b4 L, k
  6.     if (isset($client)) {
    5 x( D) p9 r9 u! p$ @0 ^
  7.         echo 'Client version: ' . $version;8 }+ y- a( d& w
  8.     }
    : C' h% H# Z/ m7 N
  9. });
    9 U3 E9 k' ?* m3 g1 t8 l  T9 y2 w8 _
  10. eth
    0 U' S  D# l9 p% d8 i7 {& S
  11. use Web3\Web3;$ ~/ t3 b2 U9 z% w4 d+ ^
  12. $web3 = new Web3('http://localhost:8545');3 R; m% p$ R+ @" \% s3 Q- e
  13. $eth = $web3->eth;( p8 ]  l6 D  Q$ H/ P( W) P
  14. 这样也行:
    ' u- i8 G) _- _
  15. use Web3\Eth;. ~! A6 S, p: {9 ?' c, z! T6 i
  16. $eth = new Eth('http://localhost:8545');. I. B7 g6 F9 {( l+ Z% ]7 T, g* _" ]6 x+ q
  17. net
    4 j4 [$ A( M4 z3 ^+ k' E/ O
  18. use Web3\Web3;# x2 ^2 w9 G5 j6 T5 l1 K. @' C2 P
  19. $web3 = new Web3('http://localhost:8545');  P! E. L) B  }- `5 n2 ?: D+ ~/ ~) Y
  20. $net = $web3->net;; j5 @! h: O3 G" A
  21. 或者
    8 N# U& C: R+ U- X  Z; {
  22. use Web3\Net;
    # W3 n1 v: E; r; A
  23. $net = new Net('http://localhost:8545');/ u# u5 ?+ X5 R# @
  24. batch
    - M) d0 z& k  j- G# m
  25. web3" E" K3 n7 c3 V+ i9 ?" _% }
  26. $web3->batch(true);
    2 `: _# e) V! _, s0 E" r
  27. $web3->clientVersion();; ?' {0 g( H/ E' n9 D8 ^
  28. $web3->hash('0x1234');
    9 q0 c# Q4 e! K1 f8 i
  29. $web3->execute(function ($err, $data) {
    - L" r4 |( [) w/ i
  30.     if ($err !== null) {
    5 l' B, B3 j0 m# J* G
  31.         // do something+ M7 S' P$ |/ m" ~2 `# L1 M# S% O0 v
  32.         // it may throw exception or array of exception depends on error type
    % `8 w  L; A9 t3 @6 o
  33.         // connection error: throw exception9 T5 {  u$ I9 ]" |2 F* s
  34.         // json rpc error: array of exception' p. b. j: G' X! f! d
  35.         return;( a/ p( \9 u; R; I1 |& L
  36.     }( ]7 n, U3 |! {' Y) }
  37.     // do something
    - r$ j1 q8 M  o( Z/ s# Z
  38. });
    + j0 j) U0 W. V7 J- Z: a( u
  39. eth
    $ k1 X1 ~/ k, U- k
  40. $eth->batch(true);4 l1 Q0 a) q2 a. L
  41. $eth->protocolVersion();' @# i4 K+ I* x$ D4 l
  42. $eth->syncing();
    0 j& a! w3 \$ E# L0 L
  43. $eth->provider->execute(function ($err, $data) {
    / W- h' F5 K3 g" W0 p# V) a5 O/ ~
  44.     if ($err !== null) {
    $ }$ f% z8 B9 ?8 z. r" P
  45.         // do something
    $ p, ~3 p# S, \! @2 d
  46.         return;
    3 T' k. l# N+ |/ V
  47.     }) G( k' y' q+ ~
  48.     // do something
    0 w* {  k* U; G5 c7 ?
  49. });" k, L( a; D9 \" [, m
  50. net
    5 B" J' G' _& Y' {$ ]
  51. $net->batch(true);
    & P  z1 K" f6 g2 C, N3 P
  52. $net->version();
    ' V1 f. q) z- n* B  A. F" v9 h
  53. $net->listening();( f7 b+ B$ d, Y. Y# V' R5 s' D3 v
  54. $net->provider->execute(function ($err, $data) {$ k4 H7 Y9 j; |( Y5 x) e! T9 x
  55.     if ($err !== null) {9 h* G. B) G% [8 f
  56.         // do something3 S! v  N3 M+ L7 ~6 f
  57.         return;
    6 ?4 o: |2 Q9 I8 z
  58.     }% G/ P) W5 N: j2 F( r4 q
  59.     // do something
    9 t2 y' M& O6 @0 }6 ^' B
  60. });
    ( V5 k3 T" b; x$ @) Z' k
  61. personal( z7 c+ F. ~  B* Y9 T" M! m' s
  62. $personal->batch(true);" l4 {5 B# C6 S, L9 z2 A! m
  63. $personal->listAccounts();
    0 t8 C- k# F$ S( l4 R
  64. $personal->newAccount('123456');7 [& k: c, y8 b% E  X* w2 K4 ~
  65. $personal->provider->execute(function ($err, $data) {
    $ h2 H3 [& n) x; f# F
  66.     if ($err !== null) {
    2 h: n# y9 a( |' i1 U. t6 L
  67.         // do something
    3 l% g! a3 P) n( ]: k! Y- g  ?" U
  68.         return;% c# |- M  j# z+ W1 R6 |* ]
  69.     }& {# ]. W. V+ z  n9 B$ n
  70.     // do something
    ! G% D- v5 q% y0 v: |7 `
  71. });
    % q" ?3 m1 ?8 U& f# }! _% T8 U
  72. 智能合约Contract- i$ s* H7 A7 s- ~  x% V) n' v- W* I0 e
  73. use Web3\Contract;
    : I$ S7 N3 A  d: x0 b  j  _5 X
  74. $contract = new Contract('http://localhost:8545', $abi);
    8 Y1 d6 H( n3 L  J/ u
  75. // deploy contract
    ! F, m) i1 Z1 F9 l; \
  76. $contract->bytecode($bytecode)->new($params, $callback);
    2 C6 ?- z! R) j0 o' I
  77. // call contract function: g& w1 ^8 T9 H& P: c: U, O
  78. $contract->at($contractAddress)->call($functionName, $params, $callback);
    4 S& W. _/ D& F. X" [( t7 \
  79. // change function state0 t+ |& _9 j0 |  z/ ?: M
  80. $contract->at($contractAddress)->send($functionName, $params, $callback);
    + J' s) l6 u! \8 B# G  S1 c
  81. // estimate deploy contract gas
    8 g5 m  I+ w# [1 L
  82. $contract->bytecode($bytecode)->estimateGas($params, $callback);
    6 Z! @% k# u' _  i: Y# W" U
  83. // estimate function gas2 d: n5 V$ Z0 P1 n2 B; N8 L4 h
  84. $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);  @, A# V  G4 z% _0 A/ g! F+ c
  85. // get constructor data; d$ p' p/ M2 f/ F, _% o
  86. $constructorData = $contract->bytecode($bytecode)->getData($params);* R- i! C4 o: p1 G
  87. // get function data) u& M1 l2 z- i/ e0 o4 J! z8 T
  88. $functionData = $contract->at($contractAddress)->getData($functionName, $params);
    + d, n: }9 Q  Y: w, H( z
  89. 将值分配给外部域(从回调域到域外)1 Q' B3 i, w" ^2 g
  90. 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。# e3 n$ @! u! S
  91. $newAccount = '';
    4 P! u/ o0 t) Q9 L# _+ b" Q4 W2 D
  92. $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {8 o# y; c2 ~2 K# c7 N* w6 |
  93.     if ($err !== null) {7 _0 ]# f) `8 J8 h9 n
  94.         echo 'Error: ' . $err->getMessage();
    & O# u; h7 c6 y! N
  95.         return;
    9 R* V  l4 A9 q% |& L- B3 b
  96.     }
    3 g6 c& S* N8 O7 [9 ~2 z2 \. o
  97.     $newAccount = $account;
    6 O/ u' ~. i* q3 i
  98.     echo 'New account: ' . $account . PHP_EOL;0 U3 z& A0 P& p
  99. });
复制代码
" @+ z; P$ v3 S7 k2 B  t

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

本版积分规则

成为第一个吐槽的人

白吃弟弟栋 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    6