主题:【原创】【整理】从央行官方解读看数字货币(已完结) -- 初心

新兵营地 导读 复 92 阅 24909

全看 分页 树展 一览 主题

2019-10-29 23:12:44
主题:4438700
初心初心`90239`/bbsIMG/face/0000.gif`70`244`915`7871`正八品上:给事郎|宣节校尉`2012-11-25 04:24:46`
【原创】【整理】从央行官方解读看数字货币(已完结) 164

最近区块链和央行数字货币又开始占领各大网站和论坛头条,于是决定写一篇整理性的文章,尽量用简单易懂的语言来从专业角度谈论区块链和央行数字货币。这篇文章主要分成两个部分:基本概念和央行官方解读。

为了节约部分读者的时间(如果想省去第一部分),我首先总结一下央行的实际态度,用一句话概括就是:

央妈:Libra,比特币都是垃圾,和数字人民币没关系。

以及我要强调的一点:

区块链和去中心化没有必然联系!两者从学术角度考虑实际上毫不相干。

开始正文

第一部分 基本概念

要理解国家关于区块链和央行数字货币的相关政策,必须要明确区块链数字货币两个基本概念。不幸的是,网络上绝大部分文章都把两个混为一谈,鲜有专业性的解读。在这一部分,我将尽量用通俗的语言解释两个概念。

一.1 区块链 (Blockchain)

从计算机科学的专业角度上看,区块链实际上是一个数据结构。该数据结构的示意图如下:

点看全图

区块链通常有一个初始区块(或者创世区块,英文为Genesis Block),这个区块的数据一般是一些随机数据,或者是区块链创造者自己想加入的数据。这个创世区块一般被标记为【区块0】。当这个区块被创造以后,我们会为这个区块的所有数据做一个求解Hash值(哈希值)的操作,并把这个Hash值放在下一个区块(即【区块1】)当中。

在这里,我要解释一下Hash值是怎么回事。我们可以把【求解Hash值】这个动作看作一个特殊的函数,这个特殊的函数通常能够将一坨无比复杂的数据转换成一个符合某种规则(比如固定长度、值域)的值。注意:根据函数的定义,某一个输入有且只能有一个输出,因而对于某一坨数据,只要这个数据没有被篡改过,那么Hash出来的值是唯一的。

在区块链中,大家通常采用一个叫SHA的Hash函数。SHA有好几种类型,这里我以SHA-256为例:这个函数能将任意数据转换成一个256位的二进制数。大家有兴趣可以上这个网站玩一玩SHA-256这个Hash函数:

https://xorbin.com/tools/sha256-hash-calculator

注意:网站给出的Hash值已经将二进制转换为16进制。

SHA-256这类Hash函数的优点在于一下三点:

1. 不可逆性。给你一个经过SHA-256计算出来的Hash值,除非你明确知道原始数据是啥,否则很难去构造另一个原始数据去得到同样的Hash值。

2. 固定长度。无论输入是啥,输出永远是256位二进制数。

3. 多变性。即使两个原始数据只有一个二进制位不同,计算出的两个Hash值却能差十万八千里。大家有兴趣可以用上面那个链接尝试一下,替换一句话的某一字母,计算出的Hash值就已经完全不一样了,无法找到规律。

现在我们回到区块链这个数据结构。我们之前已经说过,初始区块的数据会被求一个Hash值,然后放在【区块1】中。之后,我们就会把数据塞入【区块1】中,直到这个区块被塞满。接着,我们对整个【区块1】求一个Hash值,并把新的Hash值放到【区块2】中。这里要特别注意:除了初始区块,每次我们求Hash值的时候,是把整个当前区块的数据都求Hash值,这里Hash函数的原始数据不仅仅包含当前区块的存储数据,也包含前一个区块的Hash值。

大家就要问了,为毛区块链要这么安排啊?前面我们提到,SHA-256这类Hash函数的特点是:如果输入有一点扰动,输出就会变化很大。我们假设某一个黑客想修改这个区块链中【区块1】的某个数据,然后TA就发现:如果TA不去把【区块2】里面的那个【区块1的Hash值】给改掉,某一天数据库管理员计算了一下被修改的【区块1】的Hash值,然后和【区块2】里面的那个Hash值对比一下,就会发现两个Hash值是不同的,这样管理员马上就可以看出【区块1】的数据被篡改了。于是乎,这个黑客需要重新计算【被篡改的区块1】的Hash值,然后用这个新值去替换【区块2】里面对应的Hash值。然后呢,这个黑客就又悲催的发现:TA又必须要去篡改【区块3】里面的那个Hash值,因为后者是把【区块2】的存储数据和【原始区块1】的Hash值放在一起而求出来的值,而目前【区块2】里面的数据是变成了【区块2】的存储数据+【被篡改的区块1】的Hash值。这一点小小的扰动足够让SHA-256计算出一个完全不同的Hash值,于是某一天数据库管理员来查账的时候又会发现问题。就这样,这个黑客必须要把这个区块链中所有的【区块1】后面的区块数据都要改掉一遍,直到最后一个区块,这样才不会留下痕迹。

想必大家已经看出,如果是某一个区块链很大,而且存储很分散,没准还在不同的系统里面,那这个黑客的工作量是很大的,会留下大量的痕迹,很容易就暴露的自己的行踪。因而,仅仅一个原始的区块链,就可以提供比传统数据库高得多的安全性。另外,我们可以把区块链存储在【一次性写入存储器】(即【只读存储器】)里面,这样数据的可靠性将大大增强。

那么下一个问题来了,如何恢复数据呢?通常而言,数据库都会有好几个备份。同样的,一条区块链也会有好几个备份,一个坏掉了可以去找备份。而且由于Hash值的存在,定位被修改过的区块并不是难事(具体操作大家可以想想,不明白没关系,不影响下面阅读)。

故事还没结束。大家如果看过马特·达蒙的纪录片《监守自盗》,就知道一个系统如果内部人自己乱搞,外人是根本看不出来系统是如何造假的。那么问题来了:假如你在某个保险机构买了一个保险,然后保险机构说系统故障,把你的资本金从$100000变成了$10,你咋说理啊?这么大的利润,其实足够让保险机构有动力把自己家的数据库(包括备份)全改了一遍,反正又不花几个电费钱。有人说:我有合同。的确,目前这类问题是用合同来约束。但是,不是所有的交易都有一个合理、清晰、不需要监管和巨额律师费的合同,更何况很多情况是没法弄合同的,你会去为了一个页游的装备和游戏公司互撕吗,或者因为删帖和扎克伯格互撕(床破表示很喜欢)?

因此,基于区块链,并结合分布式系统里面的一些技术,大家发明出来了一个新的概念,叫分布式记账系统(Distributed Ledger)。在这个系统中,和某一坨数据有关的双方或者多方都会拥有某一条区块链的一个或者多个备份。这些备份里的数据被分为【有效部分】、【无效部分】和【待定部分】。整个系统的各路参与者会根据一个类似【民主投票】的算法来决定这些备份的哪一部分是有效、无效还是待定的。这种算法,被称作为共识算法(consensus protocol)。

共识算法不是新鲜玩意,这东西被学术界研究了半个多世纪,原先的主要目的是解决数据一致性的问题。比如说,一个火箭有4个温度传感器,其中某几个可能坏掉了,度数不准,那我们到底采集哪几个传感器的值作为真实值呢?要注意到,这类应用需要绝对保真的数据,而不是简单弄个平均数了事,因为某一个传感器的值可能与真实值差距过大,以至于平均值已经毫无意义了。共识算法在一开始设计的时候并没有考虑到大规模并发的问题,通常系统内只有不到100个节点,所以目前传统的共识算法效率都不是很高,没法应用到上亿个用户这一级别的系统中。这个问题直到现在都没有被学术界或者工业界解决。

这个问题直到现在都没有被学术界或者工业界解决!!!

这个问题直到现在都没有被学术界或者工业界解决!!!

这个问题直到现在都没有被学术界或者工业界解决!!!

到此为止,大家可能就很好奇了,目前主流的数字货币和以上的技术到底有啥关系呢?

一.2 数字货币

由于传统共识算法没法支持海量用户,比特币于是另辟蹊径,自己搞出来了一套共识算法。这里,有兴趣的读者可以去看看白皮书,即使你看不懂也无所谓,不影响下面的阅读,如果大家有兴趣请留言或者私信,我后面有时间可以给大家提供详细的算法思想。比特币的共识算法后来又被用到以太坊等这些所谓“数字货币”中。因而,大家可以看出,目前大部分数字货币本质上就是【区块链存储】+【类比特币的共识算法】这两个的结合体,是一个基于区块链的系统。对于这些“货币”系统,区块链不过是存储技术,其核心的技术其实是那个共识算法,这才是所有类似系统最最核心的技术所在。

共识算法是一个非常复杂的研究领域,其难点在于:系统内部总会有某些“邪恶"节点,这些节点会干出任何超出常人想象的事情,比如篡改数据,自身假崩溃,骗取管理节点信任,发送假消息等等。这些事情有些可能是因为黑客攻击,有些则纯粹是硬件或者软件bug,这类bug还非常难以消除。另外,太空中一个宇宙射线把某一个比特位从0打成了1,你上哪说理去???同样的,一个货币系统中必然有造假币、做假账、搞事情的节点,对这类节点的防范是数字货币系统必须要解决的问题。

那么下面的问题就来了,中国人民银行对待数字货币到底是怎么个态度?其政策导向究竟是啥?数字人民币究竟靠不靠谱?数字人民币和主流的数字货币系统到底是有啥关系?下面,就由我来给大家解读央行的官方态度。

第二部分 央行数字货币政策解读

央行的数字货币政策解读是9月4日首发的,由央行支付司副司长、数字货币研究所所长穆长春主讲。有意思的是,穆长春把这么重要的官方解读放到了一个付费知识平台里面,这令我百思不得其解。直到后来9月16日左右各路媒体开始报道,然后美国隔夜存款利率飙升到10%,我似乎感觉到了某街里那一丝丝的不安.......

言归正传,该讲座的标题是《科技金融前沿:Libra 与数字货币展望》。全文(疑似盗版)的链接是:

https://www.chainhoo.com/blockchain/101314/

该文很长,穆长春花了一个小时时间详细点评了Libra和央行数字货币,以及部分近期的金融货币政策。为了节省篇幅,在这片文章,我只点评穆长春讲座中最重要的两个点:Libra为何不可能成功,以及中国的数字人民币与之的根本区别在哪里。

二.1 Libra为何注定失败

Libra的架构究竟是啥?我们这里需要引入当前主流区块链系统的两个概念:公有链系统(permissionless blockchain)和私有链系统(permissioned blockchain)。注意:有别于主流文章,我在这里加上了“系统”两字,是因为我非常反感学术界和该圈子各种令人找不到北的名词,而问题的根子其实是英文社区故意这么取名,其手法和华尔街的CDO、CDS啥的没有本质区别。

之前我提到过,数字货币的本质是基于区块链的系统。主流区块链系统被分为好几类。为了不让大家糊涂,我这里就介绍最主要的两类:公有链系统(permissionless blockchain)和私有链系统(permissioned blockchain)。公有链系统的特点是随便一个节点就可以加入,没有任何权限控制,所有节点一律平等。这就是所谓的“去中心化”。

目前,只有公有链系统可以实现所谓的“全社会去中心化”!!!

目前,只有公有链系统可以实现所谓的“全社会去中心化”!!!

目前,只有公有链系统可以实现所谓的“全社会去中心化”!!!

可见,区块链这个数据结构,其实和去中心化没有半毛钱关系。所谓去中心化是由公有链系统的架构所决定的。目前,比特币、以太坊等数字货币都是典型的公有链系统

另外,由于公有链系统不设门槛,所以链上的所有数据都是公开的,也就是说,根本不存在所谓的“隐私”。

当前,所有的公有链系统都没有隐私!!!

当前,所有的公有链系统都没有隐私!!!

当前,所有的公有链系统都没有隐私!!!

有人说账户可以匿名,但是要知道:数字货币发生交易,必然要和现实生活发生联系,无论是注册的email地址还是ip,结合大数据技术,很容易就可以追查到某一个匿名账户的真是身份。何况,数字货币提现的时候是走的传统银行账户,想不留痕迹根本是不可能的。穆长春就提到过:美国一家公司已经掌握了80%数字货币账户背后的真实身份,想逃过NSA的眼睛?呵呵。

那么私有链系统又是啥呢?私有链系统是有严格的准入制度的,只有符合条件的节点才能接入到系统中。比如说,如果几家金融机构想做内部清算系统,那他们就需要首先确定哪些节点是合法可接入的,而整个系统只能由这些节点进行操作,别人进不去也拿不到数据。

我们为啥需要私有链系统呢?其实根本原因还不是隐私的问题,而是一个目前各路主流区块链系统最大的痛点,就是性能。公有链系统目前的共识算法极为低效,比特币目前每秒只能处理7笔交易。是的,你没看错。

比特币目前每秒只能处理7笔交易,延迟1小时!!!

比特币目前每秒只能处理7笔交易,延迟1小时!!!

比特币目前每秒只能处理7笔交易,延迟1小时!!!

这里延迟的意思是:一笔交易从开始到最终安全确认,至少要花1小时等待。当然,系统在这期间也会确认别人的交易,但是你的交易就必须在系统里面等,直到1个小时以后才能被最终确认。

其他几个也好不到哪里去,即使性能翻倍,这个性能也惨不忍睹。要知道VISA日常1000笔,支付宝日常一万笔每秒,网联是9万笔,双十一高峰是22万笔,你这个6笔交易是来搞笑的吗?

显然,公有链系统共识算法有其固有的缺陷,而且目前学术界和工业界一直没有找到合适的方法去解决,将来也不太可能会有。尽管目前大家都在热炒新的共识算法,即所谓(proof of stake),但是其性能离国内的电子支付需求都差得老远,更别说国际了。

私有链系统则可以采取更加灵活高效的共识算法。目前比较常见的是PBFT和其各种变种。该算法在理想条件下支持一万笔每秒的性能要求还是可以达到的,当然,离着支付宝还是有很大的距离。

根据Libra的白皮书,这个系统采用的是混合架构。不管其如何含糊其辞,Libra还是承认了其基础架构是基于类似PBFT的共识算法。穆长春提到:当Libra的代码公开了以后,他们做了一个实验:在一个只有4个节点的局域网系统、每个节点8个核、256G内存下,Libra最高支持3万笔交易,同时还有好几十个bug。如果系统稍稍做扩展,性能就会降低到1000笔每秒左右,而这个是目前Libra基金会希望达到的性能指标。

说句实话,我非常钦佩穆长春没有用言辞去嘲笑这个1000笔每秒的性能指标。这个指标其实直接判处了Libra大规模流行的死刑,因为这个速度实在是太低了。要知道仅仅要满足中国现阶段的交易,性能就必须提至少1个数量级,更不要说全世界的交易了。Libra很鸡贼的说我们的重点是跨境汇款交易。那又来了,你Libra如何保证汇率稳定?要知道换汇这种活,你要有的换才行,而目前汇款大户主要是从美元区和欧元区汇往不发达国家,几百亿的单方向资金流会很快吸干Libra的货币篮子,各国央行的配合又有限。这方面穆长春有详细解读,我这里就不再赘述了。

可能有读者已经开始算了:这每秒10000笔交易,到底需要多少存储空间啊?哈哈,如果你想到这一点,那你就离【终极真相】不远了。根据目前所有了基于区块链的分布式记账系统架构来看,每发生一笔交易,就需要永久记录该交易的所有信息,包括:输出账户ID,输入账户ID,交易额,交易类型等等杂七杂八的信息。如果我们假设每笔交易需要100个Byte存储(比特币是250Btye),那么每天我们会生产:

10000 * 60 * 60 * 24 * 100 = 86.4G Btye的数据。

每天86.4GB,宽带用户一般每月才200GB左右,这么大的数据量,显然搞公有链系统是不可能的,因为公有链系统要求每一个节点都有完整的历史交易数据。而私有链系统即使有足够的硬盘存储,由于其共识算法要求节点之间时时刻刻都要进行大量的相互通信,整个系统的带宽要求是随着节点数量呈指数级上升,因而会显著拖慢系统的性能。再考虑到跨境通信的各种延迟,真要搞私有链系统,恐怕也要等美国自己的量子通信出来以后再做考虑了。

因而,我们可以断言,Libra目前选择的技术路线没有未来,是注定不可能成功的。央行显然也是知道的,而且通过抓主要矛盾去解决这些问题,这就是下一节我要阐述的问题。

二.2 央行数字货币的指导路线

看到这里,大家大概有个数了:目前所有的数字货币系统都是基于区块链的分布式记账系统,其性能受限于相应的共识算法。那么好了,数字货币系统,真的需要建立在记账系统上吗???

真的需要建立在记账系统上吗???

真的需要建立在记账系统上吗???

真的需要建立在记账系统上吗???

央行的答案其实很简单:不是的。中国的数字货币基础,就不是记账系统。在这里,我喜欢用Ledger-based来指代之前我们提到的主流的数字货币系统,而用Token-based来指代央行的数字货币系统。注意到:这里的Token是泛指,不是那些圈钱的Token。

穆长春提到:央行这次不预设技术路线,其根本思想其实很简单:就是用电子化的人民币来取代M0。用通俗的话来讲,就是原来现钞是纸币,现在的现钞是一坨代码。这坨代码,我这里叫它Token。这个Token是寄生在央行发布的数字钱包里面,任何能运行这个数字钱包的电子设备都是可以互相交易,而且是完全脱网交易。这里脱网的意思就是设备无需接入互联网,只要两个设备互相能通讯就好(比如一碰传)。这样的好处是:本地小额交易直接用一碰传这种类似P2P协议(不是P2P金融啊,不要想歪了,是类似原来电骡、BT下载类似的P2P通信协议)直接完成,完全不需要经过上面的银行网络。这种类型的交易,就和现金交易没有任何本质的不同,只不过现金由纸钞变成了Token,并且多了终端这个硬件需求。央行也明确了:Token的管理方式和纸钞相似,你大额取现和大额存现肯定是收到一定的限制和监管。另外,电子钱包虽然是匿名的,但是是可控匿名,换句话说只对普通交易者匿名,对央行是透明的。我个人猜测央行会在Token上打上离线交易的交易记录,这样每次这些Token被存入银行账户的时候,整个交易信息就会被央行收集,央行就可以通过大数据进行各种分析来打击洗钱等犯罪。Token的离线交易显然也要有额度限制,因为转发数字货币显然要比运1000万人民币纸钞要容易得多。另外,我猜钱包的大小也应该会有限制,这一点虽然穆长春没有明说,但是从常理推断应该是有上限的,否则不利于监管。

除此之外,有人可能会问:那我把所有的钱都放在钱包里,交易也尽量用离线钱包交易,只要这些Token没有被存进银行,那央行不就永远不知道这些交易到底是啥吗?我的观点是:单说现钞流通,你不去存,难道别人就不会去存吗?余额宝这种才几个利息,大家不还是踊跃去存?央行完全可以搞个人民宝之类的东西,忽悠大家把小额钱托管到各路金融系统里面,以便收集信息。另外,央行也完全可以说:手机丢了,或者坏了,你的钱就没了,等同于钱包被人偷了或者烧干净了。这么一搞就逼着大家去把钱存起来,监管难度陡然下降。

于是,通过Token-based的系统,央行就把零售这块锅直接甩给了钱包依附的交易终端上,并且Token-based系统不存在重复记账的问题,一笔交易只由对应的Token去记录,没有额外的通信成本,而不是像目前的主流数字货币体系,每一个节点都要去记录所有的交易记录,而且由于共识算法的局限性,他们还需要把新记录不停互相传输去“投票”,效率低得惊人。

至于上层架构,穆长春虽然没明确说,但其实隐含了一个事实,就是没有什么需要大改的。网联已经pass双11了,而这些个Token存进银行系统后就变成了纸钞存入银行一样,直接用现有系统监管就可,不需要进行太大的改进。当然,如果央行想玩一个大的,弄一个大统一监管体系,跟踪社会每一笔交易(包括机构和企业单位之间的交易)并进行各种分析,那我们可能需要把旧的系统进行重新设计。由于这部分主要牵扯大额交易,其产生的数据量实际上很小(相对于零售而言,无论用户数量还是交易频次),而且大部分都发生在银行系统内部,现有的某些私有链系统其实完全可以满足这方面的需求,因此我对这部分实现是有信心。

总结

通过这篇文章,我希望大家能够对目前的区块链和数字货币产业有一个比较直观的认识。同时,我个人认为央行这次准备很充分,直接抓住了主要矛盾,通过逆向思维(Token-based而不是Ledger-based),让现金也就是Token来完成交易记录和交易计算,由此大大降低的系统的存储和通信负载。而且,央行这次选择的时间点,恰逢东风17即将亮相的前面,你说这玩意不会国际化吗?

后续一

后续二

后续三

终章

转载内容

我把本篇文章做了修改,弄了一个公众号【 分布式系统理论与应用】:

点看全图

文章的链接是:

从央行官方解读看数字货币

https://mp.weixin.qq.com/s?__biz=MzIzMTgwMDU4NA==&mid=2247483676&idx=1&sn=d46a04ca780ca9d0219523ae6cb46755&chksm=e89feb7bdfe8626da2f81aeb9a51d6c87731d9430b974e47cdeae263ae65fc1cfa781f07659e#rd

这个链接应该是可以分享到微博的,如果有问题的话烦请大家提醒我一下。

弄公众号的目的是怕有人洗稿后篡改文章内容。但愿腾讯的“原创保护”能起点作用。如果大家觉得主贴文章对亲朋好友很重要,请多多转发,这样就会有更多的人真正能够理解区块链和数字货币的意义了。我不求大家打赏,弄打赏是为了原创保护的需要,把作者嵌入到文章里面。


  • 本帖 20 回复
通宝推:南宫长万,尚儒,从北苑到太古,知非,脑袋,曾自洲,三笑,独立寒秋HK,逍遥蜀客,熊熊熊熊,唐家山,我心安处是故乡,宏寺,一哲,积吉,赵美成,明心灵竹,老老狐狸,东川西川,三力思,史文恭,胡一刀,pendagun,莫问前程,听松,梓童,桥上,
最后于2019-11-03 17:53:51改,共30次;
2019-10-29 23:12:44

全看 分页 树展 一览 主题