在以太坊 geth 项目中共识类代码均组织在github.com/ethereum/go-ethereum/consensus包中。 这篇小文,给你介绍下代码结构,为后续讲解共识算法实现做准备。
github.com/ethereum/go-ethereum/consensus
下面是整个包内子包组织和文件定义。
consensus -> 共识算法包 ├── clique -> PoA 算法 │ ├── api.go │ ├── clique.go -> 共识算法实现 │ ├── snapshot.go │ └── snapshot_test.go ├── consensus.go -> 算法接口 ├── errors.go -> 全局错误信息定义 ├── ethash -> PoW 算法 │ ├── algorithm.go -> ethash算法核心 │ ├── algorithm_test.go │ ├── api.go │ ├── consensus.go -> 共识算法实现 │ ├── consensus_test.go │ ├── ethash.go -> ethash 算法入口 │ ├── ethash_test.go │ ├── sealer.go -> 挖矿入口 │ └── sealer_test.go └── misc -> 公共算法 ├── dao.go -> The dao 攻击,硬分叉处理 └── forks.go
consensus 包下有两个共识算法包 ethash 和 clique,分别实现了定义在 consensus.go 文件中共识算法接口 Engin。
接口方法分为两类:
根据接口定义,在共识算法包内部进行实现,当前以太坊中有两个算法:PoW版的Ethash和PoA版的clique。PoA相对简单些,而PoW则主要涉及难度调整,抗ASIC等。
区块校验和挖矿算法相对应,了解挖矿细节,则自然可以了解是如何进行区块校验的。 所以本章重点介绍共识算法细节,将忽略区块校验。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8