Godwoken 和 Polyjuice 是互補的:Polyjuice 提供了一種將自定義邏輯注入到 Godwoken 的 Rollup 方案,Godwoken 解決了 Polyjuice 的共享狀態問題,同時也提供了更高的 TPS 潛力。

原文標題:《CKB Style 的區塊鏈樂高:Godwoken 上的 Polyjuice》
撰文:Xuejie Xiao

在研究 Godwoken、Polyjuice 或其他與區塊鏈相關的東西之前,讓我們首先從過去數據庫領域的故事開始說起。

幾十年前,人們由於需要更好的工具來組織數據,所以 SQL 數據庫 應運而生。ACID 屬性 的設計是爲了讓數據可以在原始創建數年後,依然可以安全地寫入和讀取。在那個時代,一個數據庫只服務於有限數量的人,一臺機器(大型機,或後期強大的微型計算機)就足以支撐一個數據庫。

漸漸地,電腦開始普及,互聯網的爆炸式發展更是加快了這一進程。很快,單臺機器已經無法爲數據庫提供應有的支持,於是分佈式數據庫開始出現。然而,CAP 定理的發現(從一致性、可用性、分區容錯性這三個特性中最多隻能選擇兩個)給軟件工程師帶來了巨大的挑戰。最終,他們被迫在 CP 和 AP 數據庫之間做出選擇。爲了方便參考,我們用一個簡單的(雖然是單方面的)方法來區分 CP 數據庫和 AP 數據庫:

  • CP 數據庫保證了整個分佈式系統的全局一致性視圖;

  • AP 數據庫可能爲不同的邏輯部分或分區提供不同的視圖。

AP 數據庫,來源:https://kgrvamsi.wordpress.com/2013/05/28/riak-in-depth/

從亞馬遜的 DynamoDB,再到 MongoDB 的蓬勃發展,其中有一段時間 AP 數據庫受到了廣泛的關注。到處都有人在呼喊: 「NoSQL 纔是未來!SQL 就是一個過時的東西。」當時確實有很多人都選擇了 NoSQL 解決方案來構建自己的應用程序。在當時看來,數據庫的未來解決方案似乎確實就是分區的。

但故事並沒有結束。幾年後,AP 數據庫的缺陷開始浮出水面:當人們在設計系統架構時,來自不同分區的不同視圖確實會影響人們的決策。

舉個例子,假設你是一個基於傳統 SQL 數據庫構建的開發人員,你只需要關心邏輯表和它們之間的連接即可。偶爾可能會需要更多的性能查詢,但你的數據始終是保持有序的。然而在 AP 數據庫中,你只配備了鍵值(KV)存儲或文檔存儲。我們必須首先設計模式,但在此之上,你必須處理數據庫不同分區發生的不一致寫入。這大大增加了應用開發者的工作量,在很多情況下,這也會導致混亂的數據存儲。

即使從 CP 數據庫解決方案 DynamoDB 上線並使用至今的 AWS 來看,傳統的 SQL 數據庫仍然在被人們廣泛使用。只有在特殊情況下,比如購物車邏輯中存在特殊的合併功能,DynamoDB 纔會得到大量採用。對於日常開發者正在構建的絕大部分應用來說,AP 數據庫很難作爲一個很好的選擇。

現在我們來看看今天討論的熱點話題:NewSQL,它保持了原來 SQL 模型的 ACID 屬性,在大多數用例中作爲 NoSQL 的替代品而得到普及。由於設計上的要求,NewSQL 的解決方案大多甚至全部都建立在 CP 模型上:

  • Google Spanner 是 Google 面向未來的、全球規模的數據庫。它遵循 CP 設計,旨在提供比基於 AP 的 BigTable 更好的替代方案;
  • CockroachDB 和 TiDB 都是基於 CP 模型構建的現代開源分佈式 SQL 數據庫;
  • CitusDB,一個典型的基於 PostgreSQL 的可擴展數據庫,也是基於 CP 模型構建的。

還有很多例子可以舉,但趨勢已經很明顯了:開發者渴望通過 CP 系統以提高生產力。歷史向 AP 短暫地做了傾斜,但由於 CP 對開發者的友好性,人們最終又回到了 CP 的道路上。

從這個故事中,我們可以看到,開發者最終還是會選擇那些讓他們更有效率的工具。

現在你可能會想:這是一個很長的故事,但這和區塊鏈有什麼關係呢?

在 Nervos 中,我們堅信分層的解決方案。這從來都是我們深思熟慮的結果,是基於我們在軟件行業的豐富經驗而得出的結論。分層讓我們具備了一種設定邊界、封裝複雜性和提供假設的方法。

我們行業中有很多東西都是建立在分層架構之上的:網絡堆棧、編譯器基礎設施、CPU 架構等等,這樣的例子不勝枚舉。在這個行業,以及人類創建的許多其他行業中,我們可以看到一些層在構建時隱藏了細節,並同時爲上層提供支持。

即使對於那些認爲區塊鏈是一項全新技術的人來說,層的使用也呈現出明顯的差異:

  • 在一個分層網絡中,核心區塊鏈確保了其交易的全局一致性;
  • 分片區塊鏈的設計提供了不同的分片,每個分片都可以獨立工作。

看到這裏,你有沒有一種熟悉的感覺?你仔細想想,區塊鏈與分佈式數據庫是不是非常相似!雖然其中有很大的區別,但在我們看來,關於分層和分片的討論,類似於過去 10 年我們對於 CP 和 AP 數據庫之間的討論:在分層區塊鏈中,你是根據邏輯功能來對上層區塊鏈進行分組,將跨鏈通信的需求降到最低;而在分片區塊鏈中,跨鏈通信是擴展需求的基礎,無法避免。

假以時日,我們相信分層將會爲所有 dApp 開發者帶來更明顯的好處,就像 NewSQL 數據庫的崛起一樣。

很多人一直都想知道 CKB 上的 Layer 2 解決方案會是什麼樣子的,所以今天,我們就在這裏向大家介紹兩個互補的項目:

Godwoken:無需許可的 Rollup 框架

現在區塊鏈世界中存在很多擴展方案。有支付通道、Rollup、狀態通道、Plasma 等等。

在 Nervos 上,我們完全可以支持所有的這些方案,但實際上,我們必須從一個方案開始。在現有的解決方案中,Rollup 是最優的,也是最沒有缺陷的。因此,我們從 Rollup 開始了我們的旅程。稍後我們還會看到,由於 CKB 獨特的設計,Rollup 比單純提升 TPS 這種像類固醇般的方案來的更有意義。基於近一年的研究、設計和實現,我們已經發布了 Godwoken 的初始版本,也就是我們的無需許可 Rollup 框架。

Godwoken 的工作原理是通過一組 aggregator 節點收集專門設計的 Layer 2 交易,然後將它們打包成 CKB 交易,提交給 Layer 1 CKB 接收。從這個意義上來說,Godwoken 確實是以 Layer 2 的方式工作的:

  • 除了 CKB 節點外,還運行着特殊的 Godwoken 聚合器節點
  • 採用專門設計的 Layer 2 交易格式,來代替 CKB 的交易格式
  • 由 Godwoken 節點提交一個特殊的 CKB 交易,也可以看作是 Layer 2 區塊

儘管是 Layer 2 解決方案,但 Godwoken 背後的一個重要設計理念是,我們正在構建一個無需許可的 Layer 2 解決方案。

  • 就像 Layer 1 區塊鏈提供的那樣,Layer 2 交易用交易費用激勵聚合器節點;
  • 在 Nervos CKB 上可以進行多個單獨的 Godwoken 部署。每個部署都可以自由地做出自己的選擇。如果一個部署不能滿足你的要求,你還可以自由地切換到另一種部署,甚至可以啓動自己的部署;
  • 雖然一些部署可能會產生額外的限制,但 Godwoken 的核心設計是讓每個人都能向 Layer 2 區塊鏈提交區塊,使其像真正的無需許可 Layer 1 區塊鏈一樣擴展。

爲了展示更多關於 Godwoken 的內部信息,我們將在近期發佈一篇名爲《Life of A Godwoken Transaction》的文章,在文章中我們將介紹更多關於 Godwoken 設計和實現的細節。

值得一提的是,目前我們只發布了 Godwoken 的第一個版本,它僅限於以下設計選擇:

  • 將使用基於 Optimistic Rollup 的設計;

  • 通過 Proof-of-Authority 來控制 Layer 2 區塊的發行。

我們將繼續增加 Godwoken 的更多功能,其中包括:

  • 一個真正基於 Proof-of-Stake 的區塊發行協調機制

  • 基於 ZK Rollup 的設置

  • 以及更多!

最近,我們驚喜地發現,Rollup 正在區塊鏈世界裏迅速 流行起來 。我們很榮幸能夠站在巨人的肩膀上,並且非常希望能在這個領域做出更出色的工作,也希望能站在別人的肩膀上有所創新。

不過,使用 Rollup 框架只能解決問題的一半。一個只能發送原生代幣轉賬的解決方案終究不能解決所有問題。在競爭激烈且不斷增長的區塊鏈領域,往往需要一個智能合約解決方案來釋放更多的潛力。爲了解決這另一半的問題,我們還打造了 Polyjuice,它將與 Godwoken 互補運作。

Polyjuice:CKB 上 100% 兼容 EVM 的 Ethereum 解決方案

Polyjuice 是 CKB 上的以太坊解決方案,這意味着人們可以通過最小的改動,來將他們現有的運行在 Ethereum 上的 dApp 遷移到 CKB 上。Polyjuice 的設計目標是與 EVM 100%,甚至 120% 兼容,這意味着:

  • 任何在 Ethereum 上運行的基於 Solidity 的智能合約都可以在 Polyjuice 上運行;
  • Polyjuice 甚至可以提供更多今天在以太坊上無法實現的功能。比如你現在急需一個 EIP,Polyjuice 可以實現它來輔助你的 dApp;

需要注意的是,兼容性設計只適用於 EVM,Ethereum 也有支持的 RPC,應用程序可以通過 RPC 與鏈通信。遺憾的是,由於 Polyjuice 和 Ethereum 之間的設計不同,我們不能保證與 RPC 完全兼容。這意味着將您現有的 Ethereum dApp 在部署到 Polyjuice 之前需要做一些工作。

不過,我們將確保

a) 智能合約不需要更改;
b) 兩套 RPC 彼此相似。

我們會將這些差異清楚地記錄下來。這樣一來,移植工作會盡可能地減少。我們還將構建與 Portal Wallet 的集成,因此終端用戶可以獲得無縫的體驗。

我們在 2020 年 7 月份推出了 Polyjuice,之所以再次提到它,是因爲我們對 Polyjuice 進行了全面的審查和檢修,並修復了它最大的問題:處理共享狀態。

爲了演示共享狀態,我們假設開發者已經將一個 Ethereum 智能合約部署到 Polyjuice 上。在我們之前的模型中,人們會創建這樣一個 Cell:

要調用這個智能合約,必須要創建一個 CKB 交易,消耗該合約 cell 並創建一個新的合約 cell。

這就是問題所在:當多個用戶調用同一個智能合約時,他們都需要消耗並重新創建合約 cell。實際上,他們在競爭共享的合約狀態 cell。在大多數情況下,用戶不會知道其他人正在創建的交易;他們中的每一個都會使用鏈上最新的實時合約狀態 cell 創建一個交易。

這會導致多個交易消耗同一個合約狀態 cell,礦工不得不選擇一個交易,而這會導致所有其他交易無效。這是 CKB 選擇基於 cell 模型造成的結果,但這不一定是缺點:

  • 不需要單一共享狀態的情況還有很多,sUDT 就是這樣一個例子。對於這些情況,基於 cell 的模型提供了改進,比如提高了可擴展性和確定性;

  • 即使在共享狀態不可避免的情況下(如投票應用,或 AMM),也有解決方案:

在許多情況下,可以利用簡單的重試邏輯:可以創建這樣一條規則「只要交易包含輸入 1 和輸出 1&2,我就不關心輸入 0 是什麼,只需簽名併發送交易」。也可以給規則附加一個超時時間,比如 10 分鐘的窗口。對於相對較小的 dApp 來說,比如投票應用,這已經足夠了。

如果有些情況有其他需求,例如更高的 TPS 需求,那麼重試邏輯就不可行了。Rollup 在這裏提供了一個不同的方案。通過在 Godwoken 之上構建 Polyjuice,每個單獨的 Polyjuice 交易就可以只是一個 Layer 2 的 Godwoken 交易。這樣就避免了共享狀態問題,因爲只有打包好的 Godwoken CKB 交易纔會消耗合約狀態 cell,並重新創建一個更新後的狀態 cell。

在這裏,Godwoken 和 Polyjuice 是互補的:Polyjuice 提供了一種將自定義邏輯注入到 Godwoken 的 Rollup 解決方案,Godwoken 解決了 Polyjuice 的共享狀態問題,同時也提供了更高的 TPS 潛力。我們希望 Godwoken 和 Polyjuice 的結合,能對 Nervos CKB 仙境中的分層 dApp 設計有所啓發。

值得指出的是,Polyjuice 並不是 Godwoken 的唯一虛擬機解決方案。我們還可以將其他虛擬機與 Godwoken 集成,提供不同的 dApp 構建方式。例如,純粹的 JavaScript 虛擬機 是完全可以實現的,因此我們只需在區塊鏈中直接用 JavaScript 編寫即可。或者作爲更遠大的目標,在 Godwoken 的幫助下 CKB 上的 Diem 也完全可以實現。

爲進一步解釋 Polyjuice 的內部結構,我們也將於近期發表另一篇題爲《Life of A Polyjuice Transaction》的文章。

展望未來

在 Nervos 中,我們希望迎合兩種不同的開發者羣體:

  • 對於忙碌的應用開發者來說,我們希望提供一站式的解決方案,讓他們可以直接利用 Layer 2 EVM 驅動的區塊鏈來發布他們想要的任何東西。例如,如果我們告訴你,Uniswap 只需進行少量的調整,就可以部署到 CKB 上,那會怎樣?

  • 對於更有冒險精神的人來說,CKB 提供了完美的樂高風格部件,你可以自己拆卸和重新組裝。

    • 不喜歡通過 Solidity 來編寫智能合約?爲什麼不在 Godwoken 上搭建自己的虛擬機來實現不一樣的 Rollup 鏈呢?

    • Optimistic Rollup 聽起來很無聊?您可以隨意將其取出,並將其替換爲更具挑戰性的部分,比如 ZK Rollup。

    • PoA 的機制對你來說像是定時炸彈?那就把它刪掉,用你自己的 PoS 甚至 PoW 方案吧。

總而言之,我們希望這個全新的 Layer 2 Godwoken/Polyjuice 在 CKB 上的部署,可以類似於你可能習慣的汽車:你可以從經銷商處購買後將它開走(原廠),也可以打開它加裝渦輪增壓器,從而獲得更強勁的動力。我們已經做好了準備,你最終會對你全新「汽車」的所有改裝感到驚訝。