ethereum(Geth)
Ethereum Geth (go-ethereum) 教學
簡介
Geth 為 ethereum的Go語言實現
安裝
[2024/2 更新]
查看此連結:https://geth.ethereum.org/docs/getting-started/installing-geth
https://geth.ethereum.org/downloads/
Mac
Arm embeded system
http://ethembedded.com/?page_id=171
使用
https://github.com/ethereum/go-ethereum/wiki/geth
如果是從source安裝(或可加入環境變數)
如果是從安裝檔可直接輸入
可用命令 https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
1.創建創世區塊(genesis block)
custom_genesis.json
然後輸入
上面將會創建一個privatechain資料夾,裡面存放我們private chain的資訊,genesis blcok會放在/privatechain資料夾/geth/chaindata/...ldb,而account會放在keystore裡面
(如果是1.6之前版本要改為如下)
如果出現Fatal: invalid genesis file: json: cannot unmarshal hex string of odd length into Go struct field Genesis.extraData of type hexutil.Bytes 為版本>1.6 請參考上面
然後輸入以下,之後開啟Mist wallet就會進入private network
上面要寫上--ipcpath原因是我們指定了datadir
以下為各os路徑 後面記得加geth.ipc
Mac
~/Library/Ethereum/
Linux
~/.ethereum/
Windows
~/AppData/Roaming/Ethereum
方法2
也可使用下面產生private network
這樣打開錢包也可進入private network
如果出現錯誤:Fatal: Failed to write genesis block: database already contains an incompatible genesis block
把路徑下的chaindata資料夾刪除即可 ~/Library/Ethereum/geth/chaindata
2.預先分配ether給account
先把剛才的節點啟動
然後打開Mist錢包後先創建帳戶,然後把帳戶號碼複製,之後貼到剛才genesis的alloc下面的一串hash,然後重新init 即可
每次init genesis chaindata資料夾下都會多一個ldb但他會去讀取最新的
有時上面訊息有Success 但下面又有Fatal可以不用理會
之後再次啟動
點選Mist圖案打開錢包即可看到帳戶餘額增加
試著挖礦
打開另一個termianl輸入以下,進入console
或是可在剛才啟動ethereum後面加上console字樣,而geth attach預設只會找ipc不會找rpc
可在mist新增地址或是在console輸入
personal.newAccount("密碼")
加入挖礦要放錢的地址開始挖礦(需稍等)
(目前新版1.6有可能卡在dag產生完後)
停止
3.加入其他節點
https://github.com/ethereum/go-ethereum/wiki/Setting-up-private-network-or-local-cluster
https://github.com/ethereum/go-ethereum/wiki/Connecting-to-the-network#connecting-to-the-network
1.用RPC,記得要使用--rpc
2.每個節點要使用同一個創世區塊,才能找到彼此,我們先輸入如下指令,分別創建兩個節點的資料夾,並且用同一個genesis.json個別於兩資料夾產生相同創世區塊
先把剛privatechain資料夾刪除,重新創建一個./privatechain/src 然後裡面放入剛才的custom_genesis.json
3.再來分別啟動兩個節點(networkid要相同,而--rpcport
與--port
要不同)
4.之後於01節點的console輸入
把enode
部分複製
5.於02節點輸入
6.之後於兩個節點分別輸入admin.peers
即可找到彼此
注意 1. 我們沒有設預設bootnode所以要手動加入 2. 如果有三個節點ABC,A加入B之後,A再加入C 這時B仍然找不到C要B主動加入C才可 3. 一開始沒有加入peers時會發現有時輸入admin.peers會出現有時沒有,原因是在連線到任何peers時他會試著去連接其他網路上的節點 4. 節點互相找不到的原因通常為你沒有輸入init genesis.json,所以兩個節點間的genesis.json不相同以及沒有輸入--nodiscover 所以他會加上網路上其他相同genesis和networkid的陌生人 5. 重新啟動某節點該節點的peer會斷掉,要重新加入
7.測試RPC-JSON server
之後錢包連線會使用
8.這時開啟Mist要設定錢包要連線到哪個位置,所以這次我們不能直接點選圖案開啟,要使用命令列開啟,並加上--rpc <PORT>
(你可能直接從圖案開啟應用程式,也看到他有開啟時有顯示private net,但其實他還是連到MainNet)
OSX
Windows
# 1.6新增之puppeth CLI可用來產生genesis_block
1.記得先產生account
2.直接在terminal輸入 `puppeth` 之後會出現如下圖
然後造著步驟走即可,最後會產生一個創世.json
但要記得如果共識方法選的是Poa,之後其他節點要挖礦會產生
記得要
clique指令只有POA才有
注意事項
1.
注意:每次從terminal啟動其他ethereum程序後開啟錢包,如果你沒有指定RPC 或IPC port,錢包都只會去讀取最新開啟的terminal的程序
2.
如果進入到錢包,但是testnet與main都無法點選,表示你嘗試進入到private network但是參數沒有下成功
3.
每個
--
參數都要和前面空一格,否則無效
4
windows作業系統的terminal如果不好複製,可以使用git bash
5.
節點互相找不到的原因通常為你沒有輸入init genesis.json,所以兩個節點間的genesis.json不相同以及沒有輸入--nodiscover 所以他會加上網路上其他相同genesis和networkid的陌生人
6.
32位元版本的geth無法挖礦,需下載64位元
兩節點加入後新加入節點不用挖礦就會自動同步,但如果有產生合約或是廣播交易網路上的其中一個節點必須挖礦
使用DEV Chain
不用自己init genesis block 和指定datadir 以及自動幫你配好一些參數 可直接啟動私有鏈
開放Remote 連線
設定Bootnode
以為步驟
之後資料夾下會產一個bootnode.key檔案
然後輸入
會產生如下
之後我們開啟terminal輸入以下啟動節點
> 記得--nodiscover要拿掉 然後--bootnodes後面填上剛才出現的enode:
並且把enode[::]換成ip地址
bootnode本身不算是節點 只啟動下面一個時在admin.peers還是空的
之後在其中一個terminal輸入`admin.peers`
即可看到如下
Geth版本升級
之後會顯示geth安裝路徑
然後下載https://geth.ethereum.org/downloads/ 最新版本後在安裝時覆蓋原本路徑即可。
Last updated