---
# System prepended metadata

title: 分散式共識
tags: [Learning note]

---

---
title: 分散式共識
tags: Learning note
---

## 分散式共識

### 中本聰共識
- PoW 
-  每個參與者（或礦工）P 都試圖為即將到來的交易塊找到一個有效的解決方案。 這涉及找到一個值 h，例如當 h 用去中心化演算法 SHA-256 散列時，找到所需的值。 這通常是一個迭代過程； 隨機數（使用一次的數字）被添加到字元串的末尾，每個連續輪都被散列，直到給出所需的值。 一旦 P 設法找到 PoW 的解決方案，他們就會將他們的區塊廣播到網路的其餘部分，如果其中的任何交易都沒有根據時間戳被花費，那麼它就會被批准。 P 然後收到比特幣獎勵，作為他們為驗證下一個交易塊而花費的計算能力的補償。
-  中本聰共識視最長鏈

### 雪崩協議（第三代共識）
- 重複隨機抽樣機制
    - 重複隨機抽樣, 直到連續共識次數達到一定的次數
- DAG 有向無環圖
- 節點的遞遺性
    - 當驗證者投票給 X 節點或認為 X 節點是正確時，他同步也是在投票給 X 的所有父節點，也就是箭頭的源頭，提高該鏈的正確性。就像單一線性的區塊鏈，當驗證新節點時，同步也需要確保以前所有的節點都是正確的。
- 由四個協議組成
    - Slush 協議的特點是：簡單狀態（simple state），小樣本（small sample），反覆抽樣（repeated sampling），有抽樣輪數或時間期限（用 m 表示）。Slush 協議作為 BFT 協議的原始狀態，不能提供完整的 BFT 保證。
    - Snowflake 協議：又稱為「 BFT Snowflake 」，是「共識家族」的第二個協議，在 Slush 的基礎上擴展而來。Snowflake 為每個節點增加了一個 counter， 用來記錄該節點當前的可信度。Snowflake 可以保證對最小的狀態做出很強的保證。
    - Snowball 協議：「共識家族」的第三個協議，對 Snowflake 協議做了進一步改進，添加了一個更持久的可信度標誌，提高了協議安全性和共識結果的可靠性。相較於Snowflake ，Snowball 更難被攻擊，更為通用化。
    - 雪崩協議：「共識家族」的第四個協議，也是核心所在。它在 Snowball 的基礎上添加了一個動態的、僅限追加的 DAG 結構來進行交易記錄。

- 衝突       
    - 為了避免共識結果中包含衝突交易（conflicting transactions），在Avalanche中定義了衝突集，Avalanche中的每筆交易都屬於一個衝突集，衝突集中也只能有一筆交易
    - 如果衝突集中只有一筆交易（即沒有衝突），置信度超過β1即可提交，稱為“安全早期提交（safe early commit）” 否則，如果衝突集中有多筆交易，根據Snowball協議，需要收到超過β2個連續查詢回覆才可以提交

### 兩大創新
- Avalanche中的2大創新分別是：
    - 抽樣（subsampling）：通訊成本低。無論是20個節點還是2000個節點，某個節點發送的共識資訊數量是恆定的。
    - 傳遞性投票（transitive voting）：即給某個頂點投票等同於給該頂點的所有祖先頂點投票，這樣有助於提升交易吞吐量。每個節點實際上集合了很多投票。
### 可能存在問題
- 衝突交易不受保護
    - 如果使用者不小心將一筆交易傳送了兩次，Avalanche 是無法在這兩種交易之間做出選擇的，會直接導致這筆錢丟失，這點被Avalanche 當成能抵禦”雙花”攻擊來做宣傳，但是實際應用中，使用者無任何主觀惡意下，不小心將一筆交易點選兩次傳送的情況還是會經常發生，如果直接將使用者資金丟失的話，每次傳送交易都得非常小心並等待系統回覆才行，這將大大降低交易的速度。
- 需要大量參與者的支援
    - 隨機抽樣所達到的共識必須依賴大量的節點支援才能算是有效，並且這些節點還得時刻保持線上，以便被隨機抽取到，這在現實的自由網路下是不太現實的，如果採用雲伺服器的方式，整個網路運作成本將會非常高。
- 雪崩協議參考網址：
    - https://www.gushiciku.cn/pl/asf8/zh-tw
    - https://kknews.cc/tech/jbyqznp.html
    - https://zombit.info/avalanche-public-chain-introduction/