导读:区块链一直很火爆,是因为区块链既是全新的技术方案、交易模式和商业逻辑,同时也是一种全新的制度机制。今天通过一篇文章帮助大家初步认识一下区块链。
1、什么是区块链
区块链技术起源于化名为“中本聪”(Satoshi Nakamoto)的学者在2008年发表的奠基性论文《比特币: 一种点对点电子现金系统》。狭义来讲, 区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账本。广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。
目前,区块链技术被很多大型机构称为是彻底改变业务乃至机构运作方式的重大突破性技术。同时,就像云计算、大数据、物联网等新一代信息技术一样,区块链技术并不是单一信息技术,而是依托于现有技术,加以独创性的组合及创新,从而实现以前未实现的功能。至今为止,区块链技术大致经历了3个发展阶段。
不要把区块链想象的非常神秘,区块链的本质上是一个去中心化的分布式账本,其本身是一系列使用密码学而产生的互相关联的数据块,每一个数据块中包含了多条经比特币的网络交易有效确认的信息。按照类型分为:公有链、联盟链和私人区块链。
公有链
世界上所有人都可以阅读和发送交易。如果他们合法都有希望看到自己被包括在内。世界上任何人都能参与到共识形成过程——决定在链条上添加什么区块以及现状是怎样的。作为中心化或准中心化信任的替代品,公有链受加密经济的保护,加密经济是经济激励和加密图形验证的结合,用类似工作量证明或权益证明的机制,遵循的总原则是人们影响共识形成的程度和他们能够影响的经济资源数量成正比。这类区块链通常被认为是"完全去中心化"。
联盟链
共识形成过程由预先选择的一系列的节点所掌控,例如,设想一个有15个金融机构的团体,每个机构都操作一个节点,为了使区块生效,其中的10个必须签署那个区块。阅读区块链的权利可能是公开的,或仅限于参与者,也有混合的路径,比如区块的根散表和应用程序编程接口一起公开,使公共成员可以进行一定量的查询,重获一部分区块链状态的加密图形证明。这类区块链被认为是"部分去中心化"。
私人区块链
书写许可对一个组织保持中心化。阅读许可可能是公开的或者限制在任意程度。应用很可能包含对单个公司内部的数据库管理,审查等,因此公共的可读性在很多情况下根本不必要,但在另一些情况下人们又想要公共可读性。
2、区块链的技术架构
由于区块链技术目前还不是非常成熟,架构还存在争议,但从目前市场上面的应用来看,数据层、网络层、共识层是构建区块链技术的必要元素,缺少任何一层都将不能称之为真正意义上的区块链技术。激励层、合约层和应用层不是每个区块链应用的必要因素,一些区块链应用并不完整的包含后三层结构。
数据层
区块链从字面上理解它肯定是一个链式结构,在这个链上包括非常多的区块,每一个区块上的0、1、2、3……代表的是区块的高度,中间通过hash指针(Privous hash)进行连接和指向,其实就是子区块存储它的父区块所有数据的hash值,这样每个区块通过指针或者说每个区块的唯一数据进行绑定,连成一个链式结构。数据层封装了底层数据区块的链式结构,以及相关的非对称公私钥数据加密技术和时间戳等技术,这是整个区块链技术中最底层的数据结构。
通过链式结构,我们可以看出区块链就有以下几个特点:
1、数据不可篡改:如果存在篡改某个区块的数据,就会导致被篡改区块数据对应的hash值发生变化,以至于没有关联区块了,该区块就会在链式结构中断裂,除非篡改所有区块中的数据。
2、全备份:以比特币、以太坊为代表的传统主流区块链均采用全备份模式,如果区块链有10个节点,就会有10份数据,若黑客攻击的情况下,至少需要修改51%以上的区块数据才能修改成功,攻击的成本就非常高,这样就从机制上保障了数据的安全。另外,这也就带来了新的问题,很多的应用单元实际上是不希望将自己的数据公开的,或者被其他应用单元共享的。所以在非传统区块链Fabric里面有一个channel的设计,它的目的是让这些数据仅限于在channel上具有可验证成员资格的peer间传播。通过信道隔离peer和账本数据,允许需要私有和机密事务的网络成员与同一个块链网络上的业务竞争对手和其他受限制的成员共存。还有一个问题就是成本会非常高,存储设备要求高,网络带宽要求也很高。但从摩尔定律上来看,也不是非常大的问题。
3、完全平等:节点之间是完全平等的,数据是一致的,权限是一致的,代码是一致的。
网络层
网络层主要是通过P2P协议实现数据通讯,大家应该都用过迅雷和电驴,P2P协议有个特点就是上传数据的同时也在下载数据,这样就给区块链带来了一个好处,节点数量越多,上传下载的速度就越快,这也就意味着区块链自己具有自动组网的能力。
共识层
共识层中是区块产生和数据写入区块的规则,这里有一个误区:不是交易双方达成的交易共识。共识层封装了网络节点的各类共识机制算法。共识机制算法是区块链的核心技术,因为这决定了到底是谁来进行记账,而记账决定方式将会影响整个系统的安全性和可靠性。常见的共识算法包括:POW、POS和DPOS等。
POW:Proof of Work,工作证明
比特币在Block的生成过程中使用了POW机制,一个符合要求的Block Hash由N个前导零构成,零的个数取决于网络的难度值。要得到合理的Block Hash需要经过大量尝试计算,计算时间取决于机器的哈希运算速度。当某个节点提供出一个合理的Block Hash值,说明该节点确实经过了大量的尝试计算,当然,并不能得出计算次数的绝对值,因为寻找合理hash是一个概率事件。当节点拥有占全网n%的算力时,该节点即有n/100的概率找到Block Hash。
POS:Proof of Stake,股权证明
POS类似于财产储存在银行,这种模式会根据你持有数字货币的量和时间,分配给你相应的利息。简单来说,就是一个根据你持有货币的量和时间,给你发利息的一个制度,在股权证明POS模式下,有一个名词叫币龄,每个币每天产生1币龄,比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000,这个时候,如果你发现了一个POS区块,你的币龄就会被清空为0。你每被清空365币龄,你将会从区块中获得0.05个币的利息(假定利息可理解为年利率5%),那么在这个案例中,利息 = 3000 * 5% / 365 = 0.41个币,这下就很有意思了,持币有利息。
DPOS:Delegated Proof of Stake,委任权益证明
比特股的DPoS机制,中文名叫做股份授权证明机制(又称受托人机制),它的原理是让每一个持有比特股的人进行投票,由此产生101位代表,我们可以将其理解为101个超级节点或者矿池,而这101个超级节点彼此的权利是完全相等的。从某种角度来看,DPOS有点像是议会制度或人民代表大会制度。如果代表不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来取代他们。DPOS的出现最主要还是因为矿机的产生,大量的算力在不了解也不关心比特币的人身上,类似演唱会的黄牛,大量囤票而丝毫不关心演唱会的内容。
从时间上来看,这个顺序也是按该共识算法从诞生到热门的顺序来定。对于POW,直接让比特币成为了现实,并投入使用。而POS的存在主要是从经济学上的考虑和创新。而最终由于专业矿工和矿机的存在,让社区对这个标榜去中心化的算法有了实质性的中心化担忧,即传闻60%~70%的算力集中在中国。因此后来又出现DPOS,这种不需要消耗太多额外的算力来进行矿池产出物的分配权益方式。但要说能起到替代作用,DPOS来单独替代POW,POS或者POW+POS也不太可能,毕竟存在即合理。每种算法都在特定的时间段中有各自的考虑和意义,无论是技术上,还是业务上。
激励层
像比特币、以太坊都会给参与者(挖矿的人)一定的奖励,另外还有交易费。激励层对公有链特别重要,在公有链中必须激励遵守规则参与记账的节点,并且惩罚不遵守规则的节点,才能让整个系统朝着良性循环的方向发展,它能够保障这个链稳定健康发展的基础。但是,对于私有链或者联盟链来说,企业做这个链是有某种独立目的,不会随意让个人参与这个链系统,一般就很少有激励层。
合约层
合约层实际是运行在区块链上的程序,封装各类脚本、算法和智能合约,是区块链可编程特性的基础。最典型的就是以太坊提出的智能合约的概念。合约细分就分为两种:
图灵完备:一个能计算出每个图灵可计算函数(Turing-computable function)的计算系统被称为图灵完备的。(非常抽象的概念)程序员应该都知道for循环、递归循环、while循环,这些基本上都可以实现无线循环,它就可能具有图灵完备的能力,可以计算一切可计算的系统或者应用。例如:以太坊的智能合约。
非图灵完备:这部分的计算是有限的,例如:比特币的脚本。比特币脚本存在的意义是让每笔交易合法化,这个合法化不是人工审核而是有脚本自动执行校验的。
应用层
运行在区块链系统的程序,如果你调用的是区块链系统的某个接口,获取相关信息,这是应用层。如果你调用的是某个区块的某个数据或者在某个区块写数据,那就是智能合约,也就是合约层。目前应用层典型的应用包括:
钱包:如果你在火币网上下载一个钱包,这个不能算是区块链应用。严格上来说,你连接的是火币网的服务器,也就是你连接了一个中心化的应用。那典型的区块链钱包比如说是:imToken。区块链钱包可以保障自己的虚拟货币只要系统存在,就会一直存在。
区块链浏览器:简单来说是一种搜索工具,我们通过输入某钱包地址或某笔交易ID,就可以查询此钱包的余额和任意一笔交易的详细信息:比如当前比特币的转账费用是多少、给你转账的地址有多土豪、一笔转账究竟何时到账……当然,我们也可以通过输入块高,块哈希等来搜索某一特定区块的所有内容。但是,有些区块链浏览器也不一定完全是去中心化的,数据来源于缓存服务器或者中心化服务器。
3、挖矿到底是什么
区块链,特别是公有链中有一个事情叫“挖矿”,并且挖矿结束之后会有一定的奖励。挖矿其实是要计算出系统要求的一个hash值,这里的计算常用的Hash函数(SHA),这也是目前使用最为广泛的Hash函数。SHA由美国标准与技术研究所(NIST)设计并于1993年发表,该版本称为SHA-0,由于很快被发现存在安全隐患,1995年发布了SHA-1。2002年,NIST分别发布了SHA-256、SHA-384、SHA-512,这些算法统称SHA-2。2008年又新增了SHA-224。由于SHA-1已经不太安全,目前SHA-2各版本已成为主流。
例如:通过sha256()函数计算系统要求的一个前面5位均是0的hash值,奖励22.5个比特币。
那么整个挖矿的过程就是:
nonce是存在与区块头中挖矿时使用的随机数。
第一次计算:假定nonce = 100,sha256(nonce)
得出000XXXXXXXXXXXXXXXXXXXXXXXX
第二次计算:假定nonce = 104,sha256(nonce)
得出00XXXXXXXXXXXXXXXXXXXXXXXXX
第三次计算:假定nonce = 130,sha256(nonce)
得出0000XXXXXXXXXXXXXXXXXXXXXXX
……
第一万次计算:假定nonce = 1009002,sha256(nonce)
得出00000XXXXXXXXXXXXXXXXXXXXXX
此时,就得出了系统所要求的hash值,就给该矿工奖励22.5个比特币。这就是一个典型的挖矿过程。这个过程对每个人都是公平的,对于计算快的人就会得到奖励,计算慢的人就得不到奖励。这样就引出了另外一个概念,就是节点。区块链的节点其实就是参与区块链系统的计算机。
4、举例说明区块链的交易过程
举例:张三需要给李四转2个比特币,那么区块链系统的运作机制如下:
1、数据层存储交易记录:张三-->李四 2
2、网络层传输数据,进行数据广播
3、共识层通过具体的算法验证决定交易记录是否写入区块链中
4、激励层让矿工在挖矿的同时可以参与到交易记录的验证中,这里涉及挖矿的奖励和额外验证的交易费
由于比特币的存量是有限的,所以,交易费是由交易方出的,也就是说张三转给李四的2个比特币,最终李四收到的是小于2个比特币的,因为平台减掉了交易费,将交易费分配给了帮助验证的矿工。
到此相信大家已经基本明确区块链的运作机制和相关信息,欢迎大家留言讨论。