tendermint单节点、单机多节点实验总结

https://github.com/tendermint/tendermint/blob/master/docs/introduction/quick-start.md

参考以上github官方文档

1、部署环境,编译安装tendermint


 官方快捷脚本(要fq)


curl -L https://git.io/fFfOR | bash
source ~/.profile


方便无法翻墙,复制如下








#!/usr/bin/env bash

# XXX: this script is meant to be used only on a fresh Ubuntu 16.04 instance
# and has only been tested on Digital Ocean

# get and unpack golang
curl -O https://storage.googleapis.com/golang/go1.10.linux-amd64.tar.gz
tar -xvf go1.10.linux-amd64.tar.gz

apt install make

## move go and add binary to path
mv go /usr/local
echo "export PATH=\$PATH:/usr/local/go/bin" >> ~/.profile

## create the GOPATH directory, set GOPATH and put on PATH
mkdir goApps
echo "export GOPATH=/root/goApps" >> ~/.profile
echo "export PATH=\$PATH:\$GOPATH/bin" >> ~/.profile

source ~/.profile

## get the code and move into it
REPO=github.com/tendermint/tendermint
go get $REPO
cd $GOPATH/src/$REPO

## build
git checkout master
make get_tools
make get_vendor_deps
make install


2、单节点启动

初始化节点,会在~/.tendermint目录下生成节点配置文件,包括公私钥、config文件以及genesis文件,也可以用--home参数自己指定目录

tendermint init

启动节点  --proxy_app参数指定上层server应用,kvstore是官方自带的键值对存储应用


tendermint node --proxy_app=kvstore

发送交易测试

发送交易:

curl -s 'localhost:26657/broadcast_tx_commit?tx="abcd"' 

交易查询:

curl -s 'localhost:26657/abci_query?data="abcd"' 

发起自定义键值对交易:

curl -s 'localhost:26657/broadcast_tx_commit?tx="name=satoshi"' 

通过key查询交易:



curl -s 'localhost:26657/abci_query?data="name"'


3、单机多节点启动(疯狂踩坑

1、先总结坑

github给出的操作方式是多机的,因为要修改各个节点ip

网上有用docker做的,但是我不会用,写完文档就去学习docker去。。。

单机情况下各个节点的p2p和rpc监听端口是冲突的,要修改

参考了https://blog.csdn.net/weixin_37504041/article/details/92798787

  我一开始根据它这个做的,但是在添加验证节点时,在kvsore应用等待链接窗口出现验证节点链接后秒退的情况,我是用abci-cli kvstore命令手动打开的kvsore应用,然后让节点一个一个链接的,和官方给的文档对比,官方是在启动节点时通过--proxy_app命令链接的,猜想可能是因为这个。

  另外还有一个问题,可能会碰到不能链接到server的问题,网上看到有人自己写的server,出现端口和配置文件不匹配的问题,我自己遇到的问题是因为kvsore未启动,所以无法链接。然后我手启遇到上面碰到的问题,最后还是参照官方做的,过程如下。

2、单机多节点实验步骤总结

1、官方给出了测试节点,初始化方法:

     tendermint testnet

2、获取各个节点id,记到文档里,会用到。

     tendermint show_node_id --home ./mytestnet/node0            

     tendermint show_node_id --home ./mytestnet/node1

     tendermint show_node_id --home ./mytestnet/node2
 tendermint show_node_id --home ./mytestnet/node3 


3、官方文档这里因为是多机,所以执行了以下命令

                            

tendermint node --home ./mytestnet/node0 --proxy_app=kvstore --p2p.persistent_peers="ID1@IP1:26656,ID2@IP2:26656,ID3@IP3:26656,ID4@IP4:26656" tendermint node --home ./mytestnet/node1 --proxy_app=kvstore --p2p.persistent_peers="ID1@IP1:26656,ID2@IP2:26656,ID3@IP3:26656,ID4@IP4:26656" tendermint node --home ./mytestnet/node2 --proxy_app=kvstore --p2p.persistent_peers="ID1@IP1:26656,ID2@IP2:26656,ID3@IP3:26656,ID4@IP4:26656" tendermint node --home ./mytestnet/node3 --proxy_app=kvstore --p2p.persistent_peers="ID1@IP1:26656,ID2@IP2:26656,ID3@IP3:26656,ID4@IP4:26656"

       如果你多机执行,就把id换成我们记下每个node的对应id,和该node对应的ip即可

3、但是我们穷人只有一台电脑

重点来了

访问~/mytestnet,可以看到4个node的四个配置文档,四个都需要改,我们以一个为例

访问./node1/config,编辑config.toml

因为node0的rpc端口为26657,p2p端口为26656,所以我们把node1的rpc端口为36657,p2p端口为36656.同理

把node2的rpc端口为46657,p2p端口为46656,把node3的rpc端口为56657,p2p端口为56656

        [rpc]
        laddr = “tcp://127.0.0.1:36657”
        [p2p]
        laddr = “tcp://0.0.0.0:36656”        

然后我们看一下persistent_peers这个配置选项,它配置的是peer节点,官方给的这个是根据它这个测试忘这4个节点初始化好的,

如果是自己搭建是没有初始化的,我们需要自己添加。现在看下官方给的这个,@符号前面的node的id是它初始化好的四个节点id,不需

要修改,@后面的node1:26656我们要改成127.0.0.1:36656,对应node1的ip:p2p端口,因为我们是单节点验证,所以ip都

是127.0.0.1,P2P端口就分别是26656,36656,46656,56656.

        至此,实验环境配置完成,
tendermint node --home ./mytestnet/node0 --proxy_app=kvstore 

tendermint node --home ./mytestnet/node1 --proxy_app=kvstore

tendermint node --home ./mytestnet/node2 --proxy_app=kvstore

tendermint node --home ./mytestnet/node3 --proxy_app=kvstore 


启动4个节点,即可进行测试。

根据拜占庭共识,3f+1个节点可以运行f个恶意节点,所以在1个节点恶意情况下,可以完成共识出块。

交易命令同上文单节点

                      学习docker去了,告辞。 

    








发表评论 / Comment

用心评论~