Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊作为最流行区块链平台,最大的特点是运行各种智能合约。我们已经出过node.js、java、php的以太坊开发实战教程,这一次是python。Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py——对JSONRPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的包,来开发支持以太坊的Python应用。) M, T7 J$ A+ h
4 J9 A+ u2 i7 j# I$ F: G
    本教程的目的是帮助Python工程师快速掌握开发以太坊应用的技能,同时穿插讲解以太坊的一些核心概念,例如:账户、交易和智能合约等,大概的目录结构是:
8 V& l" {( f+ t( z, F/ Q' g; O2 \& T6 c. i$ _. @) A7 d
    Hi,以太坊
+ m* j) M8 @& P6 K$ ]# M) x8 T, I9 k7 y$ D- j* `5 U6 ?& \% E
    将通过一个简单的Python应用的开发来讲解使用Python进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的Python应用中引入基本的以太坊支持了。
; d4 S$ l0 K& G$ v7 K$ f* P! U& d# w3 b& K2 W
    账户管理
% D3 V% q% N& M
" n4 P' ]6 {" ~* y: Z    将详细介绍以太坊的账户管理接口。如果你对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。
2 p, G8 E% _4 q8 p( `- J
' J" C( D; M3 J1 |" y    理解状态与交易
0 Z+ H8 Q$ n; d
/ F5 d( t1 v% G* u* \; v3 k" y    讲解以太坊的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清Python应用与以太坊交互的大多数问题。" J' q1 d" Z, @2 e: n0 v4 K, ^, x, R
9 t( K% o; u1 G  f1 ]
    智能合约的开发与应用
- M/ R+ a) d# z: J2 i4 \
- b& ]; p1 s+ W. m( b7 o" m* S    将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用Python操作solitiy合约的方法。如果你希望为自己的应用增加代币支持,这一部分的内容是必须的。
" r9 ?3 K! M4 F" \
( m+ z; W. b5 d5 C* v, v    过滤器与事件, y7 p) k4 b8 f, Y+ k9 H6 a  o# w

) g; E( [& ~7 b) Q$ j    讲解以太坊的通知机制以及如何在Python中使用过滤器来监视块和交易的生成与合约事件的触发。
  V8 F$ t2 [4 T9 s# x. a6 e2 w% w& U
    web3.py示例# ~9 H6 s0 _+ P
* T5 d5 G( W3 X' B
    web3.py是以太坊官方维护的Python版rpc接口封装库,因此我们优先选择它。下面是使用web3.py获取节点版本信息的代码:/ B! i/ U; E4 L; m( Q: R9 k
' y$ r3 Q0 r6 H' |4 B
    fromweb3importWeb3,HTTPProvider* ]. X9 @, {% r+ a1 ]! m" Z0 v6 Z
3 W* N# `3 y; j- c# @3 x% K
    provider=Web3.HTTPProvider('http://localhost:8545')+ b$ Y: k8 u. T

' V  X; s( H( z! D    w3=Web3(provider)" o" `8 v' M" \1 Y
* X1 O; p* M8 m4 x7 \% [$ ~
    Web3是web3.py的入口类,我们与以太坊的交互,基本上是通过这个入口来完成的,实例化Web3需要指定一个通信服务提供器,即明确采用何种通信方式与哪一个节点进行交互。
% [) [+ @$ p. Y7 j3 G
: ^: d8 y& t9 a6 g" S* n$ e5 R    web3.py目前实现了IPC、HTTP和Websocket这三种网络服务提供器。HTTPProvider则声明了与以太坊节点旳连接采用HTTP协议,只需要指定节点旳URL即可。由于我们使用本机的gaanche-cli仿真器,因此使用http://localhost:8545这个URL。, ?! j( U. L5 [6 o& |

$ H2 Z+ y5 P3 R/ \    Web3实例的manager属性是一个RequestManager实例,它负责利用指定的通信服务提供器来进行jsonrpc交互,因此它是通信传输无关的(provideragnostic)。调用其request_blocking()方法来提交请求:
% Q# c$ {6 b1 k  t
( I) |  S# c$ s. }8 I! s  M2 i    version=w3.manager.request_block('web3_clientVersion',[])
1 g% d+ H3 @' ^  F! q+ X) M7 V/ v# p  S) [3 W% s- G& V1 G# G
    注意:request_block()返回的结果不是完整的jsonrpc响应,而仅仅是包含其result字段。7 E# h6 E9 S; x+ p% W

% t, V+ I+ H! E& W% q) a8 ~/ `5 i* l: {! |5 y
后续可参考:@常德小学生
' N, W) B( E- z! O' j用 Python 中的 web3.py 库开发 Dapp
; h( q  B" M+ w7 `; v/ P, X, l5 Y6 v+ A0 [: o
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13