赞
踩
第一章,初识以太坊
第二章,以太坊之简易开发流程
第三章,以太坊之账户管理
第四章,以太坊之状态与交易
第五章,以太坊之智能合约
第六章,以太坊之过滤器
**
**
第一章 属于概述性的内容,暂时不写。以后补充上来。
**
**
在这一章,我们将完成一个简单的控制台应用,学习如何在命令行和在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
#启动ganache,在命令行输入,默认情况下,ganache会创建10个账户,每个账户中有100eth。
~$ ganache-cli
其中,详细的见ganache-cli的参数说明。
2.使用命令行访问节点信息
#在命令行输入以下命令,你将看到如下效果哦
curl -X POST http://localhost:8545 -s -d '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[]}' | jq
以太坊规定了节点必须实现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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。