作者:阿劍
本文嘗試爲比特幣上的一種資產發行協議 RGB 提供一份簡潔的描述(也可以將它理解成一種鏈外智能合約系統),並指出其迥異於其它旨在實現相同或相似功能的協議的地方,這些區別使得 RGB 協議的可擴展性遠遠超過它們,並且留下了更廣大的編程空間。除了介紹 RGB 已經完成的設計,我們還會探討這些編程可能性。
在比特幣上發行資產的想法由來已久。但比特幣協議有自身的特性:其狀態由且僅由比特幣 UTXO(「未花費的交易輸出」)來表達;一個 UTXO 僅攜帶兩個數據:它自身的面額(比特幣價值),以及一個「腳本公鑰」(也稱爲「鎖定腳本」),用於編程這筆資金的花費條件,例如:提供某個公鑰的籤名;允許用來編程鎖定腳本的操作碼由比特幣的共識規則提供,它們不能用來實現任意的安全規則。因此,我們不可能在 UTXO 內部創造其它資產——比特幣腳本不能編程出這些資產的安全檢查。這就意味着,所有在比特幣上發行資產的想法,本質上都是對比特幣區塊空間的創造性使用。這意味着,我們需要設計一種鏈外的智能合約系統,並要求將改變合約狀態的步驟——例如,合約 A 改變了參數,B 將一定數量的某種資產轉移給了 C——的信息上傳到區塊鏈,從而,可以通過收集這些信息,獲得這個智能合約系統的最新狀態。
一種粗糙的設計思路是,將改變合約狀態的步驟的信息原封不動地上傳到比特幣區塊鏈。這當然是可以工作的,但是,它會面臨幾個方面的問題:
(1)由於上傳了完整的信息,它可能會消耗較多的區塊空間,當用戶需要改變合約的狀態(例如轉账)時,也將需要付出更多的鏈上手續費。尤其是,當我們希望這樣的鏈外合約系統具備比比特幣更好的可編程性時,可編程性的增加可能以消耗更多的區塊空間爲代價;
(2)區塊內的幾乎任何一處的信息,都有可能改變鏈外的智能合約,因此,用戶必須獲得所有的比特幣區塊數據,才能得出這個鏈外合約系統的最新狀態,即它的驗證成本更高;
(3)取決於鏈外智能合約系統的設計,也許只能獲得跟比特幣相當的隱私性,甚至更差的隱私性;而如果可以提供更多的隱私性,又可能需要消耗更多的區塊空間。
過去,一種使用量較大的協議叫做「Omni」,它不會上傳鏈外合約交易的完整信息,只會上傳交易的哈希值。這種做法解決了上述問題 ,使鏈外合約交易的復雜性與其經濟成本解耦;但用戶依然需要獲得全量的比特幣區塊數據,才能得出 Omni 協議的最新狀態;此外,它也並沒有專門加強隱私性。
而 RGB 則使用了一種新的範式,叫做「一次性密封(single-use seals)」。它的用法很簡單:RGB 要求每一個合約的每一個狀態,都必須附身於某個比特幣 UTXO;而一旦要變更這個狀態,就必須花費這個 UTXO、讓花費它的交易得到區塊鏈的確認;此外,花費它的比特幣交易還必須提供狀態轉換的內容的哈希值,以指明變更後的狀態所附身的 UTXO。
在 RGB 开發者看來,這種設計跟帶有編號的塑料密封條有類似的地方:很容易看出它是否被拆過,而且一旦被拆過,就無法再用了。但是,另一種角度是,將被附身的 UTXO 當成這個狀態的容器或者說陶瓷存錢罐——想要拿出存錢罐裏的錢,就必須打破這個存錢罐,然後把裏面的錢放到新的罐子裏。
這種設計與此前的把整個區塊都當成一個大寫字板的協議形成了鮮明的對比:使用 UTXO 當容器,就意味着,不花費這個 UTXO 的交易對容器裏面的合約狀態不能構成任何影響,因此,要驗證某一個合約的某一個狀態,我們就不需要獲得全部區塊的數據了,我們需要的只是一連串的比特幣交易、這些比特幣交易在某個區塊中存在在證據、這些比特幣交易所承諾的 RGB 狀態轉換(跟相關的比特幣交易一一成對),即可。這些可以串聯成一個鏈條的數據,應該能讓我們上溯到這個合約的初始狀態,使我們能夠辨認這個狀態的實質。
對於熟悉鏈上智能合約系統(比如以太坊)的讀者來說,這個過程難以理解的一個地方在於:如果不依賴於區塊鏈的共識(它意味着合約的初始狀態和每一次狀態變更都會被每一個節點驗證),這種智能合約系統的安全性是如何保證的?如何保證自己收到的資產就是自己想要的那一種,如何確保資產沒有被非法增發?
答案也很簡單,叫做「客戶端驗證(client-side validation)」——你自己驗證。在鏈上合約系統中,節點根據公开的狀態轉換規則,驗證每一次狀態轉換操作、拒絕掉無效的操作,從而根據初始狀態計算出最新的狀態。但是,只要狀態轉換規則和初始狀態是可知的,通過鏈上共識來驗證就不是唯一的辦法,用戶可以根據支付方提供的資料,自己驗證狀態轉換的每一步是否都遵循了最初定義的狀態轉換規則。通過這種辦法,驗證的一方(假設是資產的接收方)同樣能檢查出非法的狀態轉換,並拒絕接受。
最後,我們用一個例子來展現 RGB 協議的特點:
現在,Alice 擁有 UTXO A』,保存着依據 RGB 協議發行的 X 單位的資產 Y,她希望將 Z 單位的 Y 轉移給 Bob。這批資產一共經歷了 5 個前任所有者(包括資產發行者),才到達 Alice 手上。因此,Alice 要給 Bob 提供這 4 次狀態轉換的證據(這其中前面 3 次的證據都是由前任所有者提供給 Alice 的),包括合約的初始狀態和狀態轉換規則、每一次轉移所用的比特幣交易、每一筆比特幣交易所承諾的 RGB 交易、這些比特幣交易得到某個區塊確認的證據,一起發送給 Bob,Bob 將根據合約的狀態轉換規則,驗證這 4 次轉移沒有違反規則,然後再決定是否要接受。當 Alice 構造 RGB 交易時,由於 Z 小於 X,她也要給自己安排一個 UTXO 來接收剩余的部分。最後,Alice 將這筆 RGB 交易的哈希值嵌入花費 UTXO A』 的比特幣交易中,完成這次支付。
最終,由於使用了 UTXO 容器,一個 RGB 的合約的最新狀態可以表示成一個有向無環圖上還沒有後代的點(每個點都表示一個存放在 UTXO 容器內的狀態)。並且,對下圖中的所有者 P 來說,他將只知道從合約的初始狀態 G 到達他的過程,也即紅圈標注的過程,而對灰色的點一無所知:
如上所述,與此前在比特幣上出現的資產發行協議(鏈外合約系統)相比,RGB 大幅降低了驗證(一個合約的某一個狀態)的成本。在交易的時候,接收者不再需要遍歷所有區塊來收集合約狀態發生改變的信息,而只需獲得一連串的比特幣交易,以及這些交易所承諾的 RGB 交易、這些比特幣交易的區塊包含證據(依據區塊頭的默克爾證據),就能確信支付方真的擁有一定數量的某種資產。
這種驗證成本的降低,也大幅度減少了用戶對大型基礎設施供應商的依賴(信任)。在以往的協議中,由於驗證成本較高,用戶難以自己計算出合約的最新狀態,因此用戶必須信任一些供應商(比如自己的錢包所使用的合約狀態供應商);同時,因爲可以負擔這樣的計算成本的供應商較少,這也意味着供應商的中心化。但在 RGB 中,用戶只需使用比特幣輕客戶端來檢查與比特幣交易的部分、使用 RGB 協議來檢查 RGB 交易的部分,自己就可以負擔。
跟一些鏈上合約系統相比,RGB 同樣顯得更爲輕量。這體現在 RGB 可以針對性地驗證一個合約的某一個狀態;而在那些並不基於 UTXO 的系統上,由於缺乏 UTXO 這樣控制准入的機制,任意一筆交易都可能改變任意狀態,所以,你幾乎不可能針對性地驗證某一個狀態,而只能在計算出所有最新狀態的同時確定某一個狀態——在這個意義上,被表達爲「全局狀態(global state)」的特性實際上應該被稱爲「整體狀態(uniform state)」,雖然它提供了合約之間交叉訪問的特性,但這也決定了其驗證成本會更高、更難獲得免信任性。
在這些鏈上合約協議上,一種重大的優化措施是要求區塊頭承諾最新狀態(「狀態根」),從而允許輕客戶端依據這些承諾驗證從全節點處得到的某個合約的某個狀態。這是一種復用已經發生的計算(全節點已經運行過的計算)的方法,也非常高效,因此,如果不考慮免信任性,可以認爲它比 RGB 更爲高效。但是,它畢竟意味着:輕節點在交易基礎驗證以及合約狀態計算上都依賴於全節點。而在使用比特幣輕客戶端的 RGB 錢包中,它所依賴的信任假設是相關的比特幣交易是有效交易,而與合約狀態相關的部分則是客戶端親自驗證過的,因此免信任性更好。缺點是驗證的時延更長,需要保管的數據更多。
RGB 的可擴展性體現在兩個方面:
嵌入比特幣交易中的僅僅是一條哈希值,這意味着 RGB 交易的體積(除了合約自定義的規則之外)沒有什么限制——即使你把一份 RGB 資產分成了 100 份(RGB 交易本身將非常大),需要嵌入比特幣交易中的也只有一條哈希值。如注 6 所述,嵌入這樣的哈希值的方法有兩種:一是使用 OP_RETURN 輸出,這意味着它會消耗一個哈希值的鏈上空間;二是隱藏在 Taproot 輸出的腳本公鑰所承諾的腳本樹上——這不會消耗任何鏈上空間。這一點同樣也意味着,用戶不必爲了可編程性而犧牲經濟性——僅考慮鏈上手續費的話。
RGB 合約的最新狀態是一個有向無環圖上沒有後代的獨立的點——這意味着這些狀態可以獨立變更、互不影響,也就是允許並發。這實際上也是繼承自 UTXO 的特性。這一點同樣也意味着,在一個分支上發生的無效變更(無效交易),不會影響其它分支,更不會導致整個合約卡死,因此也可以視爲一種安全性好處。
RGB 在可擴展性上被批評的一點是:每一次轉移,都需要接收者驗證從初始狀態到支付者狀態所涉及的所有交易——隨着資產轉手的次數增加,後續的接收者的驗證負擔會越來越重。這個批評是真實的。而優化它則意味着我們也要找到一種方法來復用已經發生過的運算。證明系統技術(比如 SNARKs)有望提供這樣的解決方案。
最後一個好處依然跟 UTXO 有關,取決於我們如何理解 UTXO 的鎖定腳本機制。
鎖定腳本可以用來編程一筆資金的解鎖條件,因此,它可以實現保管規則。例如,假設一個鎖定腳本包含且僅包含了一把公鑰,那就意味着只有對應的私鑰的主人可以控制它。但是,這樣的保管規則同樣是比特幣合約式協議編程的基礎。例如,一個使用 2-of-2 的多籤名鎖定腳本的 UTXO 可以是一條閃電通道;在通道運行期間,雙方可以發生幾乎無數次相互支付,而資金的鏈上形式不會有什么改變。換言之,在此時,2-of-2 的多籤名鎖定腳本構成了一種價值轉移機制,允許雙方在不變動鏈上資金形式的前提下轉移價值。
這樣的機制可以用在 UTXO 所承載的比特幣價值上,自然,也可以用在它所承載的 RGB 資產上。我們可以發行一種 RGB 資產,讓它附身於一個 2-of-2 多籤名 UTXO,從而利用閃電通道的機制,在雙方間無限次相互支付這種資產。同理,RGB 資產也可以進入其它基於比特幣腳本的合約。
在這裏,UTXO 的腳本和 RGB 協議形成了功能上的分化:前者致力於實現價值保管和價值轉移的規則;而後者專注於資產定義。從而,資產的保管和資產的定義可以拆分开來。這是一種重要的安全性提升,也是人們在一些別的鏈上合約系統中孜孜以求的東西。
上述特性,實際上對所有基於 UTXO 一次性密封和客戶端驗證的協議都成立。但在此基礎上,RGB 協議又做出了進一步的設計。
在當前的 RGB 協議的开發中,开發者們尤其關注協議的隱私性,因此 RGB 在兩個方面加強了隱私性:
盲化 UTXO。在 RGB 交易中,接收方只需使用混淆後的 UTXO 標識符來接收資產,而無需暴露真正接收資產的 UTXO 的特徵。這絲毫無損接收者向下一任所有者提供證據的能力,同時又使後續的資產接收者可以對抗前任資產所有者的窺探。
Bulletproof。可用來隱藏每一次交易中的具體數額。但後續的資產所有者依然能驗證此前沒有出現過增發。
在這一部分,我將討論 RGB 協議還可以繼續探索的空間,主要跟可編程性有關。
當前,已經提出的 RGB 合約模板(schema)都集中在資產發行上。但是,由於 RGB 使用了「客戶端驗證」範式,實際上,我們可以給它添加任何可以用客戶端驗證來確保的特性——僅受 UTXO 這種結構的限制。
而在 UTXO 的基礎上,一個可以拓寬可編程性的概念叫做「限制條款(covenants)」。限制條款的本意是限制一筆資金可以轉移的目的地。有了這種能力,我們就可以編程許多有趣的應用,比如:
非交互式取款的資金池。我們可以讓許多人的資金都匯集在同一個 UTXO 中,並使用限制條款保證他們任何人都無需其他人幫助,就可以取出屬於自己的資金。這可以起到在區塊空間需求高漲時以低成本幫助人們從高風險的地方退出的作用。
保險櫃合約。讓一筆資金必須先花費到某個地方、經過一個時間鎖才能自由花費;而在時間鎖期間,保險櫃主人可以用一把緊急密鑰打斷這個過程、將資金立即轉移到別的地方。這種裝置可以爲自主保管提供極大的幫助。
當前的比特幣腳本並沒有這種能力,因此,在比特幣腳本上啓用限制條款需要軟分叉。
但是,只要我們愿意犧牲一些由「資產定義與保管機制的分化」帶來的好處的話,我們就可以在 RGB 資產上實驗這樣的特性,我們可以在 RGB 合約層面實現這樣功能——雖然它只能對使用它的 RGB 資產生效(而不能對比特幣生效),但無疑會开啓一個有趣的空間。
已有的限制條款的研究表明,它可以拓寬基於 UTXO 的交易的編程空間,提供許多特性。但這些研究基本上是基於比特幣的,而在比特幣這樣的協議上,我們會更加保守一些。而在 RGB 上,我們可以大膽地將限制條款的核心能力——在腳本層面讀取花費自身的交易的能力——進一步泛化,從而提供更靈活的可編程性:交叉訪問合約的能力。
最小的限制條款意味着一個 UTXO 在被花費的時候,其腳本可以讀取花費交易的輸出。但完全泛化的限制條款則意味着:它可以讀取花費它的交易的所有部分。這就意味着,它也可以讀取交易的其它輸入,如果我們不限定其它輸入必須來自同一個合約,那就意味着,它可以讀取其它合約的狀態。
在 RGB 中,我們默認每一個合約都是一個獨立的宇宙,有屬於自身的有向無環圖。但是,依然有可能出現一個用戶同時持有兩個不同合約的狀態的情況。如果 RGB 交易允許同時花費來自兩種合約的資產,這樣的交叉訪問能力也許就有應用場景(盡管可以想象它會讓交易的驗證變得更加復雜)。
實際上,已經有基於 UTXO 類似結構的鏈上合約系統(例如:Nervos Network),使用這一點來實現合約的交叉訪問能力。這是一個非常新的領域,开向以往的比特幣研究很少觸及的領域,也許埋藏着什么驚喜也說不定。
在本文中,讀者會發現,有個概念被頻繁提及、貫穿了推理和幻想的所有過程:「UTXO」。這正是我的用意。如果你不理解 UTXO,你就無法理解 RGB 這樣的協議的設計的起點,也不能理解 RGB 協議設計的優點,也無法想象人們使用它的方式。RGB 協議的特性在很大程度上正是由其 UTXO 這種一次性密封的形式塑造的。相應地,比特幣研究領域積累的對 UTXO 的研究,也可以被我們化用到對 RGB 的研究中。
這也解釋了,爲什么不理解比特幣的人,將很難理解 RGB。而喜歡比特幣的人,會認可 RGB 已經作出的設計。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
標題:一文讀懂資產發行協議RGB的真正潛能
地址:https://www.100economy.com/article/92283.html