omni協議發代幣的通俗解釋

第0章 引言

最近BCH社區在討論發token的事,其中omni協議是一個成熟的方案,在BTC上早就實現的,USDT就是使用omni協議實現的代幣。本文通俗講解omni的基本原理。

第1章 BCH交易中OP_Return信息的基本原理

一筆比特幣交易是一個含有輸入值和輸出值的數據結構,該數據結構植入了將一筆資金從初始點(輸入值)轉移至目標地址(輸出值)的代碼信息。

在區塊鏈瀏覽器中查看是這樣的

左邊的是一個輸入,是發幣者的地址;右邊是輸出,是收幣者的地址。

BCH的轉賬和我們去銀行填單匯款很像,匯款單也是要填寫匯款人、匯款金額、匯款銀行賬戶、簽名、收款人……等等信息。

在上述表格的倒數第2行,即“鎖定腳本”可以是一種“備註信息”(請注意,這裏是“可以是”),只要是以OP_Return開頭的都屬於“備註信息”。就像我們使用網銀轉賬可有填寫備註一樣,這種“備註信息”的“鎖定腳本”,即BCH節點來說是不作處理的。我們稱這種“備註信息”爲OP_Return數據。

但是這種OP_Return數據,都一定會和這筆交易共同存在BCH的區塊裏的。這句話的意思是:OP_Return數據是受BCH區塊鏈保護的,這個數據是不可篡改,不可僞造的。哪怕是你再發一筆交易,填寫完全一樣的OP_Return信息,但這筆交易的txid肯定是不一樣的,BCH區塊鏈是可以識別“信息完全相同的OP_Return數據”是屬於哪筆交易,在哪個區塊的。這意味着,一筆交易tx,外帶一個OP_Return數據,這兩個信息就會是在全世界唯一性地存在。即使是在同一區塊裏,相同的輸入地址和輸出地址外加相同的OP_Return數據,的兩筆交易,因爲UTXO不同,交易加OP_Return也可以形成唯一性,在區塊內部可以排到順序。

OP_Return一旦寫入了區塊鏈,就相當於有了一個時間戳,哪怕是同一區塊裏的交易,都因排序不一樣,而有不同的時間戳。這句話是什麼意思呢?就類似於,今天的人民日報第2版發表了一篇文章,那這篇文章就帶有2018年7月18日這個時間戳。如果明天,在人民日報第2版完全相同的地方,又發表了完全一樣的文章,但時間戳是不一樣的。

下面的這筆交易就是帶一個OP_Return備註信息,OP_Retrun一般會在瀏覽器的輸出列出中顯示爲“地址解析失敗”,然後在瀏覽器的輸出腳本部分顯示具體的數據。

以上信息就是Omni協議成立的關鍵。

第2章 我們來設計一個貨幣

現在我們來設計一個貨幣。

設計貨幣,最重要的就是三個功能,貨幣的發行,建立賬戶,和貨幣的轉移。

發行必須有理有據,你不能胡亂發。我們可以約定好,一次性發行,然後永久不增加。也可以約定好按特定的條件來持續增發。只要定義好規則就好。爲了方便起見,我們設計一個一次性發行,永久不增加的貨幣,我們先管它叫TFBC(The FirstBticoin cash's token Coin的首字母縮寫),發行76億(全世界人口,一人一個好了)。初次發行,就將所有的幣存放到一個賬戶上。

建立賬戶就很開戶,允許新用戶加入到這套貨幣體系當中來。新開的戶,餘額是零,然後可以接收幣,收到幣後可以發送幣給別的賬戶。這個好理解。

貨幣的轉移,或叫支付,是我們使用這個貨幣的過程。這個過程必須是安全的和讓用戶可識別的。你不能出現一個人原本是沒有幣,他卻能支付,即這套貨幣系統需要能識別出哪個賬戶有幣,然後才能支付,也不能支付的總額超過了賬戶的餘額。讓用戶可識別的就是說,你得讓人知道他賬戶上有多少幣,這個不能顯示是假的,或者有人造假說自己有多少幣,系統得能識別。

有這三個功能,就實現了一套最簡化的貨幣。

我們使用一種中心化的思維來設計的話,就是使用一個賬本,形象點說,就是一個excel表格。表格的第1列記錄的是賬戶名字,第二列是賬戶餘額。

貨幣的發行,就直接在excel表裏填寫一個賬戶,隨便叫個名字,就叫“閃電”好了,餘額是76億。

新建賬戶就是在excel表格裏增加一行,比如新建一個叫“雷神”的賬戶,餘額爲0。

貨幣的轉移,比如“閃電”這個賬戶要轉1億個幣給“雷神”。要完成這個過程只需要修改兩個數,第1是將“閃電”的餘額改爲75億,將“雷神”的餘額改爲1億,就完成了。

爲了保證轉移過程的安全性,我們會要求記錄所有的歷史支付記錄。這樣可以通過所有的歷史記錄回溯到初始發行的貨幣量,回溯就是將支付的過程逆過來,原本“閃電”支付給“雷神”1億,回溯就變成了“雷神”支付給“閃電”1億。如果回溯的最終結果和發行是一樣的,那就可以說明整個支付過程是沒有問題。

有了歷史記錄,我們也可以對所有的賬戶餘額進行回溯,回溯的結果一定的所有的賬戶餘額都爲零(除了初始發行的那個賬戶)。

那如何保證記錄歷史支付呢?我們可以直接在excel表的第3列開始就作爲支付記錄,比如“閃電”支付給“雷神”1億,則在“閃電”的第3列記錄“-1億”,而在“雷神”的第3列上記錄“+1億”。而每個賬戶的最終餘額,就是這些歷史記錄的加總。這個列數我們假定是無限的,這樣就可以記錄無限次數的交易了。

如果我們將上述一張excle表,複製到很多臺電腦上,然後這些電腦可以同步更新數據,那我們就使用了去中心化的方式來實現這套最簡化的貨幣體系。

但是,如何保證貨幣的發行和轉移是安全的呢?下面我們來講如何使用Bitcoin Cash區塊鏈來設計一個安全的貨幣發行和轉移系統,即Omni協議。

第3章 Omni協議

我們從第1章的描述中就可以看到,因爲有OP_Return數據的存在,將BitcoinCash的區塊鏈裏的OP_Return數據提取出來,就是一個非常好的“excel表”,每一次對這張表的修改,都會被記錄在區塊鏈裏,而這些數據是不可篡改,不可僞造的。按第2章的描述,就可以利用“OP_Return excel表”來設計一個去中心化的貨幣發行和轉移系統。

現在我們來利用BCH區塊鏈來設計一套最簡化的貨幣系統。

首先是初始發行。

我們使用一個BCH錢包來發一筆帶自定義OP_Return數據的交易,交易的輸入是自己控制私鑰的地址A,輸出有兩個,第一個輸出還是地址A,即這筆交易是自己發給自己,第二個輸出是一個OP_Retrun數據。這個OP_Return數據寫的意思就是“使用地址A當成創世賬戶,給這個賬戶注入76億個TFBC貨幣”。這筆交易我們記爲“鑄幣交易tx1。”

因爲BCH系統是不會去識別這個OP_Return裏的數據的,所有的BCH節點都會直接忽略掉這個數據。那我們給bitcoincash的節點錢包做一個外掛,這個外掛程序專門用來解析這個OP_Return數據。這個外掛結合上述tx1和這個OP_Return數據,就可以解析出一張excel表格,表格的第一列就是賬戶“地址A”,第二列就是“餘額76億TFBC”。

因爲OP_Return在BCH網絡是不會被檢驗的,可以被隨意填寫。有沒有可能別人也發一筆交易,包含完全相同的OP_Return數據,來僞造我們上面發行的76億貨幣呢?答案是不能的,因爲他無法僞造tx1,而外掛程序需要結合tx1來解析出這張excel表格。

那麼創世交易的的創造者能不能篡改或僞造鑄幣交易tx1呢,也是不能的,因爲創造者可以使用相同的輸入和輸出,但無法僞造成相同的UTXO,否則就會被BCH網絡確定爲雙花。

在這個新發生的貨幣體系裏,賬戶是和BCH共用的,新建賬戶也就是新建一個BCH地址。這個很簡單。

轉移貨幣的過程是這樣的,第一次轉移是從鑄幣交易往外支付的,比如支付給地址B1億個幣。支付的過程需要使用“鑄幣地址A”構造一筆BCH交易,輸入是地址A,輸出之一是地址B,金額爲546聰(這是因爲BCH網絡的防塵設計,如果刪掉了這個限制,金額就可以爲0),帶上礦工費,第二個輸出是一個OP_Return,裏面的數據寫會被解析爲“賬戶A向賬戶B支付1億個幣”,我們記這筆BCH交易爲tx2。

OP_Return裏的數據,在BCH網絡是不會被處理的,但在上述的BCH的外掛程序裏會被解析出來,解析的結果就是更新這張貨幣的狀態表,如下表。

同樣的,因爲tx2被BCH區塊鏈打包之後,就不可能再被僞造了,除非BCH網絡被回滾了。所以這個貨幣的狀態表就無法被僞造了。

只要地址B上有BCH餘額可以支付防塵設置和礦工費,就可以給其他地址支付這個貨幣了,然後外掛程序就會拿這筆交易和OP_Return裏的數據,解析更新貨幣的最新狀態表。

以上就是最簡化的Omni協議實現的代幣的原理,爲了更實用性,代幣一般會增加很多功能,比如鎖定功能,自動化轉幣功能……

第4章 Omni協議的現在情況

Omni協議在BTC是已經做好了,在BCH上還沒有。USDT就是使用Omni協議設計出來的。

OmniCore就是在BTC上使用Omni協議實現的一個客戶端,使用這個客戶端就可以在BTC上發幣,需要同步區塊。

Omni Core下載鏈接: https://github.com/OmniLayer/omnicore/releases

Omni代幣瀏覽器: https://www.omniexplorer.info/

在BTC上,現在一共有370種代幣。下面是這些幣的列表,但只有USDT有人在用,其他的都是死幣。

https://www.omniexplorer.info/properties/production

在BCH上,我們已經構造了一筆交易,這筆交易就是按照現在的Omni協議手動構造的,等BCH上的Omni協議實現了客戶端,將可以解析出一個代幣,代號是TFBC,76億。鑄幣交易id是這個:

f89794db07acb6812326ef76f781203f77e5712345ac07834cab6adc403a3782

第5章 結束語

OP_Return可以提供非常非常多的想法,好好利用OP_Return,BCH將大有作爲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章