geth 的全稱是 go-ethereum,是以太坊的 go 語言命令行客戶端,也是最流行的客戶端恨憎。
本文是對(duì) geth 使用的簡(jiǎn)單介紹,以有一個(gè)感性的初步認(rèn)識(shí)验夯。geth 完整教程請(qǐng)見另一篇文章以太坊文檔
安裝
安裝教程請(qǐng)參見 Building Ethereum
網(wǎng)絡(luò)部署
以太坊除了主網(wǎng)絡(luò)猖吴,還有各種各樣的測(cè)試網(wǎng)絡(luò)。使用 geth 前要先解決要進(jìn)入哪一個(gè)網(wǎng)絡(luò)挥转。
主網(wǎng)絡(luò)
同步區(qū)塊
在主網(wǎng)絡(luò)下海蔽,我們需要下載區(qū)塊共屈,以和網(wǎng)絡(luò)保持同步。下載命令如下
- 快速同步模式:
geth --fast
党窜,不會(huì)把所有區(qū)塊數(shù)據(jù)下載到本地 - 全節(jié)點(diǎn)模式:
geth
拗引,下載全部的區(qū)塊數(shù)據(jù),需要等待較長(zhǎng)時(shí)間幌衣。
下載目錄
主網(wǎng)絡(luò)的區(qū)塊數(shù)據(jù)的存放目錄默認(rèn)是 /Users/<username>/Library/Ethereum
(Mac OS X 下)
- 其他系統(tǒng)下矾削,可用方式找到默認(rèn)存放路徑:
geth -h
后搜索--datadir
,后面緊跟的就是區(qū)塊數(shù)據(jù)存放的目錄 - 如果你想將區(qū)塊下載到其他目錄豁护,可以使用命令
geth --fast --datadir "<path>"
(需要引號(hào))
更優(yōu)雅的同步方式
-
geth --fast console 2>network_sync.log
:同步時(shí)把同步日志文件重定向到network_sync.log
中哼凯,同時(shí)切換到控制臺(tái)模式(后面會(huì)提)。這樣就可以邊同步邊使用命令楚里。 - 用
tail -f network_sync.log
可以重新瀏覽到日志
不同客戶端是可以共用區(qū)塊數(shù)據(jù)的断部。如用 geth 同步的區(qū)塊數(shù)據(jù),可以在 Ethereum Wallet 或 Mist 等客戶端使用(即使用其他客戶端時(shí)班缎,不必再次同步)
測(cè)試網(wǎng)絡(luò)
測(cè)試網(wǎng)絡(luò)是供開發(fā)和測(cè)試使用的蝴光。如只是單純地使用錢包,可以跳過這一節(jié)达址。
測(cè)試網(wǎng)絡(luò)需要從創(chuàng)世塊開始挖起蔑祟。部署方式如下
- 新建創(chuàng)世塊參數(shù)文件
genesis.json
,內(nèi)容如下
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "10000",
"gasLimit": "2100000",
"alloc": {
"7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
"f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
}
}
-
geth --datadir ./ethdev init genesis.json
:初始化測(cè)試網(wǎng)絡(luò)的以太坊苏携。./ethdev
是存放測(cè)試網(wǎng)絡(luò)數(shù)據(jù)的文件夾做瞪,可以任意指定。
測(cè)試網(wǎng)絡(luò)這樣就部署好了右冻,但里面一個(gè)區(qū)塊和賬戶都沒有装蓬。
使用
運(yùn)行
運(yùn)行客戶端的方式如下
- 主網(wǎng)絡(luò)
- 如果區(qū)塊數(shù)據(jù)在默認(rèn)目錄下:
geth
- 如果區(qū)塊數(shù)據(jù)在其他目錄下:
geth --datadir path/ethereum
- 如果區(qū)塊數(shù)據(jù)在默認(rèn)目錄下:
- 測(cè)試網(wǎng)絡(luò):
geth --datadir ./ethdev --networkid 15
。你只會(huì)連接與你的協(xié)議版本和 networkid 都相同的節(jié)點(diǎn)纱扭。主網(wǎng)絡(luò)的 networkid 是 1牍帚,所以 networkid 只要不是 1 就可以
更常用的是運(yùn)行客戶端并進(jìn)入控制臺(tái)模式:geth --datadir path/ethdev console 2>console.log
,然后使用另開窗口用 tail -f console.log
瀏覽日志乳蛾。
控制臺(tái)
一般操作都在控制臺(tái)模式下進(jìn)行暗赶。
- 進(jìn)入控制臺(tái)的方式為
geth console
- 要進(jìn)入測(cè)試網(wǎng)絡(luò)的控制臺(tái),同樣加上參數(shù)
--datadir ./ethdev
常用操作如下
- 列出客戶端中的所有賬戶:
eth.accounts
肃叶,這是一個(gè)列表蹂随。一般把u0 = eth.accounts[0]
,把賬戶賦給變量 u0因惭,便于操作 - 新建賬戶:
personal.newAccount('123456')
:新建一個(gè)密碼為 123456 的賬戶岳锁。注意,密碼并不是密鑰蹦魔。- 賬戶數(shù)據(jù)保存在區(qū)塊目錄下的
keystore
文件夾中激率。建議把keystore
文件夾復(fù)制一份到 U 盤里咳燕,備份起來。
- 賬戶數(shù)據(jù)保存在區(qū)塊目錄下的
- 查詢賬戶 u0 的余額:
eth.getBalance(u0)
- 獲取最新區(qū)塊號(hào):
eth.blockNumber
- 轉(zhuǎn)賬:u0轉(zhuǎn)給u1
- 需要先解鎖 u0:
personal.unlockAccount(u0,'123456')
乒躺,第二個(gè)參數(shù)是密碼 -
eth.sendTransaction({from:u0, to:u1, value:web3.toWei(3, 'ether')})
招盲,u0轉(zhuǎn)給u1
- 需要先解鎖 u0:
- 挖礦
- 開始挖礦:
miner.start()
,不停地挖礦嘉冒,會(huì)返回一個(gè)null
曹货;miner.start(1)
:只挖一個(gè)區(qū)塊- 挖礦獎(jiǎng)勵(lì)默認(rèn)發(fā)送給
eth.accounts[0]
。 - 測(cè)試網(wǎng)絡(luò)里健爬,把
genesis.json
中的 "difficulty" 設(shè)低一點(diǎn)控乾,會(huì)比較好挖。
- 挖礦獎(jiǎng)勵(lì)默認(rèn)發(fā)送給
- 停止挖礦:
miner.stop()
- 開始挖礦: