朋友們大家好,今天我們聊聊Solana。

Solana是一條高性能公鏈,以交易速度快和交易費用低著稱。

第一個問題就是:什麼是公鏈?

什麼是公鏈

Chatgpt老師的回答是:公鏈(Public Blockchain)是一種分佈式賬本技術網絡,任何人都可以自由參與和訪問。它是區塊鏈技術的最典型形式,旨在實現完全去中心化和開放性。

我用人話翻譯一下,公鏈是基礎設施,是去中心化世界的基礎。

一個通俗的比喻,公鏈相當於操作系統。比如IOS、安卓、Window、Linux,它們都是基礎設施,在操作系統之上有軟件、應用、app,有開發者、用戶、服務各種各樣的人提供服務、建立生態、互相掙錢。這些操作系統粗粗看上去都差不多,都能發微信、打電話、打王者、玩元神,用戶知道IOS和安卓手機的系統不一樣,但又說不出來具體哪不一樣。

公鏈也是這樣,BTC公鏈、以太坊公鏈、幣安鏈、Solana也是類似的,它們是區塊鏈世界的基礎設施,是生態的基礎,每條公鏈的原理都不太一樣,但是基礎的功能又都差不多。

在已經有BTC和以太坊兩大巨頭之下,Solana憑什麼能殺出重圍,成爲原生代幣市值排名第三的公鏈?原因就是Solana又快又便宜。

在詳細解釋它之前,我們先看看爲什麼其他的公鏈,又慢又貴呢?

爲什麼其他的區塊鏈網絡那麼慢

快慢是個相對概念,是比較出來的,通常會用TPS也就是每秒交易處理能力來衡量。

比特幣網絡的TPS是7,以太坊大概是15-20,而目前大家常用的卡組織,它們的TPS根本不在一個數量級,峯值情況下Visa和Master大概是5-6萬,而銀聯的峯值TPS甚至可以到達24萬。

毫無疑問,以太坊和BTC網絡都很慢。和傳統金融比起來,區塊鏈的性能簡直過於孱弱。

爲什麼比特幣和以太坊這麼慢呢?

主要原因是:在去中心化環境中,快速出塊和快速達成共識是矛盾的。

在區塊鏈中,交易寫入區塊鏈,並且和網絡中的其他節點達成共識,大家都認可、都把這條交易寫入賬本中,這條交易就確認完成了。

因此TPS是這樣被計算出來的:多長時間創造一個新區塊,以及一個區塊中能寫入多少筆交易。

對於BTC來說,10分鐘創造一個新區塊,每個區塊大概1M,每筆交易250字節,算下來大概7筆/秒。

是不是隻要區塊創造的足夠快、每個區塊足夠大,TPS就能無限上漲呢?

不是這樣,因爲達成共識也要時間。

現在比特幣網絡設定在10min產生一個新的區塊,是給網絡中的節點通信預留了時間。每一個發現新區塊的節點都會在向網絡中的所有節點廣播:我要打包新區塊鏈了哦,我先寫入,你們快來驗證一下,沒問題你們就寫跟我一樣的。

BTC網絡中,節點達成共識的通信方式叫“八卦協議”,不是諸葛亮的那個八卦,而是傳八卦的八卦Gossip。

模擬我們傳八卦的形式通信方式:節點接收到信息後會隨機傳遞給其他節點。就像在在茶水間碰見隨機碰見不同同事,抓住誰就向誰分享新獲得的八卦。八卦的傳遞路徑是隨機的,有可能多個同事都跟你分享了同一個八卦,好處是網絡容錯能力比較強,所有人都互相分享,總能獲知消息;缺點就是通信成本比較高,同一條八卦可能聽了好幾次,信息有可能被多次重複傳遞。

節點互相通信、以及驗證都需要時間,如果區塊產生的過於快,來不及傳遞達成共識就又產生了新的,而網絡中所有的節點都是平等的,意味着所有節點都有機會打包新區塊,當所有人都來不及和其他人溝通,新區塊就又產生了,然後就亂了。

一旦亂了,就意味着不存在共識了,每個節點都賬本都不相同,100個人有100套賬,網絡可以崩潰瓦解了。

有點像小朋友在課堂上發言,一個人說完,大家討論,再下一個人發言,大家接受的是有效的信息傳遞,當所有人同步說話的時候,只有一片混亂。

Solana爲什麼能那麼快

如果說,在去中心化網絡中,快速出塊和快速達成共識是矛盾的,那Solana做了什麼突破了性能瓶頸呢?

在上一部分我們談到,區塊鏈的吞吐速度由出塊時間和達成共識的時間決定,Solana也是圍繞這兩部分分別提升。

並行處理提升出塊速度

爲了防止“雙花”情況出現,區塊鏈的執行通常是串行的,避免一筆錢同時轉給兩個人,產生無中生有的效果。

但是串行一定慢,就像在超市結賬,只開一個結賬窗口意味着所有人都要排隊,加速進度的方式是“並行”——多開幾個窗口同時結賬。

Sealevel就是在處理這個問題,前置判定這筆交易是否有依賴項,是否訪問不同的賬戶和數據,有依賴項就串行處理,沒有依賴性就能並行處理。

Pipeling的並行表現在獲取、驗證、存儲的並行,分工的流水線作業,大大提升了出塊速度。

結果就是Solana的平均出塊時間達到了驚人的400毫秒。

層級網絡加快形成共識

Gossip協議的優點是穩健,缺點是所有節點間隨機通信,效率低。

想象一下一條發生在北京的消息,是通過八卦網絡,鄰居之間口口相傳傳到青海快,還是通過政令通道,中央傳到省、省到市、市到鄉,再到個人效率高呢。

如果給節點之間建立層次關係,就能更有效的通信。

Solana網絡中的節點並不是完全平等的,有輪值的Leader節點作爲核心,其他節點根據質押比例多寡決定靠近核心的遠近。

層級關係帶來的好處就是通信效率大幅提升。

Solana中的Turbine通信,就利用了網絡的層級結構,節點之間有導向性的傳遞消息。從第0層核心,到第1層高質押節點,再從第1層傳遞到它周圍的節點,僅兩跳傳遞,信息能夠覆蓋的節點範圍就非常廣了。

Gulf stream使得Solana的待處理交易池非常淺,也是充分利用了層級網絡。根據Leader輪值表把待處理交易提前發給下一個、下下一個Leader處理,把工作做在前邊,滯留在待處理池自然就少了。

邊緣節點優先向核心節點通信——處理交易;核心節點分層向外通信——驗證交易、產生共識。

節點的分級,使得通信效率大幅提升。

加上PoH的歷史證明方式,使得每一筆交易都有一個時間戳,相當於給所有的交易做的全局排序,把交易記錄也成鏈的串起來。驗證節點驗證的成本就小了很多。

層級網絡的有效快速溝通,加之PoH的全局排序,使得Solana網絡中的節點能夠快速達成共識。

在400ms的極速出塊前提下,Solana網絡中的節點也能有效達成共識,理論上設計TPS可以高達6.5萬。

而這個吞吐量已經可以和卡組織的峯值TPS媲美了。

越複雜越脆弱

在Solana官網上,有它的八大創新,在白皮書中也花了30頁的篇幅詳細介紹了什麼是PoH。和BTC網絡比起來真的複雜了非常多倍。複雜的設計除了能帶來高性能之外,副作用就是過於脆弱,從上線以來,宕機次數有一隻手都數不過來。

對於Solana不穩定的服務,很多人都指責是因爲不夠“去中心化”。

我的個人觀點:中心化不一定代表服務脆弱。同理,去中心化也不代表絕對的安全。

以大家都很熟悉的電商平臺爲例,京東淘寶拼多多,哪一家都是中心化的網絡平臺,商家的交易都要過平臺,商品由平臺審覈後發佈。但過往一年能夠感知到的淘寶宕機微乎其微,只要容災備份做的好,高可用演練多來幾次,即使某處機房着火了都不影響線上服務。

而去中心化做的再好也不能完全杜絕代碼有問題、有bug被攻擊的情況產生。

每一次的宕機都有不同的原因,我相信Solana團隊也在盡力修補漏洞,讓公鏈服務更加可靠。

反倒是過於複雜的設計,會帶來脆弱的系統。

也許現在的Solana團隊還沒有掌控這麼複雜項目的能力,也許是這套公鏈方案設計本身存在缺陷,需要繼續打補丁。

Solana需要成長,但去中心化不是安全的必要條件。

權衡與平衡

理解了Solana高速吞吐的原理之後,我意識到它的性能突破是犧牲了部分去中心化特性換來的。

極端的去中心化意味着節點之間完全平等,達成共識並不容易,需要反覆通信,結果就是效率低下。如果暫時不能理解,就回想一下開會的時候如果都是平級同事,很難達成一致,總得有一個人站出來主持大局。

極端中心化的狀態下,不需要達成共識,所有節點都聽從中心節點的安排就行,令行禁止,效率非凡,就像領導指派工作,大多數情況下員工只能說“好的收到”。

去中心化不是絕對的有或無的概念,中心化與去中心化也不是非0即1的關係,大概是個光譜。

做個不恰當的類比,極端的中心化就像古代的皇帝,所有人都聽一個人的;

極端的去中心化大概是無政府狀態,誰也不領導誰,比如比特幣網絡,節點之間平等通信。

但是在0和1之間,還有廣闊的中間地帶,很難說絕對的中心化還是絕對的去中心化。

比如班級管理中所有小朋友輪流當班長,誰都是中心但誰又都不是中心,這是Solana的輪值Leader方式;

再比如每年競選,在所有小朋友中選出幾個人組成班委,定期輪換,長期來看“核心”並不穩定集中,也是介於中心化與去中心化的模糊地帶。

效率和去中心化的權衡,沒有十全十美,也不會有“多快好省”俱全。

BTC用緩慢處理速度換來了安全穩定的去中心化網絡,以太坊網絡向效率方向邁了一小步,如今的Solana邁了一大步出去,當然代價也顯而易見。

我覺得Solana的嘗試是積極的,一片空白的世界不應該只有兩個巨頭,它倆合起來也喫不下整個生態系統。還有很多場景的需求沒有滿足,很多問題需要解決。

解決的過程也是尋找平衡的過程:在絕對的去中心化,和絕對的效率兩極中間,什麼情況下應該選擇什麼,什麼情況下又應該犧牲什麼。

Solana權衡利弊,踩在了效率和去中心化蹺蹺板的一個點上。

但蹺蹺板不止一個點,三足鼎立也許也不是終態,一起且行且看,朋友們我們下週見。

$SOL