王爭,朱海景
(四川大學計算機學院,成都610065)
隨著數字貨幣的發展,越來越多的國家在推行本國的央行數字貨幣[1],而在民間區塊鏈領域也存在著大量去中心化的數字加密貨幣以及非去中心化的數字加密貨幣,央行數字貨幣作為一種中心化的數字貨幣,如何與民間已存在的數字加密貨幣進行相互兌換從而擴大自身的影響力是個難題,為了解決上述問題,本文提出了一種基于區塊鏈側鏈Proof方法的兌換系統架構,用于中心化數字貨幣與民間數字加密貨幣的兌換。
智能合約:1994年由Nick[2]提出智能合約的定義“一套以數字形式指定的承諾,包括合約參與方可以在上面執行這些承諾的協議”,現在主流的智能合約指運行在區塊鏈的智能合約,智能合約是自動執行合約條款的計算機代碼。這種智能合約由于結合了區塊鏈的特點,因此具有去中心化、可溯源、不可篡改的特點。由于智能合約只能被動地接受外部交易信息,為了擴展其功能,智能合約可以依據外部可信數據源(預言機)和世界狀態從而進行判斷是否滿足合約條款[3]。
基于簡單支付確認(SPV)的Proof驗證方法:側鏈技術[4]是為了支持和擴展現有區塊鏈功能提出的一種改進方案,將原有區塊鏈作為主鏈,新產生一條側鏈用于區塊鏈功能擴展或交互,而為了進行主鏈與側鏈的代幣的轉換,有一種基于簡單支付確認(SPV)的Proof驗證的方法[5]。通過讓區塊鏈網絡里的礦工產生Proof從而作為代幣轉換的憑證,從而完成代幣的轉換。圖1為基于簡單支付確認(SPV)的Proof驗證方法的示意圖。

圖1 基于簡單支付確認(SPV)的Proof結構示意圖
當前央行中心化數字貨幣與民間數字化貨幣的兌換有兩個難題。一是民間數字加密貨幣大都是基于地址匿名的,而央行數字貨幣由于《KYC一體化風險管理》原則需要對賬戶個人信息進行掌握(Know You Cus-tomer,KYC),這個內在的矛盾阻止了二者的兌換,為此需要建立一個代幣系統來間接進行兌換。第二個難題是央行數字貨幣在海外如何進行推廣,作為一個主權貨幣如何打消他國用戶的各種顧慮,為此結合智能合約的自動執行,不可篡改有利于以打消人們對其的偏見認識。
為了方便描述,以下統一術語見表1。

表1 相關術語
圖2中的數字代幣系統基于PBFT協議的聯盟鏈系統,該系統應由中心化數字貨幣系統主導成立的,聯盟鏈的節點準入權由中心化數字貨幣系統決定。每個節點都運維一個支持智能合約的區塊鏈,各個節點之間的通信保證保持較高質量。采用PBFT的聯盟鏈可以支持高吞吐量交易。

圖2 兌換系統架構示意圖
在整個兌換系統中涉及三種兌換模式,包括賬戶類型的數字貨幣——數字代幣兌換、地址類型的數字代幣——數字代幣兌換、地址類型的代幣——其他代幣兌換,接下來介紹三種兌換的流程。
(1)賬戶類型的數字貨幣——數字代幣兌換結構

圖3 數字貨幣——數字代幣兌換結構
(2)地址類型的數字代幣——數字代幣兌換結構

圖4 數字代幣——數字代幣兌換結構
(3)地址類型的代幣——其他代幣兌換結構

圖5 數字代幣兌換其他代幣結構

圖6 其他代幣兌換數字代幣結構
綜上三種兌換行為可以完成中心化數字貨幣到其他數字貨幣的相互兌換。
Proof作為一種憑證,證明相對應數額代幣已經發送給指定區塊鏈,Proof的具體信息如圖7。

圖7 Proof關鍵字示意圖
(1)Proof類型用于表示是哪種兌換代幣模式,是數字加密代幣兌換為去中心化代幣還是反之,以及具體兌換哪種其他代幣。
(2)交易hash是智能合約在查詢交易時的標識。
(3)區塊高度是為了快速定位到交易以及計算安全區塊數。
(4)簽名是為了證明Proof來自于該信息提交者。
(5)Proof存活長度是為了保證匯率穩定。
當智能合約接收到Proof信息后,進行驗證。

圖8 Proof驗證示意圖
偽代碼如下:
輸入:地址,Proof
輸出:True或者False
判斷Proof類型,通過預言機訪問對應區塊鏈API接口
根據交易hash找到交易信息位置,判斷簽名是否與交易信息匹配
判斷區塊高度與區塊鏈當前高度差是否超過區塊鏈相對應的安全區塊數
判斷Proof存活時間是否超過對應值
當判定True時,智能合約B發送信息給智能合約A,智能合約A將一定等值數量數字代幣發給地址或者將一定數量其他代幣發給地址。
此外,智能合約所產生的交易也會被寫入區塊鏈。
關于安全區塊數的設置,安全區塊數是為了防止兌換交易信息被攻擊,防止雙花。惡意節點在形成Proof進行兌換后,又用一條其他交易信息代替Proof所指代的交易信息,為了防范這種攻擊,其他代幣所形成的Proof需要等待一定時間,使其所指代的交易信息不可能被篡改。數字代幣系統由于采用聯盟鏈的方式,整個網絡由中心化貨幣系統主導,所有節點由中心化貨幣系統嚴格審核,必要時刻可以根據中心化貨幣系統進行回滾操作,因此其系統內的交易系可以視為安全。而對于不同的其他代幣,不同的區塊鏈有不同的安全性區塊數設置,以比特幣為例。
當比特幣網絡中惡意節點算力占比為q,誠實節點算力未p,安全區塊設置為z時,交易信息被攻擊成功的概率如下:

第Z個區塊帶給區塊鏈的安全性如下:

當安全區塊數選10時,q=0.3時,攻擊節點成功概率小于5%,而第11個區塊提供的安全性低于1%,因此針對比特幣區塊鏈的安全區塊數取10是合理的數。

圖9 比特幣安全區塊數示意圖
關于Proof存活時間的說明,Proof存活時間是為了兌換利率的穩定。由于部分數字加密貨幣價值波動性大,兌換利率采用定值或者某一時刻值會導致形成大量的套利空間,不利于系統的平穩性。為此,采用一個Proof存活時間來減少長時間持有套利,如當比特幣價值低時,套利用戶大量產生Proof,但不立即進行兌換,而是等到一個長時間段的,等到比特幣價值升值后,然后進行Proof兌換,進行套利。而對于短時間內的峰值波動,選取前一個時間段的兌換平均值作為匯率可以減少短期波動,提高穩定性。兌換利率由Proof兌換時,智能合約查詢預言機計算得出。區塊鏈里的時間可以用區塊數來衡量,如比特幣大約10min產出一個區塊,那么Proof存活時間可以設置為12個區塊,也就是大約兩個小時。當Proof超過了存活時間,該Proof視為無效。
關于簽名的作用,如果沒有簽名,惡意節點可以將比特幣區塊鏈里的任何一條兌換交易組成Proof直接發給數字代幣智能合約,從而盜取代幣,為了保證發送兌換交易的Proof的唯一性,Proof需要包含一個簽名,以比特幣為例,兌換者用比特幣區塊鏈里的交易信息的地址對應公鑰對應的私鑰對設定好的字符串進行簽名,從而保證了Proof提交者就是兌換交易的交易者。該處的簽名與比特幣中的簽名原理一樣,但作用不同。
通過對該系統結構的描述,該系統具有以下優點:
(1)當前民間的數字加密貨幣已經形成規模,且流通區域廣,央行數字貨幣可以借助這個兌換系統達到全球流通的目的。
(2)央行數字貨幣通過數字代幣系統進行兌換,在中心化的前提下,最大程度的保證了去中心化,且聯盟鏈可以保證交易吞吐量。
(3)該種兌換模式不需要現存的其他代幣進行任何軟分叉和硬分叉來進行兼容,適用性好。
(4)通過這種提供Proof來給智能合約進行兌換的方式,從某種角度來說,打消了使用者對該種中心化央行代幣兌換模式的顧慮。
對比現存的區塊鏈領域廣泛應用的兌換方法,表現如表。

表2 方法對比
綜上,本文在結合區塊鏈側鏈Proof方法提出了一種適用于中心化數字貨幣的兌換系統架構,詳細介紹了架構的內部結構,對本文提出的Proof關鍵參數進行了說明與論證,最后與現存的一些兌換方法相比較,本文的方法具有適應性廣,支持中心化貨幣的特點。