正文
除了通讯协议之外,还要考虑数据交换格式,我们考虑采用易读通用的 JSON 格式,而不是像比特币一样的数据序列化格式,后期更改可以考虑升级到 Protobuf,后者优势主要体现在性能上。而在我们的例子中,性能永远不是首先考虑的,更多是它的易读和易调试性。
其次,我们来说说账户加密部分,由于 ECDSA 非对称加密模块过于复杂,我们选用 OpenSSL 库中的 RSA 算法作为加密模块。而交易模型上,我们考虑使用 UTXO 模型,因为状态模型需要维护状态,可能会带来额外的代码复杂度。
再来说说数据库存储,这个模块需要考虑到易用性和易读性,我们选用 SQLite 3 作为持久化存储。
最后我来谈谈共识算法这一模块,我们选用 PoW 作为共识算法,这是考虑到 PoW 实现起来十分简单,而且交易和区块的哈希计算会涉及 SHA-256,使用 PoW 算法我们就可以复用 SHA-256 的代码,使用 SHA-256 算法作为挖矿算法会降低我们的工作量。
有了技术选型之后,我们再对目标功能点进行细分拆解。
-
P2P 网络:节点发现、节点维护、持久化保存、区块同步。
-
公私钥对:命令行,创建公私钥对并生成地址,提供私钥存储,公私钥验证。
-
发送交易:命令行,发送成功验证,输入是交易哈希。
-
交易查询:命令行,JSON 格式的交易查询返回,输入是某个地址。
-
余额查询:命令行,JSON 格式的余额查询返回,输入是某个地址。
-
挖矿:命令行、JSON 格式挖矿信息返回,输入是某个地址。
-
区块共识:编织区块链的算法,包含创世区块以及调整全网挖矿难度。
-
交易共识:验证单个交易的算法,包含签名验证和 UTXO 验证。
-
基础日志:用于监控网络,区块验证等操作。
-
区块持久化存储:分叉与合并时的一致性,并为查询提供接口。
-
提供格式化输出交易的功能,这里的格式化主要指 JSON 格式。
-
有效防止双花交易。
通过详细的功能拆分我们可以发现,功能点多达三十余个,如何设计实现这三十多个功能点是我们接下来首先要解决的问题。问题是这三十多个功能点不是孤立的,而是有相互联系的,我们先从顶层开始设计。