演示稿(图文版)
区块链入门简介(文字版)
区块链背景
传统的数据库管理系统问题:
- (1)由单一机构管理和维护,在多方参与者协作的场景中,因无法完全信任数据库中的数据。
- (2) 每方都需要单独构建一套承载自己业务数据的数据库,多方数据库间的数据差异会导致繁琐的人工对账和争议。
区块链是一种利用分布式数据存储、点对点传输、共识机制、加密算法等计算机技术构建的一种去中心化、 不可篡改、 可追溯、 多方共同维护的分布式数据库(区块链本质上看成一种数据库,任何需要保存的信息,都可以写入区块链,也可以从里面读取)
区块链最早起源于比特币的设计,是比特币的底层技术和基础架构。
1、去中心化:由大量节点共同组成的一个点对点网络,不存在中心化的硬件或管理机构。在网络中,每一个节点的义务和权利都是均等的。系统中所有节点都参与数据的记录和验证,将计算结果通过分布式传播发送给各个节点。在部分节点遭受损坏的情况下,整个系统的运作并不会收到影响,相当于每个参与的节点都是“自中心”。
2、基于共识建立信任。区块链理论最大的颠覆性在于新的信用形成机制。在传统的互联网模式中,陌生人之间是通过可信任的第三方机构(如银行,国家)来建立信用和进行交易。 而区块链技术从根本上改变了中心化的信用创建方式,它运用了一套基于共识的数学算法,在机器之间建立“信任”网络,从而通过技术背书而非中心化信用。通过这种机制,参与方不必知道交易的对象是谁,更不需要借助第三方机构来进行交易背书或者担保验证,而只需要信任共同的算法就可以建立互信,通过算法为参与者创造信用、产生信任和达成共识。
3、信息不可篡改。区块链是基于时间戳形成的不可篡改、不可伪造的数据库。区块(完整历史) 与链(完整验证)相加便形成了时间戳。时间戳存储在网络中所执行的所有交易历史,可为每一笔数据提供检索和查找功能,并可借助区块链结构追本溯源,逐笔验证。每个参与者在记账并生成区块时都加上时间戳,并广播到全网节点,让每个参与节点都能获得一份完整数据库的拷贝,一旦信息经过验证添加到区块链上,就会永久的存储起来。根据“少数服从多数”原则,从概率上讲,要篡改历史信息,必须同时控制整个系统中超过50%的节点。因此区块链技术认为其系统的数据可靠性很高,且参与系统中的节点越多和计算能力越强,该系统中的数据安全性越高。
基本概念
区块链,顾名思义,是由区块(Block)和链(Chain)组成的。
- 区块(Block):区块很像数据库的记录,每次写入数据,就是创建一个区块。
- 链(Chain):每个区块都连着上一个区块,形成链条式的数据结构记录所有的信息。
区块链技术是一种解决信任问题、降低信任成本的信息技术方案。通过区块链技术,互联网上的各个用户成为一个节点并相互连接起来,所有在此区块链架构上发布的内容都会在加密后被每一个节点接收并备份,换而言之每一个节点都可以查看历史上产生的任何数据。各节点将加密数据不断打包到区块中,再将区块发布到网络中,并按照时间顺序进行连接,生成永久、不可逆向的数据链,这便形成了一个公开透明的受全部用户的监督的区块链。
区块链的运作流程
运行区块链的基本流程:
- 新的交易操作(transaction)向全网进行广播;
- 通过共识算法(Consensus Algorithm)选择leader将交易操作写入一个区块(block);
- 写入区块被其他节点认可和接受。
区块链特点
区块链特点: (1)去中心化。 (2)高可信。 (3)不可篡改。 (4)可追溯。 (5)高可用。
共识算法
Paxos算法
阶段一:寻值阶段
- (a)Proposer选择一个提案编号N,然后向半数以上的Acceptor发送编号为N的Prepare请求。
- (b) 如果一个Acceptor收到一个编号为N的Prepare请求,且N大于该Acceptor已经响应过的所有Prepare请求的编号,那么它就会将它已经接受过的编号最大的提案(如果有的话)作为响应反馈给Proposer,同时该Acceptor承诺不再接受任何编号小于N的提案。
阶段二:提案阶段
- (a) 如果Proposer收到半数以上Acceptor对其发出的编号为N的Prepare请求的响应,那么它就会发送一个针对[N,V]提案的Accept请求给半数以上的Acceptor。注意:V就是收到的响应中编号最大的提案的value,如果响应中不包含任何提案,那么V就由Proposer自己决定。
- (b) 如果Acceptor收到一个针对编号为N的提案的Accept请求,只要该Acceptor没有对编号大于N的Prepare请求做出过响应,它就接受该提案。
Raft算法
Raft算法是一种和Paxos算法一样的分布式一致性协议。(Raft的优势就是容易理解和实现,可以少出错误~~)
Raft的工作模式是一个Leader和多个Follower模式,其安排了三种角色:
- (1)Leader: 处理所有客户端交互,日志复制等,一般一次只有一个Leader.
- (2)Follower: 类似选民,完全被动
- (3)Candidate:候选人。
Raft算法分为两各阶段: 第一个阶段是选举领导人; 第二阶段是由领导人对其他节点对一致性的操作。
选举阶段:
- (1)初始状态时所有server都处于Follower状态,并且随机睡眠一段时间,最先醒来的server A进入Candidate状态
- (2)Candidate状态的server A有权利发起投票,向其它所有server发出请求,请求其它server给它投票成为Leader。
- (3)当其它server收到请求后,将自己仅有的一票投给server A,同时继续保持Follower状态并重置选举计时器。
- (4)当server A收到大多数(超过一半以上)server的投票后,就进入Leader状态,成为系统中仅有的Leader。
传统共识算法缺陷
传统分布式数据库主要使用 Paxos 和 Raft 算法解决分布式一致性问题,虽然它可以解决报文可能发生丢失和延时等问题,但面对拜占庭问题的时候,决策就可能混乱,即其假定系统中每个节点都是忠诚、不作恶的。
但这对于处于公有链上的,有着大量不可信任节点的分布式数据库来说是一种灾难,会遇到各类问题,比如拜占庭问题、女巫攻击问题等。
区块链共识算法
公有链的区块链共识算法主要包括: 工作量证明机制(Proof of Work, POW) 权益证明机制(Proof of Stake, POS)。 股份授权证明机制(Delegated Proof of Stake, DPOS)
PoW
工作量证明机制(PoW),其机制是通过工作量的大小来决定Leader,即工作量证明,被leader打包的区块可以获得整个网络的认可。工作量主要指算力,即计算设备每秒能进行哈希运算的次数。一台设备的算力在全网算力中所占的比重即由这台设备创建新区块(挖矿)的概率。PoW 机制可有效应对女巫攻击,其依靠分布式节点间的算力竞争来保证全网区块链数据的一致性和安全性。
PoW 机制将经济激励与共识过程相融合,促使更多节点参与挖矿并保持诚信,从而主动增强了网络的可靠性与安全性。
流程:
- 1、每笔新交易被广播到区块链网络的所有节点。
- 2、为了构建新的区块,每个节点收集自前一区块生成以来接收到的所有交易,并根据这些交易计算出区块头部的 Merkle 根。将区块头部的随机数 Nonce 从 0 开始递增加 1,直至区块头的两次SHA256 哈希值小于或等于难度目标的设定值为止。
- 3、全网节点同时参与计算,若某节点先找到了正确的随机数,则该节点将获得新区块的记账权及奖励,并将该区块向全网广播。
- 4、其它节点接收到新区块后,验证区块中的交易和随机数 Nonce 的有效性,如果正确,就将该区块加入本地的区块链,并基于该块开始构建下一区块。
分叉问题
分叉问题:若多个区块同时被创建就会引起分叉问题。
解决方案:
- (1)比特币采用确定主链,忽视分支的方法。当发生分叉时,最长的链即花费了最多算力的链被认为是主链,其它则被认为是分支,分支中的所有交易会被忽略。比特币将分支结点 上的区块称为孤块,并会将其作为废块而丢弃。一般地,比特币假定在6个区块生成以后可以确定交易。
- (2)以太坊采用GHOST协议处理。GHOST 协议认为分支上的有效区块对确认主链上的交易也有贡献,因而没有丢弃该区块,而是将该区块作为叔块并给予相当主块 87.5%的奖励,给予叔块的直接子块相当主块 12.5%的奖励,矿工每引用一个叔块给予相当主块 3%的奖励。
为了适应硬件技术的快速发展及计算能力的不断提升,比特币每 2016 块就会调整一次难度目标,以控制区块的平均生成时间(10 分钟) 始终保持不变。
PoS
股权证明和工作量证明一样,是一种用于公有链的共识算法,其根据矿工在区块链中拥有的股权(数字货币量) 来决定其挖矿的难度。
Casper共识算法
Casper共识是以太坊基于 PoS 机制提出。Casper 以智能合约的方式实现,根据抵押的以太币数量和时间,成比例的分配区块的记账权和奖励。与 PoS 机制不同,Casper 还引入了惩罚措施,一旦发现某个矿工作弊,其抵押的所有以太币将全被罚没,参与共识和出块的权利也会被取消。
基于Casper 共识的以太坊一个区块的挖矿时间为4秒,而比特币则需要10分钟。
DPoS
股份授权证明机制(DPOS)采用“股份投票”的方式决定谁来生成区块。它的原理是让每一个持有“股份”的人进行投票,由此产生N个超级节点或者矿池,而这N个超级节点彼此的权利是完全相等的。从某种角度来看,DPOS有点像是议会制度或人民代表大会制度。如果代表不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来取代他们。
EOS使用DPOS共识机制
PBFT
实用拜占庭容错机制(PBFT)是一种状态机副本复制算法,状态机在分布式系统的不同节点进行副本复制。每个状态机的副本都保存了服务的状态,同时也实现了服务的操作。在保证活性和安全性的前提下提供了(n-1)/3的容错性。
PBFT算法流程:
- 1.客户端向主节点发送请求调用服务操作
- 2.主节点通过广播将请求发送给其他副本
- 3.所有副本都执行请求并将结果发回客户端
- 4.客户端需要等待f 1个不同副本节点发回相同的结果,作为整个操作的最终结果。
共识算法小结
(1)公有链的共识算法,均需要“代价”作为支撑,比如工作量、股权。
(2)对于私有链来说,其和传统的分布式数据一样,采用paxos算法和Raft 算法即可。
(3)“因地制宜”最重要,根据不同的场景采用不同的共识算法解决问题。
智能合约
智能合约是用程序语言编写的商业合约,在预定条件满足时,能够自动强制的执行合同条款,实现“代码即法律” 的目标。
(1)依照商业逻辑编写完智能合约代码后,需要将其发布到区块链网络节点上。 (2)调用涉及到修改操作,需要先在全网达成共识,之后修改操作会被记录在区块链,修改结果会被存在状态数据库。调用查询操作,则无需共识,也不需被记录在区块链上。 (3)智能合约支持合约内部事件的注册与通知机制,外部应用与智能合约间的关系非常类似于传统数据库应用与存储过程间的关系,存储过程运行于数据库管理系统之中,访问关系数据库数据,而智能合约运行于区块链系统之中,访问区块和状态数据。
智能合约是运行在区块链上的一段计算机程序,其扩展了区块链的功能,丰富了区块链的上层应用。依照商业逻辑编写完智能合约代码后,需要将其发布到区块链网络节点上。在以太坊中,部署后的合约存放在区块链上,每次被调用时才被以太坊虚拟机(EVM)加载运行;在 Hyperledger Fabric 中,部署后的合约被打包成 Docker 镜像,每个节点基于该镜像启动一个新的 Docker 容器并执行合约中的初始化方法,然后等待被调用。外部应用通过调用智能合约来实现各种交易,如果调用涉及到修改操作,需要先在全网达成共识,之后修改操作会被记录在区块链,修改结果会被存在状态数据库(例如,转账交易的转账金额会被记录到区块链,账户余额的增减会被应用到状态数据库)。如果调用仅包含查询操作,则无需共识,也不需被记录在区块链上。智能合约还支持合约内部事件的注册与通知机制,从而可主动向外部应用通知合约内部发生的关键事件。智能合约目前只能访问链内数据,无法主动监听并响应
可扩展性
区块链想要真正做到更深度化的应用和普及,关键就是要解决交易的吞吐量和交易的速度问题。区块链(公有链)的吞吐量和交易速度一直是区块链发展和应用的关键技术瓶颈。交易数量增加导致比特币区块已经接近1MB容量的92%,如果你经常浏览区块链相关的信息,你一定知道比特币交易开始变得拥堵,在社区中对于是扩容还是侧链的讨论喋喋不休。你肯定也知道就连以太坊也因《CryptoKitties》这款养猫游戏没能逃掉网络拥堵的命运。
现有的主流的可扩展性解决方案可分为三种侧链技术(SideChains)、分片技术(Sharing)和有向无环图(DAG)。
解决方案
侧链(Side Chains)是通过在外部搭建一个新的交易通道嫁接到主链,从而解决扩容问题。 侧链的一个典型就是比特币的闪电网络(Lighting Network):A和B两人可以把比特币放到一个多重签名钱包中锁定(链下),然后进行交易签名更改双方各自能取回的比特币数量。交易参与方可以随时关闭交易通道,最后一笔经过签名且包含最新余额动态的交易最终将会被广播并写入比特币区块链。
分片其实是一种传统数据库的技术,它将大型数据库分成更小、更快、更容易管理的部分。分片技术可以理解为在将主链在内部进行切分。 现在用了分片技术的主要有以太坊的sharing和EOS的Region。
以太坊分片机制介绍
以太坊依据账户地址将全网划分为多个相对独立的分片, 每个分片内维护一条独立子链, 用户可自行选择在哪个分片执行自己的交易, 每个节点根据自身的计算和存储能力选择加入一到多个分片, 并处理和存储这些分片上的交易。
全网节点分工配合以覆盖到所有分片, 如果需要访问本节点没有的交易数据, 则利用轻客户端技术从其它分片节点读取。 全网节点可并行的处理和存储不同的交易数据, 使得全网交易处理能力不再受限于单一节点, 单一节点也不需处理、 存储全部数据。
DAG
有向无环图(Directed Acyclic Graph,DAG)是一种数据结构,不同于传统区块链的底层数据结构Blockchain设计,其通过数据单元之间的引用来完成交易的确认。
流程:
- (1)客户端自主异步地提交一个数据单元,客户端采用点对点互相校验
- (2)通过数据单元之间的引用来完成交易的确认,后面发生的单元去引用前面的单元。
- (3)数据单元间通过引用关系链接起来,从而形成具有半序关系的DAG
- (4)通过特定的方法选择“主链” , “主链”确立了,才把“双花”检测出来剔除,在确定“主链”以前它是一个并行验证的操作,而且是并行往数据结构上放。(“主链”的选择采用共识算法进行确定)
目前采用DAG作为存储结构的代表项目有dagcoin、Byteball、Iota。
展望
区块链虽有去中心化的特性,但很多线上业务的纠纷无法离开中心来解决。因此区块链的真正价值在于促进各行各业的中心化机构之间达成共识,构建联盟,形成多个中心组成的商业生态圈,这样的生态系统突出了中心的职能,大大简化了中心化机构运营成本。