從零認識比特幣 第3課 協議與共識

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
    在這裏插入圖片描述
發佈了76 篇原創文章 · 獲贊 8 · 訪問量 7369
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章