Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
share
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
黄刚
share
Commits
10b0abb5
Commit
10b0abb5
authored
Feb 21, 2019
by
Hugo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改联盟链网络搭建,创建私链网络搭建
parent
ac0488a6
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
799 additions
and
275 deletions
+799
-275
私链网络搭建.md
私链网络搭建.md
+251
-0
联盟链配置.md
联盟链配置.md
+548
-275
No files found.
私链网络搭建.md
0 → 100644
View file @
10b0abb5
[
TOC
]
[
TOC
]
# 1 私链网络搭建
## 1.1 安装Go环境,Git环境
检查是否已经安装了golang和git,如果显示如下内容表示都没有安装.
```
shell
~
$
go version
The program
'go'
is currently not installed. You can
install
it by typing:
sudo
apt
install
golang-go
~
$
git
The program
'git'
is currently not installed. You can
install
it by typing:
sudo
apt
install
git
```
-
Go环境安装参考
<a
href=
"https://chain.33.cn/document/81#1.1%20Go%20%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85"
>
这里
</a>
-
Git环境安装参考
<a
href=
"https://chain.33.cn/document/81#1.2%20Git%20%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85"
>
这里
</a>
## 1.2 下载plugin源码,编译生成可执行文件
代码下载参考
<a
href=
"https://chain.33.cn/document/81#2%20%E4%BB%A3%E7%A0%81%E4%B8%8B%E8%BD%BD"
>
这里
</a>
,执行结果演示如下:
```
shell
mkdir
-p
$GOPATH
/src/github.com/33cn
git clone https://github.com/33cn/plugin.git
$GOPATH
/src/github.com/33cn/
cd
plugin
make
```
编译成功后会在build目录下面生成chain33和chain33-cli两个可执行文件,将这两个文件拷贝到所有节点的某个目录下,如/home/ubuntu/chain33,该目录需要先创建好.
```
shell
mkdir
-p
/home/ubuntu/chain33
scp chain33 /home/ubuntu/chain33/
scp chain33 ubuntu@192.168.0.107:/home/ubuntu/chain33/
scp chain33 ubuntu@192.168.0.116:/home/ubuntu/chain33/
scp chain33 ubuntu@192.168.0.137:/home/ubuntu/chain33/
scp chain33-cli /home/ubuntu/chain33/
scp chain33-cli ubuntu@192.168.0.107:/home/ubuntu/chain33/
scp chain33-cli ubuntu@192.168.0.116:/home/ubuntu/chain33/
scp chain33-cli ubuntu@192.168.0.137:/home/ubuntu/chain33/
```
## 1.3 修改配置文件
将../raft/chain33.test.toml拷贝到当前目录,配置项解释参考
<a
href=
"https://chain.33.cn/document/123"
>
这里
</a>
```
shell
cp
../chain33.test.toml
.
```
我们的4个节点都是seed节点,所以将
[
p2p
]
中的isSeed设置为true,并将节点ip:port添加进去
[
p2p
]
中seeds和
[
consensus.sub.raft
]
中peersURL字符串并保存,注意这两项端口号不同.
```
plain
[p2p]
seeds=["192.168.0.105:13802","192.168.0.107:13802","192.168.0.116:13802","192.168.0.137:13802"]
isSeed=true
[consensus.sub.raft]
注:nodeID的值必须与配置文件所在节点的ip在peersURL中的顺序一致,从1开始,如配置文件在192.168.0.105上则nodeID=1,在192.168.0.107上则nodeID=2,以此类推
nodeID=x
peersURL="http://192.168.0.105:9021,http://192.168.0.107:9021,http://192.168.0.116:9021,http://192.168.0.137:9021"
```
分别将配置好的对应节点的配置文件chain33.testx.toml拷贝到对应节点的/home/ubuntu/chain33目录下
```
shell
scp chain33.test1.toml ubuntu@192.168.0.105:/home/ubuntu/chain33/
scp chain33.test2.toml ubuntu@192.168.0.107:/home/ubuntu/chain33/
scp chain33.test3.toml ubuntu@192.168.0.116:/home/ubuntu/chain33/
scp chain33.test4.toml ubuntu@192.168.0.137:/home/ubuntu/chain33/
```
## 1.4 在每个节点上启动程序
登录到各个节点输入如下命令,启动区块链程序:
```
shell
nohup
./chain33
-f
chain33.testx.toml
>>
log.out 2>&1 &
```
> 注:raft默认会间隔2分钟产生一个空区块.
## 1.5 通过chain33-cli查看节点运行情况
### 1.5.1 查看节点同步状态,如果返回true,表示区块已同步
```
shell
./chain33-cli net is_sync
```
### 1.5.2 发送交易测试区块链是否运行正常
-
首先创建钱包及账户,具体参考
<a
href=
"https://chain.33.cn/document/80#1.3%20%E5%88%9B%E5%BB%BA%E9%92%B1%E5%8C%85%E4%BB%A5%E5%8F%8A%E8%B4%A6%E6%88%B7"
>
这里
</a>
,执行结果演示如下:
```
shell
./chain33-cli account list
{
"wallets"
:
[
{
"acc"
:
{
"balance"
:
"0.0000"
,
"frozen"
:
"0.0000"
,
"addr"
:
"1EVnGWTrC6WcaGSU8D8cuXxkFcRTPJ1Tox"
}
,
"label"
:
"node award"
}
,
{
"acc"
:
{
"balance"
:
"100000000.0000"
,
"frozen"
:
"0.0000"
,
"addr"
:
"1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs"
}
,
"label"
:
"genesis"
}
,
{
"acc"
:
{
"balance"
:
"0.0000"
,
"frozen"
:
"0.0000"
,
"addr"
:
"1GqcbERCs872VCVb35znGk6jhYUsRc4rvm"
}
,
"label"
:
"test"
}
]
}
```
-
从genesis账户向test账户发送转账交易,具体参考
<a
href=
"https://chain.33.cn/document/80#1.4.2%20%E5%8F%91%E9%80%81%E8%BD%AC%E8%B4%A6%E4%BA%A4%E6%98%93"
>
这里
</a>
,执行结果演示如下:
```
shell
./chain33-cli send bty transfer
-a
1000
-t
1GqcbERCs872VCVb35znGk6jhYUsRc4rvm
-n
"first transfer"
-k
1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs
0xb545a3b856105476e0fc29901ca0d0d6af3fe0fa2b6466d6fb3c2e2bc0392f7d
```
-
查询交易结果,具体参考
<a
href=
"https://chain.33.cn/document/80#1.4.3%20%E6%9F%A5%E8%AF%A2%E4%BA%A4%E6%98%93%E7%BB%93%E6%9E%9C"
>
这里
</a>
,执行结果演示如下:
```
shell
./chain33-cli tx query
-s
0xb545a3b856105476e0fc29901ca0d0d6af3fe0fa2b6466d6fb3c2e2bc0392f7d
{
"txs"
:
[
{
"tx"
:
{
"execer"
:
"coins"
,
"payload"
:
{
"transfer"
:
{
"cointoken"
:
""
,
"amount"
:
"100000000000"
,
"note"
:
"first transfer"
,
"to"
:
"1GqcbERCs872VCVb35znGk6jhYUsRc4rvm"
}
,
"ty"
: 1
}
,
............
"fee"
:
"0.0010"
,
"expire"
: 1550732383,
"nonce"
: 7996280053722898816,
"to"
:
"1GqcbERCs872VCVb35znGk6jhYUsRc4rvm"
,
"from"
:
"1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs"
,
"hash"
:
"0xb545a3b856105476e0fc29901ca0d0d6af3fe0fa2b6466d6fb3c2e2bc0392f7d"
}
,
............
"height"
: 3,
"index"
: 0,
"blocktime"
: 1550732269,
"amount"
:
"1000.0000"
,
"fromaddr"
:
"1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs"
,
"actionname"
:
"transfer"
,
"assets"
:
[
{
"exec"
:
"coins"
,
"symbol"
:
"BTY"
,
"amount"
: 100000000000
}
]
}
]
}
```
-
查询节点信息,高度相同表示区块链工作正常.
```
shell
./chain33-cli net peer_info
{
"peers"
:
[
{
"addr"
:
"192.168.0.137"
,
"port"
: 13802,
"name"
:
"031a4b88621e4dbf948d8659a7ae4ae254ae881b12d6cf36955e30f6ad32df04df"
,
"mempoolSize"
: 0,
"self"
:
false
,
"header"
:
{
"version"
: 0,
"parentHash"
:
"0x4593f41033c40f4068c45ef1cdda309434a2a7f8095be3dfbfc695b83bc51c35"
,
"txHash"
:
"0x0000000000000000000000000000000000000000000000000000000000000000"
,
"stateHash"
:
"0xd031c20b2adb75dd42536333cf8d2eed7e6b8a20693971076a446106630a1178"
,
"height"
: 4,
"blockTime"
: 1550732390,
"txCount"
: 0,
"hash"
:
"0xb469c9f4e03e3bdff903f23515ab26f9cc3616542589f989f5fe04148ec8f6e8"
,
"difficulty"
: 0
}
}
,
{
"addr"
:
"192.168.0.116"
,
"port"
: 13802,
"name"
:
"03d7981d1c5f7e2497ddfb30b3910881748cddc900508488485e327f487d2075f0"
,
"mempoolSize"
: 0,
"self"
:
false
,
"header"
:
{
"version"
: 0,
"parentHash"
:
"0x4593f41033c40f4068c45ef1cdda309434a2a7f8095be3dfbfc695b83bc51c35"
,
"txHash"
:
"0x0000000000000000000000000000000000000000000000000000000000000000"
,
"stateHash"
:
"0xd031c20b2adb75dd42536333cf8d2eed7e6b8a20693971076a446106630a1178"
,
"height"
: 4,
"blockTime"
: 1550732390,
"txCount"
: 0,
"hash"
:
"0xb469c9f4e03e3bdff903f23515ab26f9cc3616542589f989f5fe04148ec8f6e8"
,
"difficulty"
: 0
}
}
,
{
"addr"
:
"192.168.0.107"
,
"port"
: 13802,
"name"
:
"02eaed19dd47a011022052ba9a6f923f60ff00b5bb338d558ea9ffad0ea122b584"
,
"mempoolSize"
: 0,
"self"
:
false
,
"header"
:
{
"version"
: 0,
"parentHash"
:
"0x4593f41033c40f4068c45ef1cdda309434a2a7f8095be3dfbfc695b83bc51c35"
,
"txHash"
:
"0x0000000000000000000000000000000000000000000000000000000000000000"
,
"stateHash"
:
"0xd031c20b2adb75dd42536333cf8d2eed7e6b8a20693971076a446106630a1178"
,
"height"
: 4,
"blockTime"
: 1550732390,
"txCount"
: 0,
"hash"
:
"0xb469c9f4e03e3bdff903f23515ab26f9cc3616542589f989f5fe04148ec8f6e8"
,
"difficulty"
: 0
}
}
,
{
"addr"
:
"192.168.0.105"
,
"port"
: 13802,
"name"
:
"039a54c0b5fa2d0de1bc263796acd08316e535af2c40568f41459d1804560cc612"
,
"mempoolSize"
: 0,
"self"
:
true
,
"header"
:
{
"version"
: 0,
"parentHash"
:
"0x4593f41033c40f4068c45ef1cdda309434a2a7f8095be3dfbfc695b83bc51c35"
,
"txHash"
:
"0x0000000000000000000000000000000000000000000000000000000000000000"
,
"stateHash"
:
"0xd031c20b2adb75dd42536333cf8d2eed7e6b8a20693971076a446106630a1178"
,
"height"
: 4,
"blockTime"
: 1550732390,
"txCount"
: 0,
"hash"
:
"0xb469c9f4e03e3bdff903f23515ab26f9cc3616542589f989f5fe04148ec8f6e8"
,
"difficulty"
: 0
}
}
]
}
```
联盟链配置.md
View file @
10b0abb5
以下是联盟链tendemint共识测试环境的配置及各参数含义的说明:
# 1 联盟链网络搭建
以下是联盟链tendemint共识测试环境的配置及各参数含义的说明:
# 1 联盟链网络搭建
```
bash
## 1.1 安装Go环境,Git环境,expect
Title
=
"local"
检查是否已经安装了golang和git,如果显示如下内容表示都没有安装.
TestNet
=
true
```
shell
FixTime
=
false
~
$
go version
The program
'go'
is currently not installed. You can
install
it by typing:
[
log]
sudo
apt
install
golang-go
# 日志级别,支持debug(dbug)/info/warn/error(eror)/crit
~
$
git
loglevel
=
"info"
The program
'git'
is currently not installed. You can
install
it by typing:
logConsoleLevel
=
"info"
sudo
apt
install
git
# 日志文件名,可带目录,所有生成的日志文件都放到此目录下
~
$
expect
logFile
=
"logs/chain33.log"
The program
'expect'
is currently not installed. You can
install
it by typing:
# 单个日志文件的最大值(单位:兆)
sudo
apt
install
expect
maxFileSize
=
300
```
# 最多保存的历史日志文件个数
maxBackups
=
100
# 最多保存的历史日志消息(单位:天)
maxAge
=
28
# 日志文件名是否使用本地时间(否则使用UTC时间)
localTime
=
true
# 历史日志文件是否压缩(压缩格式为gz)
compress
=
true
# 是否打印调用源文件和行号
callerFile
=
false
# 是否打印调用方法
callerFunction
=
false
[
blockchain]
# 缓存区块的个数
defCacheSize
=
128
# 同步区块时一次最多申请获取的区块个数
maxFetchBlockNum
=
128
# 向对端节点请求同步区块的时间间隔
timeoutSeconds
=
5
# 使用的数据库类型
driver
=
"leveldb"
# 数据库文件目录
dbPath
=
"datadir"
# 数据库缓存大小
dbCache
=
64
# 是否为单节点,联盟链至少4个节点
singleMode
=
fase
# 同步区块批量写数据库时,是否需要立即写磁盘,非固态硬盘的电脑可以设置为false,以提高性能
batchsync
=
false
# 是否记录添加或者删除区块的序列,若节点作为主链节点,为平行链节点提供服务,需要设置为true
isRecordBlockSequence
=
true
# 是否为平行链节点
isParaChain
=
false
enableTxQuickIndex
=
false
-
Go环境安装参考
<a
href=
"https://chain.33.cn/document/81#1.1%20Go%20%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85"
>
这里
</a>
-
Git环境安装参考
<a
href=
"https://chain.33.cn/document/81#1.2%20Git%20%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85"
>
这里
</a>
-
expect安装
```
shell
sudo
apt
install
expect
```
验证expect是否安装成功
```
shell
~
$
expect
-f
expect: option requires an argument
--
'f'
usage: expect
[
-div
]
[
-c
cmds]
[[
-f
]
cmdfile]
[
args]
```
## 1.2 下载plugin源码,编译生成可执行文件
代码下载参考
<a
href=
"https://chain.33.cn/document/81#2%20%E4%BB%A3%E7%A0%81%E4%B8%8B%E8%BD%BD"
>
这里
</a>
,执行结果演示如下:
```
shell
mkdir
-p
$GOPATH
/src/github.com/33cn
git clone https://github.com/33cn/plugin.git
$GOPATH
/src/github.com/33cn/
cd
plugin
make
```
编译成功后会在build目录下面生成chain33和chain33-cli两个可执行文件
## 1.3 生成4节点配置文件
tendermint联盟链的运行除了chain33的配置文件外,还需要两个配置文件genesis.json和priv_validator.json.
> genesis.json用于配置区块链的基本信息,包括创世区块时间,链的id,共识验证节点(validator)的公钥信息,权值,名字等.内容形式如下:
```
json
{
"genesis_time"
:
"0001-01-01T00:00:00Z"
,
"chain_id"
:
"test-chain-Ep9EcD"
,
"validators"
:
[
{
"pub_key"
:
{
"type"
:
"ed25519"
,
"data"
:
"220ACBE680DF2473A0CB48987A00FCC1812F106A7390BE6B8E2D31122C992A19"
},
"power"
:
10
,
"name"
:
""
}
],
"app_hash"
:
""
}
```
> priv_validator.json用于配置共识验证节点(validator)相关信息,包括地址,公钥,私钥,最近一次共识的高度,轮数,阶段,内容形式如下:
```
json
{
"address"
:
"02A13174B92727C4902DB099E51A3339F48BD45E"
,
"pub_key"
:
{
"type"
:
"ed25519"
,
"data"
:
"220ACBE680DF2473A0CB48987A00FCC1812F106A7390BE6B8E2D31122C992A19"
},
"last_height"
:
0
,
"last_round"
:
0
,
"last_step"
:
0
,
"priv_key"
:
{
"type"
:
"ed25519"
,
"data"
:
"B3DC4C0725884EBB7264B92F1D8D37584A64ADE1799D997EC64B4FE3973E08DE220ACBE680DF2473A0CB48987A00FCC1812F106A7390BE6B8E2D31122C992A19"
}
}
```
为方便用户使用,可以通过生成程序自动生成指定共识验证节点数量的配置文件.
-
编译生成pvfile
```
shell
cd
plugin/consensus/tendermint/tools/
go build pvfile.go
```
-
执行生成程序,按提示输入4,生成4节点的配置文件
```
shell
./pvfile
Please enter the number of key file:4
```
-
查看genesis.json,priv_validator_x.json(x:0-3)是否生成
```
shell
ls
auto_deploy.sh genesis.json nonePerf.go priv_validator_0.json priv_validator_1.json priv_validator_2.json priv_validator_3.json pvfile pvfile.go
```
## 1.4 发送相关文件到指定节点
### 1.4.1 修改配置文件
配置项解释参考
<a
href=
"https://chain.33.cn/document/123"
>
这里
</a>
-
将../tendermint/chain33.test.toml拷贝到当前目录,
```
shell
cp
../chain33.test.toml
.
```
-
这里我们的4个节点都是seed节点,所以将
[
p2p
]
中的isSeed设置为true,并将节点ip:port添加进去
[
p2p
]
中seeds和
[
consensus.sub.tendermint
]
中validatorNodes数组并保存,注意这两项端口号不同.
```
plain
[p2p]
[p2p]
# P2P服务监听端口号
seeds=["192.168.0.105:13802","192.168.0.107:13802","192.168.0.116:13802","192.168.0.137:13802"]
port
=
13802
isSeed=true
# 种子节点,格式为ip:port,多个节点以逗号分隔,如seeds=["10.0.0.1:13802","10.0.0.2:13802","10.0.0.3:13802"]
seeds
=[]
# 是否启动P2P服务
enable
=
true
# 是否为种子节点
isSeed
=
false
# 是否作为服务端,对外提供服务
serverStart
=
true
# 是否使用内置的种子节点
innerSeedEnable
=
false
# 是否使用Github获取种子节点
useGithub
=
false
# 最多的接入节点个数
innerBounds
=
300
# 使用的数据库类型
driver
=
"leveldb"
# 数据库文件目录
dbPath
=
"datadir/addrbook"
# 数据库缓存大小
dbCache
=
4
# GRPC请求日志文件
grpcLogFile
=
"grpc33.log"
[
rpc]
# jrpc绑定地址
jrpcBindAddr
=
"localhost:8801"
# grpc绑定地址
grpcBindAddr
=
"localhost:8802"
# 白名单列表,允许访问的IP地址,默认是“*”,允许所有IP访问
whitelist
=[
"127.0.0.1"
]
# jrpc方法请求白名单,默认是“*”,允许访问所有RPC方法
jrpcFuncWhitelist
=[
"*"
]
# jrpc方法请求黑名单,禁止调用黑名单里配置的rpc方法,一般和白名单配合使用,默认是空
# jrpcFuncBlacklist=["xxxx"]
# grpc方法请求白名单,默认是“*”,允许访问所有RPC方法
grpcFuncWhitelist
=[
"*"
]
# grpc方法请求黑名单,禁止调用黑名单里配置的rpc方法,一般和白名单配合使用,默认是空
# grpcFuncBlacklist=["xxx"]
# 是否开启https
enableTLS
=
false
# 证书文件,证书和私钥文件可以用cli工具生成
certFile
=
"cert.pem"
# 私钥文件
keyFile
=
"key.pem"
[
mempool]
# mempool队列名称,可配,timeline,score,price
name
=
"timeline"
# mempool缓存容量大小,默认10240
poolCacheSize
=
10240
# 最小得交易手续费用,这个没有默认值,必填,一般是100000
minTxFee
=
100000
# 每个账户在mempool中得最大交易数量,默认100
maxTxNumPerAccount
=
10000
# timeline 是默认的先来先进的按时间排序
[
mempool.sub.timeline]
# mempool缓存容量大小,默认10240
poolCacheSize
=
10240
# 最小得交易手续费用,这个没有默认值,必填,一般是100000
minTxFee
=
100000
# 每个账户在mempool中得最大交易数量,默认100
maxTxNumPerAccount
=
10000
# score是分数队列模式(分数=常量a*手续费/交易字节数-常量b*时间*定量c,按分数排队,高的优先,常量a,b和定量c可配置),按分数来排序
[
mempool.sub.score]
# mempool缓存容量大小,默认10240
poolCacheSize
=
10240
# 最小得交易手续费用,这个没有默认值,必填,一般是100000
minTxFee
=
100000
# 每个账户在mempool中得最大交易数量,默认100
maxTxNumPerAccount
=
10000
# 时间占价格比例
timeParam
=
1
# 手续费相对于时间的一个合适的常量,取当前unix时间戳前四位数,排队时手续费高1e-5的分数~=快1s的分数
priceConstant
=
1544
# 常量比例
pricePower
=
1
# price是价格队列模式(价格=手续费/交易字节数,价格高者优先,同价则时间早优先)
[
mempool.sub.price]
# mempool缓存容量大小,默认10240
poolCacheSize
=
10240
# 最小得交易手续费用,这个没有默认值,必填,一般是100000
minTxFee
=
100000
# 每个账户在mempool中得最大交易数量,默认100
maxTxNumPerAccount
=
10000
[
consensus]
#共识名
name
=
"tendermint"
[
mver.consensus]
#基金账户地址
fundKeyAddr
=
"1BQXS6TxaYYG5mADaWij4AxhZZUTpw95a5"
#用户回报
coinReward
=
18
#发展基金回报
coinDevFund
=
12
#ticket价格
ticketPrice
=
10000
#挖矿难度
powLimitBits
=
"0x1f00ffff"
retargetAdjustmentFactor
=
4
futureBlockTime
=
16
#ticket冻结时长
ticketFrozenTime
=
5
#5s only for test
ticketWithdrawTime
=
10
#10s only for test
ticketMinerWaitTime
=
2
#2s only for test
#区块包含最多交易数
maxTxNumber
=
1600
#160
targetTimespan
=
2304
targetTimePerBlock
=
16
[consensus.sub.tendermint]
[consensus.sub.tendermint]
#创世交易地址
validatorNodes=["192.168.0.105:46656","192.168.0.107:46656","192.168.0.116:46656","192.168.0.137:46656"]
genesis
=
"1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs"
```
#创世区块时间(UTC时间)
genesisBlockTime
=
1514533394
#获取交易间隔时长,以下时长单位均为毫秒
timeoutTxAvail
=
1000
#等待proposal超时基准时长
timeoutPropose
=
3000
#每轮延长等待proposal的时长
timeoutProposeDelta
=
500
#等待pre-vote超时基准时长
timeoutPrevote
=
1000
#每轮延长等待pre-vote的时长
timeoutPrevoteDelta
=
500
#等待pre-commit超时基准时长
timeoutPrecommit
=
1000
#每轮延长等待pre-commit的时长
timeoutPrecommitDelta
=
500
#收到对一个区块的2/3pre-commits后,等待落后者投票超时时长,超时后将启动新高度流程
timeoutCommit
=
1000
#是否在收到所有pre-commits,还未达到超时等待时长时,取消等待,如果为true,将启动新高度流程;如果为false,等到超时时才启动新高度流程
skipTimeoutCommit
=
true
#是否允许创建空区块
createEmptyBlocks
=
false
#创建空区块的时间间隔,如果大于0则认为允许出空块
createEmptyBlocksInterval
=
0
#共识节点,格式为ip:port,多个节点以逗号分隔,为了拜占庭容错,节点数至少为4个,如validatorNodes=["10.0.0.1:46656","10.0.0.2:46656","10.0.0.3:46656","10.0.0.4:46656"]
validatorNodes
=[]
[
store]
# 数据存储格式名称,目前支持mavl,kvdb,kvmvcc,mpt
name
=
"mavl"
# 数据存储驱动类别,目前支持leveldb,goleveldb,memdb,gobadgerdb,ssdb,pegasus
driver
=
"leveldb"
# 数据文件存储路径
dbPath
=
"datadir/mavltree"
# Cache大小
dbCache
=
128
# 数据库版本
localdbVersion
=
"1.0.0"
[
store.sub.mavl]
# 是否使能mavl加前缀
enableMavlPrefix
=
false
# 是否使能MVCC,如果mavl中enableMVCC为true此处必须为true
enableMVCC
=
false
# 是否使能mavl数据裁剪
enableMavlPrune
=
false
# 裁剪高度间隔
pruneHeight
=
10000
[
wallet]
# 交易发送最低手续费,单位0.00000001BTY(1e-8),默认100000,即0.001BTY
minFee
=
100000
# walletdb驱动名,支持leveldb/memdb/gobadgerdb/ssdb/pegasus
driver
=
"leveldb"
# walletdb路径
dbPath
=
"wallet"
# walletdb缓存大小
dbCache
=
16
# 钱包发送交易签名方式
signType
=
"secp256k1"
[
wallet.sub.ticket]
# 是否关闭ticket自动挖矿,默认false
minerdisable
=
false
# 允许购买ticket挖矿的白名单地址,默认配置“*”,允许所有地址购买
minerwhitelist
=[
"*"
]
[
exec
]
#执行器执行是否免费
isFree
=
false
#执行器执行所需最小费用,低于Mempool和Wallet设置的MinFee,在minExecFee = 0 的情况下,isFree = true才会生效
minExecFee
=
100000
#是否开启stat插件
enableStat
=
false
#是否开启MVCC插件
enableMVCC
=
false
alias
=[
"token1:token"
,
"token2:token"
,
"token3:token"
]
[
exec.sub.token]
#是否保存token交易信息
saveTokenTxList
=
true
#token审批人地址
tokenApprs
=
[
"1Bsg9j6gW83sShoee1fZAt9TkUjcrCgA9S"
,
"1Q8hGLfoGe63efeWa8fJ4Pnukhkngt6poK"
,
"1LY8GFia5EiyoTodMLfkB5PHNNpXRqxhyB"
,
"1GCzJDS6HbgTQ2emade7mEJGGWFfA15pS9"
,
"1JYB8sxi4He5pZWHCd3Zi2nypQ4JMB6AxN"
,
"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
,
]
[
exec.sub.cert]
### 1.4.1 发送相同文件到各节点
# 是否启用证书验证和签名
-
拷贝chain33,chain33-cli到当前目录
enable
=
false
# 加密文件路径
```
shell
cryptoPath
=
"authdir/crypto"
cp
~/work/src/github.com/33cn/plugin/build/chain33
.
# 带证书签名类型,支持"auth_ecdsa", "auth_sm2"
cp
~/work/src/github.com/33cn/plugin/build/chain33-cli
.
signType
=
"auth_ecdsa"
```
[
exec.sub.relay]
-
执行auto_deploy.sh,发送chain33 chain33-cli genesis.json chain33.test.toml四个文件到指定节点.
#relay执行器保存BTC头执行权限地址
genesis
=
"14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
```
shell
./auto_deploy.sh
[
exec.sub.manage]
#按提示输入要发送的文件
#manage执行器超级管理员地址
Please input the file:
(
such as
"chain33 chain33-cli genesis.json"
...
)
superManager
=[
chain33 chain33-cli genesis.json chain33.test.toml
"1Bsg9j6gW83sShoee1fZAt9TkUjcrCgA9S"
,
#第一次采用1方法,然后会将本次选项保存到config file,下一次可以选择2
"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
,
Which way to get environment? 1
)
Input 2
)
Config file
"1Q8hGLfoGe63efeWa8fJ4Pnukhkngt6poK"
1
#按要求输入目标机器的用户名,密码和目录,如果目录不存在需要先创建.
Please input the username, password and path of the destination:
(
such as
"ubuntu 123456 /home/ubuntu/chain33"
)
ubuntu 123456 /home/ubuntu/chain33
#输入目标机器的ip地址列表,注意:该列表中的机器都将使用刚才配置的用户名和密码登录
Please input ip list of your destination:
(
such as
"192.168.3.143 192.168.3.144 192.168.3.145 192.168.3.146"
)
192.168.0.105 192.168.0.107 192.168.0.116 192.168.0.137
```
### 1.4.2 发送不同的priv_validator.json到各节点
-
分别将当前目录下的priv_validator_x.json拷贝到对应节点的/home/ubuntu/chain33目录下,并命名为priv_validator.json
```
shell
scp ./priv_validator_0.json ubuntu@192.168.0.105:/home/ubuntu/chain33/priv_validator.json
scp ./priv_validator_1.json ubuntu@192.168.0.107:/home/ubuntu/chain33/priv_validator.json
scp ./priv_validator_2.json ubuntu@192.168.0.116:/home/ubuntu/chain33/priv_validator.json
scp ./priv_validator_3.json ubuntu@192.168.0.137:/home/ubuntu/chain33/priv_validator.json
```
## 1.5 在每个节点上启动程序
-
登录到各个节点输入如下命令,启动区块链程序:
```
shell
nohup
./chain33
-f
chain33.test.toml
>>
log.out 2>&1 &
```
## 1.6 通过chain33-cli查看节点运行情况
### 1.6.1 查看节点区块同步状态,如果返回true,表示区块已同步
```
shell
./chain33-cli net is_sync
```
### 1.6.2 发送交易测试区块链是否运行正常
-
首先创建钱包及账户,具体参考
<a
href=
"https://chain.33.cn/document/80#1.3%20%E5%88%9B%E5%BB%BA%E9%92%B1%E5%8C%85%E4%BB%A5%E5%8F%8A%E8%B4%A6%E6%88%B7"
>
这里
</a>
,执行结果演示如下:
```
shell
./chain33-cli account list
{
"wallets"
:
[
{
"acc"
:
{
"balance"
:
"0.0000"
,
"frozen"
:
"0.0000"
,
"addr"
:
"1JfGzjz4ikQWuLyDGPL8DP9hVNUgDXaDLY"
}
,
"label"
:
"node award"
}
,
{
"acc"
:
{
"balance"
:
"100000000.0000"
,
"frozen"
:
"0.0000"
,
"addr"
:
"1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs"
}
,
"label"
:
"genesis"
}
,
{
"acc"
:
{
"balance"
:
"0.0000"
,
"frozen"
:
"0.0000"
,
"addr"
:
"1EqCTLRGPXYHDDUBrVUuoeqQyTnpSAMgXM"
}
,
"label"
:
"test"
}
]
}
```
-
从genesis账户向test账户发送转账交易,具体参考
<a
href=
"https://chain.33.cn/document/80#1.4.2%20%E5%8F%91%E9%80%81%E8%BD%AC%E8%B4%A6%E4%BA%A4%E6%98%93"
>
这里
</a>
,执行结果演示如下:
```
shell
./chain33-cli send bty transfer
-a
1000
-t
1EqCTLRGPXYHDDUBrVUuoeqQyTnpSAMgXM
-n
"first transfer"
-k
1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs
0x040224c373b189ccd7a6e2c5a123a5a9f743e4905ad112f0cf5957145db7bdd4
```
-
查询交易结果,具体参考
<a
href=
"https://chain.33.cn/document/80#1.4.3%20%E6%9F%A5%E8%AF%A2%E4%BA%A4%E6%98%93%E7%BB%93%E6%9E%9C"
>
这里
</a>
,执行结果演示如下:
```
shell
./chain33-cli tx query
-s
0x040224c373b189ccd7a6e2c5a123a5a9f743e4905ad112f0cf5957145db7bdd4
{
"tx"
:
{
"execer"
:
"coins"
,
"payload"
:
{
"transfer"
:
{
"cointoken"
:
""
,
"amount"
:
"100000000000"
,
"note"
:
"first transfer"
,
"to"
:
"1EqCTLRGPXYHDDUBrVUuoeqQyTnpSAMgXM"
}
,
"ty"
: 1
}
,
.........
"fee"
:
"0.0010"
,
"expire"
: 1550563096,
"nonce"
: 3159930318345275859,
"to"
:
"1EqCTLRGPXYHDDUBrVUuoeqQyTnpSAMgXM"
,
"from"
:
"1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs"
,
"hash"
:
"0x040224c373b189ccd7a6e2c5a123a5a9f743e4905ad112f0cf5957145db7bdd4"
}
,
............
"height"
: 1,
"index"
: 1,
"blocktime"
: 1550562976,
"amount"
:
"1000.0000"
,
"fromaddr"
:
"1CbEVT9RnM5oZhWMj4fxUrJX94VtRotzvs"
,
"actionname"
:
"transfer"
,
"assets"
:
[
{
"exec"
:
"coins"
,
"symbol"
:
"BTY"
,
"amount"
: 100000000000
}
]
}
```
### 1.6.3 查看节点共识同步状态,如果返回true,表示该节点共识同步正常
```
shell
./chain33-cli valnode is_sync
```
### 1.6.4 查看节点当前状态,包括地址,公钥,权值,当前累计值.
> 注:累计值最大的节点获得下一高度或下一轮的提议和打包权,若多个节点最大累计值相等,则地址字典顺序靠前的节点获得权限.
```
shell
./chain33-cli valnode nodes
[
{
"Address"
:
"N8YIgjPnD9FlSYhJcaverfpJ8Ek="
,
"PubKey"
:
"DYz9SWwgwU/I8KFVgzMYyvdXptlEGMAAuUVLGhcqJ+E="
,
"VotingPower"
: 10,
"Accum"
:
-20
}
,
{
"Address"
:
"WuW4f/7jm6UGlRJ4DXCv4Ryt5Yc="
,
"PubKey"
:
"09Fpp0+3uetv//fGSOG3xKSw6ZIsxLSmsBhcDTUelIQ="
,
"VotingPower"
: 10,
"Accum"
:
-20
}
,
{
"Address"
:
"dA6vreo61lcoX6UCzfn8uriiYgM="
,
"PubKey"
:
"wk5aSXzS3m6L0ZeL0jA56oFnxPHMqLsX85RfFT3Boxc="
,
"VotingPower"
: 10,
"Accum"
: 20
}
,
{
"Address"
:
"dUxa2Rzk4FtJo/KP+WDNdOcfHvY="
,
"PubKey"
:
"JvVmZNQsyjTMWfjbPDWj//obpmK/WwgOc3Q4YSudPPE="
,
"VotingPower"
: 10,
"Accum"
: 20
}
]
]
```
### 1.6.5 查询节点状态
```
shell
./chain33-cli net peer_info
{
"peers"
:
[
{
"addr"
:
"192.168.0.137"
,
"port"
: 13802,
"name"
:
"035bd8a1f1aba3ef53cac434530d611d5e8a9527980ab3a5410c5f2fddb1a83194"
,
"mempoolSize"
: 0,
"self"
:
false
,
"header"
:
{
"version"
: 0,
"parentHash"
:
"0xc8799befacd9709a5f4dfa68d6fd53a37ccce83352997a132adfed7f46747757"
,
"txHash"
:
"0xd7dabfb237a791aa9d907d10f4e2d8578943b407a0af2443a7ac50492afcd1ec"
,
"stateHash"
:
"0xafec60a0a5931b30ddd0cf849fea1a72ef8687d41030a3aa8adb83c947f78129"
,
"height"
: 1,
"blockTime"
: 1550562976,
"txCount"
: 2,
"hash"
:
"0x9ebd6aebcb764d6d381a948ff4534edd7e3fa214a4361a43311b9bf880be2c08"
,
"difficulty"
: 0
}
}
,
{
"addr"
:
"192.168.0.107"
,
"port"
: 13802,
"name"
:
"0294cfe779fbf34225ec89d278f80658d93a4e82075a4ca1ec0b4456b63ecbc6f1"
,
"mempoolSize"
: 0,
"self"
:
false
,
"header"
:
{
"version"
: 0,
"parentHash"
:
"0xc8799befacd9709a5f4dfa68d6fd53a37ccce83352997a132adfed7f46747757"
,
"txHash"
:
"0xd7dabfb237a791aa9d907d10f4e2d8578943b407a0af2443a7ac50492afcd1ec"
,
"stateHash"
:
"0xafec60a0a5931b30ddd0cf849fea1a72ef8687d41030a3aa8adb83c947f78129"
,
"height"
: 1,
"blockTime"
: 1550562976,
"txCount"
: 2,
"hash"
:
"0x9ebd6aebcb764d6d381a948ff4534edd7e3fa214a4361a43311b9bf880be2c08"
,
"difficulty"
: 0
}
}
,
{
"addr"
:
"192.168.0.116"
,
"port"
: 13802,
"name"
:
"0373d41c98e896bebfe37f7e831e848da1889f88574a7622d112511caf07c7d299"
,
"mempoolSize"
: 0,
"self"
:
false
,
"header"
:
{
"version"
: 0,
"parentHash"
:
"0xc8799befacd9709a5f4dfa68d6fd53a37ccce83352997a132adfed7f46747757"
,
"txHash"
:
"0xd7dabfb237a791aa9d907d10f4e2d8578943b407a0af2443a7ac50492afcd1ec"
,
"stateHash"
:
"0xafec60a0a5931b30ddd0cf849fea1a72ef8687d41030a3aa8adb83c947f78129"
,
"height"
: 1,
"blockTime"
: 1550562976,
"txCount"
: 2,
"hash"
:
"0x9ebd6aebcb764d6d381a948ff4534edd7e3fa214a4361a43311b9bf880be2c08"
,
"difficulty"
: 0
}
}
,
{
"addr"
:
"192.168.0.105"
,
"port"
: 13802,
"name"
:
"03da6dec2f03958caa104fa79c58c49d95c343118b49ab959791d144d7b69db71b"
,
"mempoolSize"
: 0,
"self"
:
true
,
"header"
:
{
"version"
: 0,
"parentHash"
:
"0xc8799befacd9709a5f4dfa68d6fd53a37ccce83352997a132adfed7f46747757"
,
"txHash"
:
"0xd7dabfb237a791aa9d907d10f4e2d8578943b407a0af2443a7ac50492afcd1ec"
,
"stateHash"
:
"0xafec60a0a5931b30ddd0cf849fea1a72ef8687d41030a3aa8adb83c947f78129"
,
"height"
: 1,
"blockTime"
: 1550562976,
"txCount"
: 2,
"hash"
:
"0x9ebd6aebcb764d6d381a948ff4534edd7e3fa214a4361a43311b9bf880be2c08"
,
"difficulty"
: 0
}
}
]
}
```
### 1.6.6 查询某高度的共识信息
```
shell
./chain33-cli valnode info
-t
1
{
#当前高度(此处指高度为1)commit的情况
"SeenCommit"
:
{
"BlockID"
:
{
"Hash"
:
"GjOepWMTxSLZeZ196ciNiS4e3kU="
}
,
#提交Precommit的情况
"Precommits"
:
[
{
"ValidatorAddress"
:
"N8YIgjPnD9FlSYhJcaverfpJ8Ek="
,
"Height"
: 1,
"Timestamp"
: 1550562976822045939,
"Type"
: 2,
"BlockID"
:
{
"Hash"
:
"GjOepWMTxSLZeZ196ciNiS4e3kU="
}
,
"Signature"
:
"PPw6MYBO7FMgHOWheKVZzxQ1slPizzCq+aivr+cqqnrjKoQv4sLF0OhRiNiGSP9FBQEo/cKFR3laevuwo5SxBA=="
}
,
{
"ValidatorAddress"
:
"WuW4f/7jm6UGlRJ4DXCv4Ryt5Yc="
,
"ValidatorIndex"
: 1,
"Height"
: 1,
"Timestamp"
: 1550562976830780017,
"Type"
: 2,
"BlockID"
:
{
"Hash"
:
"GjOepWMTxSLZeZ196ciNiS4e3kU="
}
,
"Signature"
:
"Gz8yGVSa3TLOaETLpZuqlt5t6ue8EOevXcLNgGMk2A9OoNOhDjGQ81tMyif1r1utnuFZ5Dr2tOV6FUUV80eQBw=="
}
,
{}
,
{
"ValidatorAddress"
:
"dUxa2Rzk4FtJo/KP+WDNdOcfHvY="
,
"ValidatorIndex"
: 3,
"Height"
: 1,
"Timestamp"
: 1550562949920064092,
"Type"
: 2,
"BlockID"
:
{
"Hash"
:
"GjOepWMTxSLZeZ196ciNiS4e3kU="
}
,
"Signature"
:
"9L409a9Gu2tf+ahkPDxDgGGY1z7pGiS6RO2FNwLMmEh3I//nn9d2OyK08TKbd5RXwm0+3es3I4zw2ulamKCSBQ=="
}
]
}
,
#上一高度(此处指高度为0)commit的情况
"LastCommit"
:
{}
,
#当前共识状态
"State"
:
{
"ChainID"
:
"chain33-l5m0ho"
,
"LastBlockHeight"
: 1,
"LastBlockTotalTx"
: 1,
"LastBlockTime"
: 1550562976729168766,
#当前共识验证节点情况
"Validators"
:
{
"Validators"
:
[
{
"Address"
:
"N8YIgjPnD9FlSYhJcaverfpJ8Ek="
,
"PubKey"
:
"DYz9SWwgwU/I8KFVgzMYyvdXptlEGMAAuUVLGhcqJ+E="
,
"VotingPower"
: 10,
"Accum"
:
-20
}
,
{
"Address"
:
"WuW4f/7jm6UGlRJ4DXCv4Ryt5Yc="
,
"PubKey"
:
"09Fpp0+3uetv//fGSOG3xKSw6ZIsxLSmsBhcDTUelIQ="
,
"VotingPower"
: 10,
"Accum"
:
-20
}
,
{
"Address"
:
"dA6vreo61lcoX6UCzfn8uriiYgM="
,
"PubKey"
:
"wk5aSXzS3m6L0ZeL0jA56oFnxPHMqLsX85RfFT3Boxc="
,
"VotingPower"
: 10,
"Accum"
: 20
}
,
{
"Address"
:
"dUxa2Rzk4FtJo/KP+WDNdOcfHvY="
,
"PubKey"
:
"JvVmZNQsyjTMWfjbPDWj//obpmK/WwgOc3Q4YSudPPE="
,
"VotingPower"
: 10,
"Accum"
: 20
}
]
,
#下一高度(此处指高度为2)提议者,Accum为选择提议者时计算后的结果,用于下次选择时比较
"Proposer"
:
{
"Address"
:
"WuW4f/7jm6UGlRJ4DXCv4Ryt5Yc="
,
"PubKey"
:
"09Fpp0+3uetv//fGSOG3xKSw6ZIsxLSmsBhcDTUelIQ="
,
"VotingPower"
: 10,
"Accum"
:
-20
}
}
,
#新生成高度(此处指高度为1)共识验证节点情况
"LastValidators"
:
{
"Validators"
:
[
{
"Address"
:
"N8YIgjPnD9FlSYhJcaverfpJ8Ek="
,
"PubKey"
:
"DYz9SWwgwU/I8KFVgzMYyvdXptlEGMAAuUVLGhcqJ+E="
,
"VotingPower"
: 10,
"Accum"
:
-30
}
,
{
"Address"
:
"WuW4f/7jm6UGlRJ4DXCv4Ryt5Yc="
,
"PubKey"
:
"09Fpp0+3uetv//fGSOG3xKSw6ZIsxLSmsBhcDTUelIQ="
,
"VotingPower"
: 10,
"Accum"
: 10
}
,
{
"Address"
:
"dA6vreo61lcoX6UCzfn8uriiYgM="
,
"PubKey"
:
"wk5aSXzS3m6L0ZeL0jA56oFnxPHMqLsX85RfFT3Boxc="
,
"VotingPower"
: 10,
"Accum"
: 10
}
,
{
"Address"
:
"dUxa2Rzk4FtJo/KP+WDNdOcfHvY="
,
"PubKey"
:
"JvVmZNQsyjTMWfjbPDWj//obpmK/WwgOc3Q4YSudPPE="
,
"VotingPower"
: 10,
"Accum"
: 10
}
]
,
#新生成高度(此处指高度为1)提议者,Accum为选择提议者时计算后的结果,用于下次选择时比较
"Proposer"
:
{
"Address"
:
"N8YIgjPnD9FlSYhJcaverfpJ8Ek="
,
"PubKey"
:
"DYz9SWwgwU/I8KFVgzMYyvdXptlEGMAAuUVLGhcqJ+E="
,
"VotingPower"
: 10,
"Accum"
:
-30
}
}
,
#最近一次共识验证节点变更高度
"LastHeightValidatorsChanged"
: 1,
#共识参数
"ConsensusParams"
:
{
"BlockSize"
:
{
"MaxBytes"
: 22020096,
"MaxTxs"
: 100000,
"MaxGas"
:
-1
}
,
"TxSize"
:
{
"MaxBytes"
: 10240,
"MaxGas"
:
-1
}
,
"BlockGossip"
:
{
"BlockPartSizeBytes"
: 65536
}
,
"EvidenceParams"
:
{
"MaxAge"
: 100000
}
}
,
#最近一次共识参数变更高度
"LastHeightConsensusParamsChanged"
: 1
}
,
#新生成高度(此处指高度为1)的提议信息
"Proposal"
:
{
"height"
: 1,
"timestamp"
: 1550562976729939670,
"POLRound"
:
-1
,
"POLBlockID"
:
{}
,
"signature"
:
"1YieRBNBu0L1vWspJAj7/Hd1cDLTvjKvghLoX1mIvKmzkqrT3UehfPWtY4p3UxgVngFz256Zz6pbeZIAowRLDA=="
,
"blockhash"
:
"GjOepWMTxSLZeZ196ciNiS4e3kU="
}
,
#新生成高度(此处指高度为1)区块信息
"block"
:
{
"header"
:
{
"chainID"
:
"chain33-l5m0ho"
,
"height"
: 1,
"time"
: 1550562976729168766,
"numTxs"
: 1,
"lastBlockID"
:
{}
,
"totalTxs"
: 1,
"validatorsHash"
:
"t+4pc+omQBGNlI4ZkoIgKRkjxff8TbljwDKKWirwVvc="
,
"consensusHash"
:
"/GlQqG9MV+dJNFIoxo0NOSvVUDU="
}
,
"evidence"
:
{}
,
#上一高度(此处指高度为0)commit信息
"lastCommit"
:
{}
,
#新生成高度(此处指高度为1)提议节点地址
"proposerAddr"
:
"N8YIgjPnD9FlSYhJcaverfpJ8Ek="
}
}
```
```
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment