2019.10.24,千呼万唤始出来,人间正道是沧桑,多年媳妇熬成婆,区块链一夜之间成为主流。
谈到区块链,不得不提比特币。
如果问到先有区块链还是先有比特币?我想,会有多一半人答错。实际是,先有的比特币。
比特币白皮书《比特币:一个点对点的电子现金系统》,是很值得一读的,大多数内容还是比较容易懂的,看完后,一定会惊叹于中本聪绝妙的设计。正是比特币将众多的底层技术巧妙的整合,包括加密算法、分布式存储、P2P对等网络、共识算法等(下面会详细介绍),这些技术组合到一起,被称为区块链。其实,这些具体的技术,是很“古老”的技术,大多数是上世纪六七十年代左右就存在的。
比特币被称为区块链1.0时代,解决了隐私、安全等问题。以太坊为代表的2.0时代,诞生了智能合约、计算、存储、资产交易等解决方案。至于3.0,各家说法不一,有人认为是通证经济,有人认为区块链3.0是价值互联网的内核,还有人认为,实现完备权限控制和安全保障的Hyperledger项目是区块链3.0的代表。
但是,到底什么是区块链3.0?在今天这篇文章中,这都不重要。因为本文不谈:具体什么是块链1.0、2.0、3.0,如何去扩展性能,实现商业需求。如何去布局赛道,区块链如何改变生产关系从而促进生产力,信任机器如何和云计算、大数据、人工智能、物联网协作,目前的落地情况如何,以及之前发白皮书的那些庄家还好吗,被收割的韭菜现在过的怎么样了,炒币的人是别墅靠海了,还是下海干活儿了。(另,独家传授炒币秘籍,倾家荡产的那种。)
本文重点讲和技术相关的,后面会另开文章讲讲上述这篇文章没谈的内容。
10月24日的中央政治局第十八次集体学习时强调,我们要把区块链作为核心技术自主创新的重要突破口,明确主攻方向,加大投入力度,着力攻克一批关键核心技术,加快推动区块链技术和产业创新发展。区块链技术终于站到了时代前沿。
应用场景
区块链可以和很多行业结合,区块链+,将成为未来新方向。区块链+,将使得业务交易更加安全、交易成本更低,协同效率更高,进而改变生产关系,从而促进生产力发展。
区块链分类
区块链的英文是BlockChain,区块链的本质是去中心化的账本数据库。区块链并没有统一的定义,一般来说,区块链技术是指多个参与方之间基于密码学、分布式一致性协议、点对点网络通信技术和智能合约变成语言等形成的数据交换、处理和存储的技术组合。
区块链有五大特点,去中心化、开放性、防篡改性、匿名性、可追溯性。
区块链还有一个不可能三角,这也是制约区块链的关键所在,即,去中心化、安全性、交易性能。鱼和熊掌不能兼得,何况三者。当然,在近些年也有很多新的项目,发了令人眼花撩乱的白皮书,各种“完美”解决方案层出不穷,什么Layer2,DAG......,但最后也只是剩下一地鸡毛、无人在翻看的白皮书、绝望的韭菜和烂尾的项目。真心希望,不可能三角变成可能。
按照参与方式,区块链可分为三类:公链、联盟链和私有链。
公链
公链是对外公开,用户不需要注册就能匿名参与,无需授权即可访问网络和区块链。公链是真正意义上的完全去中心化的区块链,它通过密码学保证交易不可篡改,同时利用密码学验证以及经济上的激励,在互为陌生的网络环境中建立共识,从而形成去中心化的信用机制。
比如比特币、以太坊都是公链。公链一般适合于虚拟货币、面向大众的电子商务、互联网金融等。
公链的架构一般分为七层,从下到上依次为:
加密层:加密层是区块链技术的基石,保证整个区块链系统的安全性、匿名性。其中利用椭圆加密算法ECC进行签名,利用SHA256处理POW共识算法和头信息和交易信息的加密。
数据层:类似Merkel树的数据结构,采用消息摘要的形式,使得历史数据难以篡改,数据完整性得以保证。主要用到的数据库比如,Leveldb,Leveldb是一个google实现的非常高效的KV数据库,LevelDB 是单进程的服务,性能非常之高,在一台4核Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。或者,CouchDB ,它是一个开源的面向文档的数据库管理系统,可以通过 RESTful JavaScript Object Notation (JSON) API 访问。提供了高可用性和高可靠性,即使运行在容易出现故障的硬件上也是如此。
网络层:规定了整个网络节点里的通信机制,即,P2P对等网络,可以实现没有中心服务器的数据共享。P2P网络管理主要是实现网络上和其他相邻节点的通信功能。
共识层:分布式系统中,需要解决的首要问题是如何实现不同账本节点上的账本数据的一致性和正确性。通过POW、BFT、POS、DPOS等共识算法,来保证全网数据的一致性,共识算法是区块链技术的关键。
激励层:包括经济激励的发行机制和分配机制。通过经济激励机制,让更多主体更积极的参与进来,保证去中心化实现,创造出更安全,更稳定的共识状态。
合约层:简单的说可以产生代码即法律的效果。提供区块链系统的可编程性。智能合约可以被看作是一种计算机程序,这种程序可以自主执行全部或部分合约相关的操作,并产生可以被验证的证据。在部署智能合约之前,与合约相关的所有条款的逻辑流程已经被制定好了,然后用户可以随时调用智能合约来执行。
应用层:可以开发分布式应用,即DAPP,丰富整个区块链生态。
联盟链
联盟链仅限于联盟成员参与,区块链上的读写权限、参与记账权限按联盟规则制定。联盟链的共识过程由预先选好的节点控制。一般来说,适合于机构间的交易、结算或清算。
公链面向的是一个不可控的场景,需要在安全、性能和去中心化上找一个平衡点。而联盟链服务的场景中,参与方的数量相对来说更加可控,联盟链的性能和安全性也就更容易突破。所以,在不可能三角中作出了让步,即在去中心化程度、共识算法上作出了一定让步,从而提升了系统效率。联盟链多采用权益证明、PBFT、RAFT等共识算法。
联盟链的代表为“超级账本”(Hyperledger)。Linux基金会于2015年12月启动了“超级账本”的开源项目,旨在推动各方协作,共同打造基于区块链的企业级分布式账本底层技术,用于构建支撑业务的行业应用和平台。参与超级账本的公司阵容非常强大,不仅有IBM、Intel、思科等科技巨头,还有摩根大通、富国银行等金融大鳄,还有R3、ConsenSys等专注区块链的公司。
目前Hyperledger项目共有五个项目进入孵化状态,分别为,Fabric、Sawtooth Lake(锯齿湖)、Iroha(色彩)、BlockchainExplorer和Cello。
因为篇幅有限,下面重点介绍一下Fabric 。
联盟链和公链从大的架构层次上来说,是基本一样的。但是,联盟链因为主要是处理联盟内部事务,所以基本都没有激励层,并且因为面向的对象,参与方等场景的主要为联盟,所以又比公链多了一些服务,比如,Fabric多了身份服务和策略服务。
1.身份服务
身份服务(Identity Service)管理着系统中各种实体、参与者和对象的身份信息,包括参与的组织、验证者和交易者,帐本中的资产和智能合约,系统组件以及运行环境等。
2.策略服务
策略服务最重要的是访问控制和授权功能,Fabric的交易通常要求参与方具有权限才能进行。其他的策略还包括加入和推出网络的策略,身份的注册、验证、隐私和保密的策略,共识策略等。
3.区块链服务
Fabric的区块链服务提供构建分布式账本最基础的能力,实现数据传输、共识达成等底层功能,并且提供发布/订阅的时间管理框架,分布式账本内部的各种事件可通知到外部监听的应用。Fabric的区块链服务主要包含4个组件:P2P协议组件、分布式账本组件、共识管理器组件和账本存储组件。
共识算法,是非常关键,并且对不熟悉区块链的朋友都很神秘的一个部分,这里花一点儿篇幅,找一个相对简单,但是实用的共识算法做个简单介绍,Raft。
使用Raft实现记账共识的过程如下:首先选举一个leader,接着赋予leader完全的权力管理记账。leader从客户端接收记账请求,完成记账操作,生成区块,并复制到其他记账节点。有了leader简化了管理,但是leader可能失效或与其他节点失去联系,这时,系统就会选出新的leader。
一个Raft集群通常包含5个服务器,允许系统有两个故障服务器。每个服务器处于3个状态之一:leader、follower或candidate。正常状态下,仅有一个leader,其他的服务器均为follower。
当follower在选举超时间内未收到leader的心跳信息,则转换为candidate状态。为了避免冲突,这个超时时间是一个150~300ms之间的随机数。
一般而言,在Raft系统中:
1)任何一个服务器都可以成为后选candidate,它向其他服务器follower发出要求选举的自己的请求。
2)其他服务器同意了,发出OK。注意,如果这个过程中,有一个follower宕机,没有收到请求选举的要求,此时候选者可以自己选自己,只要达到N/2+1的大多数票,候选人还是可以成为leader的。
3)这样这个候选者就成了leader领导人,
4)以后通过心跳进行记账通知。
以上便是RAFT共识算法的简单介绍。
4.智能合约服务
Fabric的智能合约实质是在验证节点上运行的分布式交易程序,用以自动执行特定的业务规则,最终会更新账本的状态。智能合约分为公开、保密和访问控制几种类型。公开合约可以供任何成员调用,保密合约只能由验证成员发起。
由于篇幅有限,本文就先聊到这里,后面慢慢聊!