區塊鏈研究實驗室|在linux系統中執行Pantheon與Java以太坊客戶端

買賣虛擬貨幣


這是安裝Pathon,Ethereum的Java客戶端部分系列文章的第一篇文章:

  • Linux

  • macOS

  • windows

在工具欄中使用一些強大的工具對於Java開發人員來說至關重要,而以太坊區塊鏈開發人員的關鍵工具之一就是網路客戶端。這是與區塊鏈進行資料通訊的軟體。client:spin啟動節點,充當對等發現代理,檢視其他人參與網路,並驗證和傳送事務。

本指南可幫助您安裝和設定在使用Java進行乙太網程式設計時所需的核心部分。雖然有一些很棒的網路客戶端,但Pantheon是唯一一個用Java編寫的客戶端。

Pantheon是一個用Java編寫的開源Apache 2.0許可的以太坊客戶端。它與主網相容,具有模組化架構,並具有隱私和許可權功能以及新的共識演算法。

這是在Linux / macOS / Windows上安裝和配置Pantheon客戶端的一系列分步指南中的第一個。本指南重點介紹Linux作業系統,但您可以使用macOS上的許多命令和步驟進行一些基本修改。

1

Pantheon與Docker

在安裝之前,我建議任何人第一次使用我們的Docker映象來設定和安裝Pantheon。這樣做的要求是安裝Docker並使用Linux或macOS。您可以使用單個docker命令來執行Pantheon的mainnet,local或rinkeby版本,然後使用curl或類似工具來獲取或將資料釋出到正在執行的節點。

對於快速臨時測試,本指南使用/ tmp / pantheon / dev /,/ tmp / pantheon / mainnet /,/ tmp / pantheon / rinkeby /作為安裝卷,每次啟動時都會自動清除。您可以改為建立其他資料夾,但無論選擇哪個選項,請確保先建立資料夾。

$ mkdir -/tmp/pantheon/dev/
$ mkdir -p /tmp/pantheon/mainnet/
$ mkdir -p /tmp/pantheon/rinkeby/

這裡有些例子:

主網節點:

docker run pegasyseng/pantheon:latest

啟用了Websockets和HTTP RPC服務的本地測試節點:

docker run -p 8545:8545 -p 8546:8546 --mount type=bind,source=/tmp/pantheon/dev,target=/var/lib/pantheon pegasyseng/pantheon:latest --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins="all"--rpc-ws-enabled --network=dev

Rinkeby節點:

docker run -p 30303:30303 --mount type=bind,source=/tmp/pantheon/rinkeby,target=/var/lib/pantheon pegasyseng/pantheon:latest --network=rinkeby

當節點執行時,您可以使用另一個終端視窗與節點互動。

例如,使用curl呼叫eth-chainid rpc方法:

curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}' localhost:8545

1

Linux入門

有兩種安裝方法:

安裝二進位制程式碼包,請按照本節的說明跳過下一步。

從原始碼構建,跳到本節。

要求:對於這兩種方法,Pantheon需要在您的計算機上安裝Java JDK。當前版本的Pantheon需要安裝Java JDK 11+。

二進位制安裝

如果執行專用網路,請記住至少有4GB的RAM,並檢視其他安裝型別的進一步要求。

下載Pantheon二進位制安裝檔案https://bintray.com/consensys/pegasys-repo/pantheon/_latestVersion#files

您可以使用wget執行此操作

$ sudo apt install wget
$ cd ~/bin/
$ wget   https://bintray.com/consensys/pegasys-repo/
download_file?file_path=pantheon-1.1.4.tar.gz -O pantheon-1.1.4.tar.gz
$ wget https://bintray.com/consensys/pegasys-repo/
download_file\?file_path\=pantheon-1.1.4.tar.gz -O pantheon-1.1.4.tar.gz

$ HOME / bin /和$ HOME / .local / {bin,opt,usr}是單個使用者使用的計算機上本地使用者二進位制檔案的推薦安裝資料夾。其他選項可用,例如/ opt / local /或/ usr / local / bin /,具體取決於您的本地設定和首選項。閱讀此Stack Exchange執行緒以獲取更多詳細資訊。

2、解壓壓縮檔案:

$ tar -xzf pantheon-1.1.4.tar.gz
$cd pantheon-1.1.4

將1.1.4替換為您下載的版本。

確認下載沒有損壞並檢查版本。輸出應返回Pantheon和JDK版本。

$ bin/pantheon --version
pantheon/v1.1.4/linux-x86_64/oracle_openjdk-java-11

從原始碼構建

有兩個選項:在本地或在VM上安裝和執行。

本指南重點介紹本地解決方案。

1、克隆Pantheon程式碼庫

$ cd ~/bin/
$ git clone --recursive https://github.com/PegaSysEng/pantheon.git

2、構建Pantheon

$cd pantheon/
$ ./gradlew build -x test

3、選擇分發版本並檢查版本。

$cd build/distributions/
$ tar -xzf pantheon-1.1.4.tar.gz
$cd pantheon-1.1.4/
$ bin/pantheon --version
$ bin/pantheon --help

配置

Pantheon無需其他配置即可正常執行。由--network命令列標誌設定的每種不同網路型別(包括主網)都會自動載入相應的預設配置。

如果需要更改設定,可以在節點或網路級別配置這些選項。網路級設定在genesis檔案中定義,並由連線到該特定網路的每個Node載入。而節點級別設定在節點配置檔案中或透過命令列標誌進行修改。

啟動Pantheon

完成上述步驟後,您可以繼續使用常規的“啟動Pantheon”指南進行此分發。

為了快速預覽,這可能是在使用docker執行的dev網路節點上的HTTP請求。

$ docker run -p 8545:8545 --mount type=bind,source=/tmp/pantheon/dev,target=/var/lib/pantheon pegasyseng/pantheon:latest --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins="all" --rpc-http-enabled --network=dev

這是您構建呼叫eth_chainId方法的請求的方法。

String payload='{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}';String requestUrl="http://localhost:8545";
sendRequest(requestUrl, payload);

方法實現:

public staticString sendRequest(String requestUrl, String payload) {
try {
        URL url = new URL(requestUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setRequestMethod("GET");
        connection.setRequestProperty("Accept""application/json");
        connection.setRequestProperty("Content-Type""application/json; charset=UTF-8");
        OutputStreamWriter outputWriter = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");

        outputWriter.write(payload);
        outputWriter.close();

        BufferedReader buffer = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuffer jsonString = newStringBuffer();
String line;
while ((line = buffer.readLine()) != null) {
                jsonString.append(line);
        }
        buffer.close();

        connection.disconnect();
return jsonString.toString();
    } catch (Exception e) {
thrownew RuntimeException(e.getMessage());
    }
}

該請求應返回以下結果:

{
"jsonrpc" : "2.0",
"id" : 1,
"result" : {
"startingBlock" : "0x0",
"currentBlock" : "0x2d0",
"highestBlock" : "0x66c0"
  }
}

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;