go-ethereum學(xué)習(xí)筆記(一)


前言

本篇文章簡單介紹使用go-ethereum連接以太坊的主網(wǎng)和測試網(wǎng)以及一些基礎(chǔ)開發(fā)須知,著重介紹如何搭建一個私網(wǎng)的以太坊单匣,至于以太坊應(yīng)用開發(fā)伍纫,有機(jī)會的話,將在后面的文章中重點(diǎn)介紹插爹。

本篇文章中包含筆者花費(fèi)大量心血理解并整理的配置和參數(shù)說明資料,望可以為諸位道友提供一些幫助。

安裝

Go Ethereum可以安裝的操作系統(tǒng)平臺有Mac OS X赠尾,Windows以及Linux/Unix力穗。詳情請看Installation Instructions

這里介紹在Linux上气嫁,從go-ethereum源碼構(gòu)建的安裝流程当窗。官方提到的Linux/Unix平臺包括Ubuntu,Arch和FreeBSD寸宵。這里以Ubuntu為例崖面。

編譯環(huán)境準(zhǔn)備

編譯環(huán)境要求有 GoC編譯程序。安裝方法如下:

apt-get install -y build-essential golang

獲取源碼并編譯

獲取源碼

切換到你準(zhǔn)備編譯go-ethereum源碼的目錄邓馒,執(zhí)行命令:

git clone https://github.com/ethereum/go-ethereum

上述命令會clone go-ethereum的主干分支代碼嘶朱,該分支代碼是持續(xù)開發(fā)代碼,如果想要使用發(fā)布代碼光酣,參見go-ethereum release。這里以當(dāng)時最新的發(fā)布代碼 v1.8.7 為例:

  1. 下載代碼
wget https://github.com/ethereum/go-ethereum/archive/v1.8.7.tar.gz
  1. 解壓
tar zxvf v1.8.7.tar.gz

將解壓后的代碼移動到你準(zhǔn)備編譯go-ethereum源碼的目錄脉课。

編譯源碼

當(dāng)你準(zhǔn)備好go-ethereum的源碼后救军,進(jìn)入go-ethereum源碼工程頂級目錄,執(zhí)行命令:

make geth

(推薦)如果你想要編譯出所有工具倘零,執(zhí)行:

make all

編譯完成后唱遭,所有工具可以在 build/bin 目錄下找到,將這些二進(jìn)制文件取出來放到你選好的安裝目錄呈驶,或者就在原來的位置放著拷泽,這里我放到 /opt/xingweidong/eth/bin 目錄下,接下來根據(jù)你的喜好設(shè)置系統(tǒng)環(huán)境變量袖瞻,添加如下內(nèi)容:

export ETH_HOME=/opt/xingweidong/eth
export PATH=$PATH:$ETH_HOME/bin

別忘了使用 source /etc/profile 或者其他你喜歡的方法更新你的環(huán)境變量信息司致。

運(yùn)行g(shù)eth

geth命令,主要的Ethereum CLI客戶端聋迎,是Ethereum網(wǎng)(main-, test- 或 private網(wǎng))的入口脂矫,有能力作為一個full node(默認(rèn))存檔節(jié)點(diǎn)(保留所有歷史數(shù)據(jù))或者一個light node(現(xiàn)場檢索數(shù)據(jù))節(jié)點(diǎn)運(yùn)行。經(jīng)由暴露在HTTP, WebSocket 或 IPC傳輸?shù)捻敳康腏SON RPC端點(diǎn)霉晕,它可以被其他過程用作Ethereum網(wǎng)的網(wǎng)關(guān)庭再。

提示:查看 geth 所有命令行選項(xiàng)使用 geth --help 或者查看 CLI Wiki page

Ethereum main網(wǎng)的full node

目前為止牺堰,大多數(shù)情況是人們想要簡單地與Ethereum網(wǎng)進(jìn)行交互:創(chuàng)建賬戶拄轻;轉(zhuǎn)移資金;部署并與合約交互伟葫。對于這種特殊的使用情況恨搓,用戶不關(guān)心以前的歷史數(shù)據(jù),所以我們能快速的同步當(dāng)前的Ethereum網(wǎng)狀態(tài)扒俯。執(zhí)行命令:

geth console

命令作用:

  • 開始 geth 進(jìn)入快速同步模式(默認(rèn)模式奶卓,可以使用 --syncmode 選項(xiàng)改變同步模式)一疯,由于它為了避免處理整個Ethereum網(wǎng)的歷史數(shù)據(jù),會下載大量的事務(wù)數(shù)據(jù)夺姑,所以會占用大量CPU資源墩邀。
  • 啟動 Geth 內(nèi)在的交互式 JavaScript console,(經(jīng)由 console 子命令)通過這個盏浙,你能調(diào)用所有官方 web3 methods 以及Geth自己的 management APIs眉睹。這個也是可選的,如果你離開废膘,你能使用 geth attach 連接一個已經(jīng)存在的 Geth 實(shí)例竹海。

Ethereum test網(wǎng)的full node

向開發(fā)者過渡,如果你想要創(chuàng)造合約丐黄,你幾乎肯定想要在沒有任何真實(shí)資金的情況下做到這一點(diǎn)斋配,直到你掌握整個系統(tǒng)。換句話說灌闺,代替連接到Ethereum main網(wǎng)艰争,你會想要加入到一個 test網(wǎng),它是和 main網(wǎng)完全等價(jià)的桂对,只需要:

geth --testnet console

console子命令與上面的含義完全相同并且它們在一個測試網(wǎng)上也同樣有用甩卓。如果你跳到這一步,請看上面對它們的解釋蕉斜。

然而逾柿,指定 --testnet 將重新配置你的 Geth 實(shí)例一小部分:

  • 代替使用默認(rèn)數(shù)據(jù)目錄(例如Linux上的 ~/.ethereum),Geth將會深入一層目錄創(chuàng)建 testnet 子文件夾(在Linux上是 ~/.ethereum/testnet)宅此。注意机错,在OSX和Linux上,這也意味著連接一個運(yùn)行的testnet節(jié)點(diǎn)要求使用一個自定義的端點(diǎn)诽凌,因?yàn)?geth attach 默認(rèn)將連接一個生產(chǎn)節(jié)點(diǎn)毡熏。例如:geth attach <datadir>/testnet/geth.ipc。Windows用戶不受影響侣诵。
  • 代替連接 Ethereum main網(wǎng)痢法,客戶端將連接到一個 test網(wǎng),使用不同的P2P bootnodes杜顺,不同的網(wǎng)絡(luò)ID和創(chuàng)世狀態(tài)财搁。

注意:盡管有一些內(nèi)部安全措施防止main網(wǎng)和test網(wǎng)的交易互換,你也應(yīng)該確認(rèn)總是為測試資產(chǎn)和真實(shí)資產(chǎn)使用分開的賬戶躬络。除非你手動移動賬戶尖奔,Geth將默認(rèn)正確分開兩個網(wǎng)絡(luò),并且在它們之間將不會有任何賬戶可用。

Rinkeby test網(wǎng)的full node

上述測試網(wǎng)絡(luò)是基于ethash工作證明共識算法的跨客戶端網(wǎng)絡(luò)提茁。因此淹禾,由于網(wǎng)絡(luò)的低難度/安全性,它有一定的額外開銷茴扁,并且更容易受到重組攻擊铃岔。Go Ethereum還支持連接到稱為Rinkeby的權(quán)威證明測試網(wǎng)絡(luò)(由社區(qū)成員運(yùn)營)。這個網(wǎng)絡(luò)更輕峭火,更安全毁习,但只受到go-ethereum的支持。

geth --rinkeby console

配置

代替?zhèn)鬟f大量選項(xiàng)給 geth 二進(jìn)制卖丸,你能傳遞一個配置文件經(jīng)由:

geth --config /path/to/your_config.toml

為了理解這個文件的寫法纺且,你能使用 dumpconfig 子命令export你的現(xiàn)有配置:

geth --your-favourite-flags dumpconfig
eg:geth --testnet dumpconfig

注意:這個只在 geth v1.6.0以及以上版本有效。

Docker quick start

通過使用Docker稍浆,你可以在你的機(jī)器上快速啟動Ethereum并運(yùn)行:

docker run -d --name ethereum-node -v /Users/alice/ethereum:/root \
           -p 8545:8545 -p 30303:30303 \
           ethereum/client-go

上述命令將以快速同步模式啟動geth载碌,并具有1GB的DB內(nèi)存容量。它也將在你的home目錄下創(chuàng)建一個永久卷來儲存你的區(qū)塊鏈和映射的默認(rèn)端口衅枫。還有一個 alpine 標(biāo)簽可用于image的精簡版本恐仑。

如果你想要從其他容器或主機(jī)訪問RPC,不要忘了 --rpcaddr 0.0.0.0为鳄。默認(rèn)情況下,geth 綁定本地接口并且不可從外訪問RPC端點(diǎn)腕让。

可編程接口 Geth nodes

作為一個開發(fā)者孤钦,你將想要及早開始經(jīng)由你自己的程序而不是手動控制臺與Geth和Ethereum網(wǎng)交互。為此纯丸,Geth已經(jīng)內(nèi)置支持一個基于APIs(standard APIsGeth specific APIs)的JSON-RPC偏形。它能夠經(jīng)由HTTP, WebSockets 和 IPC (unix sockets on unix based platforms, and named pipes on Windows)暴露。

IPC接口默認(rèn)是激活的并暴露所有Geth支持的APIs觉鼻,然而HTTP 和 WS接口需要手動激活并且由于安全原因只能暴露一個APIs子集俊扭。這些可以根據(jù)你的需要打開或關(guān)閉并被配置。

詳情請看 Programatically interfacing Geth nodes

操作一個私網(wǎng)

維護(hù)你自己的私網(wǎng)是十分復(fù)雜的坠陈,因?yàn)樵谝粋€正規(guī)的網(wǎng)絡(luò)中萨惑,大量配置的獲取和授權(quán)需要手動設(shè)置。下面仇矾,我們建立一個簡單的私網(wǎng)以太坊庸蔼。

說明:為了使下面創(chuàng)建私網(wǎng)以太坊的步驟更加直白,筆者將默認(rèn)使用以下的geth選項(xiàng)值(請自行查看選項(xiàng)含義):

  • --datadir /root/privatenet/.ethereum
  • --config config/privatenet.toml

在開始之前贮匕,筆者先介紹一下如何創(chuàng)建以太坊賬戶:

  • 創(chuàng)建主網(wǎng)以太坊賬戶姐仅,執(zhí)行命令:
geth account new
  • 創(chuàng)建私網(wǎng)以太坊賬戶,執(zhí)行命令:
geth --datadir /root/privatenet/.ethereum account new

按照提示輸入賬戶密碼即可。

注意:創(chuàng)建私網(wǎng)以太坊賬戶時掏膏,務(wù)必指定 --datadir 選項(xiàng)劳翰,否則會默認(rèn)創(chuàng)建主網(wǎng)以太坊賬戶。

定義一個私有的創(chuàng)世狀態(tài)

首先馒疹,你需要創(chuàng)造你的網(wǎng)絡(luò)的所有節(jié)點(diǎn)需要意識到并同意的創(chuàng)世狀態(tài)佳簸。這個由一個小JSON文件組成(例如,稱它為 genesis.json):

{
  "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x20000",
  "extraData"  : "",
  "gasLimit"   : "0x2fefd8",
  "nonce"      : "0x0000000000001993",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
}

參數(shù)說明(下表是筆者參考go-ethereum源碼README和ethereum_yellow_paper整理所得行冰,如有錯誤溺蕉,請幫忙指正):

參數(shù) 描述
alloc 可以預(yù)置賬號以及賬號的以太幣數(shù)量
coinbase 區(qū)塊受益者地址,可以設(shè)置成已存在的賬戶悼做。后面挖出的區(qū)塊的受益者將是挖掘出那個區(qū)塊的賬戶(礦工)
difficulty 代表當(dāng)前區(qū)塊的難度等級(十六進(jìn)制)疯特,這里定義創(chuàng)世區(qū)塊的難度等級,難度等級越高肛走,挖礦越難漓雅。后面生成的區(qū)塊難度等級根據(jù)前一個區(qū)塊的難度等級和時間戳計(jì)算得到
extraData 一個包含這個區(qū)塊相關(guān)數(shù)據(jù)的字節(jié)數(shù)組,任意填寫朽色。必須是32位以內(nèi)
gasLimit 執(zhí)行這個事務(wù)應(yīng)該被使用的gas的最大量邻吞。這個在任何計(jì)算被做之前是預(yù)付的,并且在之后不會增加
nonce 代表從這個地址發(fā)送的事務(wù)數(shù)目葫男,或者在關(guān)聯(lián)代碼的賬戶情況下抱冷,這代表這個賬戶創(chuàng)造的合約數(shù)目。(在Yellow Paper中對nonce有多處描述梢褐,這里選擇了4.1章節(jié)的描述旺遮,)
mixhash 一個256位的hash,由nonce合并盈咳,證明在這個區(qū)塊上已經(jīng)執(zhí)行足夠量的計(jì)算
parentHash 前一個(父級)區(qū)塊的header的keccak256算法hash
timestamp 這個區(qū)塊開始的Unix的time()和合理輸出

上面這些域應(yīng)該可以滿足大多數(shù)需求耿眉,不過我們建議改變 nonce 為一些隨機(jī)值,這樣你就能阻止不知名的遠(yuǎn)程節(jié)點(diǎn)訪問你鱼响。如果你想要為了更早測試鸣剪,預(yù)儲備一些賬戶,你能在 alloc 域進(jìn)行賬戶配置:

"alloc": {
  "0x0000000000000000000000000000000000000001": {"balance": "111111111"},
  "0x0000000000000000000000000000000000000002": {"balance": "222222222"}
}

隨著創(chuàng)世狀態(tài)定義在上面的JSON文件丈积,你應(yīng)該在啟動每個節(jié)點(diǎn)之前筐骇,優(yōu)先初始化它,以確認(rèn)所有區(qū)塊鏈參數(shù)被正確設(shè)置:

geth --datadir /root/privatenet/.ethereum init genesis.json

啟動bootstrap

當(dāng)所有你想要運(yùn)行的節(jié)點(diǎn)初始化到期望的創(chuàng)世狀態(tài)桶癣,你將需要開始一個bootstrap節(jié)點(diǎn)拥褂,其他節(jié)點(diǎn)可以使用它在你的網(wǎng)絡(luò)或因特網(wǎng)中找到彼此。干凈的方式是配置并運(yùn)行一個獨(dú)立的bootnode:

  1. 每個ethereum節(jié)點(diǎn)牙寞,包括一個bootnode饺鹃,通過一個enode標(biāo)識符聯(lián)系莫秆。這些標(biāo)識符源自一個key。于是你將需要給bootnode這樣一個key悔详。因?yàn)槲覀儺?dāng)前沒有這樣的key镊屎,所以我們可以在bootnode啟動前生成一個key(并存儲它到一個文件):
bootnode -genkey bootnode.key
  1. 為了bootnode每次啟動都使用相同的enode,需要在bootnode啟動時指定一個key:
bootnode -nodekey bootnode.key

當(dāng)bootnode上線茄螃,它將展示一個 enode URL缝驳,例如:

INFO [05-09|01:47:05] UDP listener up                          self=enode://75535ebac1f5b2a644edb134dbe91c6c288353be1a5301864edae529630b35c5ff0c0ae9e07b2bcdef578c3ac1b72b2cda105c061c2c77067f1fd8ec54d852b7@[::]:30301

其他節(jié)點(diǎn)可以使用這個 enode URL 連接它并交換對等信息。確認(rèn)用你的外部訪問IP替換展示的IP地址信息(很可能是 [::])去得到真正的 enode URL归苍。例如:

enode://75535ebac1f5b2a644edb134dbe91c6c288353be1a5301864edae529630b35c5ff0c0ae9e07b2bcdef578c3ac1b72b2cda105c061c2c77067f1fd8ec54d852b7@192.168.1.214:30301

保存這個準(zhǔn)確的 enode URL 到你的一個文本中或者其他什么地方用狱,下面需要用到。

注意:你也可以使用完全成熟的Geth節(jié)點(diǎn)作為引導(dǎo)節(jié)點(diǎn)拼弃,但這是不太推薦的方式夏伊。

定義一個配置文件

為了成員節(jié)點(diǎn)啟動時使用的配置一致,需要寫一個配置文件吻氧,例如 privatenet.toml(參考自 testnet 的配置, 執(zhí)行命令 geth --testnet dumpconfig 可見):

# Note: this config doesn't contain the genesis block.

[Eth]
NetworkId = 3369
DatabaseCache = 768
GasPrice = 18000000000

[Eth.Ethash]
CacheDir = "ethash"
CachesInMem = 2
CachesOnDisk = 3
DatasetDir = "/root/privatenet/.ethash"
DatasetsInMem = 1
DatasetsOnDisk = 2

[Eth.TxPool]
NoLocals = false
Journal = "transactions.rlp"
Rejournal = 3600000000000
PriceLimit = 1
PriceBump = 10
AccountSlots = 16
GlobalSlots = 4096
AccountQueue = 64
GlobalQueue = 1024
Lifetime = 10800000000000

[Eth.GPO]
Blocks = 20
Percentile = 60

[Shh]
MaxMessageSize = 1048576
MinimumAcceptedPOW = 2e-01

[Node]
DataDir = "/root/privatenet/.ethereum"
IPCPath = "geth.ipc"
HTTPPort = 8545
HTTPVirtualHosts = ["localhost"]
HTTPModules = ["net", "web3", "eth", "shh"]
WSPort = 8546
WSModules = ["net", "web3", "eth", "shh"]

[Node.P2P]
MaxPeers = 25
NoDiscovery = false
BootstrapNodes = ["enode://75535ebac1f5b2a644edb134dbe91c6c288353be1a5301864edae529630b35c5ff0c0ae9e07b2bcdef578c3ac1b72b2cda105c061c2c77067f1fd8ec54d852b7@1
92.168.1.214:30301"]StaticNodes = []
TrustedNodes = []
ListenAddr = ":30303"
EnableMsgEvents = false

[Dashboard]
Host = "localhost"
Port = 8080
Refresh = 5000000000

配置說明(下表是筆者參考geth參數(shù)說明和go-ethereum相關(guān)配置項(xiàng)代碼整理所得溺忧,如有錯誤,請幫忙指正):

配置項(xiàng) 對應(yīng)參數(shù) 說明
Eth NetworkId --networkid value Network標(biāo)識符(integer類型盯孙,1=Frontier鲁森,2=Morden(disused),3=Ropsten振惰,4=Rinkeby)歌溉,默認(rèn)為1。如果建立在私網(wǎng)上骑晶,使用另外的任意值研底,比如:3369
Eth DatabaseCache null (個人理解)為database申請的系統(tǒng)內(nèi)存,單位為MB透罢,最小值和默認(rèn)值是16MB
Eth GasPrice --gasprice “18000000000” 接受挖掘事務(wù)的最低gas價(jià)格」诮可能指miner的報(bào)酬
Eth.Ethash CacheDir --ethash.cachedir 存儲ethash證明緩存的目錄(默認(rèn)在 datadir 目錄里)
Eth.Ethash CachesInMem --ethash.cachesinmem value 保留在內(nèi)存中的最新ethash緩存的數(shù)目(每16MB)(默認(rèn):2)羽圃。
Eth.Ethash CachesOnDisk --ethash.cachesondisk value 保留在磁盤中的最新ethash緩存的數(shù)目(每16MB)(默認(rèn):3)。
Eth.Ethash DatasetDir --ethash.dagdir "/home/karalabe/.ethash" 存儲ethash挖掘DAGs的目錄(默認(rèn)在home目錄里)
Eth.Ethash DatasetsInMem --ethash.dagsinmem value 保留在內(nèi)存中的最新ethash挖掘DAGs(每1+GB)(默認(rèn):1)抖剿。
Eth.Ethash DatasetsOnDisk --ethash.dagsondisk value 保留在磁盤中的最新ethash挖掘DAGs(每1+GB)(默認(rèn):2)朽寞。
Eth.TxPool NoLocals --txpool.nolocals 免除本地提交事務(wù)的費(fèi)用
Eth.TxPool Journal --txpool.journal value 用于節(jié)點(diǎn)重啟的本地事務(wù)磁盤日志(默認(rèn):"transactions.rlp")
Eth.TxPool Rejournal --txpool.rejournal value 重新生成本地事務(wù)日志的時間間隔(默認(rèn):1h0m0s)
Eth.TxPool PriceLimit --txpool.pricelimit value 強(qiáng)制接納入池的最小gas價(jià)格限制(默認(rèn):1)
Eth.TxPool PriceBump --txpool.pricebump value 替代一個已經(jīng)存在的事務(wù)的價(jià)格碰撞百分比(默認(rèn):10)
Eth.TxPool AccountSlots --txpool.accountslots value 每個賬戶擔(dān)保的可執(zhí)行事務(wù)時隙的最小數(shù)目(默認(rèn):16)
Eth.TxPool GlobalSlots --txpool.globalslots value 所有賬戶的可執(zhí)行事務(wù)時隙的最大數(shù)目(默認(rèn):4096)
Eth.TxPool AccountQueue --txpool.accountqueue value 每個賬戶許可的非可執(zhí)行事務(wù)時隙的最大數(shù)目(默認(rèn):64)
Eth.TxPool GlobalQueue --txpool.globalqueue 所有賬戶的非可執(zhí)行事務(wù)時隙的最大數(shù)目(默認(rèn):1024)
Eth.TxPool Lifetime --txpool.lifetime value 非可執(zhí)行事務(wù)的排隊(duì)最大時間(默認(rèn):3h0m0s)
Eth.GPO Blocks --gpoblocks value 檢查gas價(jià)格的最新區(qū)塊的數(shù)目(默認(rèn):10)
Eth.GPO Percentile --gpopercentile value 建議的gas價(jià)格是一組最新事務(wù)gas價(jià)格的百分位(默認(rèn):50)
Shh MaxMessageSize --shh.maxmessagesize value 可接受的最大信息大小(默認(rèn):1048576)
Shh MinimumAcceptedPOW --shh.pow value 可接受的最小POW(默認(rèn):0.2)
Node DataDir --datadir "/home/karalabe/.ethereum" databases和keystore的數(shù)據(jù)目錄
Node IPCPath --ipcpath datadir里的IPC socket/pipe的文件名
Node HTTPPort --rpcport value HTTP-RPC服務(wù)監(jiān)聽端口(默認(rèn):8545)
Node HTTPVirtualHosts --rpcaddr value HTTP-RPC服務(wù)監(jiān)聽接口(默認(rèn):"localhost")
Node HTTPModules null 經(jīng)由HTTP RPC接口暴露的API modules列表
Node WSPort --wsport value WS-RPC 服務(wù)監(jiān)聽端口(默認(rèn):8546)
Node WSModules null 經(jīng)由websocket RPC接口暴露的API modules列表,如果modules是空的斩郎,所有指向public的RPC API端點(diǎn)將會被暴露
Node.P2P MaxPeers --maxpeers value network peers的最大數(shù)目(如果設(shè)置為0脑融,network失效)(默認(rèn):25)
Node.P2P NoDiscovery --nodiscover 使peer發(fā)現(xiàn)機(jī)制無效(手動peer添加)。這里設(shè)置為false缩宜,以便使用這個配置文件的新節(jié)點(diǎn)可以被發(fā)現(xiàn)肘迎。
Node.P2P BootstrapNodes --bootnodes value 逗號分割的P2P discovery bootstrap enode URLs(對于 light servers甥温,設(shè)置 v4+v5 代替)。將上面啟動bootnodes時獲取的enode URL替換IP后添加到這里妓布。
Node.P2P BootstrapNodesV5 --bootnodesv5 value 逗號分割的P2P v5 discovery bootstrap enode URLs(light server姻蚓,light nodes)
Node.P2P StaticNodes null 配置作為static nodes的節(jié)點(diǎn)enode URLs列表
Node.P2P TrustedNodes null 配置作為trusted nodes的節(jié)點(diǎn)enode URLs列表
Node.P2P ListenAddr --port network監(jiān)聽端口(默認(rèn):30303)
Node.P2P EnableMsgEvents null 如果EnableMsgEvents被設(shè)置,服務(wù)器將發(fā)出PeerEvents匣沼,無論一個peer何時發(fā)送或接收一條信息
Dashboard Host null 啟動dashboard服務(wù)的主機(jī)接口狰挡,如果這個域?yàn)榭眨瑒t沒有dashboard將被啟動
Dashboard Port null 啟動dashboard服務(wù)的TCP端口數(shù)字释涛。默認(rèn)0值是有效的加叁,并將使用一個隨機(jī)端口數(shù)字(用于臨時節(jié)點(diǎn))
Dashboard Refresh null 數(shù)據(jù)更新的刷新速率,chartEntry將被經(jīng)常收集

在你的操作目錄創(chuàng)建config文件夾唇撬,將寫好的配置文件privatenet.toml移動到config目錄里它匕。

啟動你的成員節(jié)點(diǎn)

以太坊的成員節(jié)點(diǎn),之間是完全對等的局荚,每個節(jié)點(diǎn)都可以有多個賬戶超凳。

啟動私網(wǎng)以太坊的成員節(jié)點(diǎn):

geth --config config/privatenet.toml

連接到剛剛啟動的或者已經(jīng)在運(yùn)行的node,開始一個交互式JavaScript環(huán)境:

geth attach privatenet/.ethereum/geth.ipc

官方說明: 當(dāng)bootnode運(yùn)轉(zhuǎn)起來并且外部可達(dá)(你能嘗試 telnet <ip> <port> 去確認(rèn)它的確可達(dá))耀态,開始隨后的Geth節(jié)點(diǎn)轮傍,為了對等發(fā)現(xiàn),經(jīng)由 --bootnodes 選項(xiàng)指向bootnode首装。保持你的私網(wǎng)的數(shù)據(jù)目錄單獨(dú)將很可能是明智的選擇创夜,所以也指定一個自定義的 --datadir 選項(xiàng)。

geth --datadir=path/to/custom/data/folder --bootnodes=<bootnode-enode-url-from-above>

注意:因?yàn)槟愕木W(wǎng)絡(luò)將被從main和test網(wǎng)完全切除仙逻,所以你將需要配置一個 miner 去處理交易并為你創(chuàng)造新塊驰吓。

運(yùn)行一個私有的miner

公共Ethereum網(wǎng)的mining是一個復(fù)雜的任務(wù),因?yàn)樗ㄒ豢尚械氖鞘褂肎PUs系奉,要求一個OpenCL 或 CUDA激活 ethminer 實(shí)例檬贰。更多信息請查閱 EtherMining subredditGenoil miner 倉庫。

然而在一個私網(wǎng)的設(shè)置缺亮,一個單一的 CPU miner實(shí)例是足夠滿足實(shí)際需求的翁涤,因?yàn)樗恍枰林氐馁Y源(考慮到運(yùn)行在一個單一的線程上,也不需要多個)就能在一個正確的間隔內(nèi)生產(chǎn)一個穩(wěn)定的區(qū)塊流(stable stream of blocks)萌踱。為mining開始一個Geth實(shí)例葵礼,指定你通常使用的選項(xiàng)運(yùn)行它,通過以下方法擴(kuò)展:

geth --config config/privatenet.toml --mine --minerthreads=1 --etherbase=0x0000000000000000000000000000000000000000

這將開始mining區(qū)塊并在一個單一CPU線程上交易并鸵,存入所有事件到一個 --etherbase 選項(xiàng)指定的賬戶鸳粉,如果不指定賬戶,則會默認(rèn)指定當(dāng)前節(jié)點(diǎn)上的第一個賬戶园担。你能進(jìn)一步調(diào)節(jié)mining届谈,通過(--targetgaslimit)改變默認(rèn)gas限制區(qū)塊并且在(--gasprice)處接受價(jià)格交易枯夜。

另外,也可以在交互式JavaScript環(huán)境中控制mining實(shí)例:

  • 開始一個4線程的mining實(shí)例:
miner.start(4)
  • 停止mining實(shí)例:
miner.stop()

更多Mining相關(guān)信息疼约,請參看Mining

至此卤档,私網(wǎng)以太坊搭建完成,感謝閱讀程剥!


原創(chuàng)不易劝枣,與君共勉!

所有玩世不恭的生靈织鲸,都有一顆至真至純的心舔腾!

文章最新地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市搂擦,隨后出現(xiàn)的幾起案子稳诚,更是在濱河造成了極大的恐慌,老刑警劉巖瀑踢,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扳还,死亡現(xiàn)場離奇詭異,居然都是意外死亡橱夭,警方通過查閱死者的電腦和手機(jī)氨距,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棘劣,“玉大人俏让,你說我怎么就攤上這事〔缦荆” “怎么了首昔?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長糙俗。 經(jīng)常有香客問我勒奇,道長,這世上最難降的妖魔是什么巧骚? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任撬陵,我火速辦了婚禮,結(jié)果婚禮上网缝,老公的妹妹穿的比我還像新娘。我一直安慰自己蟋定,他們只是感情好粉臊,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著驶兜,像睡著了一般扼仲。 火紅的嫁衣襯著肌膚如雪远寸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天屠凶,我揣著相機(jī)與錄音驰后,去河邊找鬼。 笑死矗愧,一個胖子當(dāng)著我的面吹牛灶芝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播唉韭,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼夜涕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了属愤?” 一聲冷哼從身側(cè)響起女器,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎住诸,沒想到半個月后驾胆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贱呐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年丧诺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吼句。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡锅必,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惕艳,到底是詐尸還是另有隱情搞隐,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布远搪,位于F島的核電站劣纲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谁鳍。R本人自食惡果不足惜癞季,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望倘潜。 院中可真熱鬧绷柒,春花似錦、人聲如沸涮因。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽养泡。三九已至嗜湃,卻和暖如春奈应,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背购披。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工杖挣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刚陡。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓惩妇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親橘荠。 傳聞我的和親對象是個殘疾皇子屿附,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容