这是tendermint的部分的第一个文章,我们先说一下tendermint的基本原理,以及阅读源码我们所要掌握的一些基本内容。
tendermint共识算法为PBFT,实用拜占庭容错算法,其内部的实现过程我们在以后阅读源码时会说。使用tendermint我们需要自己实现一个app,用来处理具体交易的逻辑程序。tendermint不会对任何交易做处理,也就是说,假如有一笔转账的交易,temdermint不会处理两个账户的余额,而是将这笔交易数据发送给我们自己的app,我们来处理并且存储相应的数据。
对于tendermint与我们的app,其过程有如下几步:check、begin block、deliver、end block和commit,我们先看一个图片:
文章图片
【tendermint 源码阅读(初识tendermint)】这个图片形象的说明了其过程。这里我简单说一下这里面每一个步骤,详细的我会再后面的文章中写。
- check,对于每一笔交易,tendermint都会先将交易发送给我们的app(abci-app),处理后将结果返回tendermint
- begin block,开始一个区块,abci-app区块高度与tendermint一定是一致的
- deliver,对于check成功的交易才会deliver,也就是会真正的入块,无论执行结果成功失败
- end block,结束一个区块,这时这个区块里面的数据一定固定了
- commit,最终的步骤,将所有数据保存
我们再说一下tendermint的共识,同样看一下图片:
文章图片
上面的图片是我在网上找的,很形象,大家可以试着理解一下,后续我会一步一步的说。
其中对于参与投票的我们叫做验证者(validator),可以提案,投票等,投票过程有三轮,第一轮预投票(PreVote),超过 2/3 认可后进入第二轮预提交(PreCommit),超过 2/3 认可后进入最后一轮正式提交(Commit),也就是上面图片的内容。
我们介绍了两部分,一个是tendermint与abci-app的交互,和tendermint的共识,如果是刚接触的同学,可以先记下来再慢慢理解,后面我们对于每一步都会详细的讲解,以及对应代码是如何实现的。
这里我们再看一下其代码的基本目录:
文章图片
prometheus 是我单独下载的,tendermint用到了,就是一个日志监控系统。
大家可以去github把代码下载下来,个人觉得代码中有很多值得学习的地方,所以想和大家分享下。今天就写这么多,以后更多详细的内容会持续更新,如果对区块链感兴趣,可以持续关注我公众号:Go语言之美,更多区块链内容会分享给大家,
推荐阅读
- Go|Docker后端部署详解(Go+Nginx)
- GO|GO,GO,GO!
- Go成长之路|go中判断空字符串、nil和len(t)的用法
- go编译tools
- go grpc安装与使用
- goroutine 调度原理
- Go|Go进阶之路——复杂类型
- Go进阶之路——变量
- Go进阶之路——流程控制语句