Geth安装和使用
一、簡介
Geth是Go Ethereum開源項(xiàng)目的簡稱,它是使用Go語言編寫且實(shí)現(xiàn)了Ethereum協(xié)議的客戶端軟件,也是目前用戶最多,使用最廣泛的客戶端。通過Geth客戶端與以太坊網(wǎng)絡(luò)進(jìn)行連接和交互可以實(shí)現(xiàn)賬戶管理、合約部署、挖礦等眾多有趣且實(shí)用的功能。
ganache也是客戶端,兩個都可以用來協(xié)助開發(fā)DAPP
下載地址:https://geth.ethereum.org/downloads/? ?下載后安裝即可
二、使用
1. 在某個磁盤創(chuàng)建一個數(shù)據(jù)存儲目錄如D:\testGeth,新建創(chuàng)世區(qū)塊描述文件genesis.json,內(nèi)容如下:
{
? "difficulty" : "0x20000",
? "extraData"? : "",
? "gasLimit"?? : "0x8000000",
? "alloc": {},
? "config": {
??????? "chainId": 15,
??????? "homesteadBlock": 0,
??????? "eip155Block": 0,
??????? "eip158Block": 0
??? }
}
genesis.json是創(chuàng)世區(qū)塊配置文件,通過此配置讓我們很容易挖礦以方便測試,具體每個字段的含義可暫時忽略!
2. 在命令行窗口進(jìn)入到D:\testGeth目錄下,執(zhí)行創(chuàng)世區(qū)塊的初始化,命令如下:
geth --datadir data init genesis.json
此時在testGeth目錄下會生成data目錄,data目錄又包含geth和keystore目錄,geth目錄存儲區(qū)塊數(shù)據(jù),keystore目錄則保存賬戶信息。命令執(zhí)行結(jié)果如下:
目錄如下:password中存儲的是兩個測試賬戶的密碼和private_blockchain_start.sh用于啟動geth客戶端,可以暫時不用管
3.? 啟動節(jié)點(diǎn)連接私有測試網(wǎng)絡(luò),命令行下輸入:
geth --datadir data --networkid 123 --nodiscover console
--networkid 123參數(shù)表示區(qū)塊鏈網(wǎng)絡(luò)ID標(biāo)識,--nodiscover參數(shù)表示節(jié)點(diǎn)私有,console參數(shù)表示進(jìn)入geth控制臺。
連接測試網(wǎng)進(jìn)入控制臺,此時我們已經(jīng)進(jìn)入geth測試網(wǎng)的交互式控制臺,窗口也顯示「Welcome to the Geth JavaScript console」成功提示!
4. Geth使用
在以太坊網(wǎng)絡(luò)中,賬戶是其重要的組成部分,下面我們以查詢鏈上賬戶列表開始常用的指令功能。
- 查詢賬戶列表? ? ??輸入指令:eth.accounts? ? ?輸出結(jié)果:[]
含義:意思是無賬戶地址,因?yàn)槲覀兪裁匆矝]做,所以當(dāng)然是不會憑空出現(xiàn)賬戶了。
- 創(chuàng)建新賬戶? ? ? ? ?輸入指令:personal.newAccount("123")? ??輸出結(jié)果:
含義:表明賬戶新建成功,返回賬戶地址,123為賬戶密碼。此時我們再次查詢賬戶列表會發(fā)現(xiàn)已有剛創(chuàng)建的地址了。
- 查詢賬戶余額? ? ? ? ? ??輸入指令:eth.getBalance(eth.accounts[0])? ? 輸出結(jié)果:0
含義:表明這個賬戶的余額是0。
- 啟動或停止挖礦? ? ? ??輸入指令:miner.start();admin.sleepBlocks(1);miner.stop()? ?
輸入指令:?eth.getBalance(eth.accounts[0])
輸出結(jié)果:5000000000000000000
含義:這三條指令意思是啟動挖礦程序,當(dāng)挖到1個區(qū)塊時停止挖礦,挖礦所得默認(rèn)進(jìn)入第一個賬戶里。耐心等待成功挖出1個塊,此時我們的節(jié)點(diǎn)就是礦工節(jié)點(diǎn)!再次查詢賬戶余額,輸出5的18方wei。
- 創(chuàng)建一個新賬戶,這樣就有兩個賬戶,我們把第一個賬戶的5個ETH,轉(zhuǎn)2個ETH到新賬戶。
前提條件:解鎖賬戶一
輸入指令: eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(2,"ether")})
含義:在發(fā)起交易前先解鎖第一個賬戶,使用eth.sendTransaction指令發(fā)起交易,結(jié)果返回交易哈希存根,此時我們這筆交易并沒有生效,可以使用txpool.status指令查看交易池的情況pedding為1表明這筆交易還款打包進(jìn)區(qū)塊。因?yàn)榇虬鼌^(qū)塊是由礦工做的工作,所以我們啟動礦工。耐心等待一會再次查看第一個賬戶余額顯示8000000000000000000,而第二個賬戶顯示2000000000000000000,說明我們的轉(zhuǎn)賬交易成功啦!為什么第一個賬戶是8個ETH呢?這是因?yàn)榈V工節(jié)點(diǎn)又挖出5個ETH了,加上之前的3個剛好正確!
- 查看區(qū)塊信息? ? ? ?輸入指令:eth.getBlock(2)? ? ? ?輸出結(jié)果:第二個區(qū)塊信息
- 查看交易信息
輸入指令:eth.getTransaction("0x9216e836a292a90d85684015c01144600a80024424ba9585199aaea05a0a3ea4")
輸出結(jié)果:該筆交易詳情
?
5. 腳本啟動geth客戶端
- 我們使用以下命令啟動 geth:geth?--datadir data?--rpc? ??打開另一個命令行界面,啟動Mist或以太坊錢包,能看到之前創(chuàng)建的兩個賬戶用 “--rpc” 參數(shù)讓 geth 接受 RPC 連接,這是很有必要的,這樣 truffle 才可以連接到geth。
進(jìn)行兩次挖礦后,賬戶1余額變成10以太幣
- 可以編寫腳本,存儲成文件private_blockchain_start.sh,內(nèi)容如下,以后直接執(zhí)行.sh即可開啟geth console
geth --rpc --rpcaddr="0.0.0.0" --rpccorsdomain="*" --unlock '0,1' --password password --nodiscover --maxpeers '5' --networkid '123' --datadir 'data' console
password中存儲的是兩個測試賬戶的密碼,內(nèi)容如下:
在命令行中運(yùn)行腳本,會自動開啟git bash,啟動geth客戶端,可以輸入eth.accounts測試查看兩個以太坊賬戶
總結(jié)