山东大学 软件学院 区块链技术

Posted 平原上的维克多

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了山东大学 软件学院 区块链技术相关的知识,希望对你有一定的参考价值。

1. 定义:

区块链是去中心化的分布式记账系统。

2. 基本概念:

交易:一次对账本的操作,会导致账本状态的一次改变。
区块:记录一段时间内发生的所有交易和结果的数据结构,可视作对当前账本状态的一次共识。
链:区块有序串联而成的数据结构,是整个账本状态改变的日志记录。

3. 特点:

1、不可篡改性:数据保存在每个节点中,不可被销毁或修改 。
2、分布式容错性:通过分布式系统保证区块链能够容忍部分节点的异常状态。
3、隐私保护性:密码学的应用保证即使数据泄露也无法解析。

就上述三大特点而言,前两点与区块链作为分布式系统的特质有关,最后一点则源自密码学的应用。而作为记账系统,保证区块链的不可篡改性尤为重要,具体来说,区块链技术中按照私有链、联盟链及公有链的划分,分别提出了有效的共识算法(详见下文),从而保证数据结构的改变只有在全网达成共识的前提下才能完成,而无法由个别或部分恶意节点修改。分区容错性作为分布式系统本身的三大特性(CAP)之一不再赘述,隐私保护性通过公钥密码等算法保证,同样略过。

4. 分类(根据使用范围及集群中故障节点及作恶节点进行划分):

  1. 私有链:只供内部少数人使用,不考虑集群中存在作恶节点,只考虑故障节点。
  2. 联盟链:由若干组织共同维护,考虑集群中存在作恶节点和故障节点。节点需要通过验证才能加入和退出。
  3. 公有链:任何人都可以参与使用和维护,考虑节点中存在作恶节点和故障节点。节点的加入和退出不需要验证。

5. 运行机制(以比特币为例):

  1. 客户端进行交易并广播交易记录。
  2. 节点验证交易记录并打包组成候选区块。
  3. 计算nonce串放进区块使得候选区块的哈希结果满足特定条件。
  4. 节点完成随机数串的计算并广播候选区块。
  5. 其他节点验证候选区块并将其加入自己的区块链。
  6. 大部分节点都将区块添加到自己维护的区块链上后,该区块被网络接受,交易被确认。

要理解区块链技术,首先要明白其作为分布式系统的本质,因此不得不理解其如何克服CAP问题中一致性与可获得性的矛盾(CAP: consistent, available, and partition tolerant):
1、一致性:考虑到网络中恶意节点的存在,通过共识算法保证数据的一致性。
2、可获得性:整个网络始终处在在趋于整体一致的过程中(指的是网络中可能存在局部节点中的区块链不一致的问题,但是终将按照最长链原则形成一致),我们可能获得局部节点中不一致的信息(分叉后的链中的信息),但最终将获得正确的信息。
3、分区容错性:通过数据的冗余存储(每个节点存储完整区块链)实现

6. 核心:作为一种复杂的动态的分布式网络,我们需要关注区块链如何实现共识(也即上文所述的一致性),下文分别按照联盟链、私有链、公有链的顺序讲解。

6.0 分布式系统

由分布在不同地理位置的多个节点通过网络连接而成,节点可分为

  • 可信节点
  • 缺陷节点
  • 恶意节点

网络中某个出现任意意外行为的节点成为拜占庭节点。

6.0.1 分布式系统模型

同步模型:消息处理及传输都有可以预知的时间(/时钟漂移)边界,可以使用超时。
异步模型:无法预知的时间(/时钟漂移)边界,无法使用超时。

6.0.2 CAP定理

任何分布式系统无法同时拥有一致性、可用性和分区容错性。

  • 一致性:所有节点在任意时刻拥有一致的数据
  • 可用性:所有节点接收到请求后即能做出响应
  • 分区容错性:某些节点的失效不影响系统的运行

一致性和可用性存在矛盾,因为要保证数据的一致性就必须在某个节点的数据被更新后立即同步所有节点,而同步完成的这段时间内其他节点不可能保证可用性。

区块链同时实现了这三种属性

6.1 私有链的共识算法:RAFT

RAFT算法中,任意节点在任意时刻只能扮演下列三种角色中的一种:leader, candidate, follower。

6.1.1 领导选取过程

网络初始化之后,所有节点都是follower,而当节点一段时间内没有收到leader节点的心跳包,就会自动成为candidate,并向其他节点广播投票要求。由于该过程中每个节点只能投出一票,因此先发出请求的节点会有优势。最终获得的票数达到 ( n / 2 ) + 1 (n/2)+1 (n/2)+1的节点成为leader。成为leader的节点每隔一段时间需要向所有节点发送心跳包。

6.1.2 记账过程

客户端向leader发送某请求后,
leader节点广播至所有节点,
大部分节点将接受请求并返回确认成功信息。
下一个心跳中,leader会通知所有follower更新确认的项目。

6.2 联盟链与公有链中共识算法的理论基础:拜占庭将军问题

IC1: 所有忠诚将军的行为必须一致。
IC2: 如果发出命令的将军是忠诚的,那么其余所有忠诚将军的行为必须和他一致。

6.2.1 基于口头消息

拜占庭将军问题——口头消息

可以证明,基于口头消息的拜占庭将军问题在将军总数大于叛徒人数的三倍时可解:

IC2在将军总人数超过叛徒人数的两倍时即成立;
IC1可以分成两种情况:

  1. 发出命令的将军是忠诚的,此时符合IC2的情况,故直接成立
  2. 发出命令的将军是叛徒,通过数学归纳法可证真

6.2.2 基于签名消息

签名应满足:

  1. 不可伪造
  2. 一旦被篡改即可发现
  3. 可验证

拜占庭将军问题——书面协议

签名消息型解决方案可以处理任何数量叛将的场景。

6.3 联盟链的共识算法:实用拜占庭容错算法(PBFT, Practical Byzantine Fault Tolerance)

6.3.2 基本流程

  • 客户端向主节点发送请求
  • 主节点广播请求给其他节点,节点执行三阶段共识流程
  • 节点执行完三阶段流程后,返回消息给客户端
  • 客户端收到来自f+1个节点的相同消息后表明共识已经达成。

6.3.3 共识形成的详细流程

下图转自 美团技术团队 https://zhuanlan.zhihu.com/p/35847127。

客户端向主节点发起请求,主节点0收到请求后向其他节点发送pre-prepare消息,其他节点收到pre-prepare消息后开始三阶段共识过程:

  • pre-prepare:若消息的v和n曾经出现过但是d和m却与之前不同,或者请求编号不再高低水位之间,则拒绝请求;否则接受请求。
  • prepare:节点同意请求后向其他节点发送prepare消息,一定时间内若收到超过2f个不同节点的prepare消息则表明本阶段已完成。
  • commit:prepare阶段完成后进入commit阶段,各节点向其他节点广播commit消息,收到2f+1个包括自己在内的commit消息后则表明该阶段已达成共识,节点执行请求,写入数据。

处理完毕后,节点返回消息给客户端。客户端收到来自f+1个节点的相同消息后表明共识已经达成。

下图转自 美团技术团队 https://zhuanlan.zhihu.com/p/35847127。

注解:
V:当前视图的编号。视图的编号是什么意思呢?比如当前主节点为 A,视图编号为 1,如果主节点换成 B,那么视图编号就为 2,这个概念和 raft 的 term 任期是很类似的。
N:当前请求的编号。主节点收到客户端的每个请求都以一个编号来标记。
M:消息的内容
d或D(m):消息内容的摘要
i: 节点的编号

6.3.4 视图变更流程

每个副节点维持一个计数器,接收到请求时启动该计数器并在执行请求时停止计数。

副节点的计数器超时或发现主节点作恶时会向全网广播视图变更的消息<view-change, v+1, n, C, P, i>。
其中,v表示上一个视图的编号,n表示i节点的stabel checkpoint的编号,C表示2f+1个节点的有效checkpoint信息的集合,P表示i节点上一个view中编号大于n并且达到prepared状态的请求消息的集合,i表示节点的编号。

若副节点收到2f个不同节点(不包括自己)的视图编号为v+1的view-change消息,则向其他节点广播消息<new-view, v+1, V, O>。其中,v表示上一个视图的编号,V表示新的主节点接收到的有效的视图编号为v+1的view-change消息集合,O是pre-prepare消息的集合。设Min为V集合中最小的stable checkpoint,Max为V集合中序号最大的prepare消息,令r=Max-Min。

其余节点验证收到的视图编号为v+1的new-view消息中的O集合是否正确。若正确,则按照PBFT流程逐条执行O集合中的请求消息。若r>0,则产生消息<pre-prepare, v+1, n, d>,若r=0,则产生消息<pre-prepare, v+1, n, d(null)>。

下图转自 美团技术团队 https://zhuanlan.zhihu.com/p/35847127。

6.4 PBFT与RAFT算法的对比

此文对PBFT作了详细介绍并比较了RAFT和PBFT,质量很高:RAFT与PBFT(美图区块链团队)

6.5 公有链的共识算法:工作量证明(PoW, Proof of work)与权益证明(PoS, Proof of stake)

首先要认识到,和PBFT算法一样,公有链上共识算法的理论基础也是拜占庭将军问题,差别在于前者考虑的是口头消息(Oral Message),后者考虑的是签名消息(Signed Message)

POW:通过计算困难而无意义的数学难题分配记账的权利并形成共识。

7. 区块链的演化

7.1 区块链 1.0

数字货币(2008年10月31日,中本聪(Satoshi Nakamoto)发表文章《Bitcoin : A Peer-to-Peer Electronic Cash System》)
比特币的出现,将PoW与共识机制联系到一起,首次从实践意义上实现了一套去中心化的数字货币系统。

7.2 区块链 2.0

数字金融(引入了智能合约)

7.3 区块链 3.0

用于金融界之外的政府、司法、媒体等综合行业

8. 比特币

9. 以太坊

下面是学习过程中产生的一些问题,相信每个初学者都会遇到,因此稍作记录:

Q0: 什么是挖矿?
通过调节对哈希结果的限制,比特币网络控制平均约10分钟产生一个合法区块,算出区块的节点将获得奖励(目前是12.5比特币,每四年减半)。

Q1: 区块链中各个节点保存了哪些信息,存在哪些动作(操作)?
每个用户都保存完整的区块链。
每个区块由区块头和区块体构成,区块头中包含了上一个区块的哈希值和本区块的哈希值以形成链。
作为客户端,节点可以进行交易并广播交易记录。
作为一般节点,可以接收交易记录并打包成候选区块然后计算nonce值,完成计算后将其加入区块链并广播,或者接收其他节点的候选区块广播并在验证后加入区块链。

Q2: 新加入的区块的区块头中的哈希值是如何计算出来的?区块体中包含哪些记账信息?
区块体中的记账记录来自客户端的交易记录,其实质内容会随着区块链的应用场景而发生变化,可以抽象地概括为对账本[区块链中数据]的操作。
区块头中包括preHash, 版本号,默克尔树的根哈希值,以及作为可变参数的随机数。
使用SHA256算法通过变化的随机数得到符合规定的哈希值后即认定完成计算

Q3: 什么是记账?
对账本(区块链中维护的特定数据)的操作,将导致账本状态的改变。

Q4: 如何加入新节点?
密码学+最长链优先原则

Q5:(存疑)任意两个节点某个时刻收到的交易记录很大概率是不同的,于是它们对不同的交易记录进行打包并计算nonce值,这样来看,节点收到的候选区块中的交易记录亦有可能与其正在计算的候选区块中的交易记录存在差异,那么节点如何验证这些交易记录是正确的?
猜测:由于计算随机数串所需的时间足够长,因此计算出的候选区块中的交易记录已经通过P2P网络传送至其他节点。

Q6: 同时假设集群中存在恶意节点,为何适用于联盟链与公有链的共识算法不同?
公有链中需要限制消息的数量(通过特定机制,如PoW)

为什么区块链无法篡改?
双花问题和51%攻击

以上是关于山东大学 软件学院 区块链技术的主要内容,如果未能解决你的问题,请参考以下文章

山东大学 软件学院 区块链技术

区块链知识点索引

双11特惠HyperLedger(超级账本)Fabric 区块链开发实战周末班 - 全国首发/孔壹学院独家

区块链学习笔记4——BTC实现

区块链分布式账本开发_区块链分布式账本金融系统开发

腾讯云加入超级账本 共同探索区块链技术应用