当前位置:   article > 正文

python开发以太坊应用(使用web3)

python开发以太坊应用(使用web3)

目录

第一章,初识以太坊
第二章,以太坊之简易开发流程
第三章,以太坊之账户管理
第四章,以太坊之状态与交易
第五章,以太坊之智能合约
第六章,以太坊之过滤器

正文

**

第一章,初识以太坊

**
第一章 属于概述性的内容,暂时不写。以后补充上来。

**

第二章,以太坊之简易开发流程

**
在这一章,我们将完成一个简单的控制台应用,学习如何在命令行和在python中访问以太坊节点,并打印以太坊节点的版本信息。首先,我们使用ganache模拟一个以太坊节点,然后,学习使用命令行和python来访问这个以太坊节点。

1.使用ganache以太坊节点仿真器。

ganache是一个以太坊节点仿真软件,并非一个真正的以太坊节点软件,它完整实现了以太坊中的JSON RPC接口,在我们开发以太坊智能合约与去中心化应用的时候,用以辅助开发和测试。ganache启动后将在8545端口监听http请求,所以,在调用JSON RPC的时候,使用http协议,发送到节点的8545端口。

#安装ganache
~$ sudo apt-get install npm
~$ npm install -g ganache-cli
  • 1
  • 2
  • 3
#启动ganache,在命令行输入,默认情况下,ganache会创建10个账户,每个账户中有100eth。
~$ ganache-cli
  • 1
  • 2

这个就是执行ganache-cli以后的输出
其中,详细的见ganache-cli的参数说明。

2.使用命令行访问节点信息

#在命令行输入以下命令,你将看到如下效果哦
curl -X POST http://localhost:8545 -s -d '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[]}' | jq
  • 1
  • 2

在这里插入图片描述
以太坊规定了节点必须实现web3_clientVersion 接口,向外部应用提供节点旳版本信息,所以,我们使用curl命令,使用http协议,来测试以太坊节点的web3_clientVersion 接口。从上述截图中可以看到,我们在请求包中,声明web3_clientVersion接口方法,以太坊节点就会执行这个接口,并返回结果。注意以下三点:
a.在请求包’{“jsonrpc”:“2.0”,“method”:“web3_clientVersion”,“params”:[]}’ 中,method用来声明接口方法,例如web3_clientVersion接口,使用params 字段来声明接口方法的参数数组,在上述测试例子中,web3_clientVersion接口并没有参数。
b.在响应包中,result字段中保存命令执行的返回结果。
c. jq是一个命令行json解析工具,结合curl,使返回结果的显示格式更加人性化

下面,我们使用同样的方法来测试一下web3_sha3 接口,这个接口的功能是返回指定数据的Keccak-256(不同于标准的SHA3-256算法)哈希值。测试web3_sha3接口的方法很简单,只需要将上述命令中的method字段中的接口名称由web3_clientVersion修改为web3_sha3,然后在params中如何要获取哈希值的数据即可(我们这里想获取“hello ethereum”的哈希值)。
在这里插入图片描述

3.使用python访问以太坊节点
在前面一小节中,我们已经使用curl,在命令行中访问以太坊节点了。现在,我们尝试使用python代码访问以太坊节点。前面一节中已经提到,我们只需要发送http请求就可以访问以太坊节点了,所以,使用python访问以太坊节点也只需要发送http请求就可以。python中有一个requests库,是在Python内置模块(urllib、urllib2、httplib)的基础上进行了高度的封装,从而使得Pythoner更好的进行http请求,使用Requests可以轻而易举的完成浏览器可有的任何操作。
eth_accounts是以太坊账户接口,返回值是客户端持有的地址列表。

#使用如下python代码,可以访问以太坊节点,并输出以太坊节点的版本信息和账户信息
import requests, time, json
from pprint import pprint

def rpc(method,params=[]):
  print('{0} => '.format(method))
  data = json.dumps({
    'jsonrpc':'2.0',
    'method': method,
    'params': params,
    'id': int(time.time() * 1000)
  })
  rsp = requests.post
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/160943
推荐阅读
相关标签
  

闽ICP备14008679号