Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊作为最流行区块链平台,最大的特点是运行各种智能合约。我们已经出过node.js、java、php的以太坊开发实战教程,这一次是python。Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py——对JSONRPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的包,来开发支持以太坊的Python应用。# o  A% K0 j! k
$ Y" B6 p" n9 r" K# R2 \0 o
    本教程的目的是帮助Python工程师快速掌握开发以太坊应用的技能,同时穿插讲解以太坊的一些核心概念,例如:账户、交易和智能合约等,大概的目录结构是:
, \0 I5 ]4 q2 ]+ b! b- O
6 z- a0 l9 l+ O* m! d8 Z' I; H    Hi,以太坊% {' |+ W+ j# M. E

( F, h- S; @/ h& I0 I% J8 O7 |    将通过一个简单的Python应用的开发来讲解使用Python进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的Python应用中引入基本的以太坊支持了。
1 D9 E* d1 Z1 \, J4 `
, y1 E( ]4 r  j9 f. F& k# q    账户管理9 `! Z# _$ Z3 A

% L. ?/ L9 V# d1 D    将详细介绍以太坊的账户管理接口。如果你对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。
4 W- i1 ^) y* z' M9 N$ H
  L% O6 \  c+ ]4 q$ c8 `$ G2 W    理解状态与交易( C% z% Z  j7 S+ ~; l% ~0 ?/ c

5 _. t) j/ ~3 @- V. y! E: B    讲解以太坊的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清Python应用与以太坊交互的大多数问题。
! F6 B, q4 p* P  G9 q9 H! ~
$ L; X8 D6 R( U$ I    智能合约的开发与应用
5 _9 a# N. o8 [* P  n
7 V3 [  D- n/ M    将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用Python操作solitiy合约的方法。如果你希望为自己的应用增加代币支持,这一部分的内容是必须的。! X+ \1 P& w$ i! N# O2 L
8 R% j: w" q: j6 o* g7 @. j
    过滤器与事件
% d6 f7 |) X3 k# V+ P9 |, z
: R. L% B  Q  r& o3 N. `, o    讲解以太坊的通知机制以及如何在Python中使用过滤器来监视块和交易的生成与合约事件的触发。/ [& W% R2 z. }+ i$ U
) A" h3 Q: u  q8 i5 Q
    web3.py示例( W' k% J& E( z2 e# L7 \, r

6 g7 E" E1 S5 l  Q1 w    web3.py是以太坊官方维护的Python版rpc接口封装库,因此我们优先选择它。下面是使用web3.py获取节点版本信息的代码:7 i9 L5 M& x: q3 N( L8 S- v8 Y1 y
7 b1 F% q" e! ]( ?7 A. P
    fromweb3importWeb3,HTTPProvider
! B! r" z& d4 F" q# b1 X( s4 s6 G% e; `
    provider=Web3.HTTPProvider('http://localhost:8545')
; C) Y/ a, }/ h% Z8 i5 P( @, }/ {! {5 m& ~- a
    w3=Web3(provider)
3 v/ L$ Y6 e' F4 a1 q. K! |0 ~: l! _* Q- h/ C
    Web3是web3.py的入口类,我们与以太坊的交互,基本上是通过这个入口来完成的,实例化Web3需要指定一个通信服务提供器,即明确采用何种通信方式与哪一个节点进行交互。2 |5 x( n5 k8 F0 R0 W: Y6 i/ k
  t- Q- ?+ s% g9 k( a7 Z  I
    web3.py目前实现了IPC、HTTP和Websocket这三种网络服务提供器。HTTPProvider则声明了与以太坊节点旳连接采用HTTP协议,只需要指定节点旳URL即可。由于我们使用本机的gaanche-cli仿真器,因此使用http://localhost:8545这个URL。
, o- u0 e7 o% ?
) X* Y7 H" V+ W- c5 o1 {    Web3实例的manager属性是一个RequestManager实例,它负责利用指定的通信服务提供器来进行jsonrpc交互,因此它是通信传输无关的(provideragnostic)。调用其request_blocking()方法来提交请求:
' W( b$ ^0 |2 U& m4 F; h, l" O% p6 Z. _/ [7 V
    version=w3.manager.request_block('web3_clientVersion',[]): ]$ E& {/ b$ L

6 S5 u7 D( r4 j    注意:request_block()返回的结果不是完整的jsonrpc响应,而仅仅是包含其result字段。
' U5 h; o( o6 I
$ e; G) O( n# A
- ^% q; K0 s0 I7 l后续可参考:@常德小学生
* @  J8 r6 B- i, l3 k7 P3 [用 Python 中的 web3.py 库开发 Dapp
# c; m/ u* k5 Y% c! F/ f  w& [+ k$ [4 e8 G( q
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13