目前有4種語(yǔ)言編寫(xiě)以太坊的客戶端。分別是Go語(yǔ)言實(shí)現(xiàn)的客戶端Geth、用C++實(shí)現(xiàn)的客戶端cpp-ethereum、用Python語(yǔ)言實(shí)現(xiàn)的客戶端pyethereum、用Java實(shí)現(xiàn)的客戶端EthereumJ。Go語(yǔ)言版是以太坊官方一直維護(hù)并推薦使用的客戶端。
使用Geth命令可以創(chuàng)建以太坊私有鏈,Geth命令行包含了以太坊的大多數(shù)命令,包括賬戶創(chuàng)建,賬戶之間的ETH轉(zhuǎn)賬,挖礦、獲取余額,部署以太坊的智能合約。
本章主要講述在macOS操作系統(tǒng)怎么樣創(chuàng)建以太坊的私有鏈。步驟如下:
1.安裝Geth
在Terminal終端輸入如下命令:
brew tap ethereum/ethereum
brew install ethereum
如在Linux或Windows系統(tǒng)安裝Geth請(qǐng)參考官方安裝文檔。如果已經(jīng)安裝ethereum,可以執(zhí)行以下命令更新:
brew upgrade ethereum
如果安裝完成通過(guò)查看Geth版本號(hào)檢驗(yàn)是否安裝成功,查看Geth版本命令:
geth version
出現(xiàn)了Geth的版本號(hào),說(shuō)明Geth安裝成功。見(jiàn)下圖:

2.創(chuàng)建genesis.json
可以指定某一個(gè)目錄創(chuàng)建genesis.json文件。創(chuàng)建genesis.json文件的目錄如下:

genesis.json的內(nèi)容如下:
{
"nonce": "0x0000000000000042",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x",
"gasLimit": "0x80000000",
"difficulty": "0x1",
"config":{},
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": { }
}
對(duì)genesis.json文件說(shuō)明:
nonce:64位隨機(jī)數(shù)
timestamp:時(shí)間戳
parentHash:上一個(gè)區(qū)塊的hash值
extraData:附加信息,任意填寫(xiě)
gasLimit :gas 的消耗總量限制,用來(lái)限制區(qū)塊能包含的交易信息總和。
difficulty:難度值,越大越難
mixhash:與 nonce 配合用于挖礦,由上一個(gè)區(qū)塊的一部分生成的 hash
coinbase:礦工賬號(hào),第一個(gè)區(qū)塊挖出后將給這個(gè)礦工賬號(hào)發(fā)送獎(jiǎng)勵(lì)的以太幣
alloc: 預(yù)設(shè)賬號(hào)以及賬號(hào)的以太幣數(shù)量,私有鏈挖礦比較容易可以不配置
3.創(chuàng)建創(chuàng)世區(qū)塊
使用Terminal進(jìn)入到genesis.json的目錄。執(zhí)行如下命令:
geth --datadir "./" init genesis.json
執(zhí)行結(jié)果如下:

注意:當(dāng)前目錄新增兩個(gè)文件夾,分別是geth和keystore。
geth:保存區(qū)塊鏈的相關(guān)數(shù)據(jù)。
keystore:保存鏈條的用戶信息。創(chuàng)建賬戶后,賬戶信息的文件都放在該目錄下。
4.啟動(dòng)私有鏈
geth --datadir "./" --nodiscover console 2>>geth.log
啟動(dòng)結(jié)果:

5.創(chuàng)建賬戶
查看賬戶信息命令如下:
eth.accounts
創(chuàng)建賬戶命令如下,xxx是密碼。
personal.newAccount("xxx")
執(zhí)行結(jié)果如下圖:


在keystore目錄里有為每個(gè)賬戶生成對(duì)應(yīng)的文件。
文件內(nèi)容:
{
"address":"3f169a42d19042569f9ff931b8965b1f31970457",
"crypto":{
"cipher":"aes-128-ctr",
"ciphertext":"fe612ce984314fead40a2390240120ed6828d40c972d16f9f32eb94c9333b2a3",
"cipherparams":{
"iv":"8f08601909677b252221168bcd3eccf5"
},
"kdf":"scrypt",
"kdfparams":{
"dklen":32,
"n":262144,
"p":1,
"r":8,
"salt":"3a158cb28e0cae3e3200e948ed02d1854034359c4ae8e3ad006aaac887b91c9f"
},
"mac":"13322eeecb12e7c4e5f647a6d52748e667426d48fece5a1134c51751d5035cdf"
},
"id":"0df65b18-1625-4c9b-9b51-b152ab2a1235",
"version":3
}
6.挖礦
挖礦命令:
miner.start()
此時(shí)geth.log日志輸出:

注意:
挖礦挖到的ETH幣會(huì)默認(rèn)保在第一個(gè)賬戶中,即eth.acccounts[0]中。
挖礦是執(zhí)行智能合約的基礎(chǔ)。如果停止挖礦的話,不僅以太幣會(huì)停止生成,所有智能合約的調(diào)用也會(huì)不起作用。
如果要停止挖礦,可以執(zhí)行命令miner.stop()來(lái)停止挖礦。
根據(jù)上面操作步驟,是應(yīng)該可以搭建出一個(gè)私有鏈。如有問(wèn)題,歡迎留言。