17 geth客戶端了解和安裝

一、以太坊客戶端
1、什麼是以太坊客戶端

  • 以太坊客戶端是一個軟件應用程序,它實現以太坊規範並通過p2p網絡與其他以太坊客戶端進行通信。如果不同的以太坊客戶端符合參考規範和標準化通信協議,則可以進行相互操作。
  • 以太坊是一個開源項目,由“黃皮書”正式規範定義。除了各種以太坊改進提案之外,此正式規範還定義了以太坊客戶端的標準行爲。
  • 因爲以太坊有明確的正式規範,以太網客戶端有了許多獨立開發的軟件實現,它們之間又可以彼此交互。

2、基於以太坊規範的網絡

  • 存在各種基於以太坊規範的網絡,這些網絡基本符合以太坊“黃皮書”中定義的形式規範,但它們之間可能相互也可能不相互操作。
  • 這些基於以太坊的網絡中有:以太坊,以太坊經典,Ella,Expanse,Ubiq,Musicoin等等。
  • 雖然大多數在協議級別兼容,但這些網絡通常具有特殊要求,以太坊客戶端軟件的維護人員、需要進行微小更改、以支持每個網絡的功能或屬性。

3、以太坊的多種客戶端

  • go-ethereum ( Go ) 官方推薦,開發使用最多
    地址:https://github.com/ethereum/go-ethereum
  • parity ( Rust )最輕便客戶端,在歷次以太坊網絡攻擊中表現卓越
    地址:https://github.com/ethcore/parity/releases
  • cpp-ethereum (C++) 地址:https://github.com/ethereum/cpp-ethereum
  • pyethapp (python) 地址:https://github.com/heikoheiko/pyethapp
  • ethereumjs-lib ( javascript )
    地址:https://github.com/ethereumjs/ethereumjs-lib
  • EthereumJ / Harmony ( Java )
    地址:https://github.com/ethereum/ethereumj

3、以太坊全節點

  • 全節點是整個主鏈的一個副本,存儲並維護鏈上的所有數據,並隨時驗證新區塊的合法性。
  • 區塊鏈的健康和擴展彈性,取決於具有許多獨立操作和地理上分散的全節點。每個全節點都可以幫助其他新節點獲取區塊數據,並提供所有交易和合約的獨立驗證。
  • 運行全節點將耗費巨大的成本,包括硬件資源和帶寬。
  • 以太坊開發不需要在實時網絡(主網)上運行的全節點。我們可以使用測試網絡的節點來代替,也可以用本地私鏈,或者使用服務商提供的基於雲的以太坊客戶端;這些幾乎都可以執行所有操作。

4、遠程客戶端和輕節點

  • 遠程客戶端
    不存儲區塊鏈的本地副本或驗證塊和交易。這些客戶端一般只提供錢包的功能,可以創建和廣播交易。遠程客戶端可用於連接到現有網絡,MetaMask 就是一個這樣的客戶端。
  • 輕節點
    不保存鏈上的區塊歷史數據,只保存區塊鏈當前的狀態。輕節點可以對塊和交易進行驗證。

5、全節點的優缺點

  • 優點
    爲以太坊網絡的靈活性和抗審查性提供有力支持。
    權威地驗證所有交易。
    可以直接與公共區塊鏈上的任何合約交互。
    可以離線查詢區塊鏈狀態(帳戶,合約等)。
    可以直接把自己的合約部署到公共區塊鏈中。
  • 缺點
    需要巨大的硬件和帶寬資源,而且會不斷增長。
    第一次下載往往需要幾天才能完全同步。
    必須及時維護、升級並保持在線狀態以同步區塊。

6、公共測試網絡節點的優缺點

  • 優點
    一個 testnet 節點需要同步和存儲更少的數據,大約10GB(數據可能變了,這個數據是2018.10月的統計),具體取決於不同的網絡。
    一個 testnet 節點一般可以在幾個小時內完全同步。
    部署合約或進行交易只需要發送測試以太,可以從“水龍頭”免費獲得。
    測試網絡是公共區塊鏈,有許多其他用戶和合約運行(區別於私鏈)。
  • 缺點
    測試網絡上使用測試以太,它沒有價值。因此,無法測試交易對手的安全性,因爲沒有任何利害關係。
    測試網絡上的測試無法涵蓋所有的真實主網特性。例如,交易費用雖然是發送交易所必需的,但由於gas免費,因此 testnet 上往往不會考慮。而且一般來說,測試網絡不會像主網那樣經常擁堵。

7、本地私鏈的優缺點

  • 優點
    磁盤上幾乎沒有數據,也不同步別的數據,是一個完全“乾淨”的環境。
    無需獲取測試以太,你可以任意分配以太,也可以隨時自己挖礦獲得。
    沒有其他用戶,也沒有其他合約,沒有任何外部干擾。
  • 缺點
    沒有其他用戶意味與公鏈的行爲不同。發送的交易並不存在空間或交易順序的競爭。
    除自己之外沒有礦工意味着挖礦更容易預測,因此無法測試公鏈上發生的某些情況。
    沒有其他合約,意味着你必須部署要測試的所有內容,包括所有的依賴項和合約庫。

二、以太坊geth客戶端安裝
1、運行全節點的要求(2018.10)

  • 最低要求
    雙核以上CPU
    硬盤存儲可用空間至少80GB
    如果是SSD,需要4GB 以上 RAM,如果是HDD,至少8GB RAM
    8 MB/s下載帶寬
  • 推薦配置
    四核以上的快速CPU
    16GB 以上 RAM
    500GB 以上可用空間的快速SSD
    25+ MB/s下載帶寬

2、Geth ( Go-Ethereum )
Geth是由以太坊基金會積極開發的 Go 語言實現,因此被認爲是以太坊客戶端的“官方”實現。
通常,每個基於以太坊的區塊鏈都有自己的Geth實現。
以太坊的 Geth github 倉庫鏈接:
https://github.com/ethereum/go-ethereum

3、用Geth搭建以太坊私鏈
安裝Geth
安裝Geth有很多種方式,這裏主要就Linux環境給出兩種:系統包管理器(apt-get)安裝和源碼安裝。比較推薦大家用源碼安裝,在整個過程中可以看到Geth各組件的構建步驟。
(1)apt-get

$ sudo apt-get install software-properties-common
$ sudo add-apt-repository -y ppa:ethereum/ethereum
$ sudo apt-get update
$ sudo apt-get install ethereum

(2)源碼安裝
克隆github倉庫
我們的第一步是克隆git倉庫,以獲取源代碼的副本。

$ git clone https://github.com/ethereum/go-ethereum.git

從源碼構建Geth
要構建Geth,切換到下載源代碼的目錄並使用make命令:

$ cd go-ethereum
$ make geth

如果一切順利,我們將看到Go編譯器構建每個組件,直到它生成geth可執行文件:

build/env.sh go run build/ci.go install ./cmd/geth 
>>> /usr/local/go/bin/go install -ldflags -X main.gitCommit=58a1e13e6dd7f52a1d5e67bee47d23fd6cfdee5c -v ./cmd/geth github.com/ethereum/go-ethereum/common/hexutil github.com/ethereum/go-ethereum/common/math github.com/ethereum/go-ethereum/crypto/sha3 github.com/ethereum/go-ethereum/rlp github.com/ethereum/go-ethereum/crypto/secp256k1 github.com/ethereum/go-ethereum/common [...] github.com/ethereum/go-ethereum/cmd/utils github.com/ethereum/go-ethereum/cmd/geth Done building. Run "build/bin/geth" to launch geth.

查看geth version,確保在真正運行之前安裝正常:
在這裏插入圖片描述

(3)啓動節點同步
安裝好了Geth,現在我們可以嘗試運行一下它。執行下面的命令,geth就會開始同步區塊,並存儲在當前目錄下。這裏的 --syncmode fast 參數表示我們會以“快速”模式同步區塊。在這種模式下,我們只會下載每個區塊頭和區塊體,但不會執行驗證所有的交易,直到所有區塊同步完畢再去獲取一個系統當前的狀態。這樣就節省了很多交易驗證的時間。

$ geth –datadir . --syncmode fast

通常,在同步以太坊區塊鏈時,客戶端會一開始就下載並驗證每個塊和每個交易,也就是說從創世區塊開始。 毫無疑問,如果我們不加 --syncmode fast參數,同步將花費很長時間並且具有很高的資源要求(它將需要更多的RAM,如果你沒有快速存儲,則需要很長時間)。
有些文章會把這個參數寫成 --fast,這是以前快速同步模式的參數寫法,現在已經被 –syncmode fast取代。
如果我們想同步測試網絡的區塊,可以用下面的命令:

$ geth --testnet --datadir . --syncmode fast

–testnet 這個參數會告訴 geth 啓動並連接到最新的測試網絡,也就是 Ropsten。測試網絡的區塊和交易數量會明顯少於主網,所以會更快一點。但即使是用快速模式同步測試網絡,也會需要幾個小時的時間。

(4)使用源碼安裝,可使用的簡單命令

//查看狀態
git status
//查看GitHub中的提交歷史
git log
//查看版本
git tag
//改變插件版本
git checkout v1.8.17

三、用geth搭建以太坊私鏈
1、搭建自己的私有鏈
因爲公共網絡的區塊數量太多,同步耗時太長,我們爲了方便快速瞭解Geth,可以試着用它來搭一個只屬於自己的私鏈。
具體安裝可查看:
06ubuntu中安裝geth-linux-amd64-1.8.13(因爲用PPA直接安裝最新版會出現很多問題)
07在Ubuntu下使用Geth搭建以太坊私有鏈(PPA)

四、總結
可以跟着教程下載一樣的版本,因爲默認下載最新的版本可能會遇到一些問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章