Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互.4 c! W% p; e( D+ O4 [
安装. p' j4 A. {: Q
通过Composer来管理依赖关系,首先将minimum-stability设置为dev
+ i# w, u; }+ ]' e* l+ W"minimum-stability": "dev"+ T9 _$ N- S6 B( a! o9 N& M6 p
然后执行:- _6 j. E$ ]# a7 @
composer require sc0vu/web3.php dev-master& W$ C$ p% S, ~& c/ l' {$ I
或者你可以在composer.json中添加这行。
) o  o  Q) a0 G# ?' W. Z* h
, d0 i( `5 u( x5 p, t- K"sc0vu/web3.php": "dev-master"5 t9 m. h' e! L9 ]: [6 I
用法
7 _% d1 O  a  W实例6 p+ _% I) I7 C5 g, S5 }1 ]
  1. use Web3\Web3;' P  e6 `" R; V% q* Y. _
  2. $web3 = new Web3('http://localhost:8545');: j% u. A- W( V5 m
  3. 接口调用
    1 r$ q7 L$ ?9 A7 u- E
  4. use Web3\Web3;! C, W& B* _" E( H; A
  5. use Web3\Providers\HttpProvider;" U2 `& M$ A# a
  6. use Web3\RequestManagers\HttpRequestManager;
    " ^* q: s4 a$ [9 v5 h
  7. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));; v4 D4 W" y7 t( M# ^
  8. // timeout; @9 W. \$ S% }# |0 N" F2 Y) I6 `
  9. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
复制代码
- ~# u2 `: A$ E; L( R
使用回调函数调用rpc
1 X2 Z' V) e- a, p9 I
  1. $web3->clientVersion(function ($err, $version) {  M- F, A4 \9 m- k1 U/ I- v
  2.     if ($err !== null) {; Q2 ^  _8 w9 A) a$ S6 C
  3.         // do something0 k+ P! f( w6 k; f
  4.         return;
    8 Y8 e8 j4 v; Q9 o4 P
  5.     }
    . D; R& A) q5 \5 a- e
  6.     if (isset($client)) {0 ?0 r& I3 m  m2 |  [8 c: `* W# F
  7.         echo 'Client version: ' . $version;' j: R  C6 G: _
  8.     }
    : z& F8 q' N) Y+ E! q6 S% K- n$ y
  9. });
    0 ^) n" t" A3 m* q$ k7 k
  10. eth1 T. i+ ]4 @- ^" j# i, n+ F
  11. use Web3\Web3;9 k/ b4 O" G& A4 t) M4 |0 Y0 B
  12. $web3 = new Web3('http://localhost:8545');- v: ?; E  h, e/ f: c* c
  13. $eth = $web3->eth;
    - k7 m  w5 B1 _6 Q* ]5 ~4 h6 P
  14. 这样也行:
    : Q% k7 B6 K) H0 l
  15. use Web3\Eth;9 P- b* t/ g1 k
  16. $eth = new Eth('http://localhost:8545');  e, C+ O6 X* a8 a* F9 i0 ]9 r+ n
  17. net
    4 ~- ^7 k$ d' X! P
  18. use Web3\Web3;" E9 L+ _. n! n/ f' u
  19. $web3 = new Web3('http://localhost:8545');
    % ]3 j, h, K# p8 @, Q: {
  20. $net = $web3->net;
    4 l& r6 u% ^4 d
  21. 或者/ I0 L# b4 k% Y/ o" S* ?% C
  22. use Web3\Net;
    : V0 t7 h1 `: J/ h1 U, Q6 p
  23. $net = new Net('http://localhost:8545');! ?8 D0 g9 U5 h
  24. batch8 t0 {0 P/ z( u: L! V2 [/ T, C
  25. web3
    2 z! R$ q9 L( ]7 Q# p
  26. $web3->batch(true);
    5 j) f3 b, _8 T/ \
  27. $web3->clientVersion();3 a9 p& L1 @5 C, s
  28. $web3->hash('0x1234');
    $ F) |: m' z! y: ]
  29. $web3->execute(function ($err, $data) {
    ) ?- f1 e) {) u$ R% ^( U
  30.     if ($err !== null) {: A$ U8 ]9 t; Q% r
  31.         // do something
    # d1 O  h* x2 I+ M  f0 ^0 l: f  s
  32.         // it may throw exception or array of exception depends on error type( u0 G7 \/ F6 t/ Q6 F' \" e
  33.         // connection error: throw exception* a: o6 s/ L2 T+ l0 i
  34.         // json rpc error: array of exception
      W8 B8 H8 R- e; f- ~5 m
  35.         return;* a3 o5 O+ W3 {
  36.     }9 v) Y3 P5 e3 N. f& z
  37.     // do something9 q" P- N+ o& F4 N. S
  38. });
    0 v" }* X  \1 c  v, l8 }9 l0 p
  39. eth
    # |9 W4 [7 o+ W, X& t9 F  v! ?
  40. $eth->batch(true);$ _- [" G% X  Y( ~% Z
  41. $eth->protocolVersion();
    $ C. f" Y9 L  P7 _, b
  42. $eth->syncing();
    0 t+ ^1 D$ [  b# m* h
  43. $eth->provider->execute(function ($err, $data) {
    0 k, a  ]9 P: w" [, ]2 V
  44.     if ($err !== null) {
    " s4 q9 k8 v8 Q2 K
  45.         // do something
    : e7 u/ X6 O! @) p
  46.         return;# q4 D9 X( O4 R6 B- |, @
  47.     }
    $ U) K  r# u6 t% a3 R  T) e
  48.     // do something0 s" k$ f- [8 e3 k9 Y# _/ o
  49. });$ C  M) R$ r; V4 z+ F3 o+ P% J$ Q
  50. net7 Y# t; b( T7 t1 |
  51. $net->batch(true);
    ) d, x/ \4 ^9 B# q* T& E
  52. $net->version();9 k# A" O6 R$ G4 _: G) b/ y$ J
  53. $net->listening();& D) v3 i2 ~% p# m3 y8 V" H" U5 j
  54. $net->provider->execute(function ($err, $data) {0 Y3 o: g( q1 O9 Q
  55.     if ($err !== null) {' J2 d, W% t7 ?' x! S; _$ L
  56.         // do something
    # _0 @  l- f( k2 Z4 a/ U' ?
  57.         return;
    . w( j7 D( g; _7 ~8 {* ^7 V
  58.     }1 _0 `) \" t3 S, j* t
  59.     // do something
    7 b3 S7 C" `* F% B% D
  60. });6 a" L( p6 @+ V; M
  61. personal
    1 z+ g* c+ A" [0 T& V, G
  62. $personal->batch(true);- y( L# l, R* J: \& O- w* U  B' ^
  63. $personal->listAccounts();
    8 v6 A7 p: F9 }: D7 a% v3 N
  64. $personal->newAccount('123456');
    9 C/ P$ E$ c$ B9 L3 I7 G
  65. $personal->provider->execute(function ($err, $data) {; K2 {1 |. @' S8 I2 D  ~+ T1 I
  66.     if ($err !== null) {# H% I7 L8 T8 R7 l
  67.         // do something
    2 m& r6 r, {5 Z
  68.         return;2 E3 C) v$ H' V  G
  69.     }, q# p4 \8 I& x! f* d4 V3 t
  70.     // do something
    / x) X- I* z* @4 C  C+ O5 J' |
  71. });. e6 Z' g7 J% E5 ?8 h. }, _
  72. 智能合约Contract) ~$ g& |8 _7 K7 o5 d: A
  73. use Web3\Contract;1 S5 ~% y4 {8 ^% W" k4 n
  74. $contract = new Contract('http://localhost:8545', $abi);
    % K$ q5 z5 B  B7 Q
  75. // deploy contract; U2 a- P6 ]( J1 p7 C
  76. $contract->bytecode($bytecode)->new($params, $callback);+ b6 q8 i  E! s+ \
  77. // call contract function4 W, y" Y4 J! q- \5 g
  78. $contract->at($contractAddress)->call($functionName, $params, $callback);9 @2 \" k3 S* H9 I% }" ]4 U
  79. // change function state
    1 h! T% G9 T1 G
  80. $contract->at($contractAddress)->send($functionName, $params, $callback);3 p5 @8 ]% v# j$ y
  81. // estimate deploy contract gas
    3 q6 l1 v( U3 V6 W8 @
  82. $contract->bytecode($bytecode)->estimateGas($params, $callback);
    ) ~* F, q- Z. g/ V, [/ F
  83. // estimate function gas9 C$ A" p* v4 A4 y9 U2 g
  84. $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);
    7 N. a1 Y- I6 Y7 u& j/ L9 Y; T
  85. // get constructor data  ]2 c1 s3 `$ |% x
  86. $constructorData = $contract->bytecode($bytecode)->getData($params);
    + m/ O( `& V7 x& i) f
  87. // get function data, {. u* |4 R% |# Z$ Y
  88. $functionData = $contract->at($contractAddress)->getData($functionName, $params);
    1 r6 K+ J8 N$ Q3 c; l
  89. 将值分配给外部域(从回调域到域外)
    8 h7 z6 H, u5 ]- x6 p' B( Y
  90. 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。
    1 ^- S% @" A+ \
  91. $newAccount = '';- d5 r/ [7 R6 {2 V/ Y
  92. $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {
    * a# h/ A. {$ p2 `
  93.     if ($err !== null) {/ D$ }: B* N8 T. Z* x
  94.         echo 'Error: ' . $err->getMessage();8 E1 z# a* F/ n1 q4 S4 G
  95.         return;
    ( c6 u7 i# l' O- c* K: a
  96.     }
    - o6 q" J: u4 V2 X
  97.     $newAccount = $account;  n4 f" ~# u5 h/ d8 y9 Z# L) M
  98.     echo 'New account: ' . $account . PHP_EOL;% P5 J" d  P- m
  99. });
复制代码
$ t" u. v. b0 O( [& j4 T" K1 A! e
% m" N) }2 g, P0 a9 o0 M
php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
标签: PHP 以太坊开发
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

白吃弟弟栋 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    6