文章目錄
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