安裝以太坊原始碼,即安裝Go Ethereum(安裝Geth)
1、安裝Golang
可以直接使用 yum 這個包管理器安裝Golang
yum install golang
2、下載以太坊原始碼(Go Ethereum)
首先下載geth原始碼 go-ethereum,這里以 go-ethereum-1.9.7.tar.gz,直接在GitHub下載
3、安裝以太坊原始碼(安裝Geth)
接下來解壓原始碼:
tar -xzf go-ethereum-1.9.7.tar.gz
用下面的命令編譯:
cd go-ethereum-1.9.7
make geth
make geth 也可以用make all 進行替代,make all 還會編譯一些其他的程式套件
編譯完成后,此時會在 go-ethereum-1.9.7/build/bin 中生成geth可執行檔案,
輸入 geth help 命令,會顯示geth所有的命令和選項:
cd build/bin
./geth help
4、配置geth
直接使用geth命令可能出現:
-bash: geth: command not found
為其的安裝路徑建立軟連接(要寫對你解壓的所在目錄路徑)
ln -s /root/geth/go-ethereum-1.9.7/build/bin/geth /usr/local/bin/geth
用 geth version 測驗一下:
geth version

區塊鏈是由若干個區塊組成的,
因此我們首先需要為私有鏈創建第一個區塊(即創世區塊),類似于資料結構中鏈表的頭節點,
5、創建創世區塊
首先,你需要創建一個創世區塊,這個區塊的創建應該讓所有節點都知道,并且都同意,
創建創世區塊的配置主要存盤于一個JSON檔案中,這里我們存在一個叫genesis.json的檔案中,
為了使結構更加清晰,先創建一個檔案夾,專門存放私有鏈相關資料,
mkdir private_eth
cd private_eth
touch genesis.json
新建檔案,命名:genesis.json,內容如下:
{
"config": {
"chainId": 10001,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0
},
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x20000",
"extraData": "",
"gasLimit": "0x2fefd8",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}

如果你想為一些賬戶預先分配一些資金便于測驗,那么可以在配置中創建賬戶并分配一些資金,
這時候,你只需要用下面的配置替換掉上面的"alloc":{ }即可:
"alloc": {
"0x0000000000000000000000000000000000000001": {
"balance": "111111111"
},
"0x0000000000000000000000000000000000000002": {
"balance": "222222222"
}
}
6、初始化區塊鏈
(1)初始化
啟動之前,先進行初始化:
geth init genesis.json --datadir test
test目錄表示保存區塊鏈相關資料的目錄,這里的test 與 genesis.json 檔案在同一個目錄下,
test目錄是之前不存在的,執行后會自動生成,
test目錄下有兩個子目錄:
geth:存盤同步區塊鏈以及相關的資料;
keystore:保存了賬戶檔案,由于私鏈剛創建,此時keystore目錄為空,
注意:如果直接執行
geth init genesis.json
可能會出現如下錯誤:
Fatal: Failed to write genesis block: database contains incompatible genesis (have d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3, new a3c5c170988f516e00ea3078b2461a149bcd4d0422c8c894923c6cfa22d6926b)
因此記得通過--datadir 設定相應的存盤區塊鏈相關資料的目錄,
(2)啟動以太坊客戶端
geth --rpc --rpccorsdomain="*" --nodiscover --allow-insecure-unlock --datadir './test' console
執行成功之后,如下圖所示:

以太坊一些常用相關引數總結:
// Ethereum引數
--config value:表示TOML組態檔的目錄;
--datadir value:存盤區塊鏈相關資料的檔案目錄,包含geth和keystore兩個檔案夾(默認為 "/home/ligi/.ethereum"),geth目錄存盤同步區塊鏈以及相關的資料,keystore存盤賬戶相關資料;
--datadir.ancient value Data directory for ancient chain segments (default = inside chaindata)
--keystore value 賬戶秘鑰的存盤目錄 (默認在datadir里面)
--networkid value 網路識別符號 (integer, 1=Frontier, 2=Morden (disused), 3=Ropsten, 4=Rinkeby) (default: 1)
--testnet Ropsten network: pre-configured proof-of-work test network
--rinkeby Rinkeby network: pre-configured proof-of-authority test network
--syncmode value 區塊鏈同步模式 ("fast", "full", or "light") (default: fast)
--exitwhensynced 塊同步完成后退出
--identity value 自定義節點名稱
//DEVELOPER CHAIN OPTIONS:
--dev 擁有一些預先設定了資金的開發者賬戶的臨時權威證明網路,并且可以直接挖礦
--dev.period value 在開發者模式中使用塊(出塊)的時間,0表示只有在交易掛起的時候才會挖礦,1表示不用等有了交易才挖礦 (default: 0)
//ACCOUNT OPTIONS:
--unlock value 要解鎖的賬戶串列(多個賬戶用逗號分隔)
--password value 用于非互動式密碼輸入的密碼檔案
//API AND CONSOLE OPTIONS:
--ipcdisable 禁用(關閉)IPC-RPC服務器
--ipcpath value Filename for IPC socket/pipe within the datadir (explicit paths escape it)
--rpc 啟用HTTP-RPC服務器
--rpcaddr value HTTP-RPC服務器監聽的IP地址 (default: "localhost")
--rpcport value HTTP-RPC 服務器監聽埠(default: 8545)
--port:指定和其他節點連接所用的埠號(默認為 30303);
--rpcapi value 通過HTTP-RPC介面提供的API
--rpc.gascap value 設定可以在eth_call/estimateGas中使用的gas上限(默認值:0) (default: 0)
--rpccorsdomain value 哪些域名允許訪問跨域請求(多個域名用逗號分隔)(瀏覽器執行),"*"表示允許通過任意域名進行訪問
--rpcvhosts value 允許哪些虛擬主機名接受請求(多個的時候用逗號分開)(服務器執行). 接受 '*' 通配符. (default: "localhost")
--ws 啟用WS-RPC服務器
--wsaddr value WS-RPC服務器監聽的地址 (default: "localhost")
--wsport value WS-RPC服務器監聽的埠號 (default: 8546)
--wsapi value WS-RPC介面提供的API
--wsorigins value 接受websockets請求的源
//NETWORKING OPTIONS:
--nodiscover 禁用節點發現機制,防止加入有同樣初始配置的的陌生節點
--verbosity: 表示設定日志等級,0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default:
7、開始挖礦
使用之前genesis.json中配置的賬戶進行挖礦:
挖礦之前,先將賬戶和礦工進行系結,
miner是JavaScript控制臺中內置的礦工物件,在控制臺中可以使用如下命令,將genesis.json檔案中的“alloc”中的某個地址與miner物件進行系結,系結的目的之一就是為了明確挖礦得到的獎勵存到哪個賬戶去,
miner.setEtherbase("0x0000000000000000000000000000000000000001")
![]()
開始挖礦之前,我們可以查看一下兩個臨時賬戶的余額:
eth.getBalance("0x0000000000000000000000000000000000000001")
eth.getBalance("0x0000000000000000000000000000000000000002")
開始挖礦
miner.start()

查看當前區塊鏈中的區塊數
eth.blockNumber
再次查詢兩個臨時賬戶的余額
eth.getBalance("0x0000000000000000000000000000000000000001")
eth.getBalance("0x0000000000000000000000000000000000000002")
由于礦工挖礦得到了一些挖礦的獎勵(以太幣),所以我們可以發現與礦工系結的賬戶的余額變多了,
停止挖礦
miner.stop()
參考:(一)下以太坊私有鏈搭建及挖礦轉賬_Toufahaizai的博客-CSDN博客
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/348474.html
標籤:區塊鏈
