Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊作为最流行区块链平台,最大的特点是运行各种智能合约。我们已经出过node.js、java、php的以太坊开发实战教程,这一次是python。Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py——对JSONRPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的包,来开发支持以太坊的Python应用。1 ~0 Y9 Z; Q0 |
# Z7 F' i# ^! d. l6 E
    本教程的目的是帮助Python工程师快速掌握开发以太坊应用的技能,同时穿插讲解以太坊的一些核心概念,例如:账户、交易和智能合约等,大概的目录结构是:
. m! E$ D3 h; v" J' C9 n0 [8 f
1 d6 {4 `7 Q5 _5 z3 M( u% X    Hi,以太坊
/ o: d$ B1 g6 ?7 V5 X: c) k
$ Z. N* q9 _0 P    将通过一个简单的Python应用的开发来讲解使用Python进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的Python应用中引入基本的以太坊支持了。6 L6 I) R+ }1 `& }  k7 H2 Z- y
' h7 m2 a$ P/ K% C, W8 m
    账户管理# l. u0 x' h5 U" o0 }
3 k3 Y- T# r: d- C# T
    将详细介绍以太坊的账户管理接口。如果你对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。
# I! C( b* u' ?: _; A. `9 k$ m( u5 C; J, J1 L
    理解状态与交易
; r3 B7 D6 m) `+ \7 W! D+ p1 Z1 Z
    讲解以太坊的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清Python应用与以太坊交互的大多数问题。
/ b% \( [# b5 z6 v3 \: P: Z& W
4 P0 o  n2 p8 M, V! E& Y    智能合约的开发与应用& v' E, K/ D) S" w, R( y
* q! J2 b3 W$ A6 o: M+ g
    将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用Python操作solitiy合约的方法。如果你希望为自己的应用增加代币支持,这一部分的内容是必须的。6 z+ L3 a0 J7 z; C# q: _( @

- u: X: z: I$ c. i    过滤器与事件
% T6 ^$ A+ X4 r" y" b/ b# E3 _1 y* w; p5 {3 o
    讲解以太坊的通知机制以及如何在Python中使用过滤器来监视块和交易的生成与合约事件的触发。: M- T4 G* Y& ]+ G; i3 m

2 L* x/ r' G2 Z* [! f. g    web3.py示例
3 J. T2 N: p+ l+ E" G
5 G4 p) E5 b' F5 n* C    web3.py是以太坊官方维护的Python版rpc接口封装库,因此我们优先选择它。下面是使用web3.py获取节点版本信息的代码:. G4 p( u/ L2 Z' O# V, r

+ P, a* C# }0 q9 O" P$ p& t: Q    fromweb3importWeb3,HTTPProvider
& A& h4 {( L+ b3 |& o; X! S: A# O
8 r" V' ~& L9 a    provider=Web3.HTTPProvider('http://localhost:8545')# H, @6 s1 U" b" P5 C
0 X: \. j! I5 ^+ W' E
    w3=Web3(provider)" c' r( t. m1 F

1 C# L& x8 Q. h9 t7 O, Q( W; e    Web3是web3.py的入口类,我们与以太坊的交互,基本上是通过这个入口来完成的,实例化Web3需要指定一个通信服务提供器,即明确采用何种通信方式与哪一个节点进行交互。4 F- o3 Q* r2 R4 F8 w. q( B- G7 v# i
& a- a) F1 t& d2 _8 n  O
    web3.py目前实现了IPC、HTTP和Websocket这三种网络服务提供器。HTTPProvider则声明了与以太坊节点旳连接采用HTTP协议,只需要指定节点旳URL即可。由于我们使用本机的gaanche-cli仿真器,因此使用http://localhost:8545这个URL。
6 \; L1 i. R4 Z
1 {7 V& g! P8 F) f% J% O5 |, |    Web3实例的manager属性是一个RequestManager实例,它负责利用指定的通信服务提供器来进行jsonrpc交互,因此它是通信传输无关的(provideragnostic)。调用其request_blocking()方法来提交请求:
1 k8 y8 n: o! f: C0 J
* @( X& k6 l8 x/ g8 M* f0 \- _" R    version=w3.manager.request_block('web3_clientVersion',[])* k1 t" B7 x4 W

7 O7 E- I7 o3 T5 ]6 ]    注意:request_block()返回的结果不是完整的jsonrpc响应,而仅仅是包含其result字段。# g7 z# K0 t8 E6 t

" o; ~! a) r- ]8 u7 n2 ^
, k1 t! M) a2 X1 `' ?% N* l后续可参考:@常德小学生+ T5 N) Q7 a- a- c
用 Python 中的 web3.py 库开发 Dapp
, h  R: V9 h, f9 M
4 b% d6 b; ^+ L! i% B
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13