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去了,告辞。
版权声明:《 tendermint单节点、单机多节点实验总结 》为admin原创文章,转载请注明出处!
最后编辑:2020-4-16 12:04:25