# Tendermint 快速入门

# 概述

本文是快速入门指南。如果您对Tendermint了解尚不清晰,但想立即运行起来,请继续阅读。

# 安装

# 快速安装

在全新的Ubuntu 16.04电脑上安装Tendermint,请使用脚本

警告:不要在本地电脑运行此脚本。

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

本脚本同样有助于下文的集群部署。

# 手动安装

手动安装方式,请参阅安装Tendermint

# 初始化

运行

tendermint init
1

将为单个本地节点创建所需要的文件。

这些文件可以在$HOME/.tendermint中找到:

$ ls $HOME/.tendermint

config  data

$ ls $HOME/.tendermint/config/

config.toml  genesis.json  node_key.json  priv_validator.json
1
2
3
4
5
6
7

对于单个本地节点,配置已完成。 对于如何配置集群,后文会进一步介绍。

# 本地节点

使用一个进程内应用程序并启动Tendermint:

tendermint node --proxy_app=kvstore
1

然后区块数据开始滚动显示:

I[01-06|01:45:15.592] Executed block                               module=state height=1 validTxs=0 invalidTxs=0
I[01-06|01:45:15.624] Committed state                              module=state height=1 txs=0 appHash=
1
2

用以下命令查看运行状态:

curl -s localhost:26657/status
1

# 发送交易

运行kvstore应用后,我们可以发送交易

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

并发现交易已通过

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

我们也可以发送由k-v组成的交易:

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

然后查询键

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

获得以十六进制编码的值。

# 节点集群

首先创建四个Ubuntu云主机。本测试在Digital Ocean Ubuntu 16.04 x64 (3GB/1CPU, 20GB SSD)上完成。下文中分别将地址记为IP1, IP2, IP3, IP4。

然后,使用ssh进入每台主机并执行脚本

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

本脚本将首先安装go和其他依赖文件,然后获取Tendermint源码,最终编译“Tendermint”二进制文件。

接下来,使用tendermint testnet命令创建四个配置文件目录(位于/mytestnet),并将每个文件夹复制到对应的主机上,以便每台计算机都有$HOME/mytestnet/node[0-3]文件夹。

在启动网络之前,还需要获取节点标识符(仅IP地址不够,且IP会发生变动)。我们称之为ID1,ID2,ID3,ID4。

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
1
2
3
4

最后,在每一个节点上运行:

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"
1
2
3
4

注意,在第三个节点启动后,由于超过2/3验证节点(在genesis.json中定义)已运行,区块信息开始滚动刷新。 持久化节点可以在config.toml中指定,有关配置选项的详细信息,请参见此处

相关交易操作可参见前文本地节点示例所述。