由于不需要在共識過程中運行智能合約,區(qū)塊鏈的處理能力會被解放,并且全局狀態(tài)爆炸問題也可以得到解決。
撰文: KJ
銘文現(xiàn)象
銘文在 2023 年末的時候大火了一把,這一現(xiàn)象讓眾多鏈圈開發(fā)者跌破了眼鏡。
從技術上來講,銘文采用了鏈下計算(indexer)的方式,使得本來智能合約能力有限的比特幣可以實現(xiàn)類似 ERC20 的基本功能。由于使用此類技術實現(xiàn)的功能有限,比如 ERC20 和 NFT 中常用的白名單技術,較難實現(xiàn),所以市場以「公平發(fā)射」的名義給銘文技術注入了活力。
從不理解銘文(幣圈理解為「公平發(fā)射」),到理解比特幣銘文(實際上為礦工創(chuàng)造了很多額外的挖礦收入,從而得到了礦工的支持),到其他 EVM 鏈甚至 Non-EVM 鏈的跟進(理解為蹭熱度)。大眾對于銘文的理解,更多偏向于短期掙快錢的炒作。
當熱度開始消退,當大家在思考銘文還能持續(xù)多久的時候,我們從銘文技術思路中,看到了對區(qū)塊鏈底層技術發(fā)展的可取之處。本文試著給銘文技術做一些變形,探討使用銘文技術是否可以演化出更有意思的區(qū)塊鏈技術?
前置知識
閱讀本文需要對區(qū)塊鏈和智能合約底層有一定的了解。
我們使用狀態(tài)機來建模區(qū)塊鏈和智能合約。狀態(tài)機接收一個輸入,通過狀態(tài)轉換函數(shù)定義的規(guī)則,轉換為下一個狀態(tài)。
- 其中,輸入就是被打包進一個區(qū)塊的所有交易。
- 狀態(tài)轉換函數(shù)可以是區(qū)塊鏈的規(guī)則,比如轉賬,也可以通過智能合約自定義規(guī)則。銘文的 indexer 也是一種狀態(tài)轉換函數(shù)。
- 狀態(tài)機的狀態(tài),對應著區(qū)塊鏈和智能合約的全局狀態(tài)。如果所有的全局狀態(tài)都被刪除,但是所有歷史交易都是被保存的,就可以通過交易和狀態(tài)轉換函數(shù),重建所有狀態(tài)。
將規(guī)則放到鏈上
詬病銘文技術的主要原因,來自于銘文系統(tǒng)的中心化。Indexer 來自于一個第三方為比特幣的交易賦予新的規(guī)則。如果多個索引器使用不一樣的規(guī)則解釋銘文交易,就會出現(xiàn)不一樣的結果。
一個顯而易見的方式,就是將 indexer 程序寫到鏈上。這在比特幣中是較為昂貴的操作,如果在新設計的區(qū)塊鏈上實現(xiàn),則相對簡單。
實現(xiàn)規(guī)則上鏈以后,我們會發(fā)現(xiàn),銘文和區(qū)塊鏈合約的差距在縮小。驗證銘文交易變的去中心化了,因為規(guī)則是一樣的。但是,銘文和智能合約剩下的差異是什么呢?
先上鏈,再驗證
智能合約的規(guī)則在于,先驗證,再上鏈。如果一個 NFT 數(shù)量有 100 個,那么前 100 個 mint 操作會成功,第 101 個 mint 則會失敗。如果合約被正確的實現(xiàn),第 101 個 mint 操作不應該收取交易手續(xù)費,也不會被打包進區(qū)塊鏈。
銘文完全不同,是因為礦工在打包交易的時候,完全不用管 100 個 mint 名額是否耗盡,它只負責把交易打包進區(qū)塊當中,而不執(zhí)行交易內容,不去驗證交易的合法性。
這對于礦工來說,降低了很大負擔 1) 不需要運行虛擬機 2) 不需要保存全局狀態(tài)。當然,負面影響也很大,用戶發(fā)出的交易有可能不成功。比如用戶只有 10U,嘗試轉出 15U,交易也會被礦工打包,手續(xù)費也會被收取,但是交易是無效的,用戶必須自己驗證轉賬是否成功。
狀態(tài)的延遲計算
總結上面的銘文模式,先上鏈,再驗證,我們得到了狀態(tài)的延遲計算。
如果我們將現(xiàn)有區(qū)塊鏈改成這樣的模式,是不是可以大規(guī)模的提高區(qū)塊鏈的吞吐量。由于這樣的區(qū)塊鏈在共識階段完全不需要考慮狀態(tài)大小和虛擬機執(zhí)行效率,它的速度是極快的。
進一步,我們是不是可以在銘文智能合約上進行新的優(yōu)化?
專注合約計算
大家知道,智能合約有全局狀態(tài),所有的節(jié)點都需要計算所有的交易輸入。那么這個世界計算機的執(zhí)行速度,是遠遠滿足不了全人類的需求的。但是,有可能大部分的需求,會集中在 ERC20 轉賬合約,SWAP 以及其他 DeFi 應用。延遲計算是否意味著不需要對所有的共識過的交易進行計算。
我們可以讓一個節(jié)點專注于 USDT 相關的合約狀態(tài)計算。比如 SWAP,通常一個 SWAP 需要它合約本身以及依賴的兩個 ERC20 合約參與,所以一個節(jié)點可以專注于一個 SWAP 池子和它依賴的兩個 ERC20 合約的狀態(tài)計算。對于其他節(jié)點,可以做與 USDT 無關的狀態(tài)計算,比如 USDC,或者 NFT 的狀態(tài)。
銘文智能合約區(qū)塊鏈
由此,我們設計了一個銘文思路驅動的智能合約的區(qū)塊鏈。它的核心有兩點,1) 把 indexer 程序規(guī)則放到鏈上 2) 先共識交易輸入,后計算狀態(tài)。
在實現(xiàn)和測試之前,我們不知道這個想法會發(fā)生什么?我們預期它可以改進智能合約的性能瓶頸,由于不需要在共識過程中運行智能合約,區(qū)塊鏈的處理能力會被解放,并且全局狀態(tài)爆炸問題也可以得到解決。