Commit 10b0abb5 authored by Hugo's avatar Hugo

修改联盟链网络搭建,创建私链网络搭建

parent ac0488a6
[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
}
}
]
}
```
以下是联盟链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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment