通過前面三篇科普文章《RGB++科普:RGB & RGB++是什么?》,《RGB,RGB+,UTXO stack,Nervos, CKB 之間的關系》,以及《通俗理解UTXO和比特幣交易》,我們能夠大致了解RGB是一個什么樣的協議。
本文將要了解的內容包括RGB的設計原理,這樣設計的背后有什么樣的思考,它跟現有的類似方案進行對比具有哪些優缺點,存在哪些難以解決的問題,以及RGB++是從什么樣的角度入手來解決RGB存在的問題。
所以本文的內容主要包括
第一、RGB協議的原理;
第二、RGB設計背后的思想基礎;
第三、RGB跟現有類似方案對比具有哪些優缺點;
第四、RGB存在哪些難以解決的問題;
第五、RGB++解決RGB難題的思路和角度。
下面進入正文
主題1. RGB協議原理總結
RGB協議的原理是以鏈上痕跡最小化的方案實現對比特幣網絡的擴展,根據比特幣鏈上資源緊張,計算能力差,不能驗證非比特幣交易的特性,RGB都做了針對性的設計。
具體來說有這樣一些設計
1)定義了交易RGB的轉賬和交易就是智能合約狀態的轉換。
比如一筆轉賬的結果是裝有10塊錢的UTXO1被花了,變成裝了6塊錢的UTXO2和裝了4塊錢的UTXO3;這個過程就是合約從狀態1轉換到狀態2,其中合約1的狀態是10塊錢所有權在UTXO1里面;合約2的狀態是6塊錢在UTXO2里面,4塊錢在UTXO3里面。UTXO里面的資金金額和位置發生了變化,實質是這10塊錢的所有權發生了變化。
因此RGB的智能合約表達的就是資產的所有權發生了什么的變化,以及目前所處的狀態。
2)設計了RGB協議的智能合約
合約構成分為三個部分,包括合約的起始狀態,最新狀態(或者當前狀態)以及狀態轉換。起始狀態定義了合約的基本屬性和規則,當前狀態定義的是合約最新的狀態,狀態轉換定義的就是狀態之間的轉換規則。
3)把交易的過程做了拆分
并按照耗費比特幣鏈上資源多少,在鏈上留下痕跡多少進行分類。把其中最復雜,最耗費資源的部分都放在鏈下處理,比如交易的構建,數據的計算,交易歷史和狀態的驗證,交易的確認等等,讓這些過程在P2P即點對點的場景下,通過客戶端來完成;
剩下交易結算這個環節,此外還有一個環節,是在鏈下處理完并促使交易或者合約狀態發生了轉換的過程和步驟等信息,需要留下一個證據或者承諾,避免交易任何一方修改這些交易信息或者數據,這個證據就是把這些數據計算出哈希值。
RGB把這兩個環節放到一起來處理,因為交易結算需要發起一筆比特幣鏈上的交易,而鏈下交易處理過程的證據也需要保存到鏈上,因此它就把這個哈希值形式(確切的說是一個哈希樹,我們就以哈希值來理解)的證據或承諾寫進了這一筆交易的輸出里面。這是一個特殊的輸出,叫做OP_RETURN,OP_RETURN是一個無法花費的輸出,因此不能叫做UTXO,它在這里的用途只是用來保存RGB鏈下交易的承諾或者證據。
4)一次性密封和客戶端驗證的獨特設計
一次性密封解決了資產所有權不能被轉移兩次,即資產不能雙花的問題;
為了實現由比特幣UTXO來觸發或者控制RGB資產轉移的目的,RGB設計了在比特幣UTXO里面封裝RGB資產所有權的方案,采取的手段是將RGB鏈下交易的每一個UTXO都錨定到一個比特幣鏈上的UTXO,即在RGB UTXO的鎖定腳本中,將花費條件設定成指定的比特幣UTXO。
這個設定決定了這筆RGB資產的解鎖只有一個途徑:必須使用指定的比特幣UTXO經過密碼學計算獲得的值,與鎖定腳本里面的值進行對比,如果匹配這筆資產就能解鎖,不匹配則無法花費這筆資產。這個設計叫做一次性密封,意思是比特幣的UTXO里面密封了RGB資產的所有權,由UTXO只能花費一次的特性保障了RGB資產不能被雙花。
客戶端驗證解決了轉移資產的交易有效性驗證問題。
但是比特幣鏈上的交易,通過花費一筆比特幣的UTXO只能觸發鏈下的RGB資產轉移,卻無法保證這筆RGB轉賬交易一定是有效的,比如轉賬金額是否正確,資金所有權是否真屬于付款人,有沒有偽造資金等等,因為比特幣鏈上的交易沒有驗證非比特幣交易的能力。為了實現這個目的RGB設計了客戶端驗證的方案。
客戶端驗證可行性的依據是比特幣的UTXO記賬模型,這個模型中資產都包含在UTXO里面,因此要驗證一筆資產的當前狀態也就是它的可用金額和所有權歸屬,只需要計算和驗證跟這筆UTXO來源相關的所有UTXO。
又因為比特幣記賬模型中,每一個UTXO里面的金額實際上都有記錄來源和去向,從哪個交易的哪個輸入中來,又去到了哪個交易的哪幾個輸出,因此只要順著這個UTXO的來源一直往前追溯到鑄幣交易中,把有關系的UTXO進出金額分別進行累加,然后再相減得到的差就是當前UTXO的金額,或者這筆資產的狀態。
因此要驗證一筆RGB資產的狀態需要驗證兩個部分,一個是比特幣鏈上的交易,一個是RGB鏈下的交易。
比特幣鏈上驗證的內容包含這樣三個部分:所有跟這筆交易相關的交易,交易所在區塊頭的默克爾證據,以及這些交易記錄的RGB交易承諾;RGB客戶端只需要驗證前面兩個以及當前的這筆交易。
驗證的時候用戶可以使用比特幣的輕客戶端驗證比特幣交易的部分,使用RGB協議的客戶端驗證RGB交易的部分。
5)自主驗證的信任基礎
這其中,智能合約中代碼和邏輯的執行,交易的計算,交易簽名和所有權的驗證,都可以由用戶自主完成。這種自主驗證可靠的信任假設,第一是比特幣輕客戶端信任比特幣鏈上的交易都是有效的,第二,在RGB客戶端,用戶相信自己自己計算過一遍的交易結果。以上是RGB協議運行的基本原理。
主題2. RGB提出的背景
RGB這個方案的核心理念是盡可能的減少對比特幣主鏈的使用,只有在非用不可的情況下才會發起比特幣鏈上的交易,或者向比特幣區塊內寫入數據。
所以它對比特幣鏈的使用就兩個目的:通過花費UTXO觸發RGB的交易并轉移RGB資產所有權;把這筆交易的承諾寫入到比特幣鏈上。它把這兩個目的合在一起只用了一筆比特幣交易實現,只在一個交易輸出里面寫入了一個數據。
為什么RGB會有這樣的一種設計理念,當時的背景是怎樣的呢?
以下對RGB背景介紹的這部分內容來自BTCStudy阿劍老師的一次播客:
RGB基礎的基礎概念是客戶端驗證和一次性密封,這兩個概念是在2016年由Peter Todd在一篇論文里面提出來的。這件事其實也與Vatalik有關,因為當時他是比特幣雜志的記者,他對早期在比特幣鏈上發行資產的一些協議,包括OnmiLayer,counterparty 以及其他的類似協議都做了一些研究,然后得出一個結論:如果我們想要讓比特幣的用戶使用一些另類資產,采用比特幣本身的腳本是沒法辦到的,因此只能使用額外的協議來發行這些資產。他的下一步計劃就是創建一個在鏈上可以發行任意代幣的協議,于是他就創建了以太坊。
那時也有另外一些人,他們也知道Vatalik的想法是對的,因為他們也很了解這些在比特幣鏈上發行資產的早期協議。但是他們的想法則不一樣:如果比特幣的用戶想要去使用一些其他功能,難到真的要在比特幣鏈上去做這件事,一定要在比特幣鏈上去寫入數據,或者給它增加一些功能,讓比特幣本身去發行資產嗎?
實際上所有這些功能的核心就是要在比特幣的腳本里面塞入更多的數據然后讓它去解讀這些數據的含義,如果一定要在主網上去做這些事情的話,那就是每一個節點都要去解讀并且驗證你塞入的數據。他們認為這件事情是不成立的,也不應該這么做。
Peter Todd 甚至還有一個更加激進的觀點,他說礦工其實根本都不需要知道一筆交易里面到底是什么,如果他知道了,就會有交易被礦工審查的可能性。所以礦工需要做的就是去挖礦就行了,而不應該對交易施加任何的干涉。
RGB就是在這個思想的基礎之上產生的。
主題3. RGB方案與現有方案的對比
第一、跟銘文協議進行對比
1)在實現方式上
銘文是把一筆資產的信息,比如協議名稱,操作指令,資產名稱,交易數量等封裝在一個文件里面,然后通過發起一筆比特幣交易,把這些數據記錄到交易腳本的某個字段,比如BRC20/ORC20/ARC20是記錄在交易輸入的隔離見證字段,SRC20是記錄在交易輸出即UTXO的多簽地址里面,Runes 符文是記錄在OP_RETURN的特殊輸出里面。我根據比特幣交易的數據記錄做了一張表,見下圖。