--- 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/