一、概述

Tendermint Core 是 Byzantine Fault Tolerant(BFT)中间件,它采用状态转换机(以任何编程语言编写),并在许多机器上安全地复制它。

Tendermint Core 是一个区块链应用平台;它为以任何编程语言编写的区块链应用程序提供了相当于 Web 服务器,数据库和支持库的功能。就像服务 Web 应用程序的 Web 服务器一样,Tendermint 服务于区块链应用程序。

(摘自Tendermint 去中心化的共识引擎

二、环境配置

作为简单的代码学习之用,在 Windows 上进行开发自然更符合常规使用习惯,然而编译不支持 Windows 环境,所以使用 wsl remote 作为开发方案。整体环境如下:

操作系统: Windows 10/11

虚拟机: Windows Subsystem for Linux(ubuntu)

开发环境: Visual Studio Code

golang 版本: go1.19.2 linux/amd64

2.1 虚拟机安装

安装过程参考官方文档安装 WSL | Microsoft Learn

代理配置可参考博客电脑重装纪实

命令行美化可参考博客Windows终端美化

2.2 Visual Studio Code 安装

Windows 环境下推荐使用winget作为包管理工具进行安装,同样参考博客电脑重装纪实

安装完成后推荐使用以下插件:

  1. Blockman

    代码区块高亮

  2. Go

    golang 官方插件

  3. Project Manager

    项目管理插件

  4. WSL

    wsl 支持插件,可以在 wsl 中任意使用code命令打开 vscode。

2.3 golang 安装

在 Ubuntu22.02 中,通过 apt 方式安装的 golang 版本为 1.13,缺少部分语言特性,无法编译 master 分支的源码。
具体原因为开发分支中在go.mod文件中使用了 1.16 版本以后才提供的retract关键字。

  1. 获取发行版代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ## 下载源码
    mkdir ~/download
    cd ~/download
    wget https://golang.google.cn/dl/go1.19.2.linux-amd64.tar.gz
    ### 若无法访问外网,可使用以下链接替代
    wget https://gomirrors.org/dl/go/go1.19.2.linux-amd64.tar.gz

    tar -zxvf ./go1.19.2.linux-amd64.tar.gz
    ## 配置路径
    mkdir ~/env
    mkdir ~/env/gobin
    mkdir ~/env/gopath
    mv ./go ~/env/
  2. 配置环境变量

    修改.bashrc文件,添加:

    1
    2
    3
    4
    ## 配置须为绝对路径,将yourname改为自己的用户名
    GOROOT=/home/yourname/env/go
    GOBIN=/home/yourname/env/gobin
    export PATH=$PATH:$GOROOT/bin:$GOBIN

    然后执行source ~/.bashrc激活修改内容。

  3. 修改 go 环境变量配置,命令行执行:

    1
    2
    3
    4
    ## 配置须为绝对路径,将yourname改为自己的用户名
    go env -w GOBIN=/home/yourname/env/gobin
    go env -w GOPATH=/home/yourname/env/gopath
    go env -w GOPROXY=https://goproxy.cn,direct

2.4 集成 vscode

在获取到 tendermint 源码后,直接在源码根目录执行code .即可调出 vscode,随后将目录添加进项目管理器。

1
2
3
4
5
mkdir ~/workspace
cd ~/workspace
git clone https://github.com/tendermint/tendermint.git
cd tendermint
code .

2.5 指定版本编译

代码学习一般从一个稳定版本开始,目前的最新稳定版是v0.34.24,故以此版本为基础进行编译和阅读.

1
2
3
4
5
## 以2.4进入的路径为基础继续
cd ~/workspace/tendermint
git checkout v0.34.24
make build
make install

2.6 单机启动

1
2
3
## 初始化配置,默认路径为 ~/.tendermint
tendermint init
tendermint node --proxy_app=kvstore