Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊作为最流行区块链平台,最大的特点是运行各种智能合约。我们已经出过node.js、java、php的以太坊开发实战教程,这一次是python。Python官方提供了一系列的Python包用于支持在Python应用中访问以太坊,其中最流行的就是web3.py——对JSONRPC接口的Python封装包。在本课程中,我们将主要使用web3.py,同时结合一些其他的包,来开发支持以太坊的Python应用。' o3 p7 k$ g+ h& B- r
0 e7 ?' Y! u; q, w7 S
    本教程的目的是帮助Python工程师快速掌握开发以太坊应用的技能,同时穿插讲解以太坊的一些核心概念,例如:账户、交易和智能合约等,大概的目录结构是:* K1 |3 E; G4 R  Q1 Y

% y. K0 Y' _: {$ D5 A, q( y    Hi,以太坊7 [' k# ^4 Q! P; Y0 R$ _( s

$ A# t; e& B$ J$ r8 ~; ^    将通过一个简单的Python应用的开发来讲解使用Python进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的Python应用中引入基本的以太坊支持了。; G$ b4 N1 d- t! i, z; N
  a& W: r& y% n& _$ x7 q. q4 Y  p4 {
    账户管理) W3 U  f4 a1 ~

+ Z6 p) e8 R3 `6 }1 H    将详细介绍以太坊的账户管理接口。如果你对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。
! q/ `  h5 x4 z/ [5 r' B
5 {! K1 W3 d/ A+ l3 ^    理解状态与交易/ V. S2 U- v$ ]3 i

. f& g0 i" l6 d# E    讲解以太坊的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清Python应用与以太坊交互的大多数问题。
7 e& k; r8 B1 U! J( C& a7 G" [% n0 [5 I% ?
    智能合约的开发与应用4 _; W! ^3 Y7 U, q2 ]

  i2 t, u; V: \6 Z    将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用Python操作solitiy合约的方法。如果你希望为自己的应用增加代币支持,这一部分的内容是必须的。
  P; g. Z5 j+ O
9 A5 H9 y6 M+ J3 r    过滤器与事件
! u# G4 H7 f0 b, i* b. q- c
; _4 h. p4 J3 ]" i9 k5 E    讲解以太坊的通知机制以及如何在Python中使用过滤器来监视块和交易的生成与合约事件的触发。/ N$ G% V, l$ T$ b+ @* F
+ Z) j8 q5 t! b* h. \
    web3.py示例6 g7 W. n6 A) Q. y) i
0 Y9 p8 v- I7 v% f) N
    web3.py是以太坊官方维护的Python版rpc接口封装库,因此我们优先选择它。下面是使用web3.py获取节点版本信息的代码:& a) A0 z$ F( [( I" D. X7 I
8 @0 {( o- E6 H4 F7 |
    fromweb3importWeb3,HTTPProvider8 _' a5 _$ r) [6 q! n8 `
/ c1 D* b" m/ J: `3 i9 {
    provider=Web3.HTTPProvider('http://localhost:8545')- v( x) U: c! V; F0 [- M
( }/ C1 ^1 ~5 ?" n; T  ?; D6 C
    w3=Web3(provider)
2 m7 x* z& U- M4 ]9 r  F: [
/ E- v2 g. ^7 v# R    Web3是web3.py的入口类,我们与以太坊的交互,基本上是通过这个入口来完成的,实例化Web3需要指定一个通信服务提供器,即明确采用何种通信方式与哪一个节点进行交互。
' s8 u" ~, b# j/ b0 a/ s" [/ i" C2 @. {8 I0 Y5 t1 R9 t7 D1 |
    web3.py目前实现了IPC、HTTP和Websocket这三种网络服务提供器。HTTPProvider则声明了与以太坊节点旳连接采用HTTP协议,只需要指定节点旳URL即可。由于我们使用本机的gaanche-cli仿真器,因此使用http://localhost:8545这个URL。
* k/ q7 c& w0 g3 M% N9 P; o# E' c! G$ ]' J! X* @5 Z7 S, j/ h( Z
    Web3实例的manager属性是一个RequestManager实例,它负责利用指定的通信服务提供器来进行jsonrpc交互,因此它是通信传输无关的(provideragnostic)。调用其request_blocking()方法来提交请求:, X8 V& e4 o  x0 @; u0 X0 z
$ a5 Z, y9 I0 l2 M
    version=w3.manager.request_block('web3_clientVersion',[])
% {# p& K$ O  v1 ~
  T0 _0 g; u& i( p0 B) \  u/ X    注意:request_block()返回的结果不是完整的jsonrpc响应,而仅仅是包含其result字段。
( N. E, }$ J& |8 |3 ?( m
6 N* l/ Y  a) {2 u- V7 e% Q5 _( Z& w9 g! Q1 E4 x
后续可参考:@常德小学生
) h6 E+ E; b2 C5 a( t& ?用 Python 中的 web3.py 库开发 Dapp
& ?: t2 B5 L1 Z, `" `+ d$ n5 t/ ^; _5 B) k9 k  b
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    13