ETH客戶端Geth(Go-Ethereum)
- 軟體應用程式,實作以太坊規范并通過p2p網路與其他以太坊客戶端進行通訊,如果不同的以太坊客戶端符合參考規范和標準化通信協議,則可以進行相互的操作
- 以太坊是一個開源專案,由黃皮書正式規范定義,出來各種以太坊改進提案之外,此正式規范還定義了以太坊客戶端的標準行為
- 因為以太坊有明確的正式規范,以太坊客戶端有了許多獨立開發的軟體實作,他們之間又可以彼此互動
基于以太坊規范的網路
- 各種基于以太坊規范的網路,符合以太坊黃皮書中定義的形式規范,但他們之間可能相互也可能不相互操作
- 雖然大多數在協議級別兼容,但這些網路通常具有特殊要求,以太坊客戶端軟體的維護人員,需要進行微小的更改以支持每個網路的功能或屬性
概念
全節點
整個主鏈的副本,存盤并維護鏈上的所有資料,并隨時驗證新區塊的合法性,可以幫助新節點獲取區塊資料,并提供所有交易和合約的獨立驗證
缺點:耗費巨大成本,第一次下載往往需要幾天才能完全同步,必須及時維護、升級并保持在線狀態以同步區塊
開發不需要運行全節點,可以使用測驗網路節點代替,本地私鏈,或者使用服務商基于云的以太坊客戶端
下圖為2018運行全節點的要求,目前要求會更高

遠程客戶端
metamask,不存盤區塊鏈本地副本或驗證塊和交易,一般只提供錢包功能,可以創建和廣播交易
輕節點
保存當前狀態,可以對塊和交易進行驗證
公共測驗網路全節點
優點
- 一個testnet節點需要同步和存盤更少的資料(約10GB)具體取決于不同網路
- 一個testnet節點一般可以在幾個小時內完全同步
- 部署合約可以使用測驗以太
- 測驗網路也有公共區塊鏈,有許多其他用戶
缺點
- 測驗以太沒有價值,無法測驗交易對手的安全性,因為沒有任何利害關系
- 測驗網路上的測驗無法涵蓋所有真實主網特征,例如,交易費用雖然是發送交易所必需的,但由于gas免費,testnet上不予考慮,不會像主網一樣擁擠
本地私鏈
優點
- 磁盤上幾乎沒有資料,也不同步別的資料,是一個完全干凈的環境
- 無需獲取測驗以太,可任意分配,隨時自己挖礦
- 沒有其他用戶,沒有任何外部干擾
缺點
- 沒有其他用戶意味著與公鏈的行為不同,交易不存在空間或交易順序的競爭
- 沒有礦工意味著挖礦更容易,因此無法測驗公鏈上發生的某些情況
- 沒有其他合約,意味著需要部署測驗的所有內容,包括所有的依賴項和合約庫
搭建
安裝
注意環境要求Go
方法一:apt-get
Linux-ubantu
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
方法二:原始碼安裝
1.克隆GitHub
git clone https://github.com/ethereum/go-ethereum.git
2.構建Geth
cd go-ethereum
make geth
可以看見編譯的各個組件,直到它生成geth可執行檔案:

make 運行構建腳本 --運行makefile里面的腳本檔案
可能出現報錯:
檔案格式報錯因為是dos
解決:
:set ff=unix
補充:
這里建議將geth添加至環境變數,這樣下面使用就可以直接使用geth
//將go-ethereum復制到/usr/local
sudo cp -r go-ethereum /usr/local
//將 geth 添加到環境變數中 vi ~/.bashrc
export PATH="$PATH:/usr/local/go-ethereum/build/bin"
export PATH="$PATH:/usr/local/go/bin"
source ~/.bashrc
3.查看geth version 確保在真正運行之前安裝正常
./build/bin/geth version
啟動節點同步
geth --datadir ./data
指定同步資料存盤的路徑目錄,data沒有的話會自動創建
注意:不帶引數默認啟動主網,啟動的是全節點(慢),從附近全節點同步資料

- starting peer-to-peer node 啟動p2p節點
- 寫主網初始block
- 30303監聽埠號
- IPC:行程間呼叫-外部訪問介面
啟動引數
只下載區塊頭和區塊體,但不會執行驗證所有的交易,節省了許多交易驗證時間
geth --datadir .--syncmode fast
還有light模式只同步最終狀態,更加快速
geth --testnet --datadir .--syncmode fast
Ropsten 這個是默認的主測驗網路
詳解資料檔案目錄
data
- geth
- chaindata-區塊資料(全節點該處資料會很大)
- nodekey:節點唯一編號,可用于節點發現
- nodes:節點資訊存盤
- triecache:變長編碼前綴(一種編碼方式)
- keystore-加密后的私鑰
搭建私有鏈
新建建一個檔案
mkdir ~/myETH
加入組態檔(創世區塊設定)
vi ~/myETH/genesis.json
- 有一個類似組態檔的初始創世區塊json檔案
{
"config": {
"chainId": 7
},
"difficulty": "2000",
"gasLimit": "2100000",
"alloc": {}
}
- chainId:唯一鏈ID(主網ID為1,測驗網為3,最好不要重復)
- difficulty:難度設定
- gasLimit:區塊gas上限
- alloc:創世時,一開始的代幣分配(非必須)
初始化
cd myETH/
geth --datadir . init genesis.json
注意:這里的路徑選項要根據當前的路徑位置決定

啟動
geth --datadir . --networkid 7

啟動成功!
命令列互動
- JavaScript控制臺
- 控制臺內嵌許多js物件,web3是其中js的一個較大的物件
啟動鏈,同時啟動控制臺
geth --datadir . --networkid 7 console

重定向日志輸出
geth --datadir . --networkid 7 console 2>output.log
動態跟蹤
tail -f output.log
可以分開控制臺和輸出,避免輸出影響命令輸入
創建賬戶
personal.newAccount()
查詢賬戶
eth.accounts
eth.getBalance(eth.accounts[0])
挖礦
miner.start(1)
miner.stop()

注意:開始挖礦之后要等待一定的時間之后才能夠產生新的區塊,要等待一下
Looking for peers是在尋找周圍的peer
查看當前區塊
eth.blockNumber
交易
首先創建兩個賬戶嘗試轉賬交易
核心命令:
eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value:"50000"})
以太為單位:web3.toWei(10,‘ether’)
錯誤:會顯示賬戶為解鎖,沒有權限

personal.unlockAccount(eth.accounts[0])
//輸入密碼
eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value:"50000"})
>>顯示交易哈希
eth.getBalance(eth.accounts[1])
>>仍然為0,需要挖礦確認
miner.start(1)
miner.stop()
eth.getBalance(eth.accounts[1])
>>50000,轉賬成功
常見錯誤:

原因:由于創世初始檔案配置不全,修改配置即可
{
"config": {
"chainId": 7,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x2",
"extraData" : "",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}

交易成功!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/380923.html
標籤:區塊鏈
上一篇:區塊鏈怎么發論文
下一篇:新一代資訊技術(P56)
