Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊作为最流行区块链平台,最大的特点是运行各种智能合约。我们已经出过node.js、java、php的以太坊开发实战教程,这一次是python。Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py——对JSONRPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的包,来开发支持以太坊的Python应用。, {" C, J% @! S3 \6 `
- e" @- k0 F) j4 ]6 n7 N
    本教程的目的是帮助Python工程师快速掌握开发以太坊应用的技能,同时穿插讲解以太坊的一些核心概念,例如:账户、交易和智能合约等,大概的目录结构是:1 R$ b$ S2 k- |3 A) x

8 N5 O2 Q5 }) l  `  V    Hi,以太坊
$ g) Q# J% E% o+ A1 x, y& G% q6 w5 N9 p+ ~; R9 X2 ]+ R
    将通过一个简单的Python应用的开发来讲解使用Python进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的Python应用中引入基本的以太坊支持了。
( F. \& K# P' D2 ~# N& O/ v- Q! f# l. T+ r
    账户管理
! E; D# Q" }; o4 i# s8 A3 ^$ b' J' M1 u0 I) j
    将详细介绍以太坊的账户管理接口。如果你对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。
6 v, m* N7 v1 h0 T7 _6 [  q# Z/ R( A* A6 s
    理解状态与交易
) B# W/ g' x$ {+ h# u8 V
9 v0 o2 G7 e8 |. \4 ^8 O    讲解以太坊的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清Python应用与以太坊交互的大多数问题。2 m* O5 z6 h; U9 O4 @$ X7 U! T# V
" F2 d$ o! v3 R! h  T  d9 ~6 s
    智能合约的开发与应用6 Q: K& q, T1 y$ E9 E

2 [5 _+ n7 {) [+ y  l; e* n    将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用Python操作solitiy合约的方法。如果你希望为自己的应用增加代币支持,这一部分的内容是必须的。
6 j4 y% r) ?9 G9 S: }8 a, A: s) r( c
    过滤器与事件9 P3 t* m# a1 p9 Q2 [+ E6 [8 {

( L  P# D$ f! r5 ]8 L+ A" S    讲解以太坊的通知机制以及如何在Python中使用过滤器来监视块和交易的生成与合约事件的触发。
) V* f9 J$ K' R& G
/ R6 l" l) b, ?4 m& u+ M: }6 M    web3.py示例8 x: A, q' j  q. f' ?
+ R" E! s6 z1 c) n6 Q9 G
    web3.py是以太坊官方维护的Python版rpc接口封装库,因此我们优先选择它。下面是使用web3.py获取节点版本信息的代码:
; k1 _5 H' b* ?  a# R( o
1 p3 Y4 _. F  n' u    fromweb3importWeb3,HTTPProvider1 @4 p) O; ~' \9 r* ?
% ^: t# Y) V" [
    provider=Web3.HTTPProvider('http://localhost:8545')3 e" R4 q4 k" Z0 b0 ^
' ]3 R: C1 m  P4 R: {7 g! ~5 O2 `
    w3=Web3(provider)
9 o8 W5 z$ }  X* C0 G  m2 u+ ?* B6 S& m9 p, C9 p- ]
    Web3是web3.py的入口类,我们与以太坊的交互,基本上是通过这个入口来完成的,实例化Web3需要指定一个通信服务提供器,即明确采用何种通信方式与哪一个节点进行交互。1 P* K6 J( Y, A

) t8 Q1 _: n, s    web3.py目前实现了IPC、HTTP和Websocket这三种网络服务提供器。HTTPProvider则声明了与以太坊节点旳连接采用HTTP协议,只需要指定节点旳URL即可。由于我们使用本机的gaanche-cli仿真器,因此使用http://localhost:8545这个URL。
8 I/ z* K/ c  f" h4 a/ o# W; w0 S" _. T) t4 h# P) [8 P
    Web3实例的manager属性是一个RequestManager实例,它负责利用指定的通信服务提供器来进行jsonrpc交互,因此它是通信传输无关的(provideragnostic)。调用其request_blocking()方法来提交请求:( G9 D6 i1 p. D9 l; ^1 U3 E0 k
+ L' G) I0 ^/ H5 D
    version=w3.manager.request_block('web3_clientVersion',[])
" ~: F, z3 Z- ?4 M$ ^$ {
. o& V, s9 ?- q6 z2 Z0 N    注意:request_block()返回的结果不是完整的jsonrpc响应,而仅仅是包含其result字段。1 s/ W. Z$ j  S2 g% t5 ^" F, X

' |: v  S0 i; H! ~/ d% a0 u' P; k% J  [, R8 f( P/ c- P  m# h& i
后续可参考:@常德小学生
+ \4 {7 c# B. @; _+ o$ a用 Python 中的 web3.py 库开发 Dapp
/ S9 E% N; R  E- k5 M6 F
3 `" F+ [7 s/ G; D
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13