原文標題:《何必非要去中心化——淺析央行數字貨幣基於 UTXO 模型的設計路線》
作者:黑石 Kingslayer 金融行業資深從業者,區塊鏈技術的堅定擁簇者和佈道者
央行數字貨幣 DCEP 喊了幾個月的「呼之欲出」但似乎總是千呼萬喚不出來。事情往往是這樣,想象的簡單,但執行起來,又是另一番光景。就像現在的區塊鏈熱一樣,本意是技術革新繞過現有貨幣格局推進人民幣國際化,監管當局現今卻忙於闢謠和打擊詐騙。
筆者近期拜讀了萬向首席經濟學家鄒傳偉爲財新專欄撰寫的 DCEP 分析文章,文章推測 DCEP 將使用基於 UTXO 模式的中心化賬本,讀畢我忽有茅塞頓開之感。
(1)何必非要去中心化
談到區塊鏈,我們往往聯想到不可篡改、去中心化和可追溯三個特性。區塊鏈的概念源自於 Bitcoin,以中本聰爲代表的密碼朋克巧妙的將原有的密碼學技術整合,引入博弈論的技巧進一步優化了分佈式通信系統中的拜占庭將軍問題。密碼天才們的思想是叛逆的、是極致的,也往往 anti-politic,從這點出發,區塊鏈天生「反骨」,演變到現在,似乎區塊鏈天生就必須去中心化,與現有的中心化、寡頭壟斷化互聯網對立(從這點出發,筆者最欣賞 Gavin Wood,關於 Web3.0 的構想簡直令人神往)。故而當前主流公鏈也紛紛標榜社區的自治性和公平性,通過白皮書闡述自己如何通過優化共識機制和博弈機制來避免獨裁和作惡,代議制,這種最原始的民主權利形式對於崇尚自由、渴求表達的互聯網公民來說,有着無限的吸引力。
但上述這些不是我們近期在新聞中、在媒體上討論的區塊鏈技術表現形式。筆者對於從政府主導區塊鏈發展這件事情上,一開始持有消極的態度,也一直圍繞一個核心問題在思考:政府層面區塊鏈的應用如何有效設置出塊節點,在節點集中且非中心化的條件下,如何保證區塊鏈不會發生硬分叉?節點間又是否需要博弈呢?這種思想是將去中心化的共識機制與區塊鏈簿記賬本技術綁定在了一起,現今想來,何必非要去中心化的共識,何必考慮節點的博弈,爲何不能放下「驕傲」呢,這些在當前的區塊鏈政府應用中,是最不值得考慮的因素。一旦捨棄了共識的複雜度,TPS 會實現指數型躍升,唯一需要考慮的是合理設置有限個節點實現數據冗餘並保障節點安全性避免硬分叉(就央行數字貨幣而言,如何確認交易發生的最終性以及是否延續最長鏈原則,也是需要思考的問題)。
(2)關於 UTXO 的闡釋
我們回到央行數字貨幣和 UTXO 上來,出於對央行數字貨幣基於 UTXO 路線的闡述,我們先闡釋 UTXO。UTXO,Unspent Transaction Outputs, 意思是未被花費的交易輸出,它是 Bitcoin 底層區塊鏈簿記技術的概念之一。
Transaction 本身。Bitcoin 的區塊鏈賬本最主要記錄的內容就是 transaction,交易一旦被打包進區塊並通過共識機制上鍊後(一般需要 6 個區塊高度的確認),交易的最終性就得到了確認。在傳統的賬戶交易體系中,資金的持有量以賬戶的餘額形式體現,資金的轉出和轉入直接體現爲賬戶餘額的增減,這種形式非常直觀,幾乎所有的 Bitcoin 錢包也參考這樣的形式展現。然而,在底層的區塊鏈賬本層面,交易發生的細節卻截然不同。
在 Bitcoin 的區塊鏈系統中,transaction 是一組被傳遞的腳本代碼,代碼包含 transaction input 和 transaction output 兩部分,第一筆產生 Bitcoin 的交易爲創世區塊的 coinbase transaction(實際上每個區塊被確認時,區塊的記賬權所有人都有權發起一次 coinbase 交易,並將挖掘出該區塊的獎勵發送給自己)。這種特殊交易的 input 稱爲 coinbase,比較特殊,不在此文的分析範圍,因此本文在後續行文中提到的交易都不包含 coinbase 交易。第一筆交易的 output 在被下一筆交易消費前就成爲了 Bitcoin 區塊鏈上的第一筆 UTXO。
除 coinbase 交易外,普通交易的 input 通過哈希指針(指明 UTXO 所在交易的哈希值及其序號)指明瞭哪筆 UTXO 將被消費,幷包含了該筆 UTXO 的解鎖腳本來驗證所有權。
交易的 output 包含兩個方面,一是該 output 中 Bitcoin 的數量,通過最小單位 satoshis 來表示,二是與 input 中解鎖腳本相匹配的鎖定腳本。
基本的概念。我們還是回到 UTXO 上來,實際上 UTXO 是全部尚未被某筆已發生交易中的 input 所引用的 output 的集合。簡單來說,就是如果一筆交易的 output 尚未被另一筆交易(已被確認)的哈希指針引用,即未被「消費」,則該 output 就可以被稱爲 UTXO。Bitcoin 區塊鏈的全節點會追蹤整個區塊鏈網絡中的全部有效的 UTXO,形成 UTXO 的集合(UTXO set)並進行保存和動態更新。任何一筆有關 Bitcoin 交易的發生,都意味着 UTXO 集合的變化,也就觸發了全節點中 UTXO set 的更新。當我們說用戶的錢包收到一筆 Bitcoin 轉賬的時候,實際上是錢包在區塊鏈中識別到了一筆與該賬戶密鑰對應的 UTXO,該賬戶的私鑰可以對該 UTXO 進行簽名並以此作爲 transaction input 的前提構造新的交易。而錢包中某個賬戶所持有 Bitcoin 的餘額,是該錢包在區塊鏈賬本中搜集到的所有可以被該賬戶「花費」的 UTXO 的集合。
UTXO 所包含的的 Bitcoin 數量。在 Bitcoin 的幣值單位表示方面,理論上 Bitcoin 的幣值可以精細到小數點後八位。一筆 UTXO 所包含的 Bitcoin 數量在構造交易的時候被確定,一旦交易生成,該數值便無法再更改,UTXO 只能作爲整體被消費,不能拆分消費。我們可以將 UTXO 比作面值不同的紙幣,紙幣可以被兌換爲更多的小面值紙幣,滿足不同消費需求。
考慮如下場景(單一 input,多個 output),如果我們需要支付 1Bitcoin,但我們只有 20Bitcoin 的 UTXO,我們將構造這樣筆交易:消費 20Bitcoin 的 UTXO,產生兩個 tranaction outputs,一個包含 1Bitcoin 支付給目標方,另一個包含 19Bitcoin 支付給你自己。這種過程就像是付出了面值爲 20 元的紙幣,兌換成面值 1 元和 19 元的兩張紙幣,1 元用於支付,19 元自己留存。
考慮另一場景(多個 input,單一 output),如果我們需要支付 5.5Bitcoin,而我們恰巧有 2 個 2Bitcoin 的 UTXO,1 個 1.5Bitcoin 的 UTXO,則將上述三個 UTXO 作爲輸入,產生一個 5.5Bitcoin 的輸出。
在實際操作中,用戶只需要輸入需要支付的 Bitcoin 數量,其餘關於 UTXO 的分拆和組合是通過錢包自動進行的。隨着交易的不斷髮生,不斷有舊的 UTXO 被消費並移出全節點的 UTXO set,又有新的 UTXO 被生成並加入 UTXO set,因此 Bitcoin 的價值也隨着交易的發生在不同賬戶地址間轉移。
(3)進一步的深入思考
關於鏈上數據可追溯。通過上一節 UTXO 模型的闡述,可以想見,如果 DCEP 採用 UTXO 模型,則任何一筆 DCEP 的 UTXO 都可以定位到其所在的交易,進而通過 Input 中的哈希指針和序號定位前一步的 UTXO,一直向前追溯直至 coinbase 交易。因此,這就形成了一條資金鍊,任何一單位的 DCEP 自其由 coinbase 交易產生起,其轉移的形式和轉移的目的地在區塊鏈上都是清晰可見的,這就是數據的可追溯。
新幣和舊幣的問題。一旦採用了基於 UTXO 的模型,DCEP 就會涉及到新錢和舊錢的問題,所謂錢的新舊,就是指一單位 DCEP 價值其所涵蓋的 UTXO 歷史的長短。舉個例子,如果你的錢包收到了 1DCEP,實際上你是擁有了包含 1DCEP 的 UTXO,這個 UTXO 所包含的 1DCEP 的價值可能來自於很多小單位 UTXO 的組合共同作爲 transaction 的 input,也可能是單個大額的 UTXO 拆分而來,無論如何,上述前一步的 UTXO 又與再前一筆的 UTXO 產生聯繫,因此你此時擁有的 1DCEP 的價值是通過很多歷史的 UTXO 傳遞而來的,這就像紙鈔經過了很多人的手纔到了你的手裏,此時你手裏的錢是舊錢;考慮另一種情景,如果你剛剛拿到的 1DCEP 的 UTXO,是通過 coinbase 交易產生而來,或者距離 coinbase 交易僅有幾步的追溯,那麼你手中的這 1 份 DCEP 的 UTXO 歷史就短,此時的錢,是新錢。
爲什麼要區分新錢和舊錢呢?錢越新,其關於 UTXO 的歷史越短,這筆 DCEP 經過非法交易或者灰色領域的可能性就越小,就越乾淨,因此我們都喜歡新錢,排斥舊錢。考慮到市場上劣幣驅逐良幣的原則,新幣就會被人們儲藏起來逐漸退出流通,最終充斥在市場上的就會是「鏽跡斑斑」的舊錢。在實際運行中,其實我們不太需要考慮這些問題,因爲我們看不到區塊鏈鏈上的內容,展現給我們的只是錢包上的數字而已,需要考慮這些的,往往是 DCEP 節點參與者的金融機構。
來源鏈接:mp.weixin.qq.com
歡迎加入律動 BlockBeats 官方社群:
Telegram 訂閱群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方帳號:https://twitter.com/BlockBeatsAsia