Gbif单节点部署文档
单机部署:
- 配置go运行环境,推荐使用CentOs7
- 本地编译gbif源码,生成可执行文件gbif
- 执行gbif节点初始化操作
- 启动gbif节点
- 创建一个账号并解锁,用于挖矿
推荐服务器
- 操作系统:CentOS7
- CPU: 4核
- 内存: 16G
- 磁盘: 50G
节点安装流程
1. 配置go运行环境:
下载go包
wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.13.5.linux-amd64.tar.gz
2. 配置go环境变量,在~/.bashrc中添加配置
vim ~/.bashrc
//添加到最后
export GOROOT=/usr/local/go
export GOPATH=$HOME/code
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
export GO111MODULE=off
source ~/.bashrc
go version //输出 go version go1.13.5 linux/amd64,代表安装成功
3. 配置go-bif源码,执行完成后,会在项目根目录生成gbif可执行文件
mkdir -p $HOME/code/src/github.com/bif
cd $HOME/code/src/github.com/bif
git clone http://192.168.150.43:8080/BIF/go-bif.git
cd go-bif
go build github.com/bif/go-bif/cmd/gbif
4. 配置genesis.json文件
在项目跟目录下添加genesis.json文件,文件内容如下:
{
"config": {
"chainId": 444,
"constantinopleBlock": 1,
"dpos": {
"period": 2,
"witnessesNum": 3,
"witnesses": [
{
"address": "did:bid:6cc796b8d6e2fbebc9b3cf9e",
"url": "enode://862d66d1255c7ac9c6d86920081069a4d7c295c838140217644ac6f4fcddd0d2edef63951148affb107223fbd1331363e275125bc0cfeb34b1daad26328f8b20@127.0.0.1:44001?discport=0"
},
{
"address": "did:bid:c935bd29a90fbeea87badf3e",
"url": "enode://0d843e75752ca5c7db12c2e8e2dc4e6eb771ddf1511809c4e708bc74abad0f14f970229a64287ec34122d3657167ea7dd5c9f1902ca6fcfc0b0a91e78d39573c@127.0.0.1:44011?discport=0"
},
{
"address": "did:bid:13803fb30b7e95d57103c2dc",
"url": "enode://7e42b87fda19dfe6b4a8e425d882c60a43667a3d731aabd19ad9aa3cdb98f0cc76c2664cb12b1a39c2c2e848afc6262a73a800cd845af10de1e90766628b2cc8@127.0.0.1:44021?discport=0"
}
]
}
},
"nonce": "0x0",
"timestamp": "0x5d131141",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000f885f83f946469643a6269643a6cc796b8d6e2fbebc9b3cf9e946469643a6269643ac935bd29a90fbeea87badf3e946469643a6269643a13803fb30b7e95d57103c2dcb8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0",
"gasLimit": "0x47b760",
"difficulty": "0x1",
"mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
"coinbase": "did:bid:000000000000000000000000",
"alloc": {
"did:bid:6cc796b8d6e2fbebc9b3cf9e": {
"balance": "0x446c3b15f9926687d2c40534fdb564000000000000"
}
},
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
5. 初始化gbif
./gbif init genesis.json --datadir ./data
6. 启动节点
./gbif --networkid 444 --datadir ./data --verbosity 4 --port 44001 --rpc --rpcaddr 0.0.0.0 --rpcport 44002 --rpcapi core,gb,admin,personal,db,net,txpool,bif --ws --wsaddr 0.0.0.0 --wsport 44003 --wsapi core,gb,admin,personal,db,net,txpool --rpccorsdomain '*' console
- networkid: gbif网络号,必须与genesis.json文件中的networkid一致
- --verbosity: 日志等级
- --rpcport: rpc端口号
- --rpcapi: 根据需要选择开放的rpc类型
- --wsapi: 根据需要选择开放websocket api类型
- --wsport: websocket端口号
- console: 添加console后,节点启动后将自动进入控制台(gbif console)界面
7. 启动后会看到如下输出:
Welcome to the Gbif JavaScript console!
instance: Gbif/v1.9.0-unstable/darwin-amd64/go1.13.5
at block: 0 (Wed, 26 Jun 2019 14:31:29 CST)
datadir: /home/teleinfo/code/src/github.com/bif/go-bif/data/
modules: admin:1.0 bif:1.0 core:1.0 debug:1.0 dpos:1.0 gb:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0
>
>
>
此时我们已成功启动节点,并且已进入到控制台界面
8. 配置挖矿账号
在刚刚出现的控制台中输入, teleinfo 为您的账号密码,可以随意定制,还请记录好:
personal.newAccount("teleinfo")
personal.unlockAccount(core.accounts[0], "teleinfo")
core.accounts[0] //查看刚刚生成的地址
admin.nodeInfo.enode //查看节点信息
miner.start()
此时,在data/keystore下会有一个文件名为: UTC--2019-12-16T11-18-04.703989000Z--did-bid-6cc796b8d6e2fbebc9b3cf9e 这种格式的文件,此文件即为您的keystore,文件名最后面为地址
enode格式为: enode://4b87eed1cbb9c85abf94f784daa63ed4358726f5fefe702fea77cbce1a53813b68139f02779c493f87b3566b34cf35a5bf2963dcad8b5fee00f4be741b56f864@127.0.0.1:44031
此时,节点已经启动好,只需等待它自动加入到主网中
Gbif本地私有链部署
本地私有链是在本地电脑上部署出一整套完成的gbif的节点,这里以四个节点组成一条链为例: - 三个超级节点 - 一个普通节点
超级节点和普通节点配置时候的区别在于genesis.json中"witnesses"和"extraData"字段中是否包含当前节点的address和enode,而启动自己的私有链的第一步就是生成自己的genesis.json. 我们先拿到一个genesis.json的模板:
{
"config": {
"chainId": 444,
"constantinopleBlock": 1,
"dpos": {
"period": 2, //出块时间,单位为秒
"witnessesNum": 3, //见证人数量,这里是以4个几点为例,根据3m+1规则,3个即为dpos共识算法的最小见证人数量了,所以这里设定为3
"witnesses": [
//TODO
]
}
},
"nonce": "0x0",
"timestamp": "0x5d131141",
"extraData": //TODO,
"gasLimit": "0x47b760",
"difficulty": "0x1",
"mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
"coinbase": "did:bid:000000000000000000000000",
"alloc": {
//TODO
},
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
上面标出//TODO的地方即为我们需要自己生成的部分,可以看到有三处
自己生成witnesses
按照上面单节点的部署流程,我们在走到第3步之后,直接执行第6步,即可以拿到节点的address和enode 需要注意的是,启动的时候datadir和端口号需要修改一下,启动三个命令行窗口,都cd 到项目录,然后分别执行下面的命令
//命令行窗口1
./gbif --networkid 444 --datadir ./data/node0 --verbosity 4 --port 44001 --rpc --rpcaddr 0.0.0.0 --rpcport 44002 --rpcapi core,gb,admin,personal,db,net,txpool,bif --ws --wsaddr 0.0.0.0 --wsport 44003 --wsapi core,gb,admin,personal,db,net,txpool --rpccorsdomain '*' console
//命令行窗口2
./gbif --networkid 444 --datadir ./data/node1 --verbosity 4 --port 44011 --rpc --rpcaddr 0.0.0.0 --rpcport 44012 --rpcapi core,gb,admin,personal,db,net,txpool,bif --ws --wsaddr 0.0.0.0 --wsport 44013 --wsapi core,gb,admin,personal,db,net,txpool --rpccorsdomain '*' console
//命令行窗口3
./gbif --networkid 444 --datadir ./data/node2 --verbosity 4 --port 44021 --rpc --rpcaddr 0.0.0.0 --rpcport 44022 --rpcapi core,gb,admin,personal,db,net,txpool,bif --ws --wsaddr 0.0.0.0 --wsport 44023 --wsapi core,gb,admin,personal,db,net,txpool --rpccorsdomain '*' console
然后按照上面第6步的方法,分别拿到各自的address和enode,按照下面的格式添加到genesis.json, "witenesses"节点下:
{
"address": "did:bid:6cc796b8d6e2fbebc9b3cf9e", //命令行窗口1拿到的address
"url": "enode://862d66d1255c7ac9c6d86920081069a4d7c295c838140217644ac6f4fcddd0d2edef63951148affb107223fbd1331363e275125bc0cfeb34b1daad26328f8b20@127.0.0.1:44001?discport=0" //命令行窗口1拿到的enode
},
{
"address": "did:bid:c935bd29a90fbeea87badf3e", //命令行窗口2拿到的address
"url": "enode://0d843e75752ca5c7db12c2e8e2dc4e6eb771ddf1511809c4e708bc74abad0f14f970229a64287ec34122d3657167ea7dd5c9f1902ca6fcfc0b0a91e78d39573c@127.0.0.1:44011?discport=0" //命令行窗口2拿到的enode
},
{
"address": "did:bid:13803fb30b7e95d57103c2dc", //命令行窗口3拿到的address
"url": "enode://7e42b87fda19dfe6b4a8e425d882c60a43667a3d731aabd19ad9aa3cdb98f0cc76c2664cb12b1a39c2c2e848afc6262a73a800cd845af10de1e90766628b2cc8@127.0.0.1:44021?discport=0" //命令行窗口3拿到的enode
}
编写config.toml, 生成extraData
//当前目录为项目根目录
vim config.toml
//向文件中写入(这三个地址依次的上面三个节点的地址):
vanity = "0x00"
validators = ["did:bid:6cc796b8d6e2fbebc9b3cf9e","did:bid:c935bd29a90fbeea87badf3e","did:bid:13803fb30b7e95d57103c2dc"]
生成extraData:
./gbif extra encode --config ./config.toml
//生成的结果为如下格式:
//Encoded Istanbul extra-data: 0x0000000000000000000000000000000000000000000000000000000000000000f885f83f946469643a6269643a6cc796b8d6e2fbebc9b3cf9e946469643a6269643ac935bd29a90fbeea87badf3e946469643a6269643a13803fb30b7e95d57103c2dcb8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0
将0x00000000...00000c0 一长串放入到genesis.json的"extraData"中
配置alloc
alloc 即为链启动后创世产生的token,这里配置地址和对应的token,链产生后,这些地址上就会有相应多的token,填写格式如下:
"did:bid:6cc796b8d6e2fbebc9b3cf9e": { //链启动后创世时分配token的地址
"balance": "0x446c3b15f9926687d2c40534fdb564000000000000" //设定这个地址的账户余额
}
最终组合成的genesis.json格式如下
{
"config": {
"chainId": 444,
"constantinopleBlock": 1,
"dpos": {
"period": 2,
"witnessesNum": 3,
"witnesses": [
{
"address": "did:bid:6cc796b8d6e2fbebc9b3cf9e",
"url": "enode://862d66d1255c7ac9c6d86920081069a4d7c295c838140217644ac6f4fcddd0d2edef63951148affb107223fbd1331363e275125bc0cfeb34b1daad26328f8b20@127.0.0.1:44001?discport=0"
},
{
"address": "did:bid:c935bd29a90fbeea87badf3e",
"url": "enode://0d843e75752ca5c7db12c2e8e2dc4e6eb771ddf1511809c4e708bc74abad0f14f970229a64287ec34122d3657167ea7dd5c9f1902ca6fcfc0b0a91e78d39573c@127.0.0.1:44011?discport=0"
},
{
"address": "did:bid:13803fb30b7e95d57103c2dc",
"url": "enode://7e42b87fda19dfe6b4a8e425d882c60a43667a3d731aabd19ad9aa3cdb98f0cc76c2664cb12b1a39c2c2e848afc6262a73a800cd845af10de1e90766628b2cc8@127.0.0.1:44021?discport=0"
}
]
}
},
"nonce": "0x0",
"timestamp": "0x5d131141",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000f885f83f946469643a6269643a6cc796b8d6e2fbebc9b3cf9e946469643a6269643ac935bd29a90fbeea87badf3e946469643a6269643a13803fb30b7e95d57103c2dcb8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0",
"gasLimit": "0x47b760",
"difficulty": "0x1",
"mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
"coinbase": "did:bid:000000000000000000000000",
"alloc": {
"did:bid:6cc796b8d6e2fbebc9b3cf9e": {
"balance": "0x446c3b15f9926687d2c40534fdb564000000000000"
}
},
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
此时超级节点初始化完成,退出后(在gbif console 中输入exit即可退出),将新配置出来的genesis.json放到项目根目录下,分别打开四个命令行窗口
//窗口一:
cd $HOME/code/src/github.com/bif/go-bif
rm -rf data/node0/gbif
./gbif init genesis.json --datadir ./data/node0
./gbif --networkid 444 --datadir ./data/node0 --verbosity 4 --port 44001 --rpc --rpcaddr 0.0.0.0 --rpcport 44002 --rpcapi core,gb,admin,personal,db,net,txpool,bif --ws --wsaddr 0.0.0.0 --wsport 44003 --wsapi core,gb,admin,personal,db,net,txpool --rpccorsdomain '*' console
//进入gbif console之后执行:
personal.unlockAccount(core.accounts[0], "teleinfo")
miner.start()
//窗口二:
cd $HOME/code/src/github.com/bif/go-bif
rm -rf data/node1/gbif
./gbif init genesis.json --datadir ./data/node1
./gbif --networkid 444 --datadir ./data/node1 --verbosity 4 --port 44011 --rpc --rpcaddr 0.0.0.0 --rpcport 44012 --rpcapi core,gb,admin,personal,db,net,txpool,bif --ws --wsaddr 0.0.0.0 --wsport 44013 --wsapi core,gb,admin,personal,db,net,txpool --rpccorsdomain '*' console
//进入gbif console之后执行:
personal.unlockAccount(core.accounts[0], "teleinfo")
miner.start()
//窗口三:
cd $HOME/code/src/github.com/bif/go-bif
rm -rf data/node2/gbif
./gbif init genesis.json --datadir ./data/node2
./gbif --networkid 444 --datadir ./data/node2 --verbosity 4 --port 44021 --rpc --rpcaddr 0.0.0.0 --rpcport 44022 --rpcapi core,gb,admin,personal,db,net,txpool,bif --ws --wsaddr 0.0.0.0 --wsport 44023 --wsapi core,gb,admin,personal,db,net,txpool --rpccorsdomain '*' console
//进入gbif console之后执行:
personal.unlockAccount(core.accounts[0], "teleinfo")
miner.start()
//窗口四:
cd $HOME/code/src/github.com/bif/go-bif
./gbif init genesis.json --datadir ./data/node3
./gbif --networkid 444 --datadir ./data/node3 --verbosity 4 --port 44031 --rpc --rpcaddr 0.0.0.0 --rpcport 44032 --rpcapi core,gb,admin,personal,db,net,txpool,bif --ws --wsaddr 0.0.0.0 --wsport 44033 --wsapi core,gb,admin,personal,db,net,txpool --rpccorsdomain '*' console
//进入gbif console之后执行:
personal.unlockAccount(core.accounts[0], "teleinfo")
miner.start()