1. 程式人生 > >以太坊go-ethereum客戶端JSON-RPC API呼叫(一)

以太坊go-ethereum客戶端JSON-RPC API呼叫(一)

前幾篇部落格主要介紹了go-ethereum客戶端不同環境的搭建,今天這篇部落格是建立在前幾排部落格的基礎上。當搭建完成之後,我們可以通過各種方式與節點進行互動(JavaScript Console、JSON-RPC 、web3等)。本篇以建立一個賬戶為例,介紹一下java呼叫JSON-RPC的方法及過程中可能會遇到的問題。

準備

當你準備使用不同的api介面時,在啟動節點時要新增上不同的引數,比如你要使用rpc呼叫建立賬戶(personal操作),那麼在啟動的命令中就需要核實是否有–rpcapi引數,引數值中是否有personal選項,否則無法正常呼叫:

--rpcapi "db,eth,net,web3,personal,admin,miner"

api呼叫

當節點準備好之後,並確保網路暢通,下面就介紹一下java的具體程式碼。
首先在pom檔案中引入,json-rpc的jar包:

<dependency>
    <groupId>com.github.briandilley.jsonrpc4j</groupId>
    <artifactId>jsonrpc4j</artifactId>
    <version>1.4.6</version>
</dependency>

此依賴會傳遞引入jackson-core,請注意此jar包引入jackson-core與你係統中原有的jackson-core版本衝突問題。本人在這裡踩過坑,因為兩個版本導致各種莫名其妙的問題。如果有多個jackson-core,明確指定引入哪個版本的。

例項:

import com.googlecode.jsonrpc4j.JsonRpcHttpClient;

import java.net.URL;

/**
 * @author zhuzhisheng
 * @Description
 * @date on 2016/12/31.
 */
public class TestJsonRpc {

    public static void main(String[] args) {

        // TODO 多個引數時使用例子
//      String[] temp = new String[]{"0x12341234"};
//      Object[] params = new Object[]{"0x1", "0x2", "0x8888f1f195afa192cfee860698584c030f4c9db1", temp};
// 密碼為123456 Object[] params = new Object[]{"123456"}; String methodName = "personal_newAccount"; try { JsonRpcHttpClient client = new JsonRpcHttpClient(new URL("http://127.0.0.1:8545")); Object address = client.invoke(methodName, params, Object.class); System.out.println(address); } catch (Throwable throwable) { throwable.printStackTrace(); } } }

執行main方法,列印建立賬戶的地址。其他方法的呼叫可在此基礎上進行擴充套件。對於多引數,陣列型別的參考上面註釋掉的一段程式碼。

注意事項

(1)jar包衝突問題;
(2)引數陣列型別及具體引數型別;
(3)呼叫節點建立賬戶所花費時間,是否能滿足系統要求;

PS:2016年的最後一天了,祝大家新年快樂!新的一年有新的收穫!