Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊作为最流行区块链平台,最大的特点是运行各种智能合约。我们已经出过node.js、java、php的以太坊开发实战教程,这一次是python。Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py——对JSONRPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的包,来开发支持以太坊的Python应用。
/ f1 H  T. \+ W1 _
8 ]- i1 B- Y+ Z& z. P    本教程的目的是帮助Python工程师快速掌握开发以太坊应用的技能,同时穿插讲解以太坊的一些核心概念,例如:账户、交易和智能合约等,大概的目录结构是:
/ h9 W2 \# @; F, B. [% q' ]( e  v) j9 z1 D
    Hi,以太坊
' l) T- S% H( l2 L  R8 t3 Y" t4 I! z% q) }
    将通过一个简单的Python应用的开发来讲解使用Python进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的Python应用中引入基本的以太坊支持了。9 ^" o' K- S  z4 {- \1 l; M' ^; T
: a' x- h9 a& q5 x- X! W" w1 C4 c
    账户管理
  z+ v& }7 l) x8 D4 ~4 u2 D+ F5 ?$ j9 j0 s. @2 j. [5 s  i* _
    将详细介绍以太坊的账户管理接口。如果你对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。3 _8 E* d' G% j  v6 ]* L

$ b' Y; [# Y8 Y$ u5 |    理解状态与交易
: g# Q2 Q4 K$ g7 s+ k' U
; H! i, T# t* t    讲解以太坊的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清Python应用与以太坊交互的大多数问题。" B# b9 E: a& m9 D
9 |/ a; S% i% s
    智能合约的开发与应用( F( E/ h. x2 Q
1 v/ d# B6 C7 H
    将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用Python操作solitiy合约的方法。如果你希望为自己的应用增加代币支持,这一部分的内容是必须的。/ q3 m# M: \. x. O4 q* ^
% n" Z* @& I) Y3 f
    过滤器与事件2 z% C# a6 C5 G  ^$ t

- ?1 C; G7 `( m3 t    讲解以太坊的通知机制以及如何在Python中使用过滤器来监视块和交易的生成与合约事件的触发。
1 t( D* f. {8 R: D: R) R: w, [7 b$ r/ K  E
    web3.py示例
# l& F# B/ v7 U( p8 C; Q; |  S
- y$ |4 R( M) L# V9 {' z    web3.py是以太坊官方维护的Python版rpc接口封装库,因此我们优先选择它。下面是使用web3.py获取节点版本信息的代码:+ }( V6 S. K9 z
- n9 N0 }. X: P) B! r* M. R! |
    fromweb3importWeb3,HTTPProvider
3 e; i; G5 S/ \% ^: h  Q
( U  ^1 w1 s' }( R2 R    provider=Web3.HTTPProvider('http://localhost:8545')+ s% S* k8 M6 x/ \: @

7 w5 _9 n2 [/ @4 N# |1 w* E    w3=Web3(provider)- d, G5 S. a+ r. m/ I
# \3 H7 g, o  t4 X5 Q. _
    Web3是web3.py的入口类,我们与以太坊的交互,基本上是通过这个入口来完成的,实例化Web3需要指定一个通信服务提供器,即明确采用何种通信方式与哪一个节点进行交互。3 N* {0 T  f  T

& w  @8 [' e4 G7 M' @. d& N2 ^5 A7 W: O! w    web3.py目前实现了IPC、HTTP和Websocket这三种网络服务提供器。HTTPProvider则声明了与以太坊节点旳连接采用HTTP协议,只需要指定节点旳URL即可。由于我们使用本机的gaanche-cli仿真器,因此使用http://localhost:8545这个URL。5 e& O1 q& T0 [4 c+ B8 t

2 |2 n2 m& w( i; l- l    Web3实例的manager属性是一个RequestManager实例,它负责利用指定的通信服务提供器来进行jsonrpc交互,因此它是通信传输无关的(provideragnostic)。调用其request_blocking()方法来提交请求:
# m: i: N  W! M* e6 j1 _7 G0 F( Y  f5 ~) [9 q/ I& `# O/ D- v# q
    version=w3.manager.request_block('web3_clientVersion',[])
, l8 L- U2 D+ ?4 W0 W. O% v- i+ f$ Q: w1 F; n& [, h
    注意:request_block()返回的结果不是完整的jsonrpc响应,而仅仅是包含其result字段。9 o* d/ y" _2 |1 [
% S* U: `. @$ K  L" Z
/ A! |& l+ ^! U, X
后续可参考:@常德小学生
# N9 v5 ], E9 y用 Python 中的 web3.py 库开发 Dapp1 m6 O0 r( k2 h

- a0 b* k' ~' ]; r* y; z
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13