一、区块链
1.1区块链是什么
关于区块链有着不同的定义,有的是从技术的应用层面,有的是从技术层面,这里我根据不同的解释,汇总出了一个技术层面上的定义
区块链的本质是一个分布式数据库,每一个节点的数据由若若干个数据区块组成,每一个数据通过前一个区块哈希值作为关联,首尾链接。
作为一个分布式数据库,它具有多副本,去中心化,数据不可篡改,可信任的特性
在我们详细了解区块链之前,先来了解一下中心化系统与分布式系统,通过这些知识 会更容易理解区块链的工作过程
1.2 中心化分布式系统的相关知识
中心化系统
中心化系统是指由一个主机集中式的进行数据的处理
优点是结构比较简单,
缺点是单个点发生故障的时候,会涉及到整个系统或者网络,扩展性差
分布式系统
分布式系统由一组主机功能对外提供服务,这些主机没有主从之分,彼此可以互相交换信息
优点是系统可靠,扩展性强
缺点就是需要处理数据一致性问题,
为什么要处理数据一致性问题?
分布式系统中,由于不同的数据节点之间由于网络延时等原因很容易产生数据不一致的情况。因此需要保证不同节点的数据完整与正确
数据的一致性分为3种级别
强一致性
可以理解为在任意时刻,所有节点中的数据是一样的。同一时间点,你在节点A中获取到key1的值与在节点B中获取到key1的值应该都是一样的。
弱一致性
系统在返回写入数据成功,不承诺立即可以读到最新写入的值,也不会具体的承诺多久之后可以读到。但会尽可能保证在某个时间级别(比如秒级别)之后,可以让数据达到一致性状态。
最终一致性
弱一致性的特定形式。保证在没有新数据更新的条件下,最终所有的访问都是最后更新的值。
而从广义上讲,任何将数据局限在某一个范围内的东西都可以认为中心化系统,如微信,支付宝,xx机构等
在中心化系统中,我们必须无条件的信任其能够正确的处理我们的请求,中心化系统一旦奔溃将带来严重的损失
1.3 区块链的概念
区块链的发展历史
区块链1.0是以比特币为代表的数字货币应用,其场景包括支付、流通等货币职能;
区块链2.0是数字货币与智能合约相结合,对金融领域更广泛的场景和流程进行优化的应用;
区块链3.0则超出金融领域,为各种行业提供去中心化解决方案。
区块链的分类
公共区块链,
任何用户都可以读取,写入,参与达成共识的区块链,如比特币,以太坊等
联盟链
经过允许的用户才能参与,或者其他用户只能进行信息的查询或写入
私有区块链
只允许特点的用户参与
一般来说,在私有链和联盟链情况下,对一致性、正确性有很强的要求。一般来说要采用强一致性的共识算法。而在公有链情况下,对一致性和正确性通常没法做到百分之百,通常采用最终一致性的共识算法。
二、区块链的工作流程
2.1新数据的写入流程:
1、发送节点将新的数据记录向全网进行广播
2、接收节点对记录到的数据记录进行校验,比如记录信息是否合法,通过校验后数据记录将被纳入一个区块中
3、全网所有接收节点对区块执行共识算法(工作量证明,权益证明等),用以达成数据的一致性
4、区块通过共识算法过程后将被正式纳入区块链中储存,全网节点均表示接收改节点值,将该区块的哈希值视为最新的区块散列值,新区块将以该区块链为基础继续延长
当前主流的共识机制包括工作量证明,权益证明,工作量与权益混合证明,瑞博共识协议等
下面以比特币的一次交易为例:向大家讲解一下区块链的工作流程
消费者A,B
矿工C,D
当前每成功创建一个区块,创建的矿工可以获得1比特币的奖励
1、A向B支付了1个比特币,标明将从何处获得的1个比特币交给B,并将该数据向全网进行广播,同时为了使得该交易能够优先被处理,A愿意额外支付0.01个比特币作为手续费
2、矿工C和D收到这笔交易后,校验这笔交易的合法性,即A向B支付的这笔比特币是存在的,并且没有被消费掉,这个时候,矿工可能同时收到其他人发来的交易,矿工会选择那些优先级高的交易构建区块,选择完将那些交易放入区块中后,矿工会计算这些交易的总共付出的手续费 + 当前创建一个区块的奖励1比特币,作为区块的首笔交易,作为给自己的奖励,记录在区块中,然后是其余的交易。手续费低的交易可能不会被立即确认,需要等待下一个区块的构建才有可能得到确认
3、各个节点为了确保大家确认交易的交易一致,不会出现各自将各自的选的交易记入自己的区块中,需要一种算法达成共识,
比特币采用的是POW工作量证明方式来达成共识
在POW工作量证明机制下:矿工C和矿工D分别用一个幸运数字+区块中的所有交易计算哈希值,通过更换不同的幸运数字使得计算哈希值小于目标值,当矿工C成功计算出了一个满足条件的哈希值的时候,他会将该区块广播给其他节点中
4、矿工D在构建本区块的时候,发现了D的广播,计算其结果是正确的,将其记录在自己的当前节点后,放弃当前区块的构建,开始下一个区块的构建
2.2 比特币区块的结构
区块结构如下
区块头结构如下
新难度值 = 旧难度值 * ( 过去2016个区块花费时长 / 20160 分钟 )
工作量证明需要有一个目标值。比特币工作量证明的目标值(Target)的计算公式如下:
目标值 = 最大目标值 / 难度值
其中最大目标值为一个恒定值:
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
三、常见的共识算法
3.1 工作量证明POW
通过不断的尝试计算满足目标的哈希值来达成共识,算力越强获得记账权的几率便越大
优点:
1.完全去中心化,节点自由进出,避免了建立和维护中心化信用机构的成本。
2.只要网络破坏者的算力不超过网络总算力的50%,网络的交易状态便不会攻破。
缺点:
1.目前比特币挖矿造成大量的资源浪费;“尝试避免解决该问题的方案:素数币”
2.挖矿的激励机制也造成矿池算力的高度集中,背离了当初去中心化设计的初衷。
3.PoW机制的共识达成的周期较长,过短容易受到网络因数影响,商业应用存在影响。
3.2 权益证明POS
根据持有的币和持有的时间来进行共识,消耗的币龄越大获得记账权的几率更大
优点
1、缩短了达成共识的时间,减少了资源的浪费
缺点:
1.破坏者对网络攻击的成本低,网络的安全性有待验证。
2.拥有代币数量大的节点获得记账权的几率更大,会使得网络的共识受少数富裕账户支配,从而失去公正性。
3.3 股份授权证明DPoS
DPoS(股份授权证明)机制,类似于董事会投票。
持股者投票选出一定数量的见证人,每个见证人按序的权限时间生成区块,若见证人在给定的时间片不能生成区块,区块生成权限交给下一个时间片对应的见证人。
持股人可以随时通过投票更换这些见证人。DPoS的这种设计使得区块的生成更为快速,也更加节能。
优点:
1、大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证。
缺点:
1.选举固定数量的见证人作为记账候选人有可能不适合于完全去中心化的场景。
2.在网络节点数少的场景,选举的见证人的代表性也不强。
3.4 dBFT:小蚁区块链(delegated BFT,授权拜占庭容错机制)
用权益来选出记账人,然后记账人之间通过拜占庭容错算法 达成共识。
优点:
1、专业化的记账人
2、可以容忍任何类型的错误
3、记账由多人协同完成,每一个区块都有最终性,不会分叉
3、算法的可靠性有 严格的数学证明
缺点:
1、当三分之一或以上记账人停止工作后,系统将无法提供服务
2、当三分之一或以上记账人联合作恶,且其他所有的记账人恰好分割为两个网络孤岛时,恶意记账人可以使系统出现分叉,但是会留下密码学证据
3.5 PBFT:Fabric使用的经典算法(拜占庭容错),央行推荐
一种基于消息传递的一致性算法,算法经过三个阶段达成一致性,这些阶段可能因为失败而重复进行。
优点:
1、共识效率高,可实现高频交易。
缺点:
2、当系统只剩下33%的节点运行时,系统会停止运行。
3.6 其他分布式一致性算法
分布式一致性算法是基于传统的分布式一致性技术。其中又分为解决拜占庭将军问题的拜占庭容错算法,如PBFT等
另外解决非拜占庭问题的分布式一致性算法(Pasox、Raft),该类算法目前是联盟链和私有链链场景中常用的共识机制。
优点:
1、实现秒级的快速共识机制,保证一致性。
缺点:
2、去中心化程度不如公有链上的共识机制;更适合多方参与的多中心商业模式。
四、智能合约
智能合约由一组代码(合约的函数)和里面数据(合约的状态)组成
区块链本身不能运行这些代码,而是由节点本地的环境来进行运行
部署合约代码时,会将代码部署到区块链中一个区块,进而被所有节点中所获知记录
调用合约时每个节点都会根据输入运行相应的代码,然后达成共识,确保结果的正确性与一致性
五、区块链的应用
1、分布式记账,将T+n缩短至T+0甚至更短
在各自为中心的机构中,每个中心都有着自己独立的数据系统来进行核算
每个中心需要确保自己数据无误,也要保证和其他中心的数据交互也没有问题,为此需要进行大量的内部对账与外部对账,无法立即确认数据的正确与否。
而通过区块链技术 不同的中心成为了区块链中的一个节点,任何一笔交易,只有所有节点达成共识就可以得到确认,减少了等待时间
成为通过环形签名技术(零知识证明)可以有效的解决数据隐私性的问题
2、数据存证与知识产权保护
常规的数据存在和知识产权保护往往由相应的中心所控制,用户必须无条件的进行信任,并且由于中心化系统的原因,过多的数据意味着更多的管理成本和工作量,记录的速度也会受到影响
而借住于区块链的可信任与数据不可篡改的特性,我们可以将数据的记录时间与数据的电子形式存放区块链中
区块链的开放性使得用户的参与变得更加容易,进行相应的数据存证或是知识产权的保护
区块链的信息一经写入,对应时间戳下的数据变无法篡改,而后续对改数据的修改也都能查到
六、区块链的一些工程
以太坊的ethereum和mist
一个全新开放的区块链平台,允许任何人在公共和内部的平台中建立和使用通过区块链技术运行的去中心化应用
安装与文档 https://ethereum.github.io/go-ethereum/
相比与Hyberledger-Fabric,通过ethereum更容易理解区块链的一些工作原理
命令行界面ethereum
图形化界面mist
ibm的Hyberledger-Fabric
ibm推出的分布式账本解决方案的平台,支持模块化架构,提供高度的机密性,弹性,灵活性和可扩展性
安装与介绍文档 https://hyperledger-fabric.readthedocs.io/en/release/prereqs.html
官方例子
七、其他关键词
1、51%攻击 33%攻击
2、零知识证明(环签名)
3、非对称加密
4、布雷顿森林体系
5、金本位