区块链的核心技术构成
公链和联盟链至少需要四个模块:P2P 网络协议、分布式一致性算法(共识机制)、加密签名算法、账户和存储模型。
1. P2P 网络协议
P2P 网络协议是所有区块链的底层模块,负责网络传输、广播、节点发现和维护交易数据。
通常我们所用的都是比特币 P2P 网络协议模块遵循一定的交互原则。例如,第一次连接到其他节点时,需要新手根据握手协议的短期技能确认状态,握手后开始要求 Peer 节点地址数据和区块数据。
这套 P2P 交互协议也有自己的指令集,反映在新闻头(Message Header) 命令(command)该命令为上层提供了节点发现、节点获取、区块头获取、区块获取等功能,这些功能是非常底层和基本的功能。如果您想了解更多,请参考比特币开发者指南中的 Peer Discovery 的章节。
2. 分布式一致性算法
在经典分布式计算领域,我们有 Raft 和 Paxos 以拜占庭容错为代表的非拜占庭容错算法,以及具有拜占庭容错特征的 PBFT 共识算法。
从技术进化的角度来看,我们可以得出一个图表,其中区块链技术扩展了原有的分布式算法。
(网络图)
从图中可以看出,计算机应用一开始大多是单点应用,高可用性方便的是冷灾备,后来发展到异地多活。这些异地多活性可能采用负载平衡和路由技术。随着分布式系统技术的发展,我们已经过渡到 Paxos 和 Raft 为主的分布式系统。
主要用于区块链领域PoW 工作量证明算法,PoS 权益证明算法,以及 DPoS 代理权益证明算法,以上三种是行业主流的共识算法,不同于经典的分布式一致性算法,它们融入了经济博弈的概念。接下来,我将简要介绍这三种共识算法。
PoW: 通常是指在给定的约束下解决一个特定难度的数学问题。谁解决得快,谁就能获得记账权(出块)。这个解决过程往往转化为计算问题,所以在竞争速度的情况下,新手如何炒硬币成为谁的计算方法更好,谁的设备性能更好。
PoS: 这是一种股权认证机制。它的基本概念是,你产生区块的难度应该与你在互联网上的股权(所有权)成正比。它的核心理念是使用你锁定的代币的货币年龄(CoinAge)以及一个小的工作量证明来计算目标值,当你满足目标值时,你可以获得记账权。
DPoS:简单的理解就是 PoS 共识算法中的记账员转换为由指定节点数组成的小圈子,而不是每个人都能参与记账。这个圈子可能是 21 节点,也可能是 101 节点,这取决于设计。只有这个圈子里的节点才能获得记账权。这将大大提高系统的吞吐量,因为较少的节点意味着网络和节点的可控性。
3. 加密签名算法
哈希算法广泛应用于区块链领域。哈希算法具有抗碰撞、原像不可逆、问题友好等特点。
其中,问题的友好性很多 PoW 在比特币中,SHA256 算法被用作工作量证明的计算方法,即挖矿算法。
在莱特币上,我们也会看到 Scrypt 算法,该算法和 SHA256 不同的是,它需要大的内存支持。在其他货币中,我们也可以看到 SHA3 采矿算法算法。以太坊使用 Dagger-Hashimoto 算法的改进版命名 Ethash,这是一个 IO 难解算法。
当然,除了采矿算法,我们还使用 RIPEMD160 算法,主要用于生成地址。在众多比特币衍生代码中,大多数都采用了比特币地址设计。
除了地址,我们还将使用核心区块链 Token 系统基石:公私钥密码算法。
基本上用于比特币类代码ECDSA。ECDSA 是 ECC 与 DSA 的组合,整个签名过程和 DSA 相似之处在于是签名中采用的算法是 ECC(椭圆曲线函数)。
从技术上讲,我们从生成私钥开始,然后从私钥生成公钥,最后从公钥生成地址。以上每一步都是一个不可逆转的过程,即无法从地址推导公钥,从公钥推导到私钥。
图片来自《精通比特币》一书
4. 账户和交易模型
从一开始的定义我们知道,仅从技术角度可以认为区块链是一种分布式数据库,那么,多数区块链到底使用了什么类型的数据库呢?
当我设计元界区块链时,参考各种数据库,包括 NoSQL 的 BerkelyDB、LevelDB,也有一些货币基于 SQL 的 SQLite。作为底层存储设施,这些存储技术主要是轻量级嵌入式数据库。这些存储技术与其他场合的使用没有什么不同,因为它们不涉及区块链的账本特性。
区块链的账本特征通常分为 UTXO 结构以及基于 Accout-Balance 帐簿结构,我们也称之为帐簿模型。UTXO 是“unspent transaction input/output”缩写,翻译是指“未花费的交易输入输出”。
在这个区块链中Token 转移的记账模式以输入输出的形式出现; Balance 结构中没有这种模式。