Nebulas-01 星云鏈編譯安裝
星云鏈的項(xiàng)目代碼已經(jīng)發(fā)布了幾個(gè)版本,經(jīng)過測試可以在本地運(yùn)行,大家可以下載星云鏈源代碼在本地編譯私有鏈。想了解星云鏈的同學(xué)可以閱讀星云鏈非技術(shù)白皮書。對技術(shù)感興趣的同學(xué)可以看星云鏈技術(shù)白皮書和星云鏈Github
星云鏈現(xiàn)階段只能在Mac和Linux上運(yùn)行,后續(xù)會(huì)推出windows版本。
Golang環(huán)境搭建
COMPONENTSVERSIONDESCRIPTION
Golang>= 1.9.2The Go Programming Language
我們會(huì)分別介紹Mac OSX和Linux兩種系統(tǒng)下golang環(huán)境的搭建。
Mac OSX
在Mac OSX里,我們推薦使用Homebrew來安裝Golang.
# 安裝
brew install go
?
# 配置環(huán)境變量
exportGOPATH=/path/to/workspace
提示: 在golang的開發(fā)中,GOPATH是必須的,它指定了我們使用golang開發(fā)的工作空間。所有的源碼都應(yīng)放在GOPATH之下。
Linux
# download
wgethttps://dl.google.com/go/go1.9.3.linux-amd64.tar.gz
?
# extract
tar-C/usr/local-xzfgo1.9.3.linux-amd64.tar.gz
?
# environment variables
exportPATH=$PATH:/usr/local/go/bin
exportGOPATH=/path/to/workspace
編譯星云鏈
下載源碼
可以使用如下指令直接下載最新版本的星云鏈源碼。
# 進(jìn)入工作目錄
mkdir-p$GOPATH/src/github.com/nebulasio
cd$GOPATH/src/github.com/nebulasio
?
# 下載源碼
gitclone https://github.com/nebulasio/go-nebulas.git
?
# 進(jìn)入項(xiàng)目目錄
cdgo-nebulas
?
# 切換到最穩(wěn)定的master分支
gitcheckout master
安裝rocksdb依賴庫
同樣我們會(huì)介紹如何在MAC OSX和Linux正確安裝RocksDB。
Mac OSX
可以直接通過Homebrew安裝,運(yùn)行? brew install rocksdb
Linux
在linux環(huán)境下,由于ubuntu和centos系統(tǒng)的用戶偏多,我們將分別介紹這兩個(gè)主流環(huán)境下RocksDB的安裝。
Ubuntu
首先安裝RocksDB所需依賴庫
apt-get update
apt-get-yinstall build-essential libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev
下載源碼并編譯安裝
gitclone https://github.com/facebook/rocksdb.git
cdrocksdb &makeshared_lib &&makeinstall-shared
make shared_lib 有些同學(xué)會(huì)報(bào)錯(cuò),請?jiān)L問https://www.cnblogs.com/shuren/p/3981744.html 基本能解決問題
安裝Go依賴庫
在Go-Nebulas中,Go的三方庫都通過Dep來做管理
Components(-) ? ? ? ?? | ? ? ? ?? Version(-) ? ? ? ? ? | ? ? ? ?? Description(-) ? ? ? ? ?
[Dep](https://github.com/golang/dep) ? ? ? ? ?? | ? ? ? ? ? >= 0.3.1 ? ? ? ?? | ? ? ? ?? Dep is a dependency management tool for Go. ? ? ? ? ?
安裝Dep工具
我們同樣分別介紹Mac OSX和Linux下Dep的安裝方法。
Mac OSX
通過Homebrew直接安裝并升級(jí)Dep
brew install dep
brew upgrade dep
Linux
通過源碼來安裝Dep
cd/usr/local/bin/
wgethttps://github.com/golang/dep/releases/download/v0.3.2/dep-linux-amd64
ln-sdep-linux-amd64 dep
下載Go三方庫
我們切換到Go-Nebulas項(xiàng)目根目錄,然后使用Dep來下載三方庫。
cd$GOPATH/src/github.com/nebulasio/go-nebulas
makedep
有些同學(xué)執(zhí)行 make dep 報(bào)錯(cuò),可直接用下面的方法安裝三方庫,效果一樣。
提示: make dep將會(huì)下載很多依賴庫。在部分地區(qū),這個(gè)過程可能比較耗時(shí)。所以,我們提供了依賴庫的壓縮包vendor.tar.gz??梢允褂孟铝兄噶钔ㄟ^壓縮包來安裝GO依賴庫。
wgethttp://ory7cn4fx.bkt.clouddn.com/vendor.tar.gz
cd$GOPATH/src/github.com/nebulasio/go-nebulas
tar zxf vendor.tar.gz
安裝Chrome V8依賴庫
星云虛擬機(jī)目前依賴于Chrome的V8引擎,為了大家使用方便,我們已經(jīng)為Mac OSX和Linux編譯好了V8的動(dòng)態(tài)庫。運(yùn)行如下指令就可以完成安裝。
cd$GOPATH/src/github.com/nebulasio/go-nebulas
makedeploy-v8
編譯可執(zhí)行文件
完成所有上述依賴庫的安裝后,現(xiàn)在我們可以進(jìn)入Go-Nebulas根目錄編譯星云鏈的可執(zhí)行文件了。
cd$GOPATH/src/github.com/nebulasio/go-nebulas
makebuild
編譯成功后,將會(huì)看到如下信息。

運(yùn)行星云鏈
創(chuàng)世區(qū)塊
在啟動(dòng)一個(gè)新的星云鏈前,我們必須定義創(chuàng)世區(qū)塊的配置文件。
創(chuàng)世區(qū)塊配置
meta {
? # 每條鏈的唯一標(biāo)識(shí)
? # 每個(gè)區(qū)塊和交易只會(huì)屬于一條唯一的鏈,保證安全性
? chain_id: 100
}
?
consensus {
? # 在貢獻(xiàn)度證明(PoD)被充分驗(yàn)證前,星云鏈采用DPoS共識(shí)算法
? # DPoS共識(shí)中,21個(gè)人組成一個(gè)朝代
? # 每隔一段時(shí)間都會(huì)切換朝代,每個(gè)朝代內(nèi),21個(gè)礦工輪流出塊
? # 由于DPoS只是過渡方案,所以暫時(shí)不開放給公眾挖礦,即當(dāng)前版本朝代不會(huì)發(fā)生變更
? dpos {
?? # 初始朝代,包含21個(gè)初始礦工地址
?? dynasty: [
? ?? [ miner address ],
? ?? ...
?? ]
? }
}
?
# 預(yù)分配的代幣
token_distribution [
? {
?? address: [ allocation address ]
?? value: [ amount of allocation tokens ]
? },
? ...
]
可以在根目錄? conf/default/genesis.conf 下,找到一個(gè)完整的創(chuàng)世區(qū)塊配置實(shí)例。
配置文件
在我們啟動(dòng)一個(gè)星云節(jié)點(diǎn)前,我們需要定義好該節(jié)點(diǎn)的配置文件
星云節(jié)點(diǎn)配置文件
# 網(wǎng)絡(luò)配置
network {
? # 對于全網(wǎng)第一個(gè)節(jié)點(diǎn),不需要配置seed
? # 否則,其他節(jié)點(diǎn)啟動(dòng)時(shí)需要配置seed,seed節(jié)點(diǎn)將會(huì)把網(wǎng)絡(luò)中其他節(jié)點(diǎn)的路由信息同步給剛啟動(dòng)的節(jié)點(diǎn)
? # 可以配置多個(gè)seed, ["...", "..."]
? seed: ["/ip4/127.0.0.1/tcp/8680/ipfs/QmP7HDFcYmJL12Ez4ZNVCKjKedfE7f48f1LAkUc3Whz4jP"]
?
? # 節(jié)點(diǎn)監(jiān)聽網(wǎng)絡(luò)消息端口,可以配置多個(gè)
? listen: ["0.0.0.0:8680"]
?
? # 網(wǎng)絡(luò)私鑰,用于確認(rèn)身份節(jié)點(diǎn)
? # private_key: "conf/network/id_ed25519"
}
?
# 鏈配置
chain {
? # 鏈的唯一標(biāo)識(shí)
? chain_id: 100
?
? # 數(shù)據(jù)存儲(chǔ)地址
? datadir: "data.db"
?
? # 賬戶keystore文件存儲(chǔ)地址
? keydir: "keydir"
?
? # 創(chuàng)世區(qū)塊配置
? genesis: "conf/default/genesis.conf"
?
? # 簽名算法,請勿修改
? signature_ciphers: ["ECC_SECP256K1"]
?
? # 礦工地址,礦工的keystore文件需要放置在配置的keydir下
? miner: "n1XkoVVjswb5Gek3rRufqjKNpwrDdsnQ7Hq"
?
? # Coinbase地址,該地址用于接收礦工的挖礦獎(jiǎng)勵(lì),可以和礦工地址一致
? # 該地址的keystore無需暴露,不用放置在配置的keydir下
? coinbase: "n1FF1nz6tarkDVwWQkMnnwFPuPKUaQTdptE"
?
? # 礦工地址的密碼
? passphrase: "passphrase"
}
?
# API配置
rpc {
?? # GRPC服務(wù)端口
?? rpc_listen: ["127.0.0.1:8684"]
?
?? # HTTP服務(wù)端口
?? http_listen: ["127.0.0.1:8685"]
?
?? # 開放的API模塊
?? # API模塊包含所有和用戶私鑰無關(guān)的接口
?? # Admin模塊包含所有和用戶私鑰相關(guān)的接口,需要慎重考慮該模塊的訪問權(quán)限
?? http_module: ["api", "admin"]
}
?
# 日志配置
app {
?? # 日志級(jí)別: 支持[debug, info, warn, error, fatal]
?? log_level: "info"
?
?? # 日志存放位置
?? log_file: "logs"
?
?? # 是否打開crash report服務(wù)
?? enable_crash_report: false
}
?
# 監(jiān)控服務(wù)配置
stats {
?? # 是否打開監(jiān)控服務(wù)
?? enable_metrics: false
?
?? # 監(jiān)控服務(wù)將數(shù)據(jù)上傳到Influxdb
?? # 配置Influxdb的訪問信息
?? influxdb: {
? ? ?? host: "http://localhost:8086"
? ? ?? db: "nebulas"
? ? ?? user: "admin"
? ? ?? password: "admin"
?? }
}
A lot of examples can be found in $GOPATH/src/github.com/nebulasio/go-nebulas/conf/
啟動(dòng)星云鏈
此時(shí)啟動(dòng)的星云鏈?zhǔn)潜镜氐乃接墟?,和官方的測試網(wǎng)和主網(wǎng)沒有任何相互關(guān)聯(lián)
啟動(dòng)你的第一個(gè)星云節(jié)點(diǎn)。
cd$GOPATH/src/github.com/nebulasio/go-nebulas
./neb-cconf/default/config.conf
啟動(dòng)成功的話,將會(huì)看到如下信息,有Started Neblet的日志輸出。

默認(rèn)情況下,使用配置文件conf/default/config.conf啟動(dòng)的節(jié)點(diǎn)不是礦工節(jié)點(diǎn)。
接下來,啟動(dòng)你的第一個(gè)礦工節(jié)點(diǎn),它的seed節(jié)點(diǎn)即我們剛剛啟動(dòng)的第一個(gè)節(jié)點(diǎn)。
cd$GOPATH/src/github.com/nebulasio/go-nebulas
./neb-cconf/example/miner.conf
在這個(gè)節(jié)點(diǎn)啟動(dòng)后,你會(huì)先看到如下信息,表示當(dāng)前節(jié)點(diǎn)正在找種子節(jié)點(diǎn)同步。
等待一會(huì)兒,將會(huì)看到如下信息,表示當(dāng)前節(jié)點(diǎn)已經(jīng)連上了seed節(jié)點(diǎn)完成了同步。

再等待幾分鐘,你會(huì)看到如下信息,表示當(dāng)前礦工節(jié)點(diǎn)挖出了第一個(gè)區(qū)塊。

提示: 目前的DPoS共識(shí)算法,會(huì)有21個(gè)節(jié)點(diǎn)輪流出塊。由于我們只啟動(dòng)了21個(gè)礦工節(jié)點(diǎn)中的一個(gè)礦工節(jié)點(diǎn),所以每隔15*21s才出一個(gè)塊。你可以啟動(dòng)更多的礦工節(jié)點(diǎn),填補(bǔ)的空缺。但是需要注意,多個(gè)節(jié)點(diǎn)間的端口號(hào)不要相互沖突了。
版權(quán)聲明:博客中的文章版權(quán)歸博主所有,未經(jīng)授權(quán),禁止轉(zhuǎn)載,轉(zhuǎn)載請注明出處