我们注意到一个事实:所有的区块都需要矿工去放到区块链上的。
那么假设我们完成了一个交易,什么时候会被传到链上呢?有不同的做法
- Synchronous同步,即保证在t时刻后上传
- Asynchronous异步,即保证最终一定会上传
- Eventually Asynchronous最终同步,即给定一个变量t,保证在x+t时刻之前一定上传
可能的失败情况
矿工节点可能会出错,要设定最多多少节点可以出错,一般来说设定在f < N/2 或 f < N/3
矿工节点的表现可以分为以下三种情况
- 矿工诚实,且可通讯
- 矿工的通信出现问题,无法确认情况
- 矿工不诚实
不同的广播模型:
一致模型:即有人会不发送或者终止一个请求
可靠模型:即发送者发送v,则
- Termination接受到的人会发送v,
- Reliablity每个接受到的人都发送v,
- Consistancy任意两个发送者都发送v
其实就是拜占庭将军问题BFT,即在通讯可能延迟,和被干扰的情况下,怎么让各个将军投票执行同一个操作。
pBFT pratical Byzantine Fault Tolerance 或 RAFT:
- 选举出一个节点作为leader,并轮换
- 当客户端提出一个操作时,leader通知其他的节点,然后大家验证并投票
- 如果f个没有返回消息,而f个恶意返回错误结果,那么只要有f+1个节点返回确认结果即可通过这个操作。而总节点数即为n=3f+1
pBFT的特点 - 安全性:
- 输出总是一致的,可以排除网络不好或恶意领导的情况
- 尽管是异步的,但最终是同步的
- 存在性Liveness(保证一定有结果):
- 如果没有进度,新的leader可以被选举
- 如果接着网络正常,leader诚实,才有Liveness
(对比PoW 1. Leader就是靠算力选举的 2. 只要有矿工,我们就能保证Liveness)
pBFT的优点
高效,由于各个节点达成共识是在同一时刻决定的首先,所以pBFT 无需等待确认。
节能,因为pBFT 是无需挖矿的,所以pBFT 不用耗能。
pBFT的缺点
中心化,由于要保证各个节点间的频繁的通信,所以节点数不能太多。
门槛高,由于pBFT 不能防止女巫攻击,也就无法防御一个恶意用户用多个账户来进行共识的造假行为,所以需要审核加入节点。
FLP不可能原理
在异步模型系统中,即使只有一个进程失败,也没有任何算法能保证非失败进程达到一致性。
意味着:每个Protocol都需要有个时间的限定。
\
所以Bitcoin和这个有什么关系呢?
因为Bitcoin的矿工都是利益驱使的,且加入和退出都是随意的,即有可能被此利用形成51%攻击。
比如说A要加入节点,他
- 首先需要联系别人,获取其他peer的节点地址,
- 通过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