Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊作为最流行区块链平台,最大的特点是运行各种智能合约。我们已经出过node.js、java、php的以太坊开发实战教程,这一次是python。Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py——对JSONRPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的包,来开发支持以太坊的Python应用。
! E) ~* O! h. W: [5 U! \4 Z) L# |4 G
; G7 X6 v3 m8 P) W) `    本教程的目的是帮助Python工程师快速掌握开发以太坊应用的技能,同时穿插讲解以太坊的一些核心概念,例如:账户、交易和智能合约等,大概的目录结构是:
9 k- g+ a* q2 U8 E9 h& g
3 _3 z  H- x2 ?! q6 L3 e9 ^# |" W    Hi,以太坊- U+ ]" ^& k0 k5 P/ r
2 j! J0 h- L/ X* B3 ~
    将通过一个简单的Python应用的开发来讲解使用Python进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的Python应用中引入基本的以太坊支持了。
/ z% A) K3 l8 B2 H0 ~
9 F! ]7 q3 N# p$ M2 Z    账户管理
5 }& [2 _, t& v; K" Y; }1 {
. ^" [* z5 q/ u) f, v4 J    将详细介绍以太坊的账户管理接口。如果你对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。# J6 V  P2 d: P& w" V2 F; Q2 K

% `! R- }( B9 C& t    理解状态与交易  K- K& b2 Y! F; l4 }* I
: c$ o- q: e! F& j
    讲解以太坊的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清Python应用与以太坊交互的大多数问题。  S% |" y- l# ~7 S
' X) T# j7 n. ^
    智能合约的开发与应用1 g; k0 H* c. \

7 V: I1 [5 a+ T, p8 Y6 i) x: p    将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用Python操作solitiy合约的方法。如果你希望为自己的应用增加代币支持,这一部分的内容是必须的。: u. I* z- p! D
4 _  a3 t* S* ~9 f# V0 o: v/ a
    过滤器与事件
6 ~3 s+ h9 W# c4 r
: K1 r) _2 p0 r# J# P" p    讲解以太坊的通知机制以及如何在Python中使用过滤器来监视块和交易的生成与合约事件的触发。
$ y5 d! k5 M2 j8 ?( o  w( s4 J- ?  h4 l. D# x4 `
    web3.py示例7 J0 l$ J* `6 W! Q& v$ g
4 o9 b: H7 @$ x0 w
    web3.py是以太坊官方维护的Python版rpc接口封装库,因此我们优先选择它。下面是使用web3.py获取节点版本信息的代码:
: }& M: `7 n% Y) Y* }) U1 Z# E2 e0 _
    fromweb3importWeb3,HTTPProvider
5 B% a' H3 ]# ^5 G$ D; q9 G) q
: B* Y0 c- t& Z, q+ C$ A    provider=Web3.HTTPProvider('http://localhost:8545')7 J) Q# ]* v. K6 ^& Y$ e
! z( O8 x, g& J, U. g7 C& N
    w3=Web3(provider)
2 n' ]5 v4 J/ t' y6 [" _* j! p* |8 I/ Q3 @+ t9 i2 q* {7 M1 G
    Web3是web3.py的入口类,我们与以太坊的交互,基本上是通过这个入口来完成的,实例化Web3需要指定一个通信服务提供器,即明确采用何种通信方式与哪一个节点进行交互。9 i7 T5 L( t3 X1 O% b" g
6 r: P6 c# e- z. W
    web3.py目前实现了IPC、HTTP和Websocket这三种网络服务提供器。HTTPProvider则声明了与以太坊节点旳连接采用HTTP协议,只需要指定节点旳URL即可。由于我们使用本机的gaanche-cli仿真器,因此使用http://localhost:8545这个URL。& |6 \) Z3 B( o& t+ @# d$ Y+ n

) N' Z/ D6 L& q' H    Web3实例的manager属性是一个RequestManager实例,它负责利用指定的通信服务提供器来进行jsonrpc交互,因此它是通信传输无关的(provideragnostic)。调用其request_blocking()方法来提交请求:. D7 k$ G5 G3 ]) x) N' J* d# ]

8 L7 x* N* l3 _& T7 J    version=w3.manager.request_block('web3_clientVersion',[])
9 G) Y/ g# L2 i- O8 ^  Q, C2 U0 j/ A& k' a% v
    注意:request_block()返回的结果不是完整的jsonrpc响应,而仅仅是包含其result字段。% k4 a1 X+ O3 }! i8 @

' s0 Q  c0 w7 @, z* `  |' _+ c* n; p) y! E
后续可参考:@常德小学生
" x9 K! z4 ?& M" y" W5 W; t8 x) c/ W用 Python 中的 web3.py 库开发 Dapp1 |* \+ @1 Q( K

1 H$ i7 h, E% J( q
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

温室小书生室d 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13