区块链:共识机制

我们注意到一个事实:所有的区块都需要矿工去放到区块链上的。

那么假设我们完成了一个交易,什么时候会被传到链上呢?有不同的做法

  1. Synchronous同步,即保证在t时刻后上传
  2. Asynchronous异步,即保证最终一定会上传
  3. Eventually Asynchronous最终同步,即给定一个变量t,保证在x+t时刻之前一定上传

可能的失败情况

矿工节点可能会出错,要设定最多多少节点可以出错,一般来说设定在f < N/2 或 f < N/3
矿工节点的表现可以分为以下三种情况

  1. 矿工诚实,且可通讯
  2. 矿工的通信出现问题,无法确认情况
  3. 矿工不诚实

不同的广播模型:

一致模型:即有人会不发送或者终止一个请求
可靠模型:即发送者发送v,则

  1. Termination接受到的人会发送v,
  2. Reliablity每个接受到的人都发送v,
  3. Consistancy任意两个发送者都发送v

其实就是拜占庭将军问题BFT,即在通讯可能延迟,和被干扰的情况下,怎么让各个将军投票执行同一个操作。

pBFT pratical Byzantine Fault Tolerance 或 RAFT

  1. 选举出一个节点作为leader,并轮换
  2. 当客户端提出一个操作时,leader通知其他的节点,然后大家验证并投票
  3. 如果f个没有返回消息,而f个恶意返回错误结果,那么只要有f+1个节点返回确认结果即可通过这个操作。而总节点数即为n=3f+1
    pBFT的特点
  4. 安全性:
    • 输出总是一致的,可以排除网络不好或恶意领导的情况
    • 尽管是异步的,但最终是同步的
  5. 存在性Liveness(保证一定有结果):
    • 如果没有进度,新的leader可以被选举
    • 如果接着网络正常,leader诚实,才有Liveness

(对比PoW 1. Leader就是靠算力选举的 2. 只要有矿工,我们就能保证Liveness)

pBFT的优点

  1. 高效,由于各个节点达成共识是在同一时刻决定的首先,所以pBFT 无需等待确认。

  2. 节能,因为pBFT 是无需挖矿的,所以pBFT 不用耗能。

pBFT的缺点

  1. 中心化,由于要保证各个节点间的频繁的通信,所以节点数不能太多。

  2. 门槛高,由于pBFT 不能防止女巫攻击,也就无法防御一个恶意用户用多个账户来进行共识的造假行为,所以需要审核加入节点。

FLP不可能原理

在异步模型系统中,即使只有一个进程失败,也没有任何算法能保证非失败进程达到一致性。

意味着:每个Protocol都需要有个时间的限定。

\
所以Bitcoin和这个有什么关系呢?

因为Bitcoin的矿工都是利益驱使的,且加入和退出都是随意的,即有可能被此利用形成51%攻击。

比如说A要加入节点,他

  1. 首先需要联系别人,获取其他peer的节点地址,
  2. 通过TCP传输(无验证无加密)要验证的Package(一般你和别人的连接数为125,但是你可以连接更多,这样就意味大家会更多的把transaction发送个你)
    package包括:
    • signature verification,
    • consistency,UTXO验证,
    • DoS保护机制
      一般性的惩罚:返回的大小或者加密方式错了
      严重的惩罚:签名验证错误,UTXO验证错误
      禁止IP地址24小时

禁止IP地址的问题是:若用了Tor网络,那么Tor上的所有节点都会被禁止

Block传播


由上图可见,我们并不能保证你的transaction什么时候会被放到链上。(异步时间模型)

不同的传播方式

  • 标准

    • 先发送Transaction/Block的Hash
    • 接受者接收到hash,并要求返还这个Transaction/Block
    • 发送者把Transaction/Block发送出去

      为什么只从一个peer中取Block?因为最早到的最快。
  • 发送头部

    • 先发送Header
    • 请求Block
    • 再发送Block
  • 未请求的Block推送
    • 矿工直接发送Block,但没添加header
    • 减少了propagate的时间
  • Fibre(Fast Internet Bitcoin Relay Engine)Network