Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊作为最流行区块链平台,最大的特点是运行各种智能合约。我们已经出过node.js、java、php的以太坊开发实战教程,这一次是python。Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py——对JSONRPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的包,来开发支持以太坊的Python应用。+ R& v) T& o" Y* q9 G* ], s
$ _+ d/ Q3 H% F$ W7 _2 k6 g& y& ]4 B
    本教程的目的是帮助Python工程师快速掌握开发以太坊应用的技能,同时穿插讲解以太坊的一些核心概念,例如:账户、交易和智能合约等,大概的目录结构是:: M+ C5 w8 ]( M. V
0 U+ S% x( Y& s5 ~9 C) d/ s
    Hi,以太坊
; B1 p  V5 {2 T0 e4 I0 W- C" S. l: g, }$ m
    将通过一个简单的Python应用的开发来讲解使用Python进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的Python应用中引入基本的以太坊支持了。
; s$ K( ?* d6 T: T- U- s0 R9 `: m, T9 \
    账户管理
# K2 t9 n0 O8 n" `2 }/ ^, c
6 i. F1 X1 D/ `: j' V  U    将详细介绍以太坊的账户管理接口。如果你对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。
& i5 D, D! b8 |" |8 l6 f! C; v: k0 y( }; d8 ?+ f  G) ~
    理解状态与交易
; ]- E( g" j. [6 `/ B) A/ \5 Y7 ?; d
    讲解以太坊的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清Python应用与以太坊交互的大多数问题。
5 Y9 n3 t" t/ x) P1 Y$ A, i' e
' F/ j  p1 M* ~9 R* h( L3 w& e    智能合约的开发与应用
* r% B* h8 R% ~: B% U: c. `, O
, }$ ~0 ~3 j) ^2 ]0 K! B    将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用Python操作solitiy合约的方法。如果你希望为自己的应用增加代币支持,这一部分的内容是必须的。
( Z3 y- H4 m, S4 \( s$ j/ f8 c
, f/ R0 m% z: S    过滤器与事件
0 ^- v, g& `5 f0 p+ h# C0 V8 n! G* J8 y2 h' b; ^( |+ Z, P
    讲解以太坊的通知机制以及如何在Python中使用过滤器来监视块和交易的生成与合约事件的触发。
6 D3 S3 M: D2 h" m/ `& z) e0 L( Q. @1 Y) {- y
    web3.py示例
% R! |) w0 K5 b/ o# ~+ ]. ~% ?4 q, B
    web3.py是以太坊官方维护的Python版rpc接口封装库,因此我们优先选择它。下面是使用web3.py获取节点版本信息的代码:
0 t5 s; _4 W, F6 o6 a7 V
' c. C+ |: p6 E# |; W5 S, e    fromweb3importWeb3,HTTPProvider
7 C4 O  b9 P+ m+ a0 W( U; X4 g/ c! ^2 R" }, B/ H
    provider=Web3.HTTPProvider('http://localhost:8545')
: c- k7 A+ _  ^" S- ~( \9 J0 X+ r, C! G2 j$ W; H
    w3=Web3(provider)
4 V  F" V! P$ O0 K9 N7 h2 S
0 ~# I: F- G8 b1 }    Web3是web3.py的入口类,我们与以太坊的交互,基本上是通过这个入口来完成的,实例化Web3需要指定一个通信服务提供器,即明确采用何种通信方式与哪一个节点进行交互。6 V' A* P6 F4 S+ G7 R7 l) n" D
, U9 w8 Y2 r! J" L$ }* n4 z- Q
    web3.py目前实现了IPC、HTTP和Websocket这三种网络服务提供器。HTTPProvider则声明了与以太坊节点旳连接采用HTTP协议,只需要指定节点旳URL即可。由于我们使用本机的gaanche-cli仿真器,因此使用http://localhost:8545这个URL。
* y8 [  N( x/ K+ w  y
. c& R, X% Z* V( M, H, l    Web3实例的manager属性是一个RequestManager实例,它负责利用指定的通信服务提供器来进行jsonrpc交互,因此它是通信传输无关的(provideragnostic)。调用其request_blocking()方法来提交请求:
1 v9 K4 S# e; _8 w0 T6 T  B# h% M- c% [8 A+ p
    version=w3.manager.request_block('web3_clientVersion',[])3 g5 N$ y6 A, a" O

1 ?$ g+ V% Q! S0 u    注意:request_block()返回的结果不是完整的jsonrpc响应,而仅仅是包含其result字段。
# p5 v( t+ |9 h: h  A% M2 C% Q, ^$ y
7 I6 E9 `7 }: i& Z" E5 \
后续可参考:@常德小学生
* r  `3 ]3 D. ~2 C& q4 c% @用 Python 中的 web3.py 库开发 Dapp
4 o8 u! r9 a+ ^) ?3 h) I5 l( [' C. W4 B  P
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13