Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊作为最流行区块链平台,最大的特点是运行各种智能合约。我们已经出过node.js、java、php的以太坊开发实战教程,这一次是python。Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py——对JSONRPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的包,来开发支持以太坊的Python应用。3 @8 L  H; p3 W/ ^: B
$ G& w) a4 ^) c, u2 C/ @8 R& o  \
    本教程的目的是帮助Python工程师快速掌握开发以太坊应用的技能,同时穿插讲解以太坊的一些核心概念,例如:账户、交易和智能合约等,大概的目录结构是:
6 [2 q0 f' U* {% v
  R5 a% C3 U' W% L  r    Hi,以太坊8 q- q, x8 ?+ R* B
# Q; @. o2 r4 I/ V. I
    将通过一个简单的Python应用的开发来讲解使用Python进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的Python应用中引入基本的以太坊支持了。) C2 Y2 N" Z9 c; x3 e; a7 a
6 o* [: B$ ?9 O
    账户管理
  t- O6 e# ]$ Z+ A0 A* G
' w/ q" t5 \) z& W" I% b    将详细介绍以太坊的账户管理接口。如果你对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。
5 J6 a/ G  V! z" X. X. {
$ y, B7 W7 {/ P5 Q8 L0 l! D    理解状态与交易) f" m9 W' G0 C0 I: x3 i+ f

+ M  v& I" G- Y" y- o    讲解以太坊的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清Python应用与以太坊交互的大多数问题。
5 t/ j5 ^' P- G4 L6 P2 {: G, H) M# p+ X/ D: c1 c: @
    智能合约的开发与应用% ]6 [& b" }! c- w2 P6 l) o) {' Y

3 X4 A) h/ w  K1 g  Z    将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用Python操作solitiy合约的方法。如果你希望为自己的应用增加代币支持,这一部分的内容是必须的。
# U6 }4 G  y$ e
" \4 p3 }& D# L& A5 u6 o5 w, Z: h    过滤器与事件
- r3 Z- a# ]. U2 t0 R$ E9 n6 S$ b; D" d# g' [: E
    讲解以太坊的通知机制以及如何在Python中使用过滤器来监视块和交易的生成与合约事件的触发。
: y8 u* A+ M; `, c, o
" Q7 ?( c5 L$ Y( ^    web3.py示例) Z9 j5 h3 w9 L" S2 [/ ^( r* T
3 _* V* k' _4 c. m# t+ q: i
    web3.py是以太坊官方维护的Python版rpc接口封装库,因此我们优先选择它。下面是使用web3.py获取节点版本信息的代码:
+ i2 Y: P. x  [) }' e. a" r
8 |) i6 s/ L9 e3 {7 q2 H2 c( R; ]    fromweb3importWeb3,HTTPProvider
, V( R: Z6 X, z- v( K& t# M; N
9 W' R  u/ N/ \4 \9 o    provider=Web3.HTTPProvider('http://localhost:8545')
# x2 d/ s. i: F$ \6 f0 c: A: @' }0 i1 i
    w3=Web3(provider)
* x' D5 T6 w. K# @, L4 ]: z7 L5 K& `- f& J! _  y
    Web3是web3.py的入口类,我们与以太坊的交互,基本上是通过这个入口来完成的,实例化Web3需要指定一个通信服务提供器,即明确采用何种通信方式与哪一个节点进行交互。- k1 p( X6 d( n
2 g) x7 s5 a4 p8 g
    web3.py目前实现了IPC、HTTP和Websocket这三种网络服务提供器。HTTPProvider则声明了与以太坊节点旳连接采用HTTP协议,只需要指定节点旳URL即可。由于我们使用本机的gaanche-cli仿真器,因此使用http://localhost:8545这个URL。# h- E( t% P8 L6 x% c# K/ v4 s

  E# s; @' f8 L0 q) A/ c6 C2 j    Web3实例的manager属性是一个RequestManager实例,它负责利用指定的通信服务提供器来进行jsonrpc交互,因此它是通信传输无关的(provideragnostic)。调用其request_blocking()方法来提交请求:
& ~8 D5 ^6 g5 Q1 k6 O) n* U
; V* f; r: g5 P0 u7 r    version=w3.manager.request_block('web3_clientVersion',[])
+ @  F" h- M8 |7 L7 j$ \. z8 l* m5 S7 i" |9 D/ o" p6 u9 O
    注意:request_block()返回的结果不是完整的jsonrpc响应,而仅仅是包含其result字段。
! U6 Y( l# ^  [! i* ~/ o! m) G4 S, I9 i* k

' A) e+ e; [6 J* P& `( i8 E后续可参考:@常德小学生
% }: W+ g* |! @2 }* R2 [8 s! H用 Python 中的 web3.py 库开发 Dapp  T7 J6 E+ A4 v  ~+ c7 F

/ I! X/ ~# N" }, k2 i+ `
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13