比特币系统
- 点对点网络
- 挖矿机制
- 系统软件
分布式共识
比特币在分布式货币系统内通过 激励 与 抛弃结束点 以某种角度解决的分布式系统的问题。
比特币的分布式算法
无ID
和大多数分布式算法不同,区块链的实现是无ID的。ID有助于标识节点,参与算法流程;给出更强的假设,即50%以上的节点是善意的;但在比特币系统中,由于是P2P网络,ID难以实现且匿名的需求也与ID相悖,故在比特币系统中不存在ID的概念。
关键理念——隐式共识
每一轮一个节点提议其认可的下一个区块,并广播之,其他区块通过该区块作为自己下次提出区块的父节点或忽略它来实现隐式的反馈。
算法具体实现流程:
- 新的交易广播给所有节点
- 节点收集交易并打包成区块
- 每一轮一个随机节点将其区块进行广播
- 其他节点仅当该区块的所有交易有效(合法/非双花)时才接受
- 接受的节点以该区块的作为其下次产出区块的父节点
有效性
从攻击角度而言:
- 伪造攻击:签名无法伪造
- 拒绝服务:攻击者无法阻止交易的广播,总有节点能够接受交易
- 双花:虽然该算法无法保证交易一定有效,但依靠比特币趋向于延长最长链的机制,在多次确认(延长区块后),被攻击的风险将指数下降
POF
比特币不对节点的善意与否加以假设,因而使用了POF(Proof of Work)机制搭配激励机制来保证系统的安全性。
激励机制
比特币的激励机制分为两种:
- 挖矿奖励(Block Ward):矿工通过在区块头部追加挖矿奖励来获得激励,仅在该区块存在于长期链的情况下才有效,因而可以降低节点产生问题节点的风险
- 交易费(Transaction Fee):交易发起人产生部分输入与输出的差额来给予矿工奖励,以激励其优先打包特定的交易
约束机制
我们仍然存在一些问题:
- 谁有权力打包区块?
- 如何防止女巫攻击?
- 如何防止打包混乱?
在激励机制下,所有人都有足够的动机来抢占发行下一个区块的权力,因而我们需要对其加以限制,防止无限量的区块提案以及各种试图通过多开节点来试图获取更高提案权的行为。
工作量证明机制要求矿工在提出的区块中包含一个Nonce字段,并要求整个区块的hash落在整个hash取值空间的特定子空间中,这样的区块称为有效区块。这个nonce无法被预测,仅能通过大量的尝试性计算来找到。比特币算法通过调整目标空间大小来控制区块产生的速度,一半控制在10min左右。
POW机制对区块提出者的算力提出考验,女巫攻击产生的大量节点并不能凭空提供算力;而艰难的计算也能控制区块产生的速度,因而有效地防止了打包混乱;且计算的随机性也解决了如何随机分配打包权的问题。
杂论
比特币是一个自举的系统,通过币的价值通过激励机制鼓励节点创建健康的挖矿、打包生态,而健康的生态给予了比特币安全性的保障(即免于遭受51%攻击),而出于对比特币的信任,其币价将持续上涨。
51%攻击无法创造伪造的交易,也无法阻止交易的广播,但能够扭曲区块链的走向,造成双花等问题。
