一、本身搭建節點,終端去訪問搭建好的節點獲取數據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,小巧。便於各類語言實現。