区块链系统1.0——比特币 详述
这篇书评可能有关键情节透露
区块链是什么?根据我从业区块链行业将近三年,并结合给陈纯院士(谁是陈纯?2019.10.24给中央政治局讲解区块链技术的工程院院士,浙江大学教授)在18年对区块链的论断,总结得出:
从狭义角度讲:区块链特指比特币中的链块式数据结构。从广义角度讲:区块链是一个由众多相同作用的节点构成的分布式(账簿)数据库系统。每个节点由分布式共识算法生成数据、P2P网络传输数据(交易数据、区块数据)、链块式数据结构(狭义上的区块链)存储数据、智能合约处理数据、使用密码学进行身份认证和数据认证(数据指纹即哈希)等模块构成。这里的数据指的是交易。
其中,智能合约运行在链上的虚拟机中。而且为了保护区块链网络的安全,需要使用一些经济手段来,以太坊使用gas机制,EOS使用资源租赁机制,联盟链一般不需要。
以上这些功能已经是目前的区块链系统中几乎是已经成为标配的了。除了这些功能,一些先进的区块链系统中还有:隐私保护、跨链等功能。
=====以下是原文=====
Mastering Bitcoin
这是一本非常不错的讲区块链技术细节的书籍。是区块链的入门读物,而且会教你技术开发区块链1.0。区块链是一项技术,如果你不去了解技术是如何运行的,你对区块链及其应用的了解永远只会浮在表面。这本书本身其实最好的区块链入门书籍,因为其用浅显易懂的方式讲清了比特币中区块链的技术原理。但是比特币中的区块链其实是有缺陷的,这些缺陷在第二代、第三代区块链的平台中得到了改进。
如果要看这本书的概括的话,可以戳拙文==> https://zhuanlan.zhihu.com/p/52095993 (其实挺长的),当然最好还是直接看本书。
这个拙栏 https://zhuanlan.zhihu.com/c_1165017572721844224 是专门写给新手入门区块链的,对区块链这种新事物,没人敢100%说自己的理解是完全到位,我也只是总结着、更新着自己的理解。
=======2018.11.4更新======
距离我看过这本书(2018-06-22)已经过去了快半年的时间了。相比写这篇书评时,我对区块链的理解是深了不少了,而且未来可能也真的要从事区块链的研究和工作了。
回过头来看,我觉得这本书确实在所有和区块链、比特币有关的书里面讲比特币及区块链基本原理应该说是最好的书籍了。
唯一可惜的是这本书只讲了比特币下的区块链。也就是说这是区块链1.0,在现在我们说确实区块链的发展已经迭代了一至二代。以太坊是第2代区块链系统的代表,多了个一个智能合约的特性。EOS是第2.5代区块链的代表,其不仅有智能合约,而且共识机制也不再是PoW,而是DPoS,使得其平台的TPS高了几个数量级。之后还出现了不少跨链项目,以及以太坊2.0。这些都是公链。除了代数更新,相比于公链也出现了联盟链和私有链,这两种区块链不像公链一样任何人能加入,它们需要许可。
Hyperledger fabric是第3代(个人认为是2.5代)的联盟链。也是目前联盟链里最受瞩目的。联盟链多用于企业(To B)之间,所以如果要自学区块链可能还是自学公链开发比较好(毕竟是To C的),比如EOS开发,这也是我目前在干的。
不过,事实上这本书的英文原标题是Mastering Bitcoin,所以它其实落脚点是比特币。区块链是比特币的技术支持,也就是说比特币的技术核心就是区块链。我们现在国家讲创新,经常讲得就是核心技术的创新(所以国家肯定会支持发展区块链技术)。比特币/加密货币本身其实对于技术界来说并没有像区块链那样来得吸引人。或者说,比特币以及其他币比如BCH/ETH/EOS这些东西对搞金融/投机的人比较有吸引力,而区块链对于搞技术的人来说比较有吸引力。(注:2019年10月25日,国家表示要加快推进区块链技术的发展,区块链技术第一次被中央所倡导,而且央视还专门播了很长时间来介绍区块链技术,我在2018.11.4说的上一句话被印证)
故此书,是比特币的详细读物,也是区块链1.0的详细读物。目前,区块链技术虽然已经更迭几代,但 区块链基本原理 仍然没变。而新的以太坊(ETH)给区块链系统加上了智能合约的特性。而EOS、Fabric则是有共识上的创新。当然由于共识改变会带来其他技术细节上的变化。
限于个人精力有限,其实我也还没看完市面上和区块链有关的书籍(大部分都写的很烂,很多书竟然不是搞技术出身的人写的),也没办法说哪本书好,哪本书不好。
但是我是这样学习区块链的:先看了这本书,算是明白了区块链的基本原理了(感觉有70%)。然后就是看个人情况,若是只是想了解一些区块链项目、或更好地使用一些Dapp、或进行加密货币的投资,只需要在看一些关于区块链2.0、3.0新增的一些特性的即可,这样的话,市面上讲区块链的书应该是能够胜任的(直接找博文看看也够了),比如《区块链技术进阶与实战》等,当然可以直接看以太坊、EOS这些项目的白皮书自然是更好。若是想做技术开发,接下去就是看各种博文(最好直接看原汁原味的论文,但是论文看起来可能比较累)和一些官网上的文档了,比如我做EOS的开发,我现在已经把EOSIO官网上的文档都看完了。如果你想做ETH,或者fabric的开发,也是一样的道理。《区块链技术进阶与实战》这本书后面有涉及到一部分ETH和fabric的技术开发,但是肯定不如官网上来得详细。
事实上由于区块链开发的环境经常在更新,书的更新完全是跟不上区块链底层项目的更新的,看书永远只能是起到了解的作用,真正的开发,离不开官网或者GitHub上的文档的。
=======2018.12.11更新======
最近,自己总结了一下这半年学习区块链、区块链技术开发的经验,写了一些对于区块链概念本身的理解,是我从包括这本书在内的许多区块链书籍中总结得出的。完全是原创。以下是综述部分,其他部分不知道什么时候有空能写出来呢。
1 综述
业界人多认为,关于区块链的生态分为2个,一是币圈,二是链圈。但从本质上讲,数字加密货币只是属于区块链应用的一个子集。因此,区块链是一切之源,而比特币及其他加密货币只是其中的一种应用而已。
现在我们认为区块链就是所有的源头。因此,分类也是从区块链分起。
区块链是一种多种信息技术综合交叉所导致的新的技术。也就是说,各种神奇的计算机技术集合在了一起,产生一个新的东西,就像操作系统一样。我们先不管里面有什么技术。就区块链行业而言,目前和技术相关的工作有2大类。1.区块链底层平台开发、维护。2.区块链应用开发(包括发币)。下面我就先从这2个方面进行介绍。
我们最熟知的数字/加密货币,包括比特币、ripple币、ETH、EOS,这些代币本身的流通、交易就是一种区块链应用。而且是目前区块链技术中最成熟、最广泛的应用。尤其是比特币。说起来有意思,并不是先有区块链,才有比特币这个应用。而是先有比特币,然后人们发现比特币实现基础之一区块链,有超脱比特币(加密货币)本身的更广泛的应用。
以上所说的区块链都是广义上的区块链概念。我们认为比特币是一个基于区块链系统上的数字加密货币应用。为什么说是广义的区块链呢?因为从狭义角度来看,区块链就是比特币系统中存储数据的结构——它只是存储数据的结构,而不包括数据生成的方式、数据传输的方式等等内容。但是我们现在所提到的区块链,都往往是指不仅包含了狭义区块链这种存储数据的结构,也包含了数据生成的方式,数据传输的方式等等一些列内容,是一整套的系统。(《区块链:从数字货币到信用社会》这本书竟然把区块链当做一种价值传输协议,从技术角度来讲,这是完全不对的!!)我称之为区块链系统(恐怕目前还就我一人叫做其为系统)。当然这套系统本身的核心是区块链这种数据结构。
前面说到和区块链技术相关的工作有2类。一是应用开发,加密货币是最成熟的区块链应用。除此之外,目前新类型的区块链应用也正方兴未艾。
不过,区块链应用必须基于一定的区块链平台。这就好像是你要写一个软件,你得有正确的操作系统,你要写iOS上的App,你得有iOS的开发环境,而不是Android的开发环境。其实区块链平台和操作系统有点像,都是提供依赖的技术集合。操作系统也是由很多计算机技术组合而成的。
操作系统不断在更新,区块链技术/平台也是。最开始的区块链,前面说了是出现在比特币中的,那是在2008年11月,中本聪提出了比特币的白皮书,然后在2009年1月用代码实现了,并且放到了GitHub上开源,目前比特币已经运行了将近10年。比特币中的区块链系统的代码在这十年内也是在不断更新、变化,它的改进和完善由一些社区内的程序员进行,这些程序员都是自发的,没有哪个机构给他们付钱让他们完善比特币的代码。虽然一直在改进,但是比特币的核心内容没有大的变化,所以10年以来,其运行机制仍然符合当时08年的白皮书,有的只是补补漏洞,改进用户体验等。
前面说了,广义的区块链技术,其实是一个系统,可以说,它包括了三方面内容:数据生成机制、数据传输机制、数据存储结构(狭义上的区块链)。因此,到现在为止,我们可以来给区块链系统下一个定义了。区块链系统就是用(分布式)共识算法来生产数据,信息加密+P2P网络来传输数据,用链块式数据结构来存储数据的分布式数据库技术(这个定义其实是一位叫做陈纯的中国工程院院士提出的)。链块式数据结构就是狭义上的区块链。至于数据是什么数据,算法具体是怎么样的,要完完全全弄清楚区块链系统技术原理,那必须了解这三方面的技术细节了。这里我推荐Andreas的《Mastering Bitcoin》,这是一本讲比特币下的区块链技术细节讲的最清楚的。看完这本书,你也就知道为什么比特币是这样运行的了。
(待补充)
比特币中的区块链系统在10年内是没有特别大变化的,包括了数据生成方式、数据传输方式、数据存储结构三方面,都没有大变化,虽然有些技术细节上的修改。但是随着时间的流逝,对比特币使用的加多,大家开始意识到这个比特币系统,或者说是比特币下的区块链系统是是有在这三方面内容中可以改进的。其中的数据传输方式大家都没改。但是数据生成方式和数据存储结构方面大家有所修改。
数据生成方式,也就是分布式共识算法,比特币使用的是PoW,但是大家觉得这是限制比特币性能的主要问题。比特币每10分钟才产生一个新的区块,因此你进行一笔交易要花10分钟才能被写进区块链,写进区块链后还要等6个新区块的生产,才能安心这笔交易不会被溯回而取消,相当于要花1个小时才能真正使得一笔交易不可逆地发生,速度极为缓慢(为了解决这个问题,比特币系统提出了闪电网络,大致就是使用链下的方式来提高TPS)。而且生成区块的方式是各个挖矿节点进行竞争,会消耗大量的电能,因为比特币的火热,矿工越来越多,挖矿所耗费的电能甚至已经超过一些重工业行业的用电。于是大家开始探索新的共识算法。而共识算法也是分布式系统要解决的重要问题之一,这是属于计算机科学的一个问题,所以这部分内容是学术界最喜欢研究的。新出现的共识算法有PoS(2013),DPoS。但是这两个都不是学术界提出的。而PBFT,RBFT,这几个都是搞学术的人提出的,甚至还有Algrand,这是图灵奖得主Micali提出的。
另外对于数据存储结构也有一些改进。比特币中的区块链,看完《MB》,大家都知道,区块头存一些控制信息,而区块体存交易,区块体是区块头空间的几千倍。因此比特币下的区块链本身就是针对交易的。一切围绕交易。交易是什么?是货币(数字)交换。推广一下,货币是什么?是价值。推广一下,价值是什么?是信任。所有很多人都认为,区块链能用于价值传输,也能用于信用传输。这确实是比特币区块链的本质。一切有价值的东西,都可以通过比特币中交易的形式来传递。大家都认同区块链可以用来存一些无法被非法篡改的数据。他们觉得只要数据上链,那就意味着无法被非法篡改。这一项内容再比特币系统中进行初步尝试。那就是OP_RETURN。比特币中的交易可以被附加一个和交易本身完全无关的字段来存储一些信息,这些信息随着交易进入区块后,然后连到区块链上,经过6个区块之后,就可以认为是无法修改的了。
区块链的应用受限于区块链技术/平台。受限于比特币下的区块链系统,新产生的应用基本上都是新的一种加密货币而已。这些加密货币有的,甚至使用了新的共识算法比如PoS,但还是逃不出加密货币(资产)本身的范畴。于是有人思考,比特币下的区块链区块链是不是少了什么东西?
为了使得区块链应用能有所突破,有一个人在2014年创造了区块链系统的第四个特性(还记得前三个特性是什么吗?数据生成,数据传输,数据存储)——智能合约,由此开启了区块链2.0时代。这个人叫做Vitalik Buterin,当时他才21岁,是一个外貌长得有点像马云的俄罗斯-加拿大双重国籍的黑客,在高中时就入场了比特币浪潮。他觉得在比特币意义下的区块链系统上还可以附加一个叫做智能合约的特性,使得区块链能被用来做真正的区块链应用开发。比特币下的区块链系统本身就包含了数据生成、数据传输、数据存储等内容,都是针对数据的,但是比特中的这些数据,基本上都是代币数量的数据,所以只能用来流通代币,代币流通的规则(其实也没有什么复杂的规则,很简单:就只有将多少数目的比特币、转账给谁的规则)是写死在比特币系统中的。如果把这个代币规则替换为各种各样的数据(消息、文字、图片、视频等等)流通的规则,并且使得其可以被改变(改变就是指编写新的规则、代码),那就可以有各种各样的新的应用了,这个新的规则,就是智能合约。每新写一个智能合约,再部署到区块链上,区块链上就多了一种基于新规则的服务。最基础的服务,就是加密货币流通功能。
这里总结一下,比特币下旧区块链系统=数据生成机制+数据传输机制+数据存储机制,比特币系统=比特币下旧区块链系统+代币流通规则。基于区块链的新应用(新系统)=比特币下旧区块链系统+智能合约。
于是产生了新一代的区块链系统,可以说是区块链2.0了,而比特币下的区块链技术称之为区块链1.0。V神和中本聪一样,不仅写出了白皮书,也用代码(和Gavin Wood一起)实现了这个系统,那就是以太坊。以太坊的出现惊动了整个比特币社区,这算是区块链系统第一次真正脱离了比特币作为一种独立的技术形式,并且有了一个开发平台。后来越来越多的人加入进来,接受了区块链2.0技术范畴,并且自己也开发一个区块链2.0的技术平台。这就相当于是,各个开发操作系统的公司都觉得,带有图形界面的新一代的操作系统是有前途的,于是各自开发自己的有GUI的操作系统。这些区块链2.0的技术平台除了有技术细节上的差异以外,还有的使用了不同于以太坊的共识算法。以太坊虽然多了一个新的技术特性,但是其他三个特性与比特币下的区块链系统仍然相似,甚至连共识算法都是一样的(不过块链式数据结构有所不同,但是本质没变)。所以以太坊其实带有和比特币一样的毛病——交易速度(TPS)低,也就是说,你完成了一笔交易,但是需要花费很长时间才会得到确认。前面也提到新的共识算法有助于改进这一点。
于是一些公司就推出了既带有智能合约特性,又使用了新的共识算法的区块链系统的平台,比如Hyperledger Fabric(2016年出现,IBM主导)和EOS(2018年主网上线,通过ICO融资了40亿美元)还有其他很多公链项目如波场Tron,在2018年很多公链项目出现,2018年也被称为“公链之年”。
有加也有减。以太坊上的区块链系统比比特币下的区块链系统多了智能合约的特性,也有人觉得比特币下的区块链系统应该去掉一些特性,比如带有币的特性。以太坊是一个区块链技术2.0的平台,在上面可以构建新的区块链应用,这意味着毫无疑问也可以构建基于以太坊的新的加密货币系统。于是以太坊确实干了这件事。可以说以太坊上的第一个区块链应用就是基于以太坊的加密货币系统,ETH代币。而且由于以太坊的共识算法和区块链系统1.0的都是PoW,有挖矿机制来实现代币的产生(发行),所以代币可以非常好的实现。但是加密货币有各种问题,使得政府对之非常谨慎。有些人为了撇清和加密货币的关系,使得区块链真正是服务与大众应用,所以建立了无法发行代币的区块链系统。比如Fabric。怎么做到区块链系统无法发行代币呢?我们说,代币是依靠数据的,代币的产生在比特币系统中有且仅有一个途径——挖矿,这来自于其PoW的共识算法。我们也提到共识算法是数据生成机制。因此修改数据生成机制,改成一个无法生成代币数据的共识算法就好了。Fabric就是这样的区块链系统。这种区块链叫做无币区块链。基于这种区块链的应用是从技术上被阉割了代币发行这个功能的(但是现在似乎还是有人可以在Fabric这样的联盟链上发行代币,但是这种代币肯定不是像传统加密货币那样挖矿挖出来的,和加密货币是有本质区别的)。
目前,基于多种区块链技术实现发展的现状,区块链可以分为这三种:公有链、联盟链、私有链。联盟链一般都是无币区块链。这与公有链,私有链这2个概念相对。我自己也经常认为,无币区块链就是联盟链,而有币区块链就是公有链。公有链指的是任何人都可以无需许可地加入区块链网络的那些区块链系统。而在联盟区块链中,你加入网络成为节点是需要许可的,许可由大家共同决定。为什么?这个以后再说。私有链,我个人认为就是完全中心化的东西,只是凑凑热闹,给的一个新名词,因为私有链你要加入也是需要许可的,而且许可完全掌握在一个人手中,就像你去某个网站上注册账户,许可就是网站本身给你发的。
公有链平台既可构建发行代币的应用,也可以构建一般的应用,其常用的共识机制包括PoW,PoS,DPoS,这些机制都是从PoW改进而来,本质上包括挖矿机制,于是可以发行新代币,以此作为激励节点的机制。但是联盟链只用于可以构建无代币的应用,其共识机制多为PBFT、RBFT等,对于节点没有激励机制,节点没有任何收益,只是起到验证、确认的功能。
现在我们对各种区块链底层平台做一下总结。这些区块链底层平台,其实都是区块链技术的不同实现。就像不同公司发布的不同操作系统一样。都是操作系统,但是样子不一样,原理相近。比较有名的区块链底层平台,或者说是区块链系统技术平台如下:
比特币下的区块链系统:属于公有链。共识算法为PoW。可以做简单开发,无法实现灵活的再开发。
以太坊:属于公有链。共识算法为PoW。图灵完备的区块链应用开发平台。
EOS:属于公有链。共识算法DPoS。图灵完备的区块链应用开发平台。
Fabric:属于联盟链。共识算法PBFT。图灵完备的区块链应用开发平台。
后三者的区块链因为具有智能合约的特性,所以是图灵完备的。另外,以太坊因为使用了PoW共识算法,所以TPS低。而EOS和Fabric使用了更加灵活的共识算法,使得TPS高,可以支撑商业应用,也被称为区块链3.0技术。但是我个人倾向为称他们为区块链2.5.
区块链系统技术从1.0到2.0,解决了图灵完备技术开发的问题,使得区块链上构建各种各样的分布式应用成为可能。从2.0到2.5,解决了性能问题,使得应用本身能为大众所频繁使用,也使得更多的商业场景能够实现。
=======2019.5.18更新======
时间过的好快,突然又过去了半年。这半年,我们经历了加密货币的大熊市。前几天比特币站上8000点,似乎使得大家看到了牛市的光辉。
在这半年里,虽然是熊市,但俗话说,熊市是学习的好时机。我主要学习EOS的全栈开发,并且写了 几个DApp练手。
这几天有豆友私信我,说我的书评竟然还是能帮助一些人加深对区块链的理解的,我真的倍感兴奋。同时他也询问,关于区块链2.0、3.0技术的书籍挺难选的,要么是纯技术文档,要么是空洞地泛泛而谈。这是对的。
我之前读过《区块链:从数字货币到信用社会》,这本书据说是什么腾讯书院2018十大推荐读物之首。但是我读完以后明显不如《MB》好,虽然有收获,但还是使我有点失望。
关于区块链2.0、3.0技术的书籍很难挑,不少书都是一些创业团队写的,其实不少观点虽然挺独到,但是感觉总体上还是无法像那些搞学术的人写出来那么严谨。
我自己的学习方式是,在我看完这本《MB》之后,我快速看了一遍《区块链:从数字货币到信用社会》,然后就看一些文章、论文、新闻了。既然要学习区块链2.0、3.0的知识,以太坊白皮书、EOS白皮书这些肯定要看一下。但是,白皮书写出来感觉就不是给人看的,我看的也是满头大汗。解决方法是,可以看一些对白皮书的解读。币乎、知乎上其实有不少,也有一些微信文章的解读还不错。
其实总而言之,读完这本《MB》,你就基本上知道区块链是什么了,而且能够知道区块链/比特币是如何实现、运行的。之后区块链再出什么新的技术,你就跟着新闻走就是了,或者去一些技术论坛里直接搜关键词。比如币安之前很火的IEO,EOS新出的REX。区块链领域不管是技术,还是新的项目更新都很快。所以其实跟新闻是对的,看书肯定是跟不上节奏的。
我自己如果搜索一些文章:上巴比特或者币乎或者知乎或者搜索。
平时看新闻:通过星球日报APP,或者关注的一些微信公众号,或者一些钱包里自带的闪讯(但是内容太多了)。
如果你觉得看媒体报道还不够第一手,不够及时,那就可以:
1.加电报(Telegram)群,一些项目的消息往往是从电报群里发出的,比如EOS。
2.关注一些区块链大牛的微博、Twitter等社交媒体。
最后,2019年应该不是熊市了。而且今年是跨链项目之年,Cosmos、Polkadot等等,这样一来实现Web3中需要技术栈基本都齐了。另外团队看起来是所有区块链项目中阵容最强大的Algorand项目也上线了测试网。
由于个人水平所限,如果有什么地方写错了,请各位指正。