Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊作为最流行区块链平台,最大的特点是运行各种智能合约。我们已经出过node.js、java、php的以太坊开发实战教程,这一次是python。Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py——对JSONRPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的包,来开发支持以太坊的Python应用。
+ O3 f- {/ j% z4 c8 A2 w( q
) Z/ k% B, j* \) s9 p$ d    本教程的目的是帮助Python工程师快速掌握开发以太坊应用的技能,同时穿插讲解以太坊的一些核心概念,例如:账户、交易和智能合约等,大概的目录结构是:
4 f$ I  q; m% `6 n# b2 ~4 O! E& X
    Hi,以太坊
! D; ~$ C4 P# q! i1 @- }& k  D" R  W% K. N( z' t
    将通过一个简单的Python应用的开发来讲解使用Python进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的Python应用中引入基本的以太坊支持了。
2 I& Z# A* H; p1 F' N) v8 [& B. G) z
    账户管理" k+ [9 Q+ [7 G9 m

( ^9 W9 g% z# i2 v: r    将详细介绍以太坊的账户管理接口。如果你对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。
5 v6 o( I; y3 W/ f
- Q; R( ]+ M- B    理解状态与交易' w" C) i1 p& U' ^# c( ^% e/ d
, x4 K# K9 p7 `: p. [, Z# g  n
    讲解以太坊的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清Python应用与以太坊交互的大多数问题。5 @5 G' s6 E/ u

% [1 ]) ?/ x/ Q2 c1 _    智能合约的开发与应用
* \: \% G" w* ]( y1 a- h1 ^! w6 e* o9 }. [- P' l# X5 k) l
    将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用Python操作solitiy合约的方法。如果你希望为自己的应用增加代币支持,这一部分的内容是必须的。
% ~' H# l% R- g* t: m  i$ p, V9 p3 w4 z/ A2 Q
    过滤器与事件
7 W! ^% |  _  ?* p
( H0 s1 G- e4 l; U    讲解以太坊的通知机制以及如何在Python中使用过滤器来监视块和交易的生成与合约事件的触发。& ~9 {& z9 W- T; q+ c+ {( a

6 F" ?8 N6 p% U# ]    web3.py示例
5 T! S. w- `" J2 |$ Y. j* E) m% D; b2 \/ Z
    web3.py是以太坊官方维护的Python版rpc接口封装库,因此我们优先选择它。下面是使用web3.py获取节点版本信息的代码:
% G. X8 Z& c2 [! I% C# @  n( X1 M6 s5 B- ~1 j5 i: {- E& Q
    fromweb3importWeb3,HTTPProvider
" ~4 S- K: r% }) N, f0 H6 J# g. z2 a- U3 v2 F1 p
    provider=Web3.HTTPProvider('http://localhost:8545')
  C; O- o4 R+ b) G$ s) T
: l5 U9 o! g, p5 s    w3=Web3(provider)
! M! B& x" k7 @" H
& r! F: E3 K+ g# i" I1 U) y7 S    Web3是web3.py的入口类,我们与以太坊的交互,基本上是通过这个入口来完成的,实例化Web3需要指定一个通信服务提供器,即明确采用何种通信方式与哪一个节点进行交互。2 h/ l* s) ^; u" p' @- H7 t

1 c( K( q5 l8 X! G    web3.py目前实现了IPC、HTTP和Websocket这三种网络服务提供器。HTTPProvider则声明了与以太坊节点旳连接采用HTTP协议,只需要指定节点旳URL即可。由于我们使用本机的gaanche-cli仿真器,因此使用http://localhost:8545这个URL。
% R2 C  W* A5 |. u9 A: [4 x- m; r& e
/ |1 X6 \; v0 I. [    Web3实例的manager属性是一个RequestManager实例,它负责利用指定的通信服务提供器来进行jsonrpc交互,因此它是通信传输无关的(provideragnostic)。调用其request_blocking()方法来提交请求:& G5 g& K! X/ p4 l: Z5 K! |: I/ l. U5 J

: M7 t' p" l2 U5 q9 u$ [# q    version=w3.manager.request_block('web3_clientVersion',[])" J7 l6 u5 W9 K& v; g
' w1 v) i# T# ^( B! S
    注意:request_block()返回的结果不是完整的jsonrpc响应,而仅仅是包含其result字段。
  |8 y0 P& M% p* q" l8 P5 n' V5 u8 ^6 t7 W/ U
' |. N) S5 z$ }. o/ q' Y* C
后续可参考:@常德小学生! W& d3 i; W2 P3 B, `4 l+ \
用 Python 中的 web3.py 库开发 Dapp' S; Z2 a: C0 w$ G' O( s$ m

0 f# f4 F% p$ R9 ]
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13