文章目录
Byzantine Faults and CAP Theorem
Byzantine General
- 拜占庭的将军
拜占庭的将军们包围了一个城市,每一个将军都可以选择进攻或者撤退,整个事件只有在全部的人都选择进攻,或者全部的人都选择撤退才算成功。这是一个决策问题
拜占庭的将军们同意服从多数的原则,他们进行投票。
最后的结果是,4个人选择进攻,4个人选择撤退,还有一个人是叛徒
如果这个叛徒对4个进攻的人说进攻,对4个撤退的人说撤退,会怎么样呢?
进攻的人和撤退的人都会认为他们是大多数,因此无法达成一致,结果就是失败
Byzantine Faults
在比特币中,一个恶意的节点可能会发送不同的区块到不同的其他的节点,这就是拜占庭错误
Byzantine Fault Tolerance
一个系统被设计成可以经受的住这样拜占庭错误的
比特币区块链就是拜占庭容忍的,因为他会让发送错误信息变得非常昂贵,节点想要让一个区块成功的加入到区块链中,需要大量的计算和工作
Databases
Databases on ACID
一个理想的数据库,需要有一个属性
- Atomicity:如果一个交易的一部分失败了,那整个就失败了,就是对于一个交易来说没有成功一半的说法
- Consistency:任何写入的数据需要满足所有的条件,读取同样的数据的结果必须是同样的
- isolation:同步进行的交易的结果必须相同,就好像他们是按照先后顺序发生的
- Durability:如果一个交易发生了,那他就会被保留下来
SQL vs noSQL
略,noSQL举了个Apache Cassandra的例子,无关
CAP Theorem
CAP理论表示,下面三个中,只有两个可能实现同时发生:
- Consistency of data
- Availability of data
- Partition-tolerance(指数据如何存储和分布)
design implication for distributed system
设计分布式系统,设计师无法放弃Partition-tolerance,所以只能在Consistency和Availability之间选择一个。
这个是一个选择:
- 如果系统反应速度不重要的话,就选择Consistency
- 如果系统反应需要即时,则选择Availability
比特币区块链中,选择了Availability。虽然没有Consistent,但是比特币区块链最终会变得consistent
Bitcoin Blockchain
没有中心节点来实现Consistency,所以需要一个共识算法consensus algorithm,来让节点投票选择数据库(区块链)的真实状态。
因为比特币区块链是开放的,所以不能采用简单的多数投票原则:
- 没有办法确定是存在多数的
- 没有节点有其他所有节点的概况
- 多数投票的结果可能被操纵
比特币区块链最终会consistent:
- 越老的区块,就需要更多的工作去修改它
- 没有撤销过超过五小时的交易
- the longest internal fork was 24 blocks in length
forks
有两种forks在比特币区块链中
- Regular operations or internal fork: 矿工处理竞争块时,竞争链的临时存在
- Software fork:in open source software projects, a fork is a new software project trajectory that starts form an earlier project
software forks
这里面又有两种forks:
- soft fork:新版本的软件是向后兼容的
- hard fork:新版本是不向后兼容的
这部分我好像记得在哪里看到过,之后会单独出一个博文来解释这个,点个关注不迷路哦~
这里有一个简单的例子:
提醒一下hard fork非常不好,好像曾经有一次造成了严重的currency split
Altcoin
就是Alternative cryptocurrencies,使用Bitcoin的代码产生的其他币种
这里又要提一下Ethereum以太币了。不过多讲解:
Consensus Protocols
这里讲解四个
Proof of Work(PoW)
之后单独细讲
Proof of Stake(PoS)
stake有点像是股本,权力,权重的概念
- 节点认证区块是根据他们在系统中的stake,好比方,这些节点拥有的货币越多,权重越大
- 如果节点表现不好,就会丧失他的权力,
如何设计一个PoS系统,以至于节点是被经济利益驱动的想要表现好呢?关键两点
- Crptoeconomics
- 如何避免Sybil attack
举一个经典的例子Vitalik Buterin‘s metaphor:
100围在桌子边,签署文件,每一个人只有在他们签署的文件是多数人签署的时候得到奖励。奖励在最后发放。这样,每个人不会有想要作弊的动机
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fJc67ZqQ-1580388868645)(https://pic2.zhimg.com/80/v2-56ecee149302a78b7c77ebc9ef50e0e7_hd.png)]
Proof of Authority(PoA)
之后单独讲,这里老师的课件上比较模糊
proof of Elapsed Time (PoET)
之后有机会单独讲一下,老师PPT不太清楚
Consensus attack
共识攻击
- Sybil attack
- 51% attack
- Double-spend attacks