Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊作为最流行区块链平台,最大的特点是运行各种智能合约。我们已经出过node.js、java、php的以太坊开发实战教程,这一次是python。Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py——对JSONRPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的包,来开发支持以太坊的Python应用。
/ O( G* L0 P( y' d0 i$ L
  t) E( G* D) @2 q    本教程的目的是帮助Python工程师快速掌握开发以太坊应用的技能,同时穿插讲解以太坊的一些核心概念,例如:账户、交易和智能合约等,大概的目录结构是:
7 a& E; o0 u) Z3 J$ _" |- b" k- C2 P- {$ u9 G- T, L
    Hi,以太坊
, G% o; c+ |# [' Q! b% ~( M9 f, s$ }' F  c% o
    将通过一个简单的Python应用的开发来讲解使用Python进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的Python应用中引入基本的以太坊支持了。& s- |0 o* Z; W8 U; V3 T
, Q* [: i7 {5 b. B4 V+ @
    账户管理; F! P! Z" ?0 V$ r: B

7 {) Z' c* R! k! E% s* s  J    将详细介绍以太坊的账户管理接口。如果你对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。( M! ^( U5 w0 Z9 i- B$ a
( P8 |+ N$ Z- I$ M4 ^/ J2 M5 _
    理解状态与交易9 |$ ?+ f/ i* U5 O. f* N+ K

& ~+ M& `- q( l+ V    讲解以太坊的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清Python应用与以太坊交互的大多数问题。( }# b" R; }( P5 D

9 Y& J4 D$ p% `9 H% B    智能合约的开发与应用4 z9 Y: m( y% m& u. ?# m1 @" S/ z

9 ~. I' X' Q1 L- Y( t4 r  O1 Z    将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用Python操作solitiy合约的方法。如果你希望为自己的应用增加代币支持,这一部分的内容是必须的。
! Y# }4 Q' ^% m# E  J& d: t; d3 T: j: j8 n
    过滤器与事件
1 k* ]% K  u, |' m1 g
4 H" p. g2 X( U% w0 s( `5 Y# I    讲解以太坊的通知机制以及如何在Python中使用过滤器来监视块和交易的生成与合约事件的触发。
1 i% [* W- b7 k2 U- k0 Z' e( M* x$ k9 @' P- ~
    web3.py示例% t4 W9 O6 U4 O
9 [2 Y$ E" O7 S' J6 ]) T
    web3.py是以太坊官方维护的Python版rpc接口封装库,因此我们优先选择它。下面是使用web3.py获取节点版本信息的代码:$ {. t( u/ {6 q- D; l' ^9 n* A1 j

4 @  ]5 h+ E$ p! H4 m    fromweb3importWeb3,HTTPProvider
! W. ~0 \2 @- R) `% Y7 H% ]
) l6 G1 x4 O/ A7 _' G    provider=Web3.HTTPProvider('http://localhost:8545')
, u: J7 {$ i% z' v, z( j1 M3 G8 ]
    w3=Web3(provider). k  n5 f' ?  L: i, c7 w3 z5 I

4 w, V+ T# i2 A9 r    Web3是web3.py的入口类,我们与以太坊的交互,基本上是通过这个入口来完成的,实例化Web3需要指定一个通信服务提供器,即明确采用何种通信方式与哪一个节点进行交互。' I: j5 L) B" z9 D

9 F$ F: L; d4 Q' L2 l  b    web3.py目前实现了IPC、HTTP和Websocket这三种网络服务提供器。HTTPProvider则声明了与以太坊节点旳连接采用HTTP协议,只需要指定节点旳URL即可。由于我们使用本机的gaanche-cli仿真器,因此使用http://localhost:8545这个URL。
- `0 Q8 `# E0 ]3 O$ V& U
; ]1 J0 A* a' P' G, s& O    Web3实例的manager属性是一个RequestManager实例,它负责利用指定的通信服务提供器来进行jsonrpc交互,因此它是通信传输无关的(provideragnostic)。调用其request_blocking()方法来提交请求:8 h: D$ C( b% O  R+ b: Z( W: j

0 A0 U- z  |5 x- e9 @( k- N+ b    version=w3.manager.request_block('web3_clientVersion',[])% M; M; Q/ E! ?. o

! ]: T9 f9 a* D5 g8 r/ z6 _% f    注意:request_block()返回的结果不是完整的jsonrpc响应,而仅仅是包含其result字段。
( i! [7 Z" m7 L3 u: k/ M
7 o9 q/ I  U( A
  F, `+ K7 V! x* \: r4 ^后续可参考:@常德小学生  ?6 q% m1 {. Y! E" s* l" T' z3 c
用 Python 中的 web3.py 库开发 Dapp
; a* C! ~- N1 i8 R( c* y0 a9 E" _; u0 m
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13