一個工人,幹四份活
想像一家小小的餐館,從頭到尾就一個人:他給你帶位、給你做菜、把每一只碗都刷了、還把帳也記了——全靠他自己,招待每一位客人。店裡清閒時,這套法子轉得動。可一旦人潮湧進來,這個累得團團轉的人,就成了整家餐館能跑多快的天花板。你沒法在不找一個更快的人的前提下多招待客人,而任何一個人能有多快,是有極限的。
一條經典的鏈,比如早期的 以太坊,就是那個累得團團轉的人。每一個 全節點 都被要求,為每一筆 交易同時幹四份活:重跑一遍運算(執行)、就那唯一真實的排序達成一致(共識)、確保底層資料真的被發布出來、任何人都能去查(資料可用性),還要把最終敲定的狀態錨定下來、爭議在這裡裁決(結算)。把這四樣全捆進一個節點、再讓所有人來跑,這就是我們說的單體設計。它簡潔優美、自成一體——可也跟那個孤身一人的廚子一樣,有一道硬天花板。
把鏈拆成一層一層
第一個點子,跟當初拯救我們那家餐館的是同一個:請專人。僱一個專門的廚子、一個專門的洗碗工、一個會計、一個帶位員——各自只幹自己最拿手的那一件事,而且並行地幹。一條 模組化區塊鏈 做的正是這件事。它不再讓一條鏈把四份活全包了,而是把它們拆成各自獨立的分層,讓每一層都能被單獨地最佳化、擴展,甚至單獨替換掉。
通常這麼一切,會切出三到四個角色。執行層負責跑交易、算出新的狀態——繁重的活兒都住在這一層。結算層是那個受信任的大本營,爭議在這裡裁決、最終狀態在這裡錨定。共識層就那唯一真實的事件排序達成一致。而資料可用性層,則擔保原始的交易資料確確實實被發布了出來,於是任何人都能把它下載下來、親自去核對那一遍執行。把這幾樣拆開,每一樣都能為自己那份活兒狠狠地調優一番。
MONOLITHIC MODULAR (one node, all jobs) (specialized layers) +-------------------+ +-------------------+ | EXECUTION | | EXECUTION (L2) | fast, cheap | CONSENSUS | +-------------------+ | SETTLEMENT | -> | SETTLEMENT (L1) | secure anchor | DATA AVAIL. | +-------------------+ | (all in one) | | CONSENSUS + DA | shared base +-------------------+ +-------------------+
Rollup 怎樣嵌進這套堆疊
這正是一條 rollup 大顯身手的地方,也是為什麼模組化這套說法和 第二層 那套說法,其實是同一個故事。一條 rollup,是一個住在某條基礎鏈之上的執行層。它把忙碌的活兒挪到一旁去幹——成千上萬筆交易,在那裡被便宜地排序、運算——然後把它們打成一捆,再把一份緊湊的摘要回貼到安全的基礎層上,通常就是以太坊。基礎層從不去把那一筆筆交易重跑一遍;它只是握著資料和證明,並把自己的安全性借給那個結果。
於是一條 rollup,就是一套模組化堆疊裡的執行層,而基礎鏈則扮演結算加資料可用性。神奇之處全在最後那個詞上:透過把自己的原始資料回貼到基礎層,一條 rollup 讓任何人都能重建並核對它幹的活兒,於是它繼承了基礎層的安全性,而不必另起爐灶自造一套。一條 ZK Rollup 還更進一步,附上一份 零知識證明,證明這一捆是算對了的——一張小小的收據,基礎層眨眼之間就能驗掉,根本不必把數學重做一遍。正是這一手,讓你能同時擁有便宜的執行與強勁的安全,也就是三難裡那個被禁止的配對。
分片:拆的是負載,不是分工
分片 從另一個角度去攻同一道天花板。這個點子是從那些龐大資料庫如何應付海量資料裡借來的:別再要求每個節點都去處理每一筆交易了。換個法子,把網路分成一個個子集——分片——讓每一個分片只處理屬於它自己的那一片流量。十個分片,各自並行地扛著十分之一的負載,加起來差不多能幹一個分片十倍的活兒。模組化拆的是活兒的種類,而分片拆的是把同一份活兒的工作量分攤到各個組裡。
麻煩在於,把負載拆開,可能連安全性也一併拆掉了。如果每個分片只有十分之一的驗證者在盯著,那麼一個本來根本威脅不到整張網路的攻擊者,也許就能廉價地把某一個孤零零的分片壓垮。讓分片之間安全地互相通話,再把 驗證者 不停地洗牌輪換、好讓沒有哪個分片能被悄悄拿下——這事兒原來是真的難——這也正是為什麼早期那些分片方案如此雄心勃勃、卻又遲遲落不了地。
前沿這邊有個出人意料的轉折:這兩個點子最終合流了。以太坊沒有去給執行分片,而是只給資料可用性層分片——把發布資料這件又便宜又充裕的活兒,分攤到整張網路上去,同時把執行留給上面那些 rollup。這就是資料分片,也是整套模組化哲學最乾淨俐落的一個示範:給那個容易擴展的部分分片,給那個難啃的部分配專才,再讓各層之間彼此借用安全性。
權衡,與本篇要點
這一切沒有一樣是白來的。一條單體鏈,有一個清清楚楚的故事、一個安全與資料共處的地方、也沒有可供漏風的接縫。一套 模組化 系統,是靠在接合處添上複雜度來換取規模的:資料必須被可靠地發布、證明必須被核驗,而在各層之間挪動價值,就需要一座 跨鏈橋——這歷來是整個領域裡被攻擊得最兇的那一個點。零件越多,就越多地方能出那種微妙的差錯,而這個領域至今仍在火熱地摸索,到底怎樣把各層黏合到一起才最好。
把這幅核心圖景攥牢,剩下的就都順下來了。單體把每一份活都塞進一個節點——簡單,但被它最忙的那個節點封了頂。模組化把每一份活——執行、共識、結算、資料可用性——交給一個專門的分層,於是每一層都能自顧自地擴展。Rollup 就是那個執行層,它在一旁把活兒便宜地幹掉,再向基礎層借來安全性。分片 把負載分攤到一個個子集上,而現代的設計,給容易又充裕的那部分——資料——分片,同時把難啃的部分留給 rollup。三難 這片前沿下的那一注大賭是:你再也不必三選二了——只要接縫搭得對,一摞樸素的分層疊起來,就能去中心化、安全、而且快,三樣一齊擁有。