原文标题:《何必非要去中心化——浅析央行数字货币基于 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