# DPOS **Repository Path**: Jame_sz/dpos ## Basic Information - **Project Name**: DPOS - **Description**: 使用go语言简单的实现了DPOS - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2020-10-16 - **Last Updated**: 2022-11-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DPOS #### 介绍 使用go语言简单的实现了DPOS。DPOS是POS的改进算法,DPOS与POS原理相似。与POS的主要区别在于节点选举若干代理,由代理人验证和记账。PoW机制和POS机制虽然都能有效地解决记账行为的一致性共识问题,但是现有的比特币PoW机制纯粹依赖算力,导致专业从事挖矿的矿工群体似乎已和比特币社区完全分隔,某些矿池的巨大算力俨然成为另一个中心,这与比特币的去中心化思想相冲突。PoS机制虽然考虑到了PoW的不足,但依据权益结余来选择,会导致首富账户的权力更大,有可能支配记账权。 股份授权证明机制(Delegated Proof of Stake,DPoS)的出现正是基于解决PoW机制和PoS机制的这类不足。 #### 代码解析 1. const():自定义了投票者数量、竞选者数量和最后竞选成功的数量。 2. block struct{}:定义了每一个区块的结构,其中包含上一个区块的hash、本块区块hash、时间戳、区块内容、区块高度、本区块的节点地址。 3. node struct{}:定义一个普通节点的结构,包含代币数量(相当于节点的持有的有票的票数)、节点地址。 4. superNode struct{}:与node结构相同。 5. pool【】:不同的类型的节点,建立了不同的节点池。 6. generateNewBlock{}:生成新的区块。按照定义的结构生成区块。 7. getHash():将区块的上一个区块的hash、时间戳、区块内容、区块高度、本区块的节点地址综合加密形成本区区块的hash。 8. voting():由投票者对竞选者随机投票。 9. sortMineNodes():对竞选者节点根据获得票数排序,选出竞选成功的超级节点。 10. init():初始化投票节点与竞选节点,并添加到相应的节点池中。 11. main():主函数。 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)