前言
《最小可行性区块链设计系列》的第八讲(https://www.jianshu.com/p/a786e3abd079 ) 讨论了智能合约(Smart Contract)的原理与实现,接下去我们开始讨论P2P协议的实现。
本文的代码地址:(https://github.com/qikh/mini-block-chain/commit/c9865f55b62addeed949535c2cfbc324af0d4a89) (开发语言为Kotlin,更简洁的Java)
正文
有几位读者跟我联系问及P2P协议实现,由于近期工作繁忙,实现了一个POC版本,缺少分叉逻辑和节点间的列表广播功能,仅供学习参考。
P2P通讯协议的原理比较简单,每个区块链的节点启动后,连接配置文件(例如application.conf)内的已知节点,这些已知节点的更新可以随着客户端的更新维护一并发布。连接至其他节点后,查询其他节点的区块高度并对比本节点区块高度来决定是否同步区块数据。P2P通讯的实现难点是细节的处理,例如正在挖矿时如果有新的区块推送过来如何处理,多个节点间同步节点列表如何防止循环广播,分叉的数据处理等等。
本次的代码更新并不完备,后续有空的时候继续完善,敬请期待。