Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互.! e* h* R4 J- t0 }
安装: g0 v# O+ F4 f7 G" W
通过Composer来管理依赖关系,首先将minimum-stability设置为dev
' L% C( i6 v9 P6 M' h9 V: X"minimum-stability": "dev"/ a  K) b- E$ [) B
然后执行:* M1 X' ]3 G! x" I- e
composer require sc0vu/web3.php dev-master
) z* Y  }8 l5 u1 `; H% C或者你可以在composer.json中添加这行。
5 u7 T. ^* I; W- p" g1 Y2 m$ A. l" X) x! U2 b  K9 ^0 O
"sc0vu/web3.php": "dev-master"
3 e. }. \: Y  B3 P2 A用法7 _" M+ D+ S: l) Z5 H, V; X6 P
实例
( O2 P# Y1 `) V1 b. k9 p
  1. use Web3\Web3;
    # V" q( T* R8 M* C- \! m
  2. $web3 = new Web3('http://localhost:8545');$ |% j2 a) `' {+ |$ g
  3. 接口调用
    5 J! ?0 }. ~1 v, L) l
  4. use Web3\Web3;- s9 j. }2 j; @+ G4 W8 i
  5. use Web3\Providers\HttpProvider;6 Z% S: L4 H, j$ A" D/ H( D
  6. use Web3\RequestManagers\HttpRequestManager;) o7 R7 e% z, F0 b" R1 ^% }
  7. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));
    9 `/ F: _/ T! e6 w. e
  8. // timeout
    " @) l/ x+ z8 |' K1 t0 G& }* h
  9. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
复制代码
1 M- w0 T$ H/ N
使用回调函数调用rpc! Y6 N) F; P. U6 L4 t9 i
  1. $web3->clientVersion(function ($err, $version) {. l9 X+ M$ U, f0 Z$ ]7 `
  2.     if ($err !== null) {: ^, F" N/ u5 P6 h* C
  3.         // do something7 r6 k5 o$ P, w$ R
  4.         return;
    , y! ~; H5 b' r$ I! b
  5.     }
    7 L$ {$ f, }' I
  6.     if (isset($client)) {/ v4 B: j9 g9 @, ?! A6 _: C6 a
  7.         echo 'Client version: ' . $version;, M, `/ i( W! u( F4 E& u; k
  8.     }' O, y# k! P' @" \) J6 e. t
  9. });' g& R( p, h- m; X! x  J" j; l9 G
  10. eth
    8 N2 D6 F# [  k' I2 @$ r: Q' |9 p
  11. use Web3\Web3;( H$ ]3 I$ x' ^! \3 D. J
  12. $web3 = new Web3('http://localhost:8545');
    4 l$ G0 ?3 G# ]/ M+ n( x7 i! j
  13. $eth = $web3->eth;
    5 H% S" ^& a8 e8 V+ R
  14. 这样也行:
    0 A' x" H. L/ Z/ L
  15. use Web3\Eth;
    , ]" a, ~: R) M  q4 U+ q# k
  16. $eth = new Eth('http://localhost:8545');+ u/ b% Y! p# ^8 M" C3 S
  17. net
    & m# S( ^; g" h4 {9 c& }5 S8 r
  18. use Web3\Web3;
    ) N$ ^0 O' `  f) z& i
  19. $web3 = new Web3('http://localhost:8545');
    2 u5 I4 d" \1 W* V0 R0 K. G
  20. $net = $web3->net;
    ' p' S) }* |# d+ e
  21. 或者# l1 Y% c. L" v
  22. use Web3\Net;0 K4 }& T( l3 m  }' S# B3 Q( I9 u
  23. $net = new Net('http://localhost:8545');: E# ]/ [/ K  P9 Q* ~; U# T0 n
  24. batch: u: X" k$ u$ i
  25. web3" h& r2 m; }; I1 q1 l* d; M% v
  26. $web3->batch(true);
    2 r9 f" a" _0 e- T7 J% r
  27. $web3->clientVersion();  f& q+ W7 S# c  U1 m
  28. $web3->hash('0x1234');
    & v  H/ y; @/ |! I  X
  29. $web3->execute(function ($err, $data) {
    & A# e# I3 ?% k5 ]/ t+ S5 v
  30.     if ($err !== null) {: X$ K0 v( k9 o# S
  31.         // do something
    8 C0 `' R' Y9 I$ |1 ^1 U
  32.         // it may throw exception or array of exception depends on error type  k  M* \9 ]; E9 y5 r6 K
  33.         // connection error: throw exception+ l/ t( l. e% f7 M& l
  34.         // json rpc error: array of exception
    5 F  S  x7 ]5 d# ~  A
  35.         return;; g7 E) G; R+ q9 T) i3 @3 ~
  36.     }
    * A- K6 b( @; r4 ?' g1 T8 ?2 t
  37.     // do something. d- O7 o0 ?( S! F
  38. });8 g5 f  C8 Y2 R
  39. eth
    * Z/ p! w; j$ H% f0 s7 l
  40. $eth->batch(true);2 M; r' O) E3 Q* {6 f! X
  41. $eth->protocolVersion();# N$ \$ q& T% z2 q" p5 w: [4 f
  42. $eth->syncing();
      J  @5 O# u, V  o/ [* b
  43. $eth->provider->execute(function ($err, $data) {
    ) A1 E' Q5 }; U: M4 x- J2 P: {
  44.     if ($err !== null) {
    ' q3 v% w! n, J6 u# ?
  45.         // do something
    ) H2 ^; @5 I& E1 K7 Z
  46.         return;
    5 w8 J7 P4 b9 e) I4 M+ ^
  47.     }
    # r) K4 K; D0 [7 k4 Q8 d( z  M
  48.     // do something
    % {! ]2 Q& i: w. s0 k
  49. });7 x7 w. c0 z: V; v- R2 q  s
  50. net6 o4 ^' b( s" B
  51. $net->batch(true);
    1 H6 v+ I$ L5 M  n& r
  52. $net->version();/ \* w: q3 x1 Q1 g+ ^
  53. $net->listening();
    & F2 Q) V; e) S- Y3 B0 t3 G
  54. $net->provider->execute(function ($err, $data) {
    , m5 H% x/ [9 H' x- G
  55.     if ($err !== null) {
    / Y% f. o4 B; a4 V% Q7 H
  56.         // do something
      D5 _4 E  H. B, P
  57.         return;
    ( v' b/ J+ [% b+ b
  58.     }
    : v  v0 }* U3 r8 I6 A# @: g, H" A
  59.     // do something7 E; E% a7 e( F% a+ r  u9 q
  60. });  n& |9 @* z9 {+ {! c
  61. personal3 e* n: n! y! f. c% N: V
  62. $personal->batch(true);$ d$ q! {1 p! Z3 _7 t" h
  63. $personal->listAccounts();
    0 Q2 x" q* N: c
  64. $personal->newAccount('123456');1 G6 `6 T4 l: Z$ ?
  65. $personal->provider->execute(function ($err, $data) {
    / ^- V9 F8 Y# X/ r; w, ^
  66.     if ($err !== null) {
    2 H* t9 K$ R: ~& p  d
  67.         // do something3 h6 _/ k' g8 L( c8 `: Q
  68.         return;
    6 h. \: o$ {3 q1 x& w3 s4 C5 n
  69.     }+ b% H. k6 _  z# c& w
  70.     // do something
    - m$ q5 ~1 a, I# w& K
  71. });! W! M, u9 J3 a7 V0 ]9 m' v
  72. 智能合约Contract1 k  h/ O- N4 s& u/ r& X0 J
  73. use Web3\Contract;
    & k! [9 r# K- t  V) v! J
  74. $contract = new Contract('http://localhost:8545', $abi);
    8 p7 O: I4 C  Z6 O2 b
  75. // deploy contract2 ?. k* b! Y: l& i
  76. $contract->bytecode($bytecode)->new($params, $callback);
    * o* ?, A1 o6 r9 F+ r1 j$ a
  77. // call contract function
    % l# Y9 V. O" G
  78. $contract->at($contractAddress)->call($functionName, $params, $callback);2 I5 l* a2 s0 s
  79. // change function state
      T+ `; a' G$ _$ z
  80. $contract->at($contractAddress)->send($functionName, $params, $callback);
    * q$ m6 r  {; u% v& S! ^
  81. // estimate deploy contract gas8 _2 W3 c' t& N. ^
  82. $contract->bytecode($bytecode)->estimateGas($params, $callback);+ K; }, u" R& P9 J+ _
  83. // estimate function gas; g* A# U1 q, |) v
  84. $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);
    2 P' c' i: `9 p) m
  85. // get constructor data5 Y7 {% O" p; Q4 ~3 E% m
  86. $constructorData = $contract->bytecode($bytecode)->getData($params);$ x' N% o  B  z8 E& [
  87. // get function data
    ! M3 G2 l9 h& x1 r; }* Z( x3 w) h
  88. $functionData = $contract->at($contractAddress)->getData($functionName, $params);7 S$ b7 ?0 {" _/ D4 l( P
  89. 将值分配给外部域(从回调域到域外)
    6 M; |2 Z; `* V: |6 E9 p* H
  90. 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。
    $ D" a: T3 I6 C5 O# E' O
  91. $newAccount = '';
    . b) f4 |( ~: o, b0 `- X, l
  92. $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {
    ; |) _1 _: M9 ?7 Q4 q
  93.     if ($err !== null) {
    + w) h. f7 G! X5 `. a
  94.         echo 'Error: ' . $err->getMessage();
    7 [7 n: l8 s0 l; J
  95.         return;2 P+ Z) S" g  ?" s- G; f
  96.     }
    + f/ F( k0 G3 s- {, ]
  97.     $newAccount = $account;& x1 A$ M5 @5 Y0 A
  98.     echo 'New account: ' . $account . PHP_EOL;) l9 B' X. X7 C" F8 Z/ }* G
  99. });
复制代码

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

本版积分规则

成为第一个吐槽的人

白吃弟弟栋 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    6