Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊作为最流行区块链平台,最大的特点是运行各种智能合约。我们已经出过node.js、java、php的以太坊开发实战教程,这一次是python。Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py——对JSONRPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的包,来开发支持以太坊的Python应用。
, v- y; z4 {1 X1 z: `* I9 [* w/ L4 ?2 U
    本教程的目的是帮助Python工程师快速掌握开发以太坊应用的技能,同时穿插讲解以太坊的一些核心概念,例如:账户、交易和智能合约等,大概的目录结构是:% h. K: X# p3 i& C9 s' a2 J
8 N0 P; z1 c2 e2 i' J( \+ N
    Hi,以太坊! s/ S0 ~$ Q: a( X" q5 d6 F  D
, o4 u4 o3 }6 _( B; J& R% z" s0 s
    将通过一个简单的Python应用的开发来讲解使用Python进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的Python应用中引入基本的以太坊支持了。
2 T' v3 Q$ J) {# j! e3 u5 p2 A: F
  _# F; [" i0 ]) p    账户管理3 x: [) G: y0 j# S4 B
( Y7 M3 [/ K, \" O9 N4 w) b
    将详细介绍以太坊的账户管理接口。如果你对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。
2 X5 p# w. h, B7 p9 z8 e0 [; j& B* t2 G; F2 e$ j
    理解状态与交易9 B$ q& q( o; C' R5 f0 }8 o) D" v

0 q: U0 G9 K! |* w9 C    讲解以太坊的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清Python应用与以太坊交互的大多数问题。
# n8 d; l7 b' B8 x2 F# C0 `- A$ F2 t
    智能合约的开发与应用
/ P% f  C3 b1 O3 v6 m( b) Y9 K8 B
0 S% ^5 {# x2 r6 W% m8 _1 s) v    将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用Python操作solitiy合约的方法。如果你希望为自己的应用增加代币支持,这一部分的内容是必须的。6 H- u- V% W6 F! @+ D

$ y# S( E# X5 h* \1 ~0 a% y    过滤器与事件
$ o: b/ Z+ P' j: f- R$ f' }/ n/ R, p$ E
& S$ W% u: i! i' P. z6 V    讲解以太坊的通知机制以及如何在Python中使用过滤器来监视块和交易的生成与合约事件的触发。& S6 U' m4 _( \* q6 C" {

6 j; n3 y" N! Y$ K6 @% G    web3.py示例% R9 i, j# }# k" Z) |
# e0 v$ Z$ h2 O. f/ t' Q
    web3.py是以太坊官方维护的Python版rpc接口封装库,因此我们优先选择它。下面是使用web3.py获取节点版本信息的代码:, V+ u- ]% K- c4 t
5 A, p( Y( ?; b; V; c' |& q
    fromweb3importWeb3,HTTPProvider' i6 k$ `0 b+ X0 r5 A0 ^/ ^
. c  E* }2 e5 D( d; ^+ J
    provider=Web3.HTTPProvider('http://localhost:8545')) E5 ~! [: q0 w7 Y$ I  Z& S
, r" h7 ?+ p6 p' {& m( C& p& r+ y+ `
    w3=Web3(provider)* K( o2 |- J; b& ~
4 X' M$ C3 n# p8 {' b$ j' s
    Web3是web3.py的入口类,我们与以太坊的交互,基本上是通过这个入口来完成的,实例化Web3需要指定一个通信服务提供器,即明确采用何种通信方式与哪一个节点进行交互。5 K  s1 R$ R4 e  h2 a3 R* i

! R8 J; e/ u6 K    web3.py目前实现了IPC、HTTP和Websocket这三种网络服务提供器。HTTPProvider则声明了与以太坊节点旳连接采用HTTP协议,只需要指定节点旳URL即可。由于我们使用本机的gaanche-cli仿真器,因此使用http://localhost:8545这个URL。
4 N1 B& b& B' d7 d' ]6 W- _  {7 m
: i6 ]& r  T8 r; ]" B) W% r    Web3实例的manager属性是一个RequestManager实例,它负责利用指定的通信服务提供器来进行jsonrpc交互,因此它是通信传输无关的(provideragnostic)。调用其request_blocking()方法来提交请求:. u# S; |3 ^0 A; l
8 N' W! u8 B# \; R; I% F
    version=w3.manager.request_block('web3_clientVersion',[])( Z8 y2 A( H4 P! _; V& o

# W8 I. m+ j) j9 I7 R. |    注意:request_block()返回的结果不是完整的jsonrpc响应,而仅仅是包含其result字段。; n, S) T7 O! D( q; S  C3 T
4 X9 X3 G. x: E  `1 v) M
! k0 H0 _( H" a
后续可参考:@常德小学生
: V, g8 r1 }  z+ @% d3 A9 E8 \/ r3 z用 Python 中的 web3.py 库开发 Dapp
% P3 }5 r: q: h- \+ H% \. }' S( i, q2 d. C) _8 J  C" J8 Q+ B8 ]
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13