首頁 > 資訊 > 應用 > CITA:面向企業級應用高性能區塊鏈內核
CITA 區塊鏈是如何防止雙花的?
2019-11-01 14:04:10作者:CITA來源:CITA
CITA 關鍵設計
CITA 是如何防止雙花的?首先簡單解釋下雙花問題。雙花簡單來講就是一筆錢進行了兩次消費。對于傳統的區塊鏈,如果交易者使用同一筆余額,發送兩個不同的交易到全網,雖然短暫時間內可能會造成分叉,但是因為區塊鏈的共識的一致性,最終最多只有一筆成功,一筆資金不能同時被使用兩次。用戶交易在被打包入塊后,被確認的交易平臺在的鏈存在一定概率被更長的鏈取代,會導致原來已經被確認的交易被回滾掉。在公網中,使用 POW 的算法時,隨著區塊被確認的次數增加,交易完全被確認的概率逐漸逼近 100%,但是永遠到達不了 100%。以比特幣網絡為例大約 6 個塊,以太坊大約 13 個塊,即可在工程上認為交易被完全確認,如果想要更高的確定性,可以等待更多的塊確認。
在 CITA 中,共識默認采用了 CITA-BFT 共識,一種經過了區塊鏈適應性改造和調優的BFT算法。CITA-BFT 使用 Rust 實現,是一種確定性的共識算法,一旦當前塊共識處理成功,就表示這個塊被完全確認,不需要像比特幣或者以太坊那樣去擔心因為更長的鏈出現而導致交易回滾。所以當能從鏈上查詢到交易被成功處理,即表示交易被確認,無需再等待。所以如果用戶廣播兩個有沖突的交易,交易經過共識后按照一定順序來處理,最終在前面交易成功處理后,后面的交易因為條件不滿足,肯定會處理失敗。
在任何系統中,確定性都是基于概率的。對于 POW,存在 51% 攻擊。但是實際情況中,假設一個礦工有 25% 的算力,在 6 個塊被確認后,這個礦工通過構造一條超過主鏈長度的鏈來進行攻擊,需要的概率為 (0.25/0.75)^6,約等于 0.00137,所以可以認為足夠安全。但是實際上的確定性并沒有這么高,因為存在以下幾種考慮:1)不能認為其他礦工是誠實的,2)由于網絡原因,其余礦工并不是完全在挖主鏈,存在挖陳腐塊,以及算力在分叉鏈的情況,3)礦工對其他其他礦池進行攻擊,結盟,運行零費用礦池等等手段,可以以非常低的成本來構造51%攻擊。所以對于基于POW的公鏈來講,確定性并不能滿足所有的商業場景,并且確定時間也比較長。
而對于 CITA,由于采用 BFT 風格的算法,被確認的區塊中至少要包含 2N/3 + 1 個共識節點的簽名,偽造 ECDSA 簽名的難度要遠遠高于挖礦算力計算難度 nonce 的。在 2011 年,比特幣網絡算力最高時,每秒大約可以進行 15 萬億次哈希計算,而對于 256 位的私鑰,存在 2^256 種可能,所以使用當時情況所有的算力來暴力破解私鑰,需要 pow(2,128) / (15 * pow(2,40)) / 3600 / 24 / 365.25 / 1e9 / 1e9, 大約需要 0.6537992112229596 萬兆年的時間。并且破解需要大于等于 2N/3 + 1 的節點的簽名才可以。所以可以認為交易一旦共識入塊之后,即可認為是確定的,鏈被回滾的概率可以忽略不計,實際上造成雙花的可能性幾乎為零。CITA 較公鏈的 POW 有更好的確定性,更短的確定時間。