刨根问底区块链 —— 基础篇

这篇文章是我在公司作的一次技术分享的 PPT 和讲稿,整理修饰以后加了点东西,写成了文章。但愿能让更多的人理解区块链的原理,由于它实在是精妙,让我忍不住作一次完全的分享。本篇文章很长,但对于研发同窗应该很是容易理解。对于非技术的同窗,若是仔细研读+搜索应该也没问题。我尽力讲的通俗,但毫不用笼统和离谱的比喻让你『貌似懂了』。前端

ps: 文字须要结合 PPT 图片看,完整 PPT 在文末有下载连接。git

感谢你们来听个人分享——『刨根问底区块链』,这个是基础篇,也就是主要讲区块链的技术原理。虽然网上这类的文章、视频学习资料不少,可是大多数讲的都太浅,属于给外行人讲的,还有一部分讲的思路不够清晰,因此我按照本身的思路作了这个讲给『程序员』听的分享。固然若是你不是程序员,也能够尝试听听不会很难。程序员

这回咱们不谈币价,只谈技术,或许还能谈谈为何身为『程序员』的你我在早些年没有引发足够的关注。github

区块链技术必定逃不开它的创世者中本聪,也逃不开比特币。中本聪在发明比特币之初就但愿创造一个自组织的货币系统,它不须要政府的背书。算法

早些年说起比特币你们首先提出的一个质疑就是:数字的虚拟的货币,真的值钱吗?真的有价值吗?关于这个问题,咱们就要从货币的价值基础讲起。不妨回想一下,一种货币,它为何值钱?是由于生产这张纸的成本高吗?100美圆和1美圆的生产成本都是9美分。数据库

若是你思考足够深刻,就会发现一种货币值钱的缘由是全部使用它的人都相信它值钱。咱们认为人民币、美圆值钱,是由于咱们信任政府,相信政府能给咱们提供美好生活的保障,让咱们手里的这些纸片一直可以花的出去。而在一些战乱的国家,这些政府发行的纸币就很不值钱,由于你不知道哪天政府就会垮台,你手上的钱就变成一张张废纸了。再好比津巴布韦的 1014 面值的钞票,也是由于政府毫无信用地滥发钞票。再想一想为何黄金没有政府背书,却能够成为全世界的『硬通货』?也是由于人类有一个共识,Au 这个金属元素单质稀有且不可人工合成,化学性质稳定,全世界的总量有限。canvas

所以咱们能够得出一些结论,货币须要赢得人们的信任基础。咱们设想一下,若是要实现一个数字货币,对标国家机器发行的货币,应该如何得到信任基础呢?后端

第一,对于国家而言要一直认可它,不能朝令夕改,那么对于基于计算机的货币而言,就是要一直运行这个系统的代码,永不宕机。最好是人类活多久它就运行多久,对吧。浏览器

第二,国家要保证它价值稳定,咱们知道轻微的通货膨胀是有利于货币流通的,但不能滥发。可是咱们知道人性都是贪婪的,对现状估计乐观的,发行货币这件事情交给再理性的人来作,也可能会超出预算。所以数字货币的发行应该不禁人类来直接控制发行。安全

第三,个人钱不管是存银行仍是钞票放家里,只有个人受权才能花掉,任何人不能没有个人许可花个人钱。对标过去比较容易,转化成术语就是须要个人签名才能使用。

第四,个人钱不能无缘无故失去,这个看起来跟上一条有点像,但仍是不一样的。这是在说国家保障你的钱不能被人抢走,若是有人抢(偷)你的钱,警察会帮你抢回来,而且让做恶者获得惩罚。对标到数字货币,就是个人余额不可篡改。

咱们纵观右边的这几条,是否是感受除了第三点,其余的都很难实现?中本聪在08年的一篇论文《比特币:一种点对点式的电子现金系统》里所有解决了这些难题,固然这都离不开前人在密码学、金融学方面已有的一些尝试努力。

在咱们对区块链技术,比特币原理一探究竟以前,我以为必需要为你们补习两个密码学基础。(虽然不少人可能已经很熟悉了,可是据我不彻底统计还有很是多的程序员缺少密码学基础知识)

首先是 Hash 算法,这个算法能够把一个无穷的集合映射到有限的集合中,经过函数 f(x)。具体怎么实现不展开讲,可是你须要紧紧记住它的几个特性:

1. f(x) 不可逆,只能正向运算
例如A→Hash,你没法再经过 Hash 还原获得 A 了,除非你一次次穷举找到 A 这个值。并且值得注意的是,你把无穷的集合映射到有限集合中,势必有多个值映射同一个结果,这也是你不能逆向运算的缘由之一。

2. 极少碰撞,极难找到hash值相同的
虽然这个映射后的有限的集合是有限的,但这个集合很是之大,拿 SHA256来举例子,它的值能表示多少种状态呢?想象地球上全部沙子,假如每粒沙子都是一个地球,而这些地球里的每粒沙子加起来总共也小于它的值。一个优秀的 hash 算法,碰撞应该是极少的,你很难找到两个值映射后的 hash 值相同。

3. 正向运算很快,即便原文很大

有了以上这些特性咱们基本上能够用一个 hash 值去表明它的原文了,所以 Hash 算法普遍应用于信息摘要、压缩、验证、随机,若是你不理解随机,能够看最下面这张图的例子,原文『dog』后面即使多一个『.』hash 值也会截然不同,能够说获得的 hash 值很是随机了。若是你想获得某个指定的 hash 值,你只能一次次的枚举原文,尝试获得指定的 hash 值。

第二个是非对称加密算法。咱们通常都已经习觉得常的是加密解密用同一套密钥,可是你有没有用想过你和别人商定密钥的这个信道也会被偷听。这时非对称加密就诞生了,很简单的一个特征:用公钥加密只能用私有解密,用私钥加密的只能用公钥解密。

你要给别人发消息的时候,对方能够放心大胆地把公钥发给你,你用公钥加密好密文后再发给对方,对方再用本身的私钥解开。这一切在不安全信道传输一点问题都没有。这就类比于,A给B一把锁,只有 A 有钥匙,B 拿到锁以后,把箱子锁起来再交给 A,这样搬运箱子的快递员怎么也打不开箱子,只有 A 能拿钥匙打开。

固然私钥通常不是用来加密,通常用于签名,这样任何人均可以拿公开的公钥进行验证了。

再来回顾一下咱们以前列举的数字货币要解决的几个要点,猜想一下08年的中本聪是怎么制定技术方案的。

1. 一直运行代码,永不宕机。这个看似荒唐,其实不难,咱们知道为了防止单点故障,经常会用到分布式系统、异地多活。可是难点在于这个分布式系统中的节点要足够多,足够分散,并且要保持一直运行,这就须要有人愿意一直运维。

2. 不禁人类控制发行。是不可能的,但咱们能作到的是避免人类直接控制发行,这个就好像三权分立、SRE 运维机器同样,总结一句话:人管代码,代码管机器,人无论机器。并且在后来事实上代表:社区管人。

3. 有个人签名才能使用。这个很简单,很少说。

4. 个人余额不可篡改。额这个有点难,为何难你们能够思考几分钟,接下来会细讲。

若是是中心化存储余额,像各大银行那样,维护每一个人的余额信息是很容易的。可是分布式存储余额,至关于每一个人手里都有一本账,当发生交易的时候,咱们能够把交易的消息广播(消息的网络广播原理 p2p 技术已经发展不少年了,再也不展开解释)给其余全部人,让其余人都改变本身手里的帐本。这就有点像三体人的帐本,假如每一个人都不会欺骗撒谎,自觉作余额的加加减减,那么每一个人的帐本都将准确地记录了每一个人的余额。

可是每一个人都记录余额的这种方式用脚趾头想一想都以为不可行,由于任何人均可以篡改这个余额。(给本身多记一点,别人少记一点。)因此咱们应该记录的是转帐记录(交易记录),只记录余额必定会扯皮!只有交易记录是不可篡改的,由于每笔交易,都必须通过付款方的签名才有效。而余额须要交易记录的『对帐』才能保证正确。

所以咱们获得一个结论,咱们的『分布式公共帐本』记录的应该是交易记录,而不是余额,由于『余额』是『交易』的冗余信息。

不存储余额,区块链是这样定义一笔交易定义的数据结构的(如图)。用比特币举例子的话就是,一笔交易要想成立,要有input 和 output。 input 是过往别人给你转钱的输入,output 就是你要给别人转钱的输出。

例如,你要转6.5个 btc 给老王,那首先你要先拿出历史的交易记录,证实你至少有6.5个 btc。因而你随便拿出了三个历史交易,分别是老张、老马、老李曾经转给你的,加起来是7个 btc。固然你也能够拿其余更多的转帐的历史记录出来,前提是不管你拿出的 input 有多少条记录,加起来的 btc 数要等于 output 的总 btc 数。这个例子中,你只想转给老王6.5个 btc,还有0.5个btc能够选择转给本身,就至关于找零了。这里的 output 的交易数没有限制,能够转给多我的。

固然一笔交易除了 input=output 这个规则以外,确定还须要你提供的 input 的交易记录不能被使用过。老张、老马、老李转给你的交易记录,只能被使用一次——你此次的交易使用它们做为 input 了,下次就不能再用了。同理,你转给老王的6.5btc的 output 记录能够被老王做为他的input 在他想交易的时候使用。同理,你转给本身的0.5个btc也同样,每条 output 都只能被使用一次。

再多啰嗦一句,每一笔交易的 input 在使用以前是须要验证签名的,A→B 要被使用,只须要验证使用人的签名是不是 B 便可。

咱们把没有使用过的交易记录,称为:未花费交易输出(UTXO)。比特币系统中的帐本记录了历史上每一条交易记录,很是庞大。可是不用过度担忧性能,虽然帐本记了全部的记录,但每一个节点能够本身维护一个 UTXO 的集合,每笔交易在验证的时候,只须要看看 input 是否都在 UTXO 集合中便可。

有了签名+交易记录,每笔交易都有签名都真实可信,看似解决了大部分问题,但实际上问题还不少。

第一个问题是:如何保证交易的时序?
当我向整个网络广播交易的时候,可能存在网络失联问题,形成个人交易没有被全部节点收到。也可能有网络延迟,别人给个人转帐的消息 m 还没被A节点收到,我给别人转帐 input 里用到了 m,这个转帐消息 n 先被节点 A收到了,A 就会认为这个转帐消息无效。甚至有些节点故意忽视个人转帐消息。能够说交易必需要有严格的时序,一样的几条交易顺序不一样,获得的结果也不一样。但分布式网络节点之间互相不信任,不可能有统一的时间戳,也不可能信任一个中心化的 ntp 服务。如何实现这个网络的时钟呢?

第二个问题是:以谁记录的帐本为准?
去中心化的网络,你们都能记帐,那确定就会有恶意节点故意漏记,也会有无辜节点由于网络问题漏记。你总不能以让全网全部节点都收到消息为准吧,也不能以大多数节点记的账为准,由于攻击者能够恶意制造大量节点凑数。如何才能写一个你们公认的,不能被篡改的帐本呢?

废话很少说,直接看中本聪同窗的参考答案。

首先要解决的是时序和防篡改的问题。定义这样一个数据结构,叫作『区块』,它存放的是单位时间内的交易明细。(程序员能够类比于你写数据库的时候的一次事务)这个区块内的每条交易记录都是合法的,都验证过签名、input=output、input 是否未花费。

区块的头部存着一些必要的信息,时间戳、区块大小、hash 值、上一区块的 hash 值等等,区块的 body 记录了单位时间(比特币是10分钟)内的交易记录。

注意,重点来了。一个区块的HASH值 = hash(上一区块的HASH + 本区块的内容),『本区块的内容』包含了body 里的交易记录还有 header 里的那些杂七杂八的值。这样每一个区块的 HASH 值都取决于当前区块的信息,加上一区块的 HASH,加在一块儿算了个HASH。每一个区块引用到上一个区块的 hash 值,这样就连成了一个链条,区块链的名字就诞生了。

你们能够思考一下这么作有什么好处。结合以前讲的 hash 算法的特性。

  1. 若是你篡改了历史上某个区块的交易记录,那么从那个区块日后的区块的 hash 值都得从新修改一遍,至关于整个路径都篡改一遍
  2. 若是你想调换某两个区块的顺序,对不起,这两个区块到如今的全部链条上的区块hash,你都得篡改一遍。

可是核心问题还没解决,由于这两种方式篡改帐本的成本都很低。做为攻击者,我大不了就把链条上的区块 hash 都从新算一遍,本身生成一条新的链也就是新的帐本出来。若是不提升记帐的门槛,不选出来一个公认的帐本,这个问题永远得不到解决。

举一个现实中的例子帮助你们思考这个问题。就好比咱们从小到大考过的证,它们是怎么保证时序和不被篡改的呢?你想考英语六级,必须先拿到四级证书,考英语四级的前提是你必须高中毕业。

你有没有发现,保证时序实际上是靠两点,一是拿证书的前置条件,二是学习须要花时间。从高中毕业开始,达到英语四级的水平至少要学1年英语,达到六级水平至少要2年。咱们对标到区块链系统,考证的前置条件类比于hash 链,同时你考这个证书(生成区块)不能毫无门槛。试想若是生产每一个区块至少要花费10分钟,那么篡改一条链的 hash 就很是费劲了。

以谁记录的为准,在去中心化的系统里就是:在区块有生产门槛的前提下,看谁先生产出来符合条件的区块。(你们一块儿考个试,看谁最早把题目所有作对)

固然前提是,这种有门槛的生产区块的方式,要足够公平,并且经过这种方式生产出的区块,要获得你们的公认且容易验证的。

那么,什么才是,有门槛、公平的、不能做弊、产出你们公认且易于验证的方式呢?

按照这个思路,工做量证实就呼之欲出了——

咱们指定一个规则,每一个区块的 Hash 值,必须小于数字 n。举个例子,好比这个块的哈希值我算出来是0x123456,而咱们规定的 hash 值必须小于1000,那么你就得调整区块内容,区块头部有个能够随意变动的数字 noce,你不停的尝试不一样的 noce,使得区块的 hash 值是0x000开头,好比0x000987,小于1000了知足条件。 由于算出的 hash 值是毫无规律可寻的,你没法经过目标 hash 值逆推原文中的 noce,这使得你要尝试不少次 noce。比特币网络用的hash 算法 SHA256,它是64位16进制数,规定的 n 越小,尝试的次数就越多,花费的时间也越长。比特币经过 n 值来调节难度,差很少是10分钟才能尝试出来一个符合要求的 hash。

noce 位数有限,还能够改变coinbase和交易条数。试出知足条件的hash须要算力,且纯碰运气。要注意的是,这个10分钟是指的全网的算力加在一块儿,须要约10分钟才能算出一个符合条件的区块。由于谁最早碰出来符合的 hash 是纯随机,算力强只能提升碰出来的几率。你能够类比买一期彩票,或者想象这样一个游戏,全部人同时扔骰子,谁最早连续扔出10个1点,就得到记帐权。显然这是纯看运气的一件事,可是从几率上说,参与的人越多,越容易出现连续10个1,一样你抛的比别人快,同等时间内你的胜出的几率也越高。

这个过程称为『出块』,也叫『挖矿』,负责挖矿记帐的人(节点)被称为『矿工』。

因此,当网络里参与的人越多,算力越高,比特币出块时间就会变短,原先10分钟出一个块,如今1秒钟出一个,这是咱们不但愿看到的。因此整个系统还须要动态调节这个 n 的值,使得挖矿的难度控制在平均10分钟出一个块。比特币系统的共识是,每2016个区块(大约是两周时间) 你们按照约定的规则,复查一遍过去的出块时间。若是平均时间短于10分钟,则适当提升难度,按照必定的算法缩小 n 这个目标值。反之则下降难度,调大 n。

纸上得来终觉浅,若是你想了解更多关于区块数据的知识,能够找一些在线的区块浏览器,通常都是矿池发起作或者官方社区的,好比:比特币区块浏览器(btc.com)、以太坊区块浏览器(etherscan.io) 。你能够在里面看到现实中区块内详细的数据。

可是也有必定的几率,10分钟内有两我的几乎同时算出了下一个区块。这里说的『同时』多是先后一、2分钟,由于区块广播到全网须要必定的时间,各个节点接受到的消息也有前后,很差说谁的区块是先算出来的。这时区块链网络就会分叉,有的矿工基于 A 区块算下一个区块,有的基于 B 区块,可是不要紧,咱们有一个原则就是:最长链原则,就是你们都只承认最长的那条链。由于较长的链中包含了更大的工做量,这是全部节点的共识。

那有没有人为了赌气让本身的区块获得认可,就是硬要基于 A 这个较短的链来挖矿呢?答案是没有,这是一个博弈问题,有点像囚徒困境,由于你不知作别人会不会基于较短的链来挖,并且别人也都这么想,所以最理性作法就是随大流都挖最长的链,你硬要来一场豪赌最后只会白白浪费时间和算力。

那会不会有人为了反悔一次交易,而故意竞争较短的链呢?有的,下面将会讲到。

其实前面说了这么多,工做量证实的一个很重要的目的就是解决双花问题。什么是双花?很简单:

假设一个交易场景,A 给 B 转 2 个比特币,B 给 A 货物。A 能够先向全网广播一条,『A 给 B 转了2个币』的消息,这个消息被矿工收到,而后打包成区块,确认了这笔交易。假设这时 B 看到包含这条交易的区块被生产出来了,就把货给A了。但其实 A 同时在广播另外一条交易,让这2个比特币的接收人是 A 本身,即 A→A,而后 A 联合多个矿工一块儿拼命的基于后者的区块算下一区块,只要算得足够快,让这条链的长度大于给 B 转币的那条链,A 就能反悔交易,至关于 A 篡改了历史交易!

这个操做听起来可行,咱们来实际算一下:

  1. 假设和 A 共谋的矿工算力很是强,占全网总算力的50%以上,那么 A 的胜算是100%。由于这群矿工算出下一区块的几率永远比其余人加在一块儿要大一些,追上 A→B 这条链只是时间问题,总有一天能追上并反超。

    这就是咱们常说的51%攻击,若是有人真的能掌握全球参与挖矿的算力51%以上,那他就有100%的胜算发动攻击,只是时间问题。固然,随着系统中参与的算力愈来愈多,再牛逼的人恐怕也很难控制全球那么多算力。

  2. 假设 A (攻击者)这边的算力只有 q (q<50%),那么攻击者最终消弥 z 个落后区块的几率为(如图),即攻击成功的几率。为了使攻击者攻击成功的几率小于0.001(小几率事件),则至少要 A→B 这个交易所在区块诞生后再等 z 个区块诞生以后才够安全。咱们能够列出一个表格来,当 q=10% 的算力时,只须要等待5个区块便可……当 q=45% 时须要等待340个区块确认。

比特币的白皮书中有详细的论证,感兴趣的同窗能够亲自去阅读→比特币白皮书←。如今人们通常认为一笔交易被确认后有6个区块被确认,这笔交易就能够被确认是安全的了。

在前面讲到交易的 input 和 output 的时候,你必定想问:一直追溯到源头的 input,这些币是哪来的呢?答案就是『矿工奖励』。每一个区块里交易的第一行,容许矿工给本身转 50 个 BTC,这条交易记录没有 input,只有 output,即矿工填写的本身的地址,做为挖矿的奖励。这个奖励每四年减一半,现在已是12.5个比特币了。

仔细想一想,矿工不只充当了记帐者的角色,还在挖矿的过程当中不断发行比特币,维护了系统安全。充当了系统的维护者和货币发行者的角色。

大概在100多年后,奖励将少于比特币最小计量单位:1聪,2100万的总量所有开采完。到那个时候矿工还有动力挖矿吗?有的。每笔交易均可以选择性附带手续费,当2100万比特币所有挖出后,手续费将成为矿工的收入来源,事实上,目前为止手续费也是矿工的收入来源之一(将来会成为重要收入来源)。矿工甚至会按照手续费高低的优先级来打包区块。由于区块的承载能力有限(目前1-2M大小,约2000条交易),当交易数量变,交易变得拥堵,手续费低的交易会被推迟打包进入区块,从而促令人们提升手续费。

比特币、区块链的基础原理就讲完了。以上说的出块时间10分钟,区块大小1M,2100万总量等等的参数只是比特币的特性,事实上如今涌现出不少分叉币、山寨币、各类公链,这些参数、算法各异,有的在尝试改进和优化方面确实作出很多的进步。

有问题能够在下面评论,这里准备了几个常见问题,自问自答一下。

挖矿会消耗巨大的电力资源,这是否是一种浪费呢?是,但这是不可避免的。维护一个金融系统的安全稳定老是要付出巨额的成本,不管是现实世界的挖金矿的矿场,仍是建银行仓库、安保防御、培训专业人员、开发银行系统、请最顶级专家……这些花费全球加起来并不比区块链挖矿所消耗的资源少。1200美圆/盎司的黄金生产成本是1000美圆,并且在生产的过程当中须要花费巨大的人力开采、提炼,提炼的过程要用到汞之类的有毒物质,不管是对工人的健康危害仍是对环境的破坏都很大。

咱们经过上面对工做量证实原理的了解知道,矿工挖矿所付出的巨大算力,在维护系统的正常运转的同事,也在提升攻击门槛。

可是,比特币的全网算力已经达到30 EH/s + ,(即每秒作 30E 次哈希运算,M、G、T、P、E,每一个单位之间相差1024倍)很是可怕,本着可持续发展的理念,有没有办法能够减小挖矿的花销呢?

有。目前区块链行业出现的百花齐放的现象,每一个链(币)都号称致力于解决某项技术难题。在减小挖矿资源花销方面,我总结了一下,主要分为两种方式:

  1. 改变证实算法,例如:素数币。它的工做量证实不是计算无心义的哈希,而是寻求迄今为止人类发现的最大的素数,由于咱们知道素数在数轴上的分布是不均匀的,不可预测,求更大的素数和 hash 遍历有着殊途同归之妙。什么?你问求大素数有什么用?数学是人类生产活动的根基,数学进步通常都是领先理论物理,理论物理领先工业应用。如今看不到用处的数学理论不表明将来没有用处。

    可是求素数并不能下降资源开销,只是让它显得不那么浪费而已。莱特币和以太坊的 hash 算法,都作了特别的修改,使得计算 hash 值的过程当中比较占用内存资源。看起来是更耗资源了,实际上是为了防 ASIC 矿机,ASIC 针对 SHA256 作了处理优化,这种矿机没有内存,挖矿效率极高(比显卡效率高了数万倍)可是莱特币和以太坊的 Scrypt 和 Ethash 算法须要消耗内存,所以不能用 ASIC去挖矿了,只能用显卡挖矿。可是显卡全球的生产效率并不高,受制于显卡的算力和生产速率,所以后者的全网总算力不会像比特币增加的那么夸张。那假如比特大陆研发了专门挖莱特币、以太坊的矿机怎么办?那算力岂不是又会增加很快吗?以太坊社区曾表示过这种担心,可是他们宣称,若是有这种矿机问世,他们就再次改变算法来抵御矿机。

    最后有个道听途说的链,听说把 hash算法替换为能够帮助生物研究,穷举蛋白质折叠的运算,不知真假,希望将来可以实现吧。可是说了这么多,你们可能仍是以为这是饮鸠止渴,仍是不能解决挖矿消耗资源大的问题。是的,所以出现了第二类解决方案:

  2. 改变共识机制。既然工做量证实(POW)不可避免地要消耗巨大算力,何不换一种共识机制,不要工做量证实。因而出现了权益证实(POS)、委任权益证实(DPOS)等等,简单来讲,POS把靠链外资产的保证(买矿机挖矿),转移到链内来(矿机和挖矿的钱转化成链上的『币

    持有天数』),有点像有钱人(权益相关人)说了算。可是不管是 POS 仍是 DPOS,都是有不少问题须要解决的,须要更巧妙的设计,防止合谋做弊之类的。
    最重要的仍是要经得住时间的检验
    *(比特币的 POW 使比特币稳定运行了快10年了)。因为是『基础知识篇』这些共识机制就不一一展开讲了,网上能搜到的资料很是多,能够慢慢研读。

    固然,有时候区块链不必定须要『公有』。例如银行、证券交易所、互联网公司,三方想创建一个网络系统,实现某些商业合做往来,互相之间要创建共识,并不须要其余节点也参与进来。这就能够组成一个三方的联盟链,区块链技术可让这三方的节点平等地记帐、交换数据。这时的三方并不须要任何工做量证实、权益证实来保证互相信任,因此省去了一大麻烦,通常用拜占庭容错就能够了。

    进一步退化,能够有私有链,私有链也是有意义的,由于区块链做为一项分布式数据存储的技术,在 CAP 原理中,弱化了一致性(C),在 A、P 方面很是强,也不失为一项优秀的数据库技术。

如今区块链这么火,炒币功不可没,那它除了炒币,到底有哪些应用场景呢? 其实我也在探索当中,只能是把我目前能看到的,和本身的理解阐述给你们,不必定对,仅作参考。

首先能够确定的是区块链对金融行业的变革。各种数字货币做为『货币』的支付场景,这个就不用说了。若是延伸货币的概念,在链上流通的还能够是积分、代币、股票、信用这些东西。咱们如今不多会很在乎某个企业发的积分,由于你在支付宝上的蚂蚁积分只能用来在支付宝上换些XX会员,而天猫积分也不能去买京东上的东西,京东的京豆也不能兑换铂金信用卡的机场贵宾休息室。积分的使用场景单一且有限,使得咱们不那么看重它的价值。而咱们公认有价值的东西,能流通起来的例如股票,背后又须要有强大的金融机构,强有力的监管做为支撑。形成这种差别来自两个方面,一是系统之间由于信任或利益纠葛或技术难度难以互相打通,另外一方面是须要权威机构监管和背书的成本高。试想一下咱们在支付宝的蚂蚁积分和信用卡积分、京东积分、甚至游戏积分均可以互相转换和使用,或是统一块儿来成为信用+代币体系,是多美好的景象。

目前,跨境转帐也是区块链的一个有力应用场景。我买美股的时候尝试过一次跨境转帐,速度慢且扣了很多手续费,我对金融业实在不了解,不太明白为何须要这么长时间才能完成转帐,并且手续费老是算不对,听说难点在于冗长的对帐环节,还有陈旧的银行系统。瑞波币在这方面取得了很大的进步,它使得跨境转帐速度快、手续费低,深受大众欢迎。

同理,把货币延展到任何资产,借助智能合约在链上作资产的自动清算,追溯每一笔资产的流动。说到智能合约,就不得不提以太坊,将智能合约带上了区块链。

关于『智能合约』的原理,限于篇幅,只作简单描述:比特币每笔交易传递的是『币』,同时执行的是一个『固定的函数』——验证是否交易者这笔花费是否合法。把『币』替换成『消息』,把『固定的函数』替换成自定义代码。咱们能够大体了解到智能合约使得区块链就像一个分布式计算机,执行自定义的代码。事实上以太坊也实现了一个图灵完备的语言,能够运行在它特定的虚拟机上。这个想象空间是否是又大了不少?可是就目前的话……运行在以太坊之上的『Dapp』都比较鸡肋,应用最普遍的就是基于以太坊的各种代币了。

接下来是对于将来的一些猜想。前段时间我也作了个基于以太坊的 Dapp,感觉最深入的有如下两点:

  1. 没有写一行后端代码,只有前端+合约。前端静态文件随便找个CDN 就能放,后端彻底由以太坊链来担任。而本来后端的存储、计算成本,经过每一个『请求』由用户来承担。(固然,后端彻底依赖『链』来实现是不够合理的,目前的链承载不了太大的数据量,性能和容量都还由很大问题,并且每一个『请求』消耗的手续费较高)

  2. 不须要实现用户系统(帐户、注册、登陆),不须要实现转帐模块。这俩模块都被链自身实现了,开发者只须要简单调接口便可。(固然,用户系统基于公钥、私有,这让用户的使用门槛提升了很多,用户可能很须要一个优秀的钱包。若是丢了私有,帐户不可找回)

因而我大胆猜测,或许在区块链技术在性能、容量方面有些突破的时候,区块链能够做为一种云计算服务提供出来。如今有一种叫法,把 PaaS(Platform as a Service) 的平台改为 BaaS(Blockchain as a Service),区块链即服务。

另外,由于区块链有上链后数据『不可篡改』的特性,还能够结合物联网作一些防伪溯源的东西。区块链虽然不能作到从源头上辨别数据的真实性,但能够保证链上的是公开的、不可篡改的,这在必定程度上也是能解决问题的,所以防伪、溯源、存证我认为也是一个有前景的方向。

最后最好可以实现我上面说到的,让有价值的『资产』在互联网上传递流动起来。

还有一点就是 ICO,这个观点来自于马占凯老师,我也引用了他的一页 PPT。对比传统的 IPO 流程,ICO 的方式有点像众筹,但又不全是,很是便捷,自给自足。虽然如今中国禁止了 ICO,但咱们不妨多思考几步,如何能让 ICO 市场变得有秩序,如何防止圈钱行为?干实事的公司是否是能够把 ICO 的期限拉的长一些,好比分10年解锁所有代币,再利用智能合约,在一些里程碑时间点若是作不出成绩就有惩罚措施等等。或许有一天 ICO 还会换一个名字再回来。

区块链是一个泡沫吗?一个事物被热炒起来,确定是会有不少的泡沫产生,但不会全是泡沫。泡沫能吸引人才,能让更多的钱和资源流入。就好像当年的互联网泡沫同样,当泡沫破碎了以后,发展到今天,你确定不会再说互联网是个泡沫了。只能说待市场冷静下来,让有价值的部分发挥做用,让子弹飞一下子。

最后推荐一波我写的 Dapp —— 共享画布
连接地址:dapp.zhusun.in
玩法参考:cyhhao.zhusun.in/article/专题/…
源码:github.com/cyhhao/eth-…

有兴趣能够关注个人 Github知乎微博、知识星球。

感谢你们的聆听,这篇是区块链基础原理篇,之后若是有空可能会再写『进阶篇』吧。

最后附上文章原始的 keynote/ppt 下载连接:
Keynote:static.zhusun.in/blockchain-…
PowerPoint:static.zhusun.in/blockchain-…


个人博客原文:cyhhao.zhusun.in/article/blo…

相关文章
相关标签/搜索