一、本身搭建节点,终端去访问搭建好的节点获取数据html
二、使用免费的Infura,省去建立节点的烦恼java
Infura 提供免费公开的Ethereum(以太坊)主网和测试网络节点;git
ps:Infura 须要翻才能注册过去。github
一、web3j web
二、JSON-RPC编程
web3.js是以太坊提供的一个Javascript库,它封装了以太坊的JSON RPC API,提供了一系列与区块链交互的Javascript对象和函数,包括查看网络状态,查看本地帐户、查看交易和区块、发送交易、编译/部署智能合约、调用智能合约等,其中最重要的就是与智能合约交互的API。json
web3j的提供的功能api
三、 web3j文档数组
能够参考web3j的说明文档网络
//获取节点运行geth客户端的版本号 String url = "https://mainnet.infura.io/your api-key"; Web3j web3 = Web3j.build(new HttpService(url)); Web3ClientVersion web3ClientVersion = web3.web3ClientVersion().sendAsync().get(); String clientVersion = web3ClientVersion.getWeb3ClientVersion(); //只读属性,返回当前节点持有的账户列表 这个方法说明就是我从web3的中文文档里找到的 String url = "https://mainnet.infura.io/your api-key"; Web3j web3 = Web3j.build(new HttpService(url)); //点进ethAccounts()方法的源码就能够知道返回的是什么对象了 EthAccounts ethAccounts = web3.ethAccounts().sendAsync().get(); List<String> accountList = ethAccounts.getAccounts();//返回当前节点持有的帐户列表
这样简单的接入就完成了。
https://web3j.readthedocs.io/en/latest/infura.html
由于Ethereum(以太坊)提供了JSON-RPC API 能够访问。
Http是以太坊各类客户端都支持的方式之一,也是终端开发最熟悉的。
一、Http
//查阅API 发现须要POST的形式 参数以json的形式 请求
//这里我测试使用的是xutils3 以请求版本号为例 String json = "{\"jsonrpc\":\"2.0\",\"method\":\"web3_clientVersion\",\"params\":[],\"id\":67}"; RequestParams params = new RequestParams("https://mainnet.infura.io/your api-key"); params.setAsJsonContent(true); params.setBodyContent(json); x.http().post(params, new Callback.CommonCallback<String>() {
二、JSONRPC 2.0的方式
json-rpc是基于json的跨语言远程调用协议。比xml-rpc、webservice等基于文本的协议数据传输格小;相对hessian、java-rpc等二进制协议便于调试、实现、扩展,是很优秀的一种远程调用协议。
json-rpc协议很easy,发起远程调用时向服务端数据传输格式例如如下:
{
"jsonrpc": "2.0", "method": "方法名", "params": [“参数数组”], "id": 方法ID}
參数说明:
method: 调用的方法名
params: 方法传入的參数。若无參数则传入 []
id : 调用标识符。用于标示一次远程调用过程
server其收到调用请求,处理方法调用,将方法效用结果效应给调用方;
返回数据格式:
{
"jsonrpc": "2.0",
"result": "Hello JSON-RPC",
"error": null,
"id": 方法ID
}
參数说明:
result: 方法返回值。若无返回值。则返回null。
若调用错误,返回null。
error :调用时错误,无错误返回null。
id : 调用标识符,与调用方传入的标识符一致。
以上就是json-rpc协议规范,很easy,小巧。便于各类语言实现。