從中本聰1.0到Gossip 3.0,AVA的實用型區塊鏈架構
By Ourea無涯社羣·
1. 我們知道區塊鏈領域有一個經久不衰的話題, 就是不可能三角, 即可擴充套件性, 安全性和去中心化很難全面獲得, 那麼AVA是如何看待這個問題又是如何做取捨的?這個是非常好的問題,就是我當時我之前在別的地方也碰到過類似的問題,這是一個需要澄清的事情。為什麼一定要三個?為什麼不是不可能六角?有沒有人思考過這個問題?我猜測原因是因為這個問題,它其實是在對於系統研究裡面的另一個不可能的三角進行的一個模仿,另一個不可能三角叫 CAP不可能。然後 CAP 是指的是一致性、可獲得性和網路分塊,然後這三者不可得兼。就是說你不能做一個系統,它即是完全一致的,然後又隨時可以去訪問它的服務,並且這個系統裡面內部的網又斷了一下,這系統還能繼續滿足前兩個,這是做不到的。比較搞笑的是,這兩個不可能都沒有嚴格證明。就是說第一個是系統原來這個研究裡面有人提的所謂CAP Theorem,這個東西就是一個經驗之談,就是說我們覺著好像很困難對吧?然後我們就說他不可能了,區塊鏈的不可能三角也是類似的。我覺得是說可能有人最開始提到過這個,但是不知道為什麼就被炒作起來了。其實相比於 CAP Theorem 的話,這個不可能三角,我覺得相對要更水一點。為什麼?因為談論一個事情是否可能,只是要去證明他可能就可,比如說這個事情能發生,那我能讓它發生就行了。你要說明一個事情不可能,是做不到的,就是很困難的。我知道的目前系統裡最知名的所謂不可能其實叫做FLP不可能,指的是你不能設計這樣一個共識協議,它既安全又有活性,它在網路完全沒有任何別的對於延遲的額外假設的情況下,是安全的又不會卡死,這個是不可能,這是有嚴格證明的。但如果你好奇去看那篇論文的話,你會被震驚,你要證明一個不可能是非常困難的,你需要嚴格去定義這個東西到底什麼情況下是不可能的,對吧?然後回到剛才您提的問題,就是我們知道這三種不可能的東西,每一個詞其實都很模糊,什麼叫做擴容,什麼叫做安全?沒有具體的定義。如果有人惡意地去揣測的話,這其實是在兜售概念,就是說:“你們不要嫌棄我係統慢,因為我做不到,別人也一定做不到。” 但我覺得這樣的心態是不太好的。畢竟你希望產業前進,並不是靠提不可能來完成,這也是為什麼學術界去做偏實用領域的這種系統,能做出不可能證明的相對較少。因為大家都希望把東西變成可能,而不是說不可能就結束了。然後你又會看到後面又有一些專案會說他們突破了不可能三角,我們把不可能變成了可能,這又是另一中兜售概念,又可以再炒作一遍了。所以我不是很喜歡說大家過分的去相信這個東西。如果你現實中認為有一些相互制約的因素,沒有辦法同時去滿足,那麼有兩種可能,一種是你做了錯誤的假設,那麼原來可能的就變成不可能了,那麼解決辦法只要找出這種思維定製的錯誤假設即可。還有一種就是被路徑限制住了。就拿我們原來用的很順手的中本聰也好,像pbft這類也好,都是相對有歷史積澱的。這些方案也有他們自己的限制,能不能設計一個完全不一樣的共識機制突破這個路徑的依賴?因為我觀察到的現象,雖然市面上有很多共識演算法,但是其實基礎機制還是很單一的,基本上就是這兩條路徑上的翻新。我們想的是能不能從根本上去做一個完全不一樣的第三類(我們都不說第三代了,第三代可能有點膨脹)。所以我們希望透過這種根本上的思考去突破所謂的不可能三角。紅軍大叔:這個回答其實挺大的,你說到了一個要點,就是我們總感覺這個問題已經變成了某一個既定事實,而大家好像從來不質疑它。我也在聯想一個問題,現在區塊鏈領域裡面是否也存在一些類似存在巨大偏見的東西?Ted:前面提到了TPS、不可能三角、分片這種執念,我覺得這三個本身的想法沒有什麼問題,比如說我想提高TPS,提高吞吐量,提高系統的負載能力,這沒什麼問題,但是最後就發展成了唯TPS論就不對了。這種執念讓大家脫離實際,最後就執迷於那個數字。另一個就是分片,這也變成了一個營銷詞彙。分片,就是說原來是大家都在幹一件事情,一起來把它幹好,現在變成了說你不用幹這件事情,咱們分管一下,然後這些人幹這些事情,另外人幹另外的事情。其實很多分散式資料庫就是這麼做的,比如谷歌就這麼做的,但問題在於這也有問題,比如說你分了片以後,你的別的方面就會受到影響。你也不能無限制的分片,不可能說我有10個節點就分10個片,每個人都跑自己的東西,那就沒有共識了,對吧?其實每個技術方案都有兩面,但大家太多執著於其中一面,這不是一件好事。現在我覺得科普工作還沒有做好做夠,行業摻雜了很多偽概念,如果你聽些TPS數字或者看到這類營銷詞彙的時候,就得留個心眼得想一下,得有個獨立的思考。2. 在 why AVA 裡提到:使用 AVA 既可以構建 application 也可以定製 blockchain 網路, 這讓我想到之前我們常提到的應用鏈與智慧合約之爭. 那麼 AVA 是怎麼定位二者的區別或者說是如何看待鏈與應用之間的關係? 我們之前也有過內部討論,比如說包括我們之前決定在DAG上整合不用合約就能跑的NFT,因為我們看到它在金融方面,包括電子商務方面的極大潛力。然後我們當時就想過一個問題就是說,你這些NFT這些東西,就像當年雲養貓一樣,可不可以?你為什麼不做成智慧合約,你直接在智慧合約上跑不就完了嗎?這就有一個取捨點,哪些功能是應該焊死在這個系統裡面,作為原生的功能?按現在手機說法就原生系統提供,哪一些是透過外掛提供服務,哪些透過各種智慧合約提供,這是個很有意思而且很有深度的問題。這沒有標準答案,我自己的看法是,首先這兩者並不矛盾,就很多人認為他們是對立的,其實更多是一種選擇問題。比如說我有一個開源的軟體,它有一些功能,然後有的人就會說我想要額外的功能。那些開源軟體就讓大家自己去fork,然後根據需求去修改裡面的東西,然後加一些功能就行了,這樣就會形成一個社羣,就有很多不同版本的軟體,或者是外掛。這其實也像遊戲,比如說原來大家玩的半條命,有的人就覺得老打怪物不好玩,我們要競技性的,然後就產生CS了。CS這個遊戲原來只是半條命的一個MOD,一個外掛,就像智慧合約一樣的東西,它受主體遊戲的限制。但因為愛好者太多,最後就單獨做成了一個遊戲。這是一個不錯的模式,智慧合約它的最大的作用在於它很有彈性,它可以去做各種事情,可以去建模各種通用的計算,這個功能很強大,但它的缺點也有,比如相對開銷比較大,要慢一點。然後如果真的一套邏輯已經發展到足夠常見,而且大家都很想用的地步了,那麼就應該被固化成為系統的內建的屬性之一,這樣就能實現更多的最佳化。而原來智慧合約的時候,你為了保證它的靈活性,就損失了一些效能。3. 看到 AVA 裡有 subnets 的概念, 能否從和 ETH2.0 的分片以及波卡的平行鏈比較來看 AVA 的 subnet 有什麼獨特的地方? AVA 裡有跨鏈的概念麼? 或者說和外部的鏈會有互動麼?其實可以想象成多個鏈或者分片,或者是類似網際網路的子網,這種東西本質的idea很簡單,我相信即使是沒有做架構背景的人,也很容易想到。所以我覺得想法本身的價值其實是低於它實踐起來的價值的。大家都有這類的東西,但是我們希望有用一種更好的方式把它組織起來,所以我著重介紹一下我們是什麼樣的,然後大家自己去評判區別和優缺點。所有的子網、鏈這些東西,我們都希望它在基礎的程式碼層面,因為如果全部抽象成類智慧合約,就會把效能拖得很低,因為這相當於是在模擬一個東西。我們首先提供給大家一個模板,讓大家來了個自己去實現一個在子網。就像剛才提到的,當你不想再用智慧合約虛擬出一個假的鏈來執行邏輯時,就可以去克隆這個程式碼產生新的虛擬的鏈,而這其實是在同樣的一批節點上執行的。那我們能不能把執行的節點進行一個劃分?這裡就存在兩個層面上的自由度。第一個自由度是說對於同一個節點,它其實可以去同時去模擬多個鏈。在不同的場景下,有時就需要更高的效率和更多的控制控制,比如說我是一家銀行,我希望有自己的鏈,這些鏈上的東西不能跟大家同步。而在銀行的同一個節點上,透過模擬多條鏈,就能很好的虛擬化這樣的邏輯。然後另一個維度的自由是說不同節點之間虛擬的這些鏈,他們之間不一定完全重合。比如說我有個節點,我只可以執行我喜歡那幾條鏈。而有特殊需求的鏈,就可以完全不夠同步資料出來。所以我們的體系架構就相當於給了大家更多的可能性。這種組合的可能性是很多的,這兩個層面的自由度是非常重要的。因為我感覺金融的場景就有很多這種苛刻的要求,總不能讓大家都混在一起吧?我們得能分開。4. 關於 51% 攻擊,直觀理解就是攻擊者資源比例達到51%就可以決定主鏈方向, 那麼在 AVA 裡可以避免 51% 攻擊的技術原理是什麼? 商業概念跟實際的技術概念是有差別的,首要要明白什麼叫做可防禦攻擊?在我們協議裡,不會出現到某個臨界點就崩潰的情況,而是取得一個平衡。我們可以透過犧牲系統的活性(效能)來容納更多的攻擊。也就是說如果系統裡真的有這麼多人攻擊,這個系統只有可能卡住了,但不會透過錯誤的交易,安全性還是沒有被破壞的。系統只是卡住了,你的錢還是錢,系統儲存的狀態還是一致的,但可能在一段時間裡沒有辦法接納新的交易。因為我們有這種靈活性,所以說理想情況下,有少量攻擊的時候或者沒有攻擊的時候,處理速度非常快,這是絕大部分的情況,因為處於攻擊的經濟收益考慮。但如果突然間出現了大量攻擊,那麼基於公示的特性,交易的確認可能需要等待更長的時間,但是同時保障了足夠的安全性。紅軍大叔:簡單的總結一下,可不可以理解為在攻擊發生的時這個系統並沒有崩潰,而只是共識的速度降下來了,所謂的靈活性就體現在這裡吧?Ted: 對,可以這麼理解。因為之前很多的區塊鏈它的原理是說受到攻擊的時候,它還是想保證共識出塊的速度不變,這很矛盾,也容易出現系統的崩潰,AVA的靈活性就能解決這個問題。5. 我們發現 AVA 裡有兩個共識引擎, 一個是 Avalanche, 一個是 Snowman. 那麼, 為什麼會設計兩個共識引擎? 各自的作用和機制是什麼呢? 這兩個共識是並行執行的嘛,高併發的交易,與合約的邏輯執行是在兩個網路中執行的嘛?這兩個共識如何互相作用實現互動呢?如果你去用一個牛刀去殺雞,顯然是沒有效率的。現在的區塊鏈還缺少應用,雖然合約在被越來越的使用,但現在的區塊鏈系統中絕大部分的操作都是普通的轉賬。所以說我們得一步一步來,既然主要的都是交易,那咱們為什麼不用一把專用的刀來執行特定的任務。但同時另外一邊比如智慧合約,我們也得讓它能夠執行,而且效能得足夠靠譜。那為什麼不結合一下?讓大多數的使用場景下,效率變得非常之高;而對於智慧合約這種更復雜級的應用,我們也去實現一個更好的方式。這樣你就會得到一個相對混合,但更好用的系統。有意思的是什麼?是這兩個系統他們的共識本質是一樣的,他們只是共識的利用方式不一樣。我們是有一個同一個核心的演算法,只是它有兩種不同的表現形式。如果裡仔細去思考DAG,我怎麼控制准入機制,誰能進來誰能出去,這時候staking就是個很棒的方式。既然有了押金,就需要有一套經濟激勵機制,那麼這套機制肯定靠DAG是沒法解決的,只有在全序的系統裡才能實現,而一個全序的DAG除了增加吞吐量之外,就沒有太多意義了,還不如把區塊體積變大。那麼這種情況下我們需要一個全序的鏈,它來記錄我們在某一時刻加入了多少人、退出了多少人、押金的情況等等,這種準如下就已經發生鏈與鏈之間的互動。因為你的錢其實是在主鏈裡的,你要交押金,押金又跟順序的邏輯相匹配。順序的邏輯就適合執行在智慧合約裡,所以我們決定把它分離成另外一個順序的鏈。#中本聰#Gossip
免責聲明:
- 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
- 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
- 鏈報僅提供相關項目信息,不構成任何投資建議。
推荐阅读