Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互.1 Q& U8 |  r+ s3 s5 L9 Z/ ?: |* s
安装
& \: T! M6 Q; a, r# V0 y+ x! l通过Composer来管理依赖关系,首先将minimum-stability设置为dev
2 E4 @; W/ m% F7 P"minimum-stability": "dev"
# X1 T5 y. ?9 F8 X, z然后执行:  I  W$ s2 v! l5 K& k
composer require sc0vu/web3.php dev-master! t8 q) j; S- O8 i+ g1 C
或者你可以在composer.json中添加这行。; p2 g, b/ ?' s; D2 j

1 [# Y1 k) y6 a) F1 f3 s, O"sc0vu/web3.php": "dev-master"0 q% h9 x$ n# u2 z
用法
" T6 U5 K+ Y3 N7 l  M实例
) M, ?/ T% e9 ^2 W3 G
  1. use Web3\Web3;8 v% T' e0 k  a, c- @! V$ P% g
  2. $web3 = new Web3('http://localhost:8545');2 v* [+ e1 R: [+ a
  3. 接口调用( c4 h# Y5 V$ N
  4. use Web3\Web3;' d1 M3 n5 Y9 Y/ Y
  5. use Web3\Providers\HttpProvider;+ I" n9 \' C1 e9 f4 r- G
  6. use Web3\RequestManagers\HttpRequestManager;) V9 t1 Q# V5 l- ], c
  7. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));
    ) q7 T$ w9 A; S( E6 m
  8. // timeout
    : v. {5 Z1 Q; W; e" Z
  9. $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
复制代码

- g9 v1 y' H. d使用回调函数调用rpc
: F) L7 q3 i- ]: s4 B5 A4 o9 ?
  1. $web3->clientVersion(function ($err, $version) {
    " I0 d! n! g$ B/ @  _8 M3 b
  2.     if ($err !== null) {
    ( K+ M" F! e/ W3 ?+ d0 a
  3.         // do something. m; ^7 _( g" l
  4.         return;
    # D0 m' ?: F! n3 T, u
  5.     }
    % g# M& }$ ~; q, \+ E4 D
  6.     if (isset($client)) {
    ; `7 x" u2 r8 d+ c
  7.         echo 'Client version: ' . $version;- Y& x3 r6 @0 V; p; }6 l. I
  8.     }
    & l# x: p' R5 ~5 l0 q! S9 `: Y
  9. });, G8 |# R, w1 k
  10. eth
      ]; h2 K1 n5 e: I- \, s
  11. use Web3\Web3;$ X' C- e, o0 ~6 o, T& m
  12. $web3 = new Web3('http://localhost:8545');
    / ^- d( w! y1 ~$ {: I; O
  13. $eth = $web3->eth;
    0 G9 v8 o, K$ P- Y' I
  14. 这样也行:
    6 Z' O( U4 B- z" i( i2 }  Q/ q
  15. use Web3\Eth;% i- T/ c' {* `- w
  16. $eth = new Eth('http://localhost:8545');' Y7 k2 @& \+ `3 O6 [/ R
  17. net
      K% V( j& i% D. V* G( T
  18. use Web3\Web3;
    . r/ |. L* v# y. m
  19. $web3 = new Web3('http://localhost:8545');
    ; g. a0 G" n0 m; Y) t. f$ Y  U& e
  20. $net = $web3->net;
    4 G0 o7 Q6 g. z3 X8 X* i" ?; K
  21. 或者
    0 b6 V4 G* `, @% o# \/ g
  22. use Web3\Net;7 {( e* [8 n) _. E0 p* m. N, Q
  23. $net = new Net('http://localhost:8545');3 Y3 O" p  q* k0 m/ e8 @+ g& o/ m
  24. batch: `! N: W! }3 t& N
  25. web3
    6 H( o0 P4 w$ _" }/ q, B
  26. $web3->batch(true);
    / _$ T$ D& C1 Q# g# f
  27. $web3->clientVersion();# f* g/ C0 I2 ^- m. ~5 t
  28. $web3->hash('0x1234');( k6 R$ w# o! Y2 k
  29. $web3->execute(function ($err, $data) {! C! N6 H/ v& ^5 c% u# b) o
  30.     if ($err !== null) {
    5 R8 L' H% P* U9 U# r
  31.         // do something
    / q+ S1 d4 [6 c' q
  32.         // it may throw exception or array of exception depends on error type
    + e, b0 k9 L8 W( S9 c
  33.         // connection error: throw exception% i3 M" {, `; g1 ^2 N/ b8 Y7 P. Z
  34.         // json rpc error: array of exception0 E3 }& n- U; U0 Q- j4 x: i5 y
  35.         return;
    $ y) u, d' j7 o8 |3 W
  36.     }$ J# p( ]9 ^$ V4 i1 [4 G
  37.     // do something
    # N8 z0 b. N% v/ A
  38. });
    + \; r1 s* j4 A; Q
  39. eth
    3 |+ S: v' Y8 G1 p( ]5 `
  40. $eth->batch(true);5 X! x9 R7 C1 m" ?2 M
  41. $eth->protocolVersion();6 t1 D4 ?5 b! @8 R6 n) u
  42. $eth->syncing();( W/ R, U3 h7 f& T4 |" H
  43. $eth->provider->execute(function ($err, $data) {
    ! f2 `- D; f8 k5 y5 q% Q
  44.     if ($err !== null) {6 p; F4 Z4 H3 |: M4 y
  45.         // do something
    $ M6 ~! k9 H) \) j6 C' B  g$ m
  46.         return;
      Z+ `6 r' q* w# i
  47.     }% L/ ]+ m( K2 a$ ~' E' [
  48.     // do something8 I( f9 T- D$ c9 W9 `  ^9 U
  49. });
    7 b4 {) J, M( [' R4 {
  50. net
    0 m& q  ]6 {* D6 y2 C$ P
  51. $net->batch(true);* ^- Z& D+ [# `4 j
  52. $net->version();
    $ B! `' F0 @: z8 D, |* y. H; a
  53. $net->listening();# \, h( R- m  X4 X. a
  54. $net->provider->execute(function ($err, $data) {
    - s& P: M0 l6 a6 E, {1 |% ?) ]
  55.     if ($err !== null) {
    + d1 a7 W+ O+ e! g* f0 H7 m
  56.         // do something
    8 V. C1 C& c" l- O* k
  57.         return;' A$ W* U3 z. X( `8 ?
  58.     }
    3 l' B' U# |$ J& [+ n3 \, r
  59.     // do something* k; e; u! K. w6 T
  60. });
    - }6 y( u, {! `3 I8 j
  61. personal
    ; [5 o4 W! t. w6 H8 [" ^; h
  62. $personal->batch(true);/ |8 Q/ c# H0 @2 V' f- @: \
  63. $personal->listAccounts();
    " l" G5 q9 F' [( n$ {
  64. $personal->newAccount('123456');; @; S0 o2 E0 T" l. [
  65. $personal->provider->execute(function ($err, $data) {
    & H  H( f) n; n  M2 r: |+ j
  66.     if ($err !== null) {& a& t: r, n4 j9 b% Y
  67.         // do something) z0 _* @; J; D# A* P
  68.         return;* ]2 {; ~- k. K' n
  69.     }2 v! i3 F# c/ G9 j/ S+ Z* U
  70.     // do something
      x9 ^/ g& z% Y  P" ^6 x
  71. });$ [/ y- `/ f6 q
  72. 智能合约Contract' _" [! j: _# j& @1 m
  73. use Web3\Contract;3 G  w( O. _" I% A5 V( t6 l6 y
  74. $contract = new Contract('http://localhost:8545', $abi);0 r* ?) A; ?' W3 S/ i( @2 B) F
  75. // deploy contract# r) D% d4 g/ ^, V$ }& V. q8 U
  76. $contract->bytecode($bytecode)->new($params, $callback);) ]# [( H- U/ N3 p% L$ c  t7 `
  77. // call contract function' g' @$ z5 p' \0 R$ ~
  78. $contract->at($contractAddress)->call($functionName, $params, $callback);
    $ ~! X: t% M, g
  79. // change function state% _: i$ q5 N2 d: U1 l8 F; B, m
  80. $contract->at($contractAddress)->send($functionName, $params, $callback);
    $ W5 B6 M6 _, m6 s$ f. t. p1 N
  81. // estimate deploy contract gas
    5 t$ u: A7 x* n2 k
  82. $contract->bytecode($bytecode)->estimateGas($params, $callback);
    " l4 c; ]2 n& P% \1 G( U  W
  83. // estimate function gas  R$ ]* w. d: \6 {" M# z
  84. $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);
    ( G: U: b5 }/ G- {7 D- F2 i6 W4 I; w
  85. // get constructor data# V, w5 P* U5 H# N
  86. $constructorData = $contract->bytecode($bytecode)->getData($params);) t* s( s7 `% z" n. N* l1 {
  87. // get function data
    % T+ k. n# z& ^; X9 V; r" t% @9 V3 @
  88. $functionData = $contract->at($contractAddress)->getData($functionName, $params);5 r/ m/ r) B+ d0 q
  89. 将值分配给外部域(从回调域到域外)
    + Y2 Y$ i& J1 f  f7 h
  90. 由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。5 L- `( F, z4 m8 E% d2 f% W. t2 c
  91. $newAccount = '';- }6 B4 O' I; N; q& s: g9 `" A
  92. $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {
    9 N  a3 V; j( W+ c0 {  Z2 l8 e
  93.     if ($err !== null) {
    / d5 w. M, t; A) o, B. A
  94.         echo 'Error: ' . $err->getMessage();8 j0 E; _1 G5 c% l, _& ~
  95.         return;) H9 Z7 Z* ?" V5 t4 v1 \
  96.     }7 x- E8 I% K) B+ ?% L' N& ]1 B! S& r
  97.     $newAccount = $account;3 L' k. Q% x6 L
  98.     echo 'New account: ' . $account . PHP_EOL;
    # i$ C; F, w5 t! A+ \; L# y1 F
  99. });
复制代码
4 a1 s0 N) M" S: W* u4 O
1 G& B4 Z+ J. Q/ E7 `. X5 T
php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
标签: PHP 以太坊开发
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

白吃弟弟栋 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    6