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