Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊作为最流行区块链平台,最大的特点是运行各种智能合约。我们已经出过node.js、java、php的以太坊开发实战教程,这一次是python。Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py——对JSONRPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的包,来开发支持以太坊的Python应用。. _$ N3 V% N$ Y7 z  B( x" I# Q! b

4 c: w" {! w. r. x. s- `    本教程的目的是帮助Python工程师快速掌握开发以太坊应用的技能,同时穿插讲解以太坊的一些核心概念,例如:账户、交易和智能合约等,大概的目录结构是:8 u+ P6 j- t: J) j7 F: S
4 e4 V6 _, `+ C% J0 j
    Hi,以太坊
% W6 |# i+ i8 T" L  n; G+ W
9 v7 h0 L, a; X9 v+ }    将通过一个简单的Python应用的开发来讲解使用Python进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的Python应用中引入基本的以太坊支持了。9 @- h; }7 m& U3 a+ `1 N' s

& `4 Z+ l+ i1 t* T    账户管理- E- `/ b! H$ c  u! X
" ]: q' P0 x7 p3 |/ x# |+ L
    将详细介绍以太坊的账户管理接口。如果你对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。
, b: z( a8 U! T$ l
* |! y4 p' n# u8 B. b    理解状态与交易2 r* V  }! X6 J9 ?6 Q
: [/ r- r' m7 z
    讲解以太坊的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清Python应用与以太坊交互的大多数问题。" c& _/ O* b6 ~6 W9 X9 g8 z- v

- n! m0 j8 I: t    智能合约的开发与应用
! M, {" L2 A  J
; H4 G! L. y4 G/ t0 O$ A    将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用Python操作solitiy合约的方法。如果你希望为自己的应用增加代币支持,这一部分的内容是必须的。+ i! x) X% g  u# `' d% o3 v0 V

( ]" r" s+ i% W/ F* X, F7 r) e( P    过滤器与事件6 {' G5 C& @! @. j

" z2 n. }5 M! r    讲解以太坊的通知机制以及如何在Python中使用过滤器来监视块和交易的生成与合约事件的触发。
1 u% W6 ~  G+ i' z
. |! f+ c! \* q. j. }  }    web3.py示例6 f/ P8 T1 q- [- @5 T; |1 A& Z/ @

$ w0 a$ p7 f8 h/ z! e& f- W. G    web3.py是以太坊官方维护的Python版rpc接口封装库,因此我们优先选择它。下面是使用web3.py获取节点版本信息的代码:+ v' B5 b! @8 r7 S( Y
" @' R' F* f# R4 L  S% k
    fromweb3importWeb3,HTTPProvider& e4 v+ K3 b; O9 e+ K; g7 D

; V# s5 n  F& s( k7 N    provider=Web3.HTTPProvider('http://localhost:8545'), e9 C8 {1 s+ n

- S5 J3 N3 _+ G    w3=Web3(provider), T+ n0 K' t1 N! `% U( O

3 ?; _% F0 h3 f. {# M    Web3是web3.py的入口类,我们与以太坊的交互,基本上是通过这个入口来完成的,实例化Web3需要指定一个通信服务提供器,即明确采用何种通信方式与哪一个节点进行交互。
% g4 K; j- C5 U
4 h$ w- z9 l' s; O- C    web3.py目前实现了IPC、HTTP和Websocket这三种网络服务提供器。HTTPProvider则声明了与以太坊节点旳连接采用HTTP协议,只需要指定节点旳URL即可。由于我们使用本机的gaanche-cli仿真器,因此使用http://localhost:8545这个URL。
- x% ?+ D* Z9 `: u5 F% W
1 u: p2 o( w2 h8 `' F2 T    Web3实例的manager属性是一个RequestManager实例,它负责利用指定的通信服务提供器来进行jsonrpc交互,因此它是通信传输无关的(provideragnostic)。调用其request_blocking()方法来提交请求:* V8 N" |! d0 W; r3 D  ?" Q/ h

( v1 @5 |0 u2 I* V% ~$ n' K    version=w3.manager.request_block('web3_clientVersion',[])/ g8 O7 U- ]5 [8 M7 u! i$ p

! `& Q( \4 Q7 [" [. J. H    注意:request_block()返回的结果不是完整的jsonrpc响应,而仅仅是包含其result字段。4 {* X7 @* P8 s/ _! t; ]3 _( u/ E8 q
7 l8 P% [1 a9 X( K$ l

- y/ d! l# I2 e3 ~+ j/ r% V5 ^后续可参考:@常德小学生1 \( y3 J, m  h% N) C- d
用 Python 中的 web3.py 库开发 Dapp7 j# R! c) z: I5 w4 \' ~6 `% `
  o8 _% V$ j3 Q7 x7 Z: s
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13