Tendermint-通过goland初始化和启动
前言对 Tendermint 有了一个的了解之后,我们需要对 Tendermint 进行开发和操作,该如何运行这个项目。Tendermint 使用的是 cobra 这个命令行框架,需要对 cobra 有一定的了解。
初始化项目配置IDEA我使用 goland开发调试,先将项目 clone 到本地,配置好go mod。
安装内置命令: tendermintgit clone 之后,找开项目,Tendermint 是go项目,内置的一些功能需要先进行编译。
make install
这一步的操作是为了将内置命令: tendermint,安装到当前系统中。
验证命令正确安装,执行一下:tendermint
这个图中展示了 tendermint 支持的各种命令,对节点运行来说,需要关注的是
init
start
初始化 validator 节点tendermint 可以初始化三种节点类型
FullNode
seed
validator
这三种类型是常见的三种节点类型,FullNode 用于区块广播、查询等;seed 是种子节点,用来做节点发现;validator 是验证人节 ...
Tendermint 共识源码分析
简述Tendermint的共识算法可以看成是POS+BFT,Tendermint在进行BFT共识算法确认区块前,首先使用POS算法从Validators中选举出Proposer。然后由Proposer进行提案,最后使用BFT算法生成区块。Tendermint 的共识协议使用的gossip协议。
另外,源码分析部分由于代码篇幅太长,会省略部分源码,不影响阅读。
角色Tendermint 共识网络中有两个重要角色
Validator: 网络的参与者,也是区块的验证者(预先配置的网络中的一般验证者账户们)
Proposer: 从validator中选举出一个节点成为出块人(选举出的出块人),选举不需要网络通信,这点后面从源码中说明。
共识5个阶段
NewHeight
propose
prevote
precommit
commit
123456789101112131415161718 +--------------------------------------+ v ...
Tendermint 启动流程
启动流程Tendermint 的启动流程比较清析明了,各业务启动流程都在对应的实现代码,主启动流程加载所需配置,由各启动实现类启动自己对应业务,如节点启动相关在 nodeImpl,共识相关处理是 state 中进行处理。
流程大致:
加载配置 node.NewDefault
启动运行 Start
启动相关实现的 OnStart
先看启动流程
启动入口代码,这里使用到了一个命令行工具:cobra。代码位置:cmd/tendermint/main.go
1234567891011121314151617181920212223func main() { ...省略部份代码 // NOTE: // Users wishing to: // * Use an external signer for their validators // * Supply an in-proc abci app // * Supply a genesis doc file from another source // * Provide their own DB implementatio ...
Tendermint ABCI概述
ABCI 概述 (Application BlockChain Interface)作用让应用程序层 和 共识层进行解耦。可以理解为一套应用程序的接口标准,是应用程序层和共识层进行的桥梁。
应用程序区块链接口(ABCI) 允许用任何编程语言实现应用程序拜占庭容错复制。区块链是多主状态机复制的系统。ABCI是一个接口,定义了复制引擎(区块链)和状态机(应用程序)之间的边界。使用Socket协议,运行在一个进程中的共识引擎可以管理运行在另一个进程中的应用程序状态。以前,ABCI被称为TMSP。
官方github:ABCI
开发动机目前为止,所有的区块链“技术栈”(如比特币)都是作为一个紧耦合的整体进行设计的。 换句话说,每一个区块链技术栈都是一个单独的程序,处理分布式账本的所有问题。 这些问题包括P2P连接、交易内存池广播、最新区块共识、账户余额、图灵完备合约、用户级权限管理等。
在计算机科学中,过高耦合度的程序架构通常不是好做法。 因为耦合度高会导致程序难以复用,并且这样做易导致代码库分叉进而维护困难。 当开发者没有对代码库进行模块化设计并遭受“意大利面代码”的困扰时,这种设计方式导致 ...
Tendermint概述
简单理解为一个分布式状态机
什么是TendermintTenermint是个能够在多机器上安全一致地复制应用的软件。 安全是指无论多达1/3的机器出现何种类型的故障,Tendermint都可以正常工作。一致是指每个正确运行的机器都可以获取完全相同的交易日志并计算相同的状态。 在分布式系统中,安全一致地复制至关重要;从货币到选举再到基础设施管理等广泛应用容错方面,它都有着着重要作用。
拜占庭容错(BFT)指的是系统能够容忍机器以任意方式出现故障,包括机器故意危害系统的方式。拜占庭容错理论已有几十年的历史,但最近由于比特币和以太坊等“区块链技术”的成功,其软件实现才逐渐流行。区块链技术是在更现代的环境下对BFT的一种改造,重点引入了点对点网络和密码认证等技术。区块链的名称来源于交易的处理方式,交易被打包在每一个区块中,每一个区块存储前一个区块的哈希值,形成了一个链的结构。 实际上,区块链数据结构优化了BFT设计。
Tendermint包括两个主要技术组件:区块链共识引擎和通用应用程序接口。共识引擎,被称作Tendermint Core,保证所有的机器按照相同的顺序记录相同的交易。应用程 ...