UTXO 模型和賬戶模型本質上是一樣的,UTXO 模型只是一個軟件定義版本的賬戶模型。

原文標題:《當我們在說賬戶模型的時候,我們在說什麼》
撰文:學姐

在區塊鏈世界中,人們普遍認爲,在可用性方面,帳戶模型比 UTXO 模型更有優勢,我一直在努力彌合區塊鏈 [1] 中的 UTXO 模型和帳戶模型之間的差異。

關於這個問題,有一些初步嘗試 [2]。

但是最近,我開始覺得 UTXO 模型和賬戶模型本質上是一樣的,或者如果我們用術語來重新表述的話,UTXO 模型只是一個軟件定義的版本的賬戶模型。如果你對此感到疑惑,我將在下面詳細解釋。

爲了使事情更容易理解,在這篇文章中,我將只使用 UTXO 模型的說法。瞭解我們的人都知道,我們將 UTXO 模型推廣到了 cell 模型。cell 模型的附加優勢在這裏並不重要。下面我將討論任何能夠存儲數據的 UTXO 模型 (比如 CKB 的 cell 模型,或者在使用 OP_PUSHDATA 的老式普通的比特幣的 UTXO 模型),在編程模型方面都可以與帳戶模型等價。

什麼是賬戶模型?

在基於賬戶模型的區塊鏈中,交易只說明操作或帶有參數的函數調用。實際的狀態,是從區塊鏈中計算和推導出來的,如下圖所示 :

一文讀懂賬戶模型與 UTXO 模型的區別與聯繫

而在基於 UTXO 的區塊鏈中,狀態都包含在交易中。你直接在交易中放入你想要的數據。通常,多個 UTXO 可以一起工作來提供整個狀態的一部分。當你希望更改一部分數據時,你可以將該部分的 UTXO 作爲交易中的輸入包括進來,並提供一個包含更新數據的新 UTXO。

如下圖所示:

一文讀懂賬戶模型與 UTXO 模型的區別與聯繫

關於這兩種模型的爭論已經有一段時間了。一個明顯的考慮是,賬戶模型的交易體積更小,但作爲交換,必須在基於賬戶的區塊鏈中計算狀態,更糟糕的是,同一賬戶的交易需要順序執行。另一方面,基於 UTXO 的區塊鏈只需要進行驗證工作,以確保提交的數據格式正確,訪問同一賬戶不同部分的交易也可以並行驗證,以獲得更好的性能。但是,我們要付出交易體積比較大的代價,因爲交易需要包含實際的數據。

但這不是本文的重點,每種解決方案都有避免各自缺點的方法。人們普遍認爲,在構建 DApp 時,賬戶模型比 UTXO 模型更具有優越性。另一種說法是,基於 UTXO 的區塊鏈不能使用帳戶模型擁有 DApps。這是真的嗎 ? 讓我們在這裏找到答案。

一個小轉換

我們將在這看到一個類似於 ERC20 的 token 的轉賬操作。在帳戶模型中,通常有一個 token 帳戶存儲所有用戶的 token 餘額。當有人想要轉賬時,只需要提交說明 from, tobalance 的交易以進行轉帳:

一文讀懂賬戶模型與 UTXO 模型的區別與聯繫

然後,區塊鏈執行鏈上的交易,並更新包含更改的內部狀態。

我們如何在 UTXO 模型中表示它?一種觀察是,典型的基於帳戶模型的通過鍵-值存儲表示整個帳戶狀態。我們可以接受同樣的抽象概念:

  • 爲每個帳戶創建預定好的一定數量的 cell(注:可理解爲格子)。實際上,你只需要定義這裏的數字,缺少的 cell 可以解釋爲虛擬的 cell。
  • 每個單元格都將整個空間的一部分存儲在鍵-值中;
  • 如果交易需要更新某個值,它首先查找包含該值的鍵的 cell,並將相應的 cell 作爲交易輸入,然後提供一個包含更新數據的新的 cell;

下圖顯示了這種交易示例:

一文讀懂賬戶模型與 UTXO 模型的區別與聯繫

這裏整個帳戶狀態包含 4 個 cell,但是由於只需要更新 2 個 cell,所以交易只包含這 2 個 cell。

你可能會注意到,這看起來很像數據庫和文件系統中使用的 B-tree[3] 數據結構。在 B-tree 結構中,你希望最小化實際修改的 page,這與我們基於 UTXO 的設計完全相同:你希望在交易中包含和修改儘可能少的 cell。這意味着雖然我們擁有一個簡單的設計,但是你可以利用在 B-tree 領域積累的豐富的研究來構建更好的設計,從而提供更好的結果。

如果我們考慮這裏的方案,它實際上並沒有利用任何特定於應用程序的知識,唯一的假設是帳戶模型使用鍵-值存儲,現在已經是這種情況了。這意味着我們可以在 UTXO 模型的基礎上構建一個賬戶模型 generator:

  • generator 響應來自 DApp 開發者的讀取請求,查詢該賬戶當前活動的 cell,提取所提供的鍵的值;
  • generator 還接受帳戶模型風格的函數調用,它使用當前的活動的 cell 運行該函數,並生成包含更新 cell 的交易,將交易傳遞給區塊鏈以供接受。爲了提高靈活性,我們可以在這裏引入 賬戶模型風格的虛擬機,如 EVM、Move 等 ;
  • 然後,鏈上智能合約 可以運行由 generator 運行的相同代碼,以驗證生成的數據是否正確。如果使用了 EVM 或 Move 這樣的 VM,我們可以將相同的 VM 移植到鏈上智能合約,並在這裏執行相同的操作。

當然,需要構建這個新的 generator,使基於 UTXO 的區塊鏈的行爲類似於基於帳戶的區塊鏈。我在這裏的觀點是,這是一條完全可行的路線,這意味着基於 UTXO 的設計,永遠不會妨礙基於帳戶模型構建的 DApp。

在 Generator 中複製邏輯不是一個壞主意

對這條路線的不斷批評,也是我之前所擔心的,是我們在鏈外 generator 部分和鏈上智能合約中都複製了邏輯。但最近,我一直在質疑這一點:這真的是一個問題嗎?在區塊鏈的世界裏,一個被廣泛遵循的原則是「不要相信它,去驗證它」(don't trust, verify)。一項交易中包含的智能合約不僅會在單個節點上運行,還將在每個區塊鏈節點上運行。我們已經執行了 N 次相同的智能合約,如果 generator 再執行一次,並使其成爲 N + 1,這真的很重要嗎?我們都知道 N + 1N 沒有區別。我個人認爲 generator 部分只是另外一個輕量級客戶端節點,可以再次驗證智能合約。這不會給我們現有的區塊鏈設計帶來任何問題。

如果你仍然對此感到疑惑,那麼實際上還有另外一個觀點:除基於鍵值存儲的帳戶模型外,以上設計均基於其他假設。當我們談論特定的 DApp 時,很有可能會利用某些屬性,因此鏈上智能合約不必運行與鏈下 generator 完全相同的代碼。例如,在一個 ERC20 token 例子中,實際上只有 2 條規則需要在鏈上驗證:

  • 交易具有有效的簽名;
  • 正常交易不能發出大於當前發行量的 token。

一旦滿足了這兩個規則,ERC20 相關代碼的其餘部分就可以在鏈下安全地運行了。這意味着你不必再次在鏈上重新運行相同的代碼。但這只是針對特定 DApp 的優化,我甚至會質疑是否有必要進行優化。對我來說,前面的更通用的解決方案已經工作得很好了。

軟件定義世界

當然以上描述的 generator 部件需要進一步開發。但是,如果我們將目光投向區塊鏈世界之外,再看看一般的軟件行業,我們會注意到一種不可阻擋的趨勢:

  • CPU 從 CISC[4] 設計轉移到 RISC[5] 設計,使用基於軟件的編譯器來填補 RISC 中缺失的部分。
  • 高度專業化的基於硬件的交換機正在被利用複雜軟件 [6] 的普通計算機吃掉
  • 附加存儲或存儲區域網絡的傳統網絡已被採用軟件定義的存儲 [7] 的商品雲所取代
  • 即使在通訊塔中,也已經部署了更多軟件 [8] 提供更好的性能

你注意到一個模式了嗎?我們看到的是一個複雜的硬件被簡單的硬件迅速取代的世界。越來越多地使用高度專業化的軟件來補充過去硬件中的功能。在 Nervos Network 中,我們認爲區塊鏈更像是硬件而不是軟件,並且,如果我們看看 UTXO 模型與帳戶模型的爭論,我們會看到類似的衝突:

  • 基於帳戶的區塊鏈在區塊鏈(硬件)部分增加了更多邏輯;
  • 基於 UTXO 的區塊鏈在區塊鏈(硬件)部分中加入了更少的邏輯,並利用軟件來補充更多的特性。

如果我們只看到一種或兩種情況,這可能只是一個異常,但我們看到的是:從行業角度來看,看到了更多從硬件向更多軟件的轉變。我不確定你的看法,但我個人認爲,我們這個行業的所有聰明人都做出了正確的選擇 :P

參考資料:

[1] 區塊鏈 :
https://github.com/nervosnetwork/ckb

[2] 初步嘗試 :
https://medium.com/nervosnetwork/https-medium-com-nervosnetwork-animagus-part-1-introduction-66fa8ce27ccd-cfb361a7d883

[3]B-tree:
https://en.wikipedia.org/wiki/B-tree

[4]CISC:
https://en.wikipedia.org/wiki/Complex_instruction_set_computer

[5]RISC:
https://en.wikipedia.org/wiki/Reduced_instruction_set_computer

[6] 複雜軟件 :
https://github.com/snabbco/snabb

[7] 軟件定義的存儲 :
https://www.redhat.com/en/topics/data-storage/software-defined-storage

[8] 更多軟件 :
https://venturebeat.com/2019/06/17/ericsson-updates-5 g-cell-tower-software-to-improve-speed-and-coverage/

來源鏈接:mp.weixin.qq.com