Hi 游客

更多精彩,请登录!

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

' \' q. V' s3 o6 V; ^" l    本教程的目的是帮助Python工程师快速掌握开发以太坊应用的技能,同时穿插讲解以太坊的一些核心概念,例如:账户、交易和智能合约等,大概的目录结构是:
# j1 V) O* H% I. K* T8 W# E. b7 @3 O8 B+ I5 c$ V+ [0 r
    Hi,以太坊  ]. ]# }0 f7 |
, x1 S- }- h! ]2 M2 r, {7 @
    将通过一个简单的Python应用的开发来讲解使用Python进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的Python应用中引入基本的以太坊支持了。
: Z6 \% u4 i+ E9 x( d* u" {  L7 s# v3 A+ D: k# X) K, K
    账户管理. D" _- ?) x4 z" d+ Q8 K& P5 y
* j. T3 n( n, e2 E. q
    将详细介绍以太坊的账户管理接口。如果你对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。
) ?2 j! o. ~1 p. j1 N
  ]) S* n0 p3 }1 N  z, b: d5 l    理解状态与交易& r0 p) u# `4 s: P
3 B# q# r- M: i, R6 H! [4 o, R+ o
    讲解以太坊的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清Python应用与以太坊交互的大多数问题。
  c) q% m3 M4 Q$ i, m4 L) S* Y3 r0 }: ^" G
    智能合约的开发与应用- g3 A& ?* w8 B/ H. ]

) [5 X" I2 L$ D; e    将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用Python操作solitiy合约的方法。如果你希望为自己的应用增加代币支持,这一部分的内容是必须的。7 N6 q7 M# C1 ?

9 C; m) u6 v0 j9 ?    过滤器与事件/ P7 _+ A! W5 R* W
, _% J9 ]; ]( ]
    讲解以太坊的通知机制以及如何在Python中使用过滤器来监视块和交易的生成与合约事件的触发。9 v2 L" W" p9 l  }, G9 m/ `

+ [8 f$ D8 X& d. ]/ x) G  u    web3.py示例
1 B. f9 ^; q' h* u* b2 B4 E. M) ]9 v+ |+ J
    web3.py是以太坊官方维护的Python版rpc接口封装库,因此我们优先选择它。下面是使用web3.py获取节点版本信息的代码:
: g5 p# I8 z4 Z. t5 a) C/ [% E& A: i: E2 A
    fromweb3importWeb3,HTTPProvider
( n4 P4 R& `% v+ m# J1 N3 I: S2 h7 Y. H' O/ U7 |
    provider=Web3.HTTPProvider('http://localhost:8545')- ?2 N! e, l9 G5 L& i

# q9 K7 d# t, L    w3=Web3(provider)
0 }# g" P1 L8 g7 ]( y
! [4 Q* z; q) N$ l4 A( K    Web3是web3.py的入口类,我们与以太坊的交互,基本上是通过这个入口来完成的,实例化Web3需要指定一个通信服务提供器,即明确采用何种通信方式与哪一个节点进行交互。
$ y0 j: Z6 @  K  r$ P
5 O* v: I# l6 F6 D4 w    web3.py目前实现了IPC、HTTP和Websocket这三种网络服务提供器。HTTPProvider则声明了与以太坊节点旳连接采用HTTP协议,只需要指定节点旳URL即可。由于我们使用本机的gaanche-cli仿真器,因此使用http://localhost:8545这个URL。
4 \9 M* a. b+ K8 ^2 @: `4 a  x- ~8 V( b7 Z
    Web3实例的manager属性是一个RequestManager实例,它负责利用指定的通信服务提供器来进行jsonrpc交互,因此它是通信传输无关的(provideragnostic)。调用其request_blocking()方法来提交请求:
2 ^: N4 g: A  m# [: X3 d2 i& C8 ?- c; R8 B7 |( z) i* c
    version=w3.manager.request_block('web3_clientVersion',[]), F, s: l% G; C  O  s8 \9 Q" v# J

# O5 r5 L9 t1 E4 q) j    注意:request_block()返回的结果不是完整的jsonrpc响应,而仅仅是包含其result字段。
$ ]9 q# J* t8 D+ A. w0 I( D
% S( W9 p9 \# G( V  b9 u; E  Y* T# }
后续可参考:@常德小学生9 ^; q$ N5 o$ k
用 Python 中的 web3.py 库开发 Dapp
& C1 D6 n" w, d# y5 I0 l7 X% P7 e; `
9 U; @) M' l2 C  g4 U+ o
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13