Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互.+ o% |8 z: }, w0 [6 D' ]
安装! g1 x# z4 l+ O0 [. ?
通过Composer来管理依赖关系,首先将minimum-stability设置为dev) ~! u# {' P- t* f
"minimum-stability": "dev"* M. m. [! E5 V0 d  ?
然后执行:& }5 n& i% f% B5 X
composer require sc0vu/web3.php dev-master
7 y5 s; E# y* x7 Q" v或者你可以在composer.json中添加这行。, m- |* n  F+ z# {: U

. s! @3 {) o' O* T"sc0vu/web3.php": "dev-master"( |& V- m+ ~8 H( m9 U8 H/ ?
用法# x' p) v# q, ?* a- K
实例. l3 m' p$ l5 U9 \5 N$ L$ F3 Q
  1. use Web3\Web3;1 i; X0 ~! p  \/ G6 d
  2. $web3 = new Web3('http://localhost:8545');
    7 x, Z) ]9 }! w# }- t
  3. 接口调用
    9 x' E% [  s  X$ i, a
  4. use Web3\Web3;
    , j2 o5 A8 d7 v7 c6 @& X+ c
  5. use Web3\Providers\HttpProvider;9 f$ _# Q1 \" T( U% i: k
  6. use Web3\RequestManagers\HttpRequestManager;4 x. m% C" X5 \9 D
  7. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));, I4 H$ U! e- G5 I4 H
  8. // timeout9 f  F+ ?: U% {4 [0 I) ?
  9. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
复制代码

3 l) [5 x2 d1 |使用回调函数调用rpc
' B! V" Z- f6 i( S
  1. $web3->clientVersion(function ($err, $version) {
    * a+ I1 @0 s2 L; `$ L4 F; J
  2.     if ($err !== null) {9 g" S9 C: i: V: h! K6 o
  3.         // do something
    * B' I  k; M: T; T2 J
  4.         return;
    7 L, f5 P" _( v  s  p  n
  5.     }+ j+ Z0 \" {2 o- P4 x, ]# ]
  6.     if (isset($client)) {
    5 C" @$ L. l/ w9 w
  7.         echo 'Client version: ' . $version;
    7 j* v1 U% E- L+ r) q: O; N7 H
  8.     }
    4 T; P2 E6 A: m: h. N- P
  9. });
    ! t; u( y" k" o; G' B9 V1 L  M
  10. eth# i) h1 k% a9 `) P& Q4 U. X( N
  11. use Web3\Web3;' e: m( V8 s5 T
  12. $web3 = new Web3('http://localhost:8545');
    + J1 ]5 t6 U% ?" e
  13. $eth = $web3->eth;. N0 i* |4 d% }) d& [$ y
  14. 这样也行:
    3 ?8 s4 @( h0 V
  15. use Web3\Eth;% c$ o- F% w& r9 A+ s/ q! A
  16. $eth = new Eth('http://localhost:8545');
    + H1 w) Z1 r# A; y
  17. net; c# \( i  ~5 b- n) i: r
  18. use Web3\Web3;. j+ \. R5 O2 z! m! f4 h
  19. $web3 = new Web3('http://localhost:8545');
    ' A0 A8 d9 O+ w+ U: s" B5 Q
  20. $net = $web3->net;: `7 y; `; P6 @" V  [( ?8 u4 E4 z
  21. 或者
    0 r" N6 Q  ]$ n% P# D2 `9 l
  22. use Web3\Net;
    8 h: w' @7 N; b: O
  23. $net = new Net('http://localhost:8545');
    3 f4 L% w5 @4 ~$ h4 \# F  a
  24. batch3 x+ e. G6 ^, M4 @, W! Z5 {
  25. web39 Q+ Y! D3 f, K2 u
  26. $web3->batch(true);2 r$ ?7 l2 F; |, m
  27. $web3->clientVersion();! N! m8 V& \2 ?% `/ Y6 t
  28. $web3->hash('0x1234');
    9 `5 z0 X& G! R3 M9 |
  29. $web3->execute(function ($err, $data) {
    6 M. x  [/ q( V1 m, k  W, B( ]
  30.     if ($err !== null) {
    + x/ [2 A5 T+ e( m
  31.         // do something
    & q, V" e9 t. H( f% I9 d' }& v! B
  32.         // it may throw exception or array of exception depends on error type
    / H& _! p/ _0 C) D" d
  33.         // connection error: throw exception5 H3 l$ a! |6 R4 N: x$ p: _
  34.         // json rpc error: array of exception
    6 u6 f6 D% c' G1 U% C! M; X+ e
  35.         return;
    3 `( c% W" Y/ _) h
  36.     }' K0 I/ H9 F! `+ F  Z* V' v
  37.     // do something3 y9 o! M! x6 J  I
  38. });% o: @6 n. S: I" r0 w' j1 L( x7 T4 A
  39. eth
    + e; w3 _2 k, _$ d8 ^
  40. $eth->batch(true);+ @' k6 I/ o' V) _' L) C
  41. $eth->protocolVersion();
    1 t' l9 f: j. I( [( ]$ F
  42. $eth->syncing();& t! _2 c' i! R# U
  43. $eth->provider->execute(function ($err, $data) {
    1 n% j. K( T% |' N: g
  44.     if ($err !== null) {
    ; w$ j* e2 |! N! I# g* q$ H
  45.         // do something- V  K- V% t0 q6 H# k
  46.         return;
    / G/ k/ x( ?. `) y1 l% h) U/ L
  47.     }$ U( {, I0 _5 ~" ^1 \
  48.     // do something
    1 S2 q0 l6 @0 Q% F
  49. });. s) m& n" R! a% f2 K3 e
  50. net: y5 ~0 P/ ], {* H: z) E
  51. $net->batch(true);- R8 a0 e0 a+ S" L% A( b  d
  52. $net->version();( s9 V) P- |+ }; Z  J) W- u
  53. $net->listening();
    9 k! D( _; ?* p4 v1 c
  54. $net->provider->execute(function ($err, $data) {- a7 V% _) ]; q
  55.     if ($err !== null) {
    & R1 \- U' e# v$ c
  56.         // do something3 [6 T8 C1 w  w8 S* W
  57.         return;% w, L3 w5 x+ Z9 b* d5 B
  58.     }# I2 r/ ?6 ^- h( [
  59.     // do something7 F# b! g: Q* z* [  t7 Z4 N
  60. });
    ' D! l2 T' R' ^$ j/ ?) `4 G
  61. personal
    9 F2 q$ j- `! b7 k+ `1 `
  62. $personal->batch(true);' W+ ~6 f) j- v9 e# d3 v+ P) _
  63. $personal->listAccounts();' E9 L9 K) w, f4 m) P* s8 u
  64. $personal->newAccount('123456');
    - v1 o7 @" u* M$ H8 e- m0 S0 V
  65. $personal->provider->execute(function ($err, $data) {
    ) \2 d% f; H, J0 M, s& }6 N
  66.     if ($err !== null) {, U& f. R% |) J( `" k: X
  67.         // do something
    ; ~4 |6 A0 ~* o! |8 H$ y7 C( t
  68.         return;
    1 n/ I4 v# q; b8 C) T3 M
  69.     }
    4 w# S  g) Y; D8 D& n
  70.     // do something
    $ f$ v; \1 ?5 a+ r' Y! E% t# @1 S1 ^
  71. });. c6 P7 Z. }( G% b8 {
  72. 智能合约Contract6 G9 E8 u$ E7 F, b7 c3 m9 [7 n- ?8 P
  73. use Web3\Contract;$ v1 g# y) t5 D& ^+ V
  74. $contract = new Contract('http://localhost:8545', $abi);
    % w) ]4 q4 _0 g# L6 a- g  |3 m
  75. // deploy contract
    & i9 X. e1 \* K; i4 g8 e+ I
  76. $contract->bytecode($bytecode)->new($params, $callback);
    $ G$ q, _6 ]: ?2 A; |
  77. // call contract function4 c* Z; B( Q/ u+ {' \. h. v" `
  78. $contract->at($contractAddress)->call($functionName, $params, $callback);: o- w! W( F' U3 H! s' i% O7 C
  79. // change function state
    9 |! U  |& w! N4 X( E+ s2 [! o# K) ^
  80. $contract->at($contractAddress)->send($functionName, $params, $callback);2 |" |: P- E; _- i
  81. // estimate deploy contract gas
    , W, N" r0 G: f5 x
  82. $contract->bytecode($bytecode)->estimateGas($params, $callback);
    * F' K# U& h" x5 \6 l
  83. // estimate function gas3 l' i" J" q3 ?: F* S
  84. $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);4 @1 u6 W$ ^9 {4 w. n
  85. // get constructor data( i( k+ Y0 v. r9 a
  86. $constructorData = $contract->bytecode($bytecode)->getData($params);+ ~% R% L3 K! B1 L- j( |
  87. // get function data. ?. {& q- w6 O. r+ ]' T5 T
  88. $functionData = $contract->at($contractAddress)->getData($functionName, $params);% @/ m% Y5 c. L1 X
  89. 将值分配给外部域(从回调域到域外); r8 m' V. Y/ Z* U
  90. 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。
      D% L2 C8 K# a4 }3 p
  91. $newAccount = '';
    / Y% E) d# T5 V2 F* m/ _
  92. $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {
    6 T+ k6 k/ N6 U2 F" e! k3 w# q
  93.     if ($err !== null) {
    0 {! n# ~* W( m" Y) x
  94.         echo 'Error: ' . $err->getMessage();+ Q& e& e2 N0 {+ X
  95.         return;& R1 P3 N- y9 p/ @' k( g
  96.     }
    % m  t* m" y) G6 e' D3 I: Y
  97.     $newAccount = $account;, R( G& ^. `- J( ]) n) {# b
  98.     echo 'New account: ' . $account . PHP_EOL;5 \* l; {% y- ^/ D7 e: a$ Q2 X
  99. });
复制代码
8 k: L  u9 H% _" w; E( C0 @

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

本版积分规则

成为第一个吐槽的人

白吃弟弟栋 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    6