Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊作为最流行区块链平台,最大的特点是运行各种智能合约。我们已经出过node.js、java、php的以太坊开发实战教程,这一次是python。Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py——对JSONRPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的包,来开发支持以太坊的Python应用。1 Q0 L( Y: O8 T/ G9 Y7 r

& c* \6 S& O+ k# ~# g; w7 ~    本教程的目的是帮助Python工程师快速掌握开发以太坊应用的技能,同时穿插讲解以太坊的一些核心概念,例如:账户、交易和智能合约等,大概的目录结构是:
) m* t0 f5 t+ T! x6 j( V! m# H4 `7 g$ e
    Hi,以太坊
+ g4 T( \2 H* j/ |8 [: z; s- I' t6 {+ }$ \* Z
    将通过一个简单的Python应用的开发来讲解使用Python进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的Python应用中引入基本的以太坊支持了。: h% I/ p" }/ b  h( J

% I6 r7 Y' m! E% M9 e' ]3 J    账户管理
, t( J! D! x: S6 j9 N
/ k+ v5 c; t% i4 l. q) ~4 V/ O    将详细介绍以太坊的账户管理接口。如果你对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。
( x- Z% A) _4 l3 u3 R
4 R; i$ b$ G; X6 L7 N/ ~    理解状态与交易
4 Q* N2 Y- T' J/ H: F4 K% z5 p
% k! N. s& R9 D! i    讲解以太坊的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清Python应用与以太坊交互的大多数问题。
- D: E* p7 g% y( r7 F% T$ P
7 _; ^) N7 C  l' X    智能合约的开发与应用& B7 T; \3 o( z+ a

8 p6 v6 x. D8 ]# }; v& a6 n    将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用Python操作solitiy合约的方法。如果你希望为自己的应用增加代币支持,这一部分的内容是必须的。; |. Q5 p' x9 b9 L  M
. W1 Y* Z- p9 y; }
    过滤器与事件. E$ W* ]+ {9 c# @
! F( m9 [$ U; \& H' }! g
    讲解以太坊的通知机制以及如何在Python中使用过滤器来监视块和交易的生成与合约事件的触发。. T; C$ i# M/ M& ~+ v  U' t
4 z4 E6 {5 j+ ]
    web3.py示例
1 F& j4 r4 R% B6 t6 q& D4 O5 {1 Z
6 L. w% [9 k9 x  V# @# X0 g    web3.py是以太坊官方维护的Python版rpc接口封装库,因此我们优先选择它。下面是使用web3.py获取节点版本信息的代码:+ f) S/ R$ a9 w

2 J5 |4 j! J2 Y6 q3 n+ ]- g    fromweb3importWeb3,HTTPProvider
# d: Z5 d0 h% w
  `4 \$ b; u* u" x* n! y    provider=Web3.HTTPProvider('http://localhost:8545')
% b' N; [6 D9 y% T) a9 Q) r$ j& y/ S9 }# v) ^) F
    w3=Web3(provider)
4 C8 _9 U; F  G' x' N5 k$ P  h! B4 V% J0 G
    Web3是web3.py的入口类,我们与以太坊的交互,基本上是通过这个入口来完成的,实例化Web3需要指定一个通信服务提供器,即明确采用何种通信方式与哪一个节点进行交互。% q# y  Q  w6 y. x0 P/ \6 c2 {7 b, c
. q( |5 r8 M' D
    web3.py目前实现了IPC、HTTP和Websocket这三种网络服务提供器。HTTPProvider则声明了与以太坊节点旳连接采用HTTP协议,只需要指定节点旳URL即可。由于我们使用本机的gaanche-cli仿真器,因此使用http://localhost:8545这个URL。
* m3 ]( ~3 [0 ]. d: t4 i& C1 N# f, u' L) f
    Web3实例的manager属性是一个RequestManager实例,它负责利用指定的通信服务提供器来进行jsonrpc交互,因此它是通信传输无关的(provideragnostic)。调用其request_blocking()方法来提交请求:: \& y1 G. w- j! v% }
5 }1 `7 X$ D& Y: T
    version=w3.manager.request_block('web3_clientVersion',[]): x9 C# i" l0 @/ a( E3 Z

8 i9 f- z0 T7 Z" x$ W' r' H8 K% K    注意:request_block()返回的结果不是完整的jsonrpc响应,而仅仅是包含其result字段。
3 c3 u, Y. Z& c  ~) ]  x2 F8 @, E6 J/ q" @) w% j( ]# z7 [

$ ~5 n3 E& ?* i1 a  J- z$ {6 z后续可参考:@常德小学生# E: k+ K1 I& L
用 Python 中的 web3.py 库开发 Dapp: z- g. }' c, b+ z. O- C+ V0 T4 W4 T
: }* w4 B6 m& _$ T; i
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13