随着老大的讲话,原本已经平静下去的区块链又一下子热闹了起来。也有好多人来问我区块链相关的东西,正好趁着这个机会把我学习的东西也整理一遍。
本篇文章将从区块链的历史,区块链技术的革命性与局限性,区块链的核心技术进行讲解。
区块链的开始,要从这篇白皮书开始,有兴趣的同学可以读一下。一个名叫中本聪的极客为了表达对政府肆意制造通货膨胀的不满,在2008年底,发表了上面这篇论文,2009年初,搭建了比特币网络,在比特币的创世块中,中本聪留下了这样的一段话:The Times 03/Jan/2009 Chancellor on brink of second bailout for banks。中本聪希望通过这个小玩意解决这样的问题:在以后的某个时刻,货币不在由政府来印发,从而使我们的财富进行保值。
正是这9页A4纸大小的论文,开启了一个新的时代。
在2009-2011年,属于比特币发展的早期阶段,大多数人都不知道,只有极少数的极客在关注。
2012年比特币开始走进人们的视野,已经开始涨了。
2013年,比特币突破了1000美金。与此同时,由于比特币不是图灵完备的,只能支持简单的转账逻辑,所以Vitalik Buterin发表了Ethereum白皮书,Ethereum可以支持图灵完美的智能合约,我们可以基于它开发我们的应用。可以说,区块链技术在此基础上前进了一大步。
随后,区块链受到了人们更多的关注,2016-2017年,区块链在我们国家发展的很迅速。当然,币圈也受到了人们极大的关注,很多人都为此失去了理智。
2017年9月4日,央行等七部门联合叫停了非法ICO,也就是币圈是非法的。
2017-2019年,币圈和区块链都开始降温。做币圈的很多都搬到了海外,研究区块链的热情也受到了很大的打击。
2019年10月24日,陈纯院士向中央做了区块链技术的汇报,随后又掀起了区块链的高潮(当然币圈也很激动,消息公布后不到一天的时间比特币涨了40%,现在已经开始清查了)。央行宣布我们国家可能在明年推出数字货币DCEP(这个下面还会介绍)。
上面这些大概就是区块链发展的简史,以后会发展成什么样子,让我们一起拭目以待。。。
鉴于有很多人问我如何入门,除了上面的白皮书,我推荐一本我入门的书给大家。区块链原理,设计,与应用这本书讲了很多区块链的概念,适合小白。
我们先来看看中本聪的比特币的牛*的地方:
比特币能实现上面的功能主要是依赖了分布式技术和密码学的知识,我们先来简单的看一下,下面会详细的讲解:
区块链像是单向链表,每个块存了自己的数据集,数据集的Hash,前一个区块的Hash。如果上一个块中的ID发生变化,那么其Hash必然变化,后面所有块的指向内容都要改变,这个难度是很大的。
还有PoW机制,每个想要记账的节点需要花费极大的工作来计算一个复杂的数学问题,但是其他人却可以轻松验证他的结果。
这些都是比特币的优势,而引入了智能合约概念的区块链,给我们带来了更多的可能。想想下面的场景,我购买了一份航空延误险,当飞机晚点的时候,保险公司会自动的把保费赔付给我,不用在进行复杂的申请流程。
在此之前,我们的互联网只能实现信息的转移,无法实现价值的转移。价值的转移,我们只能依赖银行,支付宝等具有权威的机构。而借助于区块链技术(本质上是大多数人)我们可以实现价值的转移。
总结:区块链技术帮助构建了我们社会信任的基石,可以让我们在不借助中心化机构的情况下,实现价值的转移,为人们提供了更加可靠的社会。
上面我们说了区块链技术的革命性,但是实话实说,区块链技术是有其局限性的,“我们不能高估区块链技术在今天的价值”。
我们来具体讲讲,去中心化在所有的情况下真的是优势吗?
去中心化所带来的是成本的急速上升,包括网络传输成本,以及存储成本。当前以太坊的全节点的大小已经有几百个G了,而且还在不断的增长,这么大的存储对于普通人来讲是不乏接受的,所以最后也会演化成几个大玩家之前的游戏。
去中心化还带来了网络处理能力的不足,比特币和以太坊的TPS(transaction per second)只有个位数。Fabric只有几百。我们来看下今年双十一,阿里的tps高达54.4万。很明确的来讲,这样的tps根本无法满足我们在生活中的应用。
除此之外,我们的智能合约也要公布给所有的人,在现有的技术环境下,很多代码都是有漏洞的,代码公布之后,被别有用心的黑客盯上,将是一个巨大的灾难。
数据难以篡改,这个真的是个双刃剑,在现在这个社会,我们的隐私万一被泄露,并且记录到链上,还无法删除,真的是件可怕的事情。
发行量固定。这个固然不会造成通货膨胀,但是这个数量远远不够人们在实际生活中的需要啊,2100万枚必然会造成通货紧缩。
此外,区块链技术只能保证链上数据的难以篡改,无法保证链下到链上的数据的真实性与可靠性。
总结:区块链技术有很大的局限性,并不能真正的实现去中心化,带来了存储成本的浪费,交易处理能力的低下等问题。虽然有这样或者那样的问题,但是为我们社会的进步提供了一些思路,我们不能低估区块链的明天。
上面扯了一些皮,下面我们来看看区块链技术的核心技术,比较枯燥,不敢兴趣的同学忽略就好。
区块链中主要用到了密码学和分布式共识的相关技术,我们一一来看。
密码学主要分为以下几个部分:Hash算法,对称加密和非对称加密。
能任意长度的二进制值(明文)映射为较短的固定长度的二进制值(Hash值),并且不同的明文很难映射为相同的Hash值。
主要有MD5和SHA256。其主要特点是正向快速,逆向困难,输入敏感,冲突避免,这些特性将在区块链网络中发挥巨大的价值。具体的细节请参照维基百科。
主要包含DES和AES。其主要依赖的技术是:替换密码和置换密码。以及由二者演化出来的 SP网络和 Feistel密码结构。
主要包含RSA和ECDSA。主要是借助于一些难以解决的数学问题来实现的。
PKI是公钥基础设施,我们利用此在不安全的网络中构建了安全服务,从而让互不相识的人们可以安全的通信。
Merkle_tree是由一个根节点、一组中间节点和一组叶节点组成。适用在 快速比较大量数据以及 快速定位修改的场景下。
大量的交易数据可以被分成各种尺寸的小组,这样有利于我们整合数据和校验数据。
同态加密
零知识证明
总结:上面这些是常用到的密码学。下面我们 开看下其在比特币中的应用。
每个块存了数据集,前一个块的hash,本块的hash,其中,本块的hash是由本块的数据集和前一个快的hash出来的,所以前面的数据集一旦修改,必然导致其hash的变化,也必然导致后面所有的块。借助于我们前面的Merkle_tree的相关知识,我们可以进行快速的比较和定位修改的区块。
下面我们来看下比特币的结构:
其中,Version,Previous Block Hash,Merkle Root,Timestamp,Difficulty Target 和 Nonce 是区块链的协议头部,后面是本来中的交易数(1-9笔)和交易的大小(不超过1MB)。
Version | 当前区块链协议的版本号,4 个字节。如果升级了,这个版本号会变。 |
---|---|
revious Block Hash | 前面那个区块的 hash 地址。32 个字节 |
Merkle Root | 交易信息的 hash 值,32个字节 |
Timestamp | 区块生成的时间。这个时间不能早于前面 11 个区块的中位时间,不能晚于 " 网络协调时间 "——你所连接的所有结点时间的中位数。4 个字节。(因为比特币网络没有一个中心节点的时间) |
Difficulty Tagrget | 表明了当前的 hash 生成的难度,4 个字节。 |
Nonce | 一个随机值,用于找到满足某个条件的 hash 值。4 字节。 |
本区块的hash求值方式如下(上面的6个字段不包含Difficulty Tagrget ):SHA-256(SHA-256 (Block Header)) 。这个hash值不一定是符合要求的,要求是在Difficulty Tagrget 字段中指定的,我们不断调整Nonce的值来使我们的hash值满足网络的要求。即满足:
SHA-256(SHA-256 (Block Header)) < Target
我们要找到一个Nonce,使得hash之后的结果小于target,也就是前面有多少个零。
我们可以写个程序来验证下:
import hashlib
import time
data="HaoJunsheng"
n=1
starttime = time.time()
while n < 2**32:
str = data + `n`
hash = hashlib.sha256(str).hexdigest()
hash = hashlib.sha256(hash).hexdigest()
if hash.startswith('0000000'):
endtime = time.time()
dtime = endtime - starttime
print(str,hash,"find prev 0 of 7,used time:",dtime)
break
n=n+1
结果如下,寻找7个0的时候,我的乞丐版本的mac已经打扰了。
所以比特币的挖矿难度是可以调整的。
下面我们来看下共识算法。
共识算法解决的是对某个提案( Proposal) ,大家达成一致意见的过程。共识算法主要分为CFT(只有故障节点)和BFT(存在故障节点和作恶节点)。
我们为了在分布式的环境下达成一致, 即给定一系列的操作,在约定协议的保障下,使它们对外界呈现的状态是一致的。我们提出了两阶段提交协议,即提交请求阶段和提交执行阶段。但是缺点是必须所有的节点都同意,才可以提交,这样在工程上来讲是不可能的,所以我们提出了Paxos等算法,我们不需要所有的节点都同意,大部分节点同意就行了。
paxos 协议是Lamport于1989年的一篇论文首次提出,直到1998年该论文才得以发表。
Raft 是一种可信环境分布式一致性算法。 相比于Paxos算法,Raft更加容易理解和容易实现,他强化了领导人的概念,将整个分布式一致性问题抽象成了两大阶段,领导人选举(Leader Election)和日志复制(Log Replication)。
Hyperledger Fabric 1.4采用raft算法。
zookeeper也是CFT容错的。Hyperledger Fabric 1.4之前用的就是这种算法。
拜占庭问题是由Lamport于1982年提出的分布式对等网络通信的容错问题。在分布式系统中,所有节点通过通信交换达成共识,按照相同的策略协同。但是系统中有时存在节点由于各种原因,发送错误的信息到网络中,从而破坏系统的一致性。
拜占庭问题的原始描述是:N个将军被分隔在不同的地方,诚实的将军希望通过某种协议达成命令的一致。但是其中一些背叛的将军会通过发送错误的消息阻挠的诚实的将军达成一致。Lamport证明了在将军总数大于3f,背叛者为f或者更少时,忠诚的将军可以达成命令上的一致。
Practical Byzantine Fault Tolerance。 PBFT是一种基于副本状态机复制的算法。将不可信环境一致性达成分成3个阶段,分别是预准备、准备和确认。
1993年,PoW思想首次被Cynthia Dwork在论文《Pricing via Processing or Combatting Junk Mail》中被提出。该算法用于解决垃圾邮件的问题,要求邮件发送者需要计算某个数学难题以此来提高邮件发送的成本,从而减少垃圾邮件。
这个也是比特币采用的方案,要求我们算一个hash才可以打包区块。
2011年Quantum Mechanic首次提出了PoS算法。在基于PoS的加密货币中,下一个区块的创建者是通过随机选择和财富或币龄(即股份)的各种组合来选择的。PoS必须有定义任何区块下一个有效区块的方法,不能仅仅按照账户余额,这样会造成富有的人越富有。
通过不同的策略,不定时地选中一小群节点,这一小群节 点做新区块的创建、验证、签名和相互监督。这样就大幅度减少了区块创建和确认所需要消耗的 时间和算力成本。
这就像选举人团代议制度,和美国选总统一样。DPoS 下每个 token 都是选票,大家票选 20 个 选举人团 +1 个随机选举人 =21 个选举人代表网络。然后每隔一段时间,在这 21 个人中挑选 一个出来维护账本并获得收益。
总结:我们已经有了各种各样的共识算法,其中,CFT系列的算是比较成熟了,适合联盟链的场景,BFT的各自都有其缺点。
自从比特币,以太币发布以来,各种各样的数字货币不断发布,基本都是空气币,割韭菜的,被社会主义铁拳无情打击。
我们主要关注Libra和我们国家的DCEP。
下面的内容参考央行穆长春司长在得到上的课程,我把比较核心的摘抄出来。
2019年6月18日,发生了震惊全球央行的事情,Facebook发布了Libra数字货币的白皮书。白皮书里讲:
Libra的使命,是要建立一套简单的、无国界的货币,和为数十亿人服务的金融基础设施。这套金融基础设施能够让人“无论居住在哪里,无论从事什么工作或收入怎样,在全球范围内转移资金的时候,应该像发短信或分享照片一样轻松、划算,甚至更安全。”
Libra是一项非常有野心的计划,它树起了一杆普惠金融的大旗,还搞了一套治理机制。
从技术的角度看,Libra的技术架构是什么,解决了什么问题,为什么说它跟比特币这种加密资产很不一样。
Facebook在白皮书里号称,Libra现在的技术能支持每秒1000笔交易,每笔交易完成需要确认的等待时间是10秒钟。然而,比特币完成一笔交易需要等待60分钟。这意味着,如果我们用区块链技术去做支付的话,就可能会很慢。
在支付领域,对区块链来讲,最致命的问题是结算最终性的问题。什么是结算最终性呢?国际清算银行在《金融市场基础设施原则》里讲过一个原则,就是你要明确每一笔交易完成的时间点,这个时间点确定了,那就能确定这笔交易最终完成的那个时间点,这个点也是不可回退的一个点。如果你没有这么一个明确的时间点,就会导致在法律上、经济上产生一系列的问题。
所以原生的比特币做支付是存在很多的问题的。下面我们看下Libra,不完全是区块链,Libra规避了区块链的技术短板,而是混合式架构。它底层用的是中心化的架构,只有到最上面,就是最终结算那一层,它才用一下区块链。
这个技术架构,如果用比较完整的表述,应该叫做“中心化的分布式处理架构和区块链技术相结合的分层混合技术路线”。
Libra跟比特币这样的加密资产相比,最大的区别,就是它有了价值支撑。前面我们讲到过,Libra采取的有点像百分之百的准备金制度,也就是我们要发行多少Libra,必须有同等价值的储备资产在。储备资产是由一篮子主权货币和政府债券所组成的。“一篮子货币的资产储备”跟“一篮子货币挂钩”,是两个完全不同的概念。
一篮子货币的资产储备是指,比如你要是用黄金作为发行货币的资产储备,那么你有多少黄金才能发行多少货币。
挂钩的意思则是说,两种货币之间的汇率不会变化。如果你是用单一货币作为储备还好办,但要想跟一篮子货币实现挂钩,是非常难的,你必须保证一篮子货币的比重不变。
但是所谓一篮子货币作为储备资产,并不能实现币值的稳定。它既会受储备资产币种之间汇率的变化影响,也会和任何其他资产一样,受市场对它的信心和预期的影响。Libra作为一种稳定币,要能推行成功的话,意味着Libra的创始协会,既要扮演Libra的中央银行的角色,同时也可能会演变成一个私营的国际货币基金组织,而且在私营部门里,它会比国际货币基金组织的影响力还要大。
从货币的主流定义和基本职能来分析加密资产到底是不是货币。
传统上,货币有三种基本职能:交易媒介、价值贮藏和记账单位。
交易媒介,也就是交易的中间媒介。很早以前人们用贝壳来进行交易,后来演变成贵金属,包括金、银、铜等,成为交易媒介不一定意味着价值有多高,关键是大家能取得共识。
价值贮藏,就是你能用它来保值增值,至少是能保值,也就是说,作为一个货币,它的价值必须是平稳的。
记账单位,也有人翻译成价值尺度,也就是各种商品到底值多少钱,如何进行交换,就要靠货币进行标价。
所以,像比特币这样的加密资产,完全不具备货币的职能和属性。没有谁真正拿它去做支付、买东西;价值贮藏和价值尺度的功能更是没有,因为它的价值波动实在太大了。
但是我们来看Libra,Libra作为交易媒介的优势和劣势,Libra最大的优势,是它的用户基础,27亿的用户基础。从价值贮藏这个功能来讲,在币值不稳定的发展中国家,或者说弱势货币国家,它有可能得到老百姓的欢迎,成为一种安全资产。发挥记账单位的功能,障碍是最大的。
如果一个机构,它有影响各国货币汇率安排的能力,但是又不承担相应的责任,那是非常可怕的。对国际货币体系来说,安排和协调各国货币汇兑机制的机构,一定是一个具有公信力的、中立的组织,否则的话,它就会成为一个金融战争的工具了。Libra的影响力,自然也会威胁到主权货币,威胁到各国央行的货币政策和汇率政策的主导权。其中,Libra带来的一个非常大的隐患就是,通过它进行的交易,反洗钱和反恐融资的责任是不明确的。
央行的DCEP(Digital Currency Electronic Payment),也就是数字货币和电子支付工具。
央行的数字货币功能和属性跟纸钞完全一样,只不过它的形态是数字化的。我们对它的定义翻译过来就是“具有价值特征的数字支付工具”。
什么叫具有“价值特征”呢?简单来说,就是“不需要账户就能够实现价值转移”。央行的数字货币属于法币,跟现金一样,央行的数字货币也具有无限法偿性,就是说你不能拒绝接受DCEP。
那DCEP,跟我们常用的支付宝、微信支付,具体还有什么区别呢?
首先从法权上,DCEP的效力和安全性是最好的。
你用的纸钞是央行货币,DCEP也是央行发行的,但是你用支付宝或微信做电子支付的时候,用的是支付宝的电子钱包、微信的电子钱包,它们的货币是从哪儿来的呢?它们不是用央行货币进行结算的,而是用商业银行存款货币进行结算的。当然,在备付金集中存管以后,情况有所变化。
也就是说,微信和支付宝在法律地位、安全性上,没有达到和纸钞同样的水平。
理论上讲,商业银行都可能会破产,所以这些年人民银行建立了存款保险制度;但假设微信破产了,微信钱包里的钱,它没有存款保险,你就只能参加它的破产清算,比如你之前有100块钱,现在只能还你1毛钱,你也只能接受,它是不受央行最后贷款人的保护的。当然,这种可能性很小,但你不能完全排除。
为什么在电子支付手段如此发达的今天,央行还要做这样一个数字货币呢?
首先,为了保护自己的货币主权和法币地位,我们需要未雨绸缪。其次,现在的纸钞、硬币的发行,印制、回笼、贮藏各个环节成本都非常高,还要投入一些成本做防伪技术,流通体系的层级也比较多,携带又不方便,现在谁也不愿意带现金了。所以,央行数字货币能够解决这些问题,它既能保持现钞的属性和主要的价值特征,又能满足便携和匿名的要求。
央行数字货币如何反洗钱?
我们进行反洗钱、反逃税、反恐怖融资这些工作,都可以用前面提到过的大数据的方式。也就是说,虽然普通的交易是匿名的,但是如果我们用大数据识别出一些行为特征的时候,还是可以锁定这个人真实身份的。
DCEP是双层投放和双层运营。2018年的1月25号,央行的范一飞副行长也发表了一篇文章——《关于央行数字货币的几点考虑》,现在在网上也能找到,从这篇文章你可以看出,那个时候,实际上就已经确立了央行数字货币的研发框架。
什么叫双层运营体系呢?就是上面一层是人民银行对商业银行,下面一层是商业银行或商业机构对老百姓。
央行这个层面属于技术中性的,也就是说,央行不会干预商业机构的技术路线选择,商业机构对老百姓兑换数字货币的时候,用什么技术来兑换?是用区块链,还是用传统账户体系?是用电子支付工具,还是用移动支付工具?无论采取哪种技术路线,央行这个层面,都能适应。
双层运营体系还有别的考虑:
一个是可以避免金融脱媒。什么是金融脱媒?如果我们采用的是单层运营的话,人民银行直接对老百姓发行数字货币,那意味着人民银行会成为商业银行的竞争者。因为老百姓一兑换数字货币,就会把商业银行的存款转移到人民银行来,在这种情况下,商业银行的融资成本就会升高,实体经济就会因此而受到损害。1984年以前,中国就只有人民银行一家银行,金融脱媒说的就是这种情况。
我们先来回顾下Libra:
第一,Libra虽然也部分用到了区块链技术,但它不再是去中心化的,有很明显的组织和主体。它跟比特币这样的加密资产,已经非常不一样了。
第二,它拥有至少27亿的用户,这还只算Facebook和WhatsApp,社会动员能力巨大。
第三,它树起了一杆普惠金融的大旗,主要市场在跨境支付和发展中国家。
第四,Libra很有可能获得超主权的影响力,影响国际货币体系,侵蚀主权货币的地位。Libra如果不被监管,也很有可能导致地下经济通道完全打开,成为非法交易的工具。
在金融这个领域,互联网创业者,哪怕是像Facebook这样大的互联网公司,也缺乏应有的风险意识。
这些年的互联网创新,不管是共享经济也好,互联网思维也好,其实都是奔着走独角兽的模式去的,要么做大,成为一个垄断企业,要么做死。这会给社会带来很大的成本,死了的话,不管是社会资本也好,风险资本也好,投资者融来的钱,实际上最后都损失了。
一个例子,就是P2P,在中国现在可以说是完全变成了这两年最大的一个金融风险,一直在治理。它给老百姓带来的损失,有的就是家破人亡。
现在很多互联网金融机构都说,你看我能实现“310”,也就是三分钟放款、一分钟到账、零个人审核,而且坏账率还非常低,零点几。但是你要知道这些东西都是在一个流动性充足的环境下做的,它没有经过一个完整的金融周期的测试,一旦在流动性不好的情况下,就可能会出现大面积无法还款的情况,导致一个产品的失败,甚至把整个体系都拖垮。
这篇文章,我们首先讲了区块链的发展历史,从中本聪的9页A4纸大小的白皮书说起,到中央集体学习区块链技术。
然后描述了区块链技术的革命性与局限性,一方面,为我们解决不可靠网络的价值转移提供了思路,另一方面,也带来了新的问题。总结下就是:我们不能高估区块链的今天,也不能低估区块链的明天。
在然后,总结了区块链中的核心技术,密码学和分布式,我们可以看到区块链里面并没有新的技术的出现,而是中本聪把这些技术糅合到了一起,真的是厉害。
最后,我们看了区块链与数字货币之间的关系,由于不是很懂经济学,大段引用了央行穆司长的课程,我感觉写的很好。不过还是奉劝读者不要碰自己不懂的领域,比如加密货币。
在最后,再为大家推荐一些不错的学习区块链的资源吧:
区块链,从数字货币到信用社会
区块链,原理,设计与应用
hyperledger fabric
这些能让我们对区块链有了解,至于想学技术的话,还是得学习密码学,分布式,以及网络这些基础的知识。