1.单选题10个 15分 2.多选 10个 15分 3.简答 4个 20分 4.应用 3个 50分
概念30% 简单应用的题30% 综合应用40%
第一章 区块链技术概述
区块链技术起源
纸质货币的弊端:成本高、携带不便、易被伪造、匿名不可控
工作量证明(Proof of Work)的技术来解决垃圾邮件问题。
2008年10月31日 中本聪提出了一种基于无中介陌生人信任服务体系的分布式账本技术的数字加密货币系统方案,并对这种用于记录交易账本的数据结构取名为“区块链”。
2009年1月3日 序号为0的“创世区块”诞生
2009年1月9日出现序号为1的区块,并与序号为0的“创世区块”相连接形成了链
区块链技术的基本概念
什么是区块链
区块链从字面上理解就是由多个记录数据的区块构成的链式数据结构。
从技术上,区块链是一种基于P2P网络架构的分布式账本技术系统,以“块-链”式数据结构来验证与存储账本数据,多方维护的分布式节点共识机制来生成无法篡改、无法抵赖的账本数据,使用密码学方法保证数据传输和访问的安全,智能合约程序来查询或生成账本数据。
从应用角度上,区块链面向由陌生主体构成的开放网络环境的价值创造、价值交换与价值记录过程,提供多方集体维护、不可篡改、可追溯、公开透明的分布式账本记账服务,大幅降低第三方信任服务的成本和风险,提高服务效率,是一种新型的无中介陌生人信任服务应用支撑平台系统。
区块链的特点
(1)去/弱中心化
各个节点实现了信息自我验证、传递和管理,去/弱中心化是区块链最突出最本质的特点。
(2) 数据不可篡改
(3) 数字价值唯一性
区块链采用共识机制和密码学方法,以很小的代价实现数字化表达唯一性,真正使数字价值变得唯一,可以模拟真实世界中的实物唯一性。
(4) 智能合约
(5) 开放性
区块链数据对所有人公开,任何人都能通过公开的接口,对区块链数据进行查询,并能开发相关应用,整个系统的信息高度透明。
(6) 去信任
区块链类型
1.公有链
公有链中的“公有”就是任何人都可以参与区块链数据的维护和读取,数据完全开放透明。
目前全球最有影响力的公有链是比特币和以太坊系统。
2.联盟链
联盟链即区块链共识建立的范围及公共账本的公开对象为有限主体,如行业联盟成员之间,联盟成员平等参与区块链网络构建、公共账本创建与维护。
区块链典型的联盟链代表技术是开源的超级账本系统(Hyperledger Fabric)
3.私有链
私有链即区块链共识建立的范围及公共账本的公开对象为单一主体,单一主体对区块链的网络运行及数据处理、交换与存储具有全部权利。
私有链也可以看作是联盟链的一种特殊形态,即联盟中只有一个成员
区块链分叉
分叉原因:
(1) 区块链软件升级
区块链系统的节点被划分为已升级的新节点和未升级的旧节点两大阵营,旧节点拒绝验证新节点产生的区块
(2) 区块链出块冲突
多个节点同时计算出结果,都生成一个新的区块,使区块链发生临时分叉
区块链技术的发展历史
(1) 区块链1.0阶段——比特币区块链系统
与法定货币相比,比特币特点:去中心化、匿名性、通胀预防
2009年1月3日 中本聪挖出了第一批50个比特币,第一个区块被称为创世区块或初始区块(Genesis Block)
2010年5月21日,第一次比特币交易
2011年,开始出现基于显卡的挖矿设备。
2012年6月,Coinbase公司成立,支持比特币相关交易,该公司目前已经发展为全球数字资产交易平台
2012年11月28日,比特币产量第一次减半
2013年10月,世界第一台可以兑换比特币的ATM在加拿大上线
2016年7月9日,比特币产量第二次减半
2020年7月26日,比特币价格达到10000美元。
2021年2月9日,比特币价格达到50000美元。
(2) 区块链2.0阶段——以太坊区块链系统
与比特币系统相比,以太坊的区块链平台具备以下的主要技术特点:图灵完备、哈希计算同时需要计算性和内存容量的哈希函数、叔块激励机制、账户系统和世界状态、gas机制限制智能合约代码执行指令数、pos
2015年7月30日,以太坊第一阶段Frontier(前沿)正式发布
2016年3月14日,以太坊进行了第二次分叉,正式发布第二阶段 Homestead(家园)稳定版本
2016年7月20日,以太坊进行第三次硬分叉,作出一个向后不兼容的改变,让所有的以太币(包括被移动的)回归原处,而不接受此改变的区块链则成为经典以太坊(Ethereum Classic,ETC)
2017年10月16日,以太坊网络第4370000个区块诞生时通过“拜占庭”代码执行一次硬分叉,发布第三阶段Metropolis(大都会)
(3) 区块链3.0阶段——超级账本区块链系统 区块链3.0阶段的标志就是区块链技术开始向社会经济各个领域应用延伸, ,区块链3.0阶段,超级账本 HyperLedger 项目作为典型代表,是区块链技术中第一个面向企业级应用场景的开源分布式账本平台
2015年底IBM宣布加入开放式账本项目(Open Ledger Project)后,该项目正式更名为超级账本(HyperLedger)
2016年,超级账本项目正式把Blockstream、DAH与IBM贡献的代码合并成新的代码库,命名为Fabric,Fabric区块链平台技术诞生
2017年5月,Fabric 1.0版本发布
2020年1月31日,Fabric 2.0版本发布
区块链系统总架构
体系结构:P2P 区块链的思维方式:(1) 去/弱/多中心化(2) 透明开放(3) 协同合作
第二章 比特币区块链系统
比特币系统体系结构
比特币系统的节点总体上可以分为“全节点” 、 “轻节点”等两⼤类,其 中发挥核⼼作⽤的是全节点
全节点是比特币系统中功能最完整的节点
主要负责执行以下功能:
- 参与区块记账权的竞争,通过PoW共识机制竞争下⼀个新区块的出 块权
- 存储完整的区块链与账本数据
- 提供P2P⽹络路由与同步服务
轻节点主要负责提供交易和钱包功能,不参与出块权的竞争计算, 不会存储完整的区块链,只需要保存每个区块的区块头信息。 可以发起简单⽀付验证请求SPV,并提供P2P⽹络的路由功能。轻节点除了 主要提供交易功能外,还常常提供钱包功能。
比特币系统逻辑架构
比特币系统数据层
区块与区块链
区块(Block)是区块链系统中最基本的数据单元, ⽤于表示和记录区块链系统⼀段时间内发⽣的交易和状态结果
每个区块⼜由区块 头(Block Head)和区块体(Block Body)两部分组成。 在区块链系统的所有区块中,第⼀个区块被称为“创世区块”
区块整体数据结构如 下表所示:
区块头包含的信息如下:
账本数据
(1) 账户地址
⽤户的公钥经过哈希计算及Base58编码运算 后⽣成的160位(20字节)的字符串,账户地址计算⽣成流程
(2) 账本数据模型
UTXO(Unspent Transaction Output)未消费的交易输出模型
UTXO模型的本质是通过交易记录来构成系统账本,⽽不是通过账户 信息构成账本,所有交易的最初的交易输⼊都来⾃⽐特币系统节点⽣成区块得到的激 励(⽐特币)。
Coinbase 交易的特 点是交易输⼊没有对应的“⽗交易”的交易输出,因为作为激励 的⽐特币是直接由系统⽣成的。
⽐特币系统通过“交易池”跟踪区块链⽹络中所有UTXO的集 合,⽽某个地址在某个时间点所具有的“余额” ,是通过检查、求和与该地址相关的所有UTXO来计算。
交易数据结构
每⼀笔交易数据中,都包含⼀个或多个“交易输⼊” (标识资⾦来源)、⼀个或多个“交易输出”(标识资⾦去向)、交 易时间戳等信息
输入数据--解锁脚本 输出数据--锁定脚本
状态数据
在⽐特币系统中,交易表示⼀次价值转移操作,会导致账本状态的⼀次改变,区块体中所有交易数 据的哈希值构成了⼀棵Merkle树。
比特币系统网络层
⽐特币系统采⽤的P2P⽹络属于⾮结构化P2P⽹络
⼀个新启动的节点可以通过两种⽅式发现其它⽹络节点
(1) 利⽤DNS种⼦节点
(2) 节点引荐
每个节点都会维护⼀个未确认交易列表,称为“交 易池”.某些节点还维护⼀个单独的“孤⽴交易池”.
⽐特币系统共识层
PoW⼯作量证明共识机制
⽐特币系统通过共识机制竞争计算⽣成新区块的过程,被称为“挖矿 (Mine)” ,因此⽐特币⽹络节点⼜被称为“矿⼯(Miner)”
⽐特币系统的PoW共识机制具有两⼤特点:
(1) ⽐特币系统PoW共识机制采⽤的“难题”具有难以解答,但很容易验证答案的正确性的特点.平均解出⼀个难题所消耗时间,是可以通过调整难题中 的部分参数来进⾏控制的,因此⽐特币系统可以很好地控制链增 ⻓的速度
(2)“最⻓链有效”的评判 机制 就能够在⼤多数(超过⽐特币⽹络51%算⼒)节点都是诚实的情 况下,避免恶意节点对区块链的控制.
孤块:竞争出块的产品
⽐特币系统激励层
每10分钟⽣成⼀个不超过 1MB⼤⼩的区块 每个区块的奖励 最初是50个⽐特币,每隔21万个区块(约4年时间)⾃动减半,最 终⽐特币总量稳定在2100万个
激励机制主要包括以下要点: (1)加密货币总量固定 (2)出块激励 (3)交易激励
⽐特币系统合约层
⽐特币系统采⽤了⼀种⾮图灵完备的、基于逆波兰表示法的堆栈执 ⾏语⾔来编写“锁定脚本”与“解锁脚本”
由P2PKH脚本锁定的输出UTXO,接收 者要使⽤时必须提供完全匹配的接收者的数据签名和公钥才能 够得以解锁,否则⽆法使⽤。
第三章 区块链信息安全技术
哈希算法
哈希(Hash)算法,⼜称为散列算法或杂凑算法。常⻅的哈希算法包括信息摘要算法(MD5)、安全哈希算法 (SHA),国产加密哈希算法(SM3)等。
MD5信息摘要算法
输入:无要求 输出:128位(16字节)
SHA-1算法
输入:小于2^64位 输出:160位(20字节)
SHA-2算法
输入:⼩于264位 输出:256位(32字节)
在SHA-2算法家族中有SHA224、SHA256、SHA384、 SHA512等算法,SHA256算法应⽤最为⼴泛,也是区块链系统中主要 应⽤的安全哈希算法
SHA-3 算法
输入:无限制 输出:256位(32字节)
SHA-3中也提出了4个Hash算法 Keccak224、Keccak256、Keccak384和Keccak512,可完全替换 SHA-2。在以太坊系统的PoW共识算法中就使⽤了Keccak256哈希算法。
国密SM3算法
输入:⼩于264位 输出:256位(32字节)
SHA2算法类似。
公钥密码体制
公钥密码体系采⽤⾮对称加密算法。
可以构建两种基本的模型:加密模型和认证模 型。
在加密模型中,发送⽅⽤接收⽅的公钥作为加密密钥,⽤接收 ⽅私钥作解密密钥,由于该私钥只有接收⽅拥有,因此即只有 接收者才能解密密⽂得到明⽂
在认证模型中,发送⽅⽤⾃⼰的私钥对消息进行签名。接收者 ⽤发送者的公钥对签名进⾏验证以确定签名是否有效。
应⽤最⼴泛的⾮对称加密算法包括RSA算法、ECC椭圆 曲线加密算法、Elgamal算法等
RSA算法
RSA算法的数学理论是⼤素数的因⼦分解求解难题,RSA算法可 选择512位(bit)、768位(bit)、1024位(bit)、2048位(bit) 等不同的密钥⻓度。
RSA密钥⻓度增⻓⼀倍,公钥操作所需时间增 加约4倍,私钥操作所需时间增加约8倍,公私钥⽣成时间约增 ⻓16倍。
RSA⼀次能加密的消息数据⻓度与公钥⻓度成正⽐,RSA加密后⽣成的密⽂⻓度与公钥⻓度相同。
数字签名技术
数字签名具有法律效应。
数字签名技术分类:
基于数学问题,分为基 于素因⼦分解问题的数字签名、基于离散对数问题的数字签名、 将前⼆者结合的混合数字签名
基于所采⽤的公钥密码体制,分为 基于RSA的数字签名、基于DSA的数字签名、基于椭圆曲线 ECDSA的数字签名等类型
根据签名的⽤户数量,分为基于单个⽤户签名的数字签名、基于多个⽤户签名的数字签名。
根据恢复特性的不同,分为 不具有⾃动恢复特性的数字签名、具有消息⾃动恢复特性的数字 签名。
作用:
数字签名能鉴别当事⼈的身份,起到了与⼿写签名或盖章相同 的作⽤,能够识别信息在发送过程中是否被篡改,可以有效解 决伪造、抵赖、冒充和篡改问题。
⽤于身 份认证、电⼦商务、数字化交易、电⼦合同、电⼦签章等领域
数字签名与验证过程
PKI公钥基础设施
PKI提供对加密密钥的管理(包括密钥更新、 钥恢复和密钥委托等),X.509证书的创建、发布与撤销管理, 以及策略管理等。
(1) 证书机构CA
证书机构CA是PKI的核⼼功能组件,负责管理公钥的整个⽣命周 期,其作⽤包括:发放证书、规定证书的有效期和通过发布证书废除 列表(CRL)确保必要时可以废除证书。
(2) 注册机构RA
注册机构RA是CA与⽤户之间的服务接⼝,RA获取并认证⽤户的 身份,并向CA提出证书请求。RA主要完成⽤户身份审核、CRL管理、 密钥产⽣和密钥对备份等
(3) 证书发布系统 证书发布系统负责证书的发放,⼀般通过LDAP⽬录服务发布证书
(4) PKI安全策略 PKI安全策略建⽴和定义了⼀个组织信息安全⽅⾯的指导⽅针,同时也定义 了密码系统使⽤的处理⽅法和原则。
默克尔树
每个最底层的叶⼦节点代表需要进⾏完整性验证的 数据项的哈希值,叶⼦节点的上⼀级⽗节点的值,是将该节点所有⼦节 点的哈希值做字符串连接后,再进⾏哈希计算得到的哈希值,以此类推, 直到默克尔树的根节点。单身节点直接进⾏哈希计算。
默克尔帕特⾥夏树
在效率⽅⾯, MPT树的插⼊、查找、删 除 的 时 间 复 杂 度 都 是 O(log(n)),n是插⼊、查询 或删除的键key字符串的 ⻓度。
MPT树的节点
节点可以分为叶⼦节点、扩展节点、分⽀节点、 空节点等⼏种类型
叶⼦节点(LeafNode):该节点可以包含 Type、Key、Value等属性。Type属性⽤来 描述节点类型,Key属性⽤于表示被插⼊ MPT树的键值对 中key值字符 串的压缩前缀(与压缩前缀树相同), Value属性⽤来表示实际的value值。
扩展节点(ExtensionNode) Value属性⽤来 表示⼦节点的哈希值索引,并且扩展节点 的⼦节点只能是分⽀节点。
MPT树的key编码规则(重点)
在MPT树中,对于需要保存进MPT树的键值对 中的 key值会涉及Raw原⽣字符编码(简称Raw编码)、Hex扩展⼗六进制 编码(简称Hex编码)和HP⼗六进制前缀编码(简称HP编码)等三种 编码规则
(1) Raw编码
Raw编码是MPT树相关插⼊、查找、删除等访问接⼝ 中使⽤的key编码⽅式,Raw编码对key值不做 任何改变,将key值中的字符按顺序转换为ASCII编码表示。
key1为字符串“5b3edb” ,其Raw编码就是 { ‘5’ , ‘b’ , ‘3’ , ‘e’ , ‘d’ , ‘b’ },对应的ASCII编码表示为 { 53,98,51,101,100,98 }。
(2) Hex编码
Hex编码是MPT树在内存中构建和存取访问时,对key使⽤的编码⽅式。将Raw编码的每个ASCII字 符,根据⾼4位、低4位拆成两个字节,其中⼀个字节的低4位是原字节 的⾼四位,另⼀个字节的低4位是原数据的低4位,⾼4位都补0。
例如,key1的Raw编码的第⼀个字符‘5’对应的ASCII编码53的⼆进 制表示为0011 0101,按照⾼、低4位拆分为两个字节对应的⼗六进制表 示为3和5,因此key的Hex编码表示为 {3,5,6,2,3,3,6,5,6,4,6,2 }。经过Hex 编码后,key可以使⽤⼀个字节数组来存放,数组的⻓度就是key的⻓度。 Hex编码将MPT树中分⽀节点的最⼤分⽀个数减少到了16个。
(3) HP编码
HP编码⽤于在MPT树持久化存储系统中对key进⾏编码, 当MPT树被加载到内存时,HP编码将被转换成Hex编码。HP编 码是在Hex编码的基础上,⼀⽅⾯对key增加⼀个附加有⽤信息 的前缀,并对key值的存储空间容量进⾏压缩。
①如果key的⻓度为奇数且key对应节点是叶⼦节点,则在key之前 增加半个字节(4 bits)的前缀,⼆进制表示为0011 ②如果key的⻓度为奇数,但是key对应节点是⾮叶⼦节点,则在 key之前增加半个字节(4 bits)的前缀,⼆进制表示为0001; ③如果key的⻓度为偶数且key对应节点是叶⼦节点,则在key之前 增加⼀个字节(8 bits)的前缀,⼆进制表示为00100000; ④如果key的⻓度为偶数,但是key对应节点是⾮叶⼦节点,则在 key之前增加⼀个字节(8 bits),⼆进制表示为00000000; ⑤将经过步骤①-④添加前缀信息后key进⾏压缩,使⽤Hex编码的 逆过程,得到key的HP编码结果。
例如,key1的Hex编码为{3,5,6,2,3,3,6,5,6,4,6,2 },⻓度为12, 如果key1对应的节点是叶⼦节点,则key1的HP编码为 {32,53,98,51,101,100,98};如果key1对应的节点是⾮叶⼦节点, 则key1的HP编码为{0,53,98,51,101,100,98}
根节点⼀般采⽤扩展节点,扩展节点的⼦节点只能 ⼀个分⽀节点,分⽀节点的⼦节点可以是多个分⽀节点、扩展节点或 叶⼦节点。
第四章 以太坊区块链系统架构
以 太坊系统的节点总体上可以分为“全节点” 、 “轻节点” 、 “存档节点”等类 型,其中发挥核⼼作⽤的是全节点
以太坊系统逻辑架构:
以太坊系统数据层
以太坊区块的区块 体除了包含交易列表外,还包含⼀个特殊的叔区块(Uncle Block)头部分
每个区块的整体数据结构:
每个区块的区块头所包含字段信息的数据结构如下表:
账户数据
以太坊的分布式账本采⽤了传统记账系统的账户模型,账户地址是采⽤⼀种SHA-3(Keccak-256)哈希算法对公钥数 据进⾏哈希计算的32字节结果的后20字节数据的40位⼗六进制字符表示。
以太坊系统有两类账户:
(1) 外部账户EOA 外部账户是给以太币拥有者分配的账户,拥有该账户的⽤户可 以通过账户对应的私钥创建和签署交易,发送消息⾄其他外部账 户或合约账户。
(2) 合约账户COA 合约账户是⼀种特殊⽤途的账户,⽤于存储执⾏的智能合约代 码,只能被外部账户触发从⽽执⾏其对应的合约代码
账户对象主要包含的字段信息的数据结构:
交易数据:
交易是指从⼀个账户到另⼀个账户的消息数据。
交易类型:
(1) 转账付款类型的交易
(2) 创建智能合约类型的交易
(3) 调⽤合约⽅法类型的交易
状态数据
以太坊系统⽤⼀棵采⽤默克尔帕 特⾥夏MPT树型数据结构定义的“全局状态树”来保存每个区块 产⽣时系统的状态,并在当时的区块中保存了状态树的根哈希
每个账户的状态可以使⽤键值对 来表示,其中key 是20个字节账户地址,可以唯⼀标识账户,value是对账户的字 段四元组 的值进⾏ RLP编码的结果
状态树中的每个叶⼦节点都表示⼀个账户状态,当新区块被产⽣时, 状态树的根哈希值将被写⼊区块中,期间只会有⼩部分的账户状态会 发⽣改变,状态树中只有部分节点状态会改变。针对发⽣改变的节点状态,会新建⼀些分⽀, ⽽不是更新原节点的状态数据,历史状态数据都将被保留。
以太坊系统⽹络层
P2P⽹络结构与节点
(1)全节点
- 所有区块链与状态数据存储在节点本地,建⽴全链数据副本
- 接收并验证新区块数据
- 接收并验证其他帐户或去中⼼化应⽤DApp发出的交易数据
- 求解指定的PoW⼯作量证明计算难题来竞争新区块的出块权
- 智能合约进⾏部署与执⾏
(2) 轻节点
存储所有的区块头数据,轻节点 ⼀般⽤于发送或传递交易信息,轻节点的数据存储⼤⼩约为5 GB。
(3) 存档节点
存档节点不参与竞争出块权的共识计算,⼀般只提供状态查询服务,存档节点存储了所有全节点保存的内容,同时创建了历史状态的档案。存储⼤⼩已超过2TB。
节点管理 基于UDP协议和Kademlia算法实现节点发现。 以太坊⽹络的节点连接涉及到Peer(对等节点)、Session(会话)、 Capability(能⼒)等基本概念
以太坊系统共识层
Ethash算法作为其⼯作量证明算法(重点)
在以太坊系统中,PoW⼯作量证明难题的求解难度是动态调整的。以太坊调整难度的⽬的,是为了使出区块的时间保持在10-19秒内,如果低于10秒则增⼤挖矿难度, 如果⼤于19秒将减⼩难度。公式中的第三部分会随着每10000个区块的 ⽣成⽽翻倍,在以太坊运⾏后期会逐渐影响以太坊的出块速度。
以太坊系统激励层
在以太坊正式上线时, 在创世区块中⼀共发⾏了7200多万个以太币
(1) 加密货币总量⽆限制
(2) 出块激励
(3) 叔块激励
(4) 交易激励
每⼀笔 转账类型的交易,⽆论转账数额⼤⼩,系统规定最少消耗21000个 Gas数 量
1 ETH = 10^9 GWei = 10^18 Wei
以太坊系统合约层
智能合约⽣命周期管理
(1) 合约的创建
合约的创建是由外部账户发起⼀次创建合约类型 的交易来完成。
(2) 合约的部署运⾏
(3)合约的调⽤执⾏
(4) 合约的作废
第五章 共识机制
区块链系统首先必须考虑和解决的是数据一致性问题。共识机制的关键是解决好一致性和可信性两个问题
共识基本问题
FIP定理
1.在异步通信的分布式系统中,即使只有一个进程失败,也没有任何算法能保证非故障进程达到一致性。
FIP定理分布式系统模型如下: 1.异步通信:没有时钟,不能时间同步、超时、探测失败,消息可任意延迟、乱序 2.通信健壮:消息终会被送达,且无重复 3.Fail-stop模型:进程失败如同宕机 4.失败进程数量:最多只有一个进程失败或单节点宕机
2.假设在一个分布式系统中,绝大多数进程最初都是正常运行的,且没有进程在运行中发生故障,则一定存在一个部分正确的共识协议使所有非故障进程达成一致
安全性和活性是两种分布式系统特性
CAP定理
一个分布式系统不可能同时满足一致性、可用性、分区容错性三个特性,最多满足三个中的两个。
一致性:各节点的数据保持一致性,即每次从任意节点写入新数据时,其他节点都能读取到最新数据
可用性:每次向非故障节点发送请求总能保证收到响应数据
分区容错:系统容忍不同节点之间消息传递存在延迟或丢失等错误,而不影响系统整体正常运行
两军问题
经典的两军问题是无解的 在一定条件下,可以通过相对可靠的方式解决大部分问题,TCP协议中的“三次握手”机制
拜占庭将军问题
拜占庭问题描述了如何存在恶意行为的情况下实现分布式系统的一致性。
对于一个拜占庭系统,如果系统总节点数为Z,表示叛变将军的不可靠节点数为X,只有当z>=3x+1时,可由基于拜占庭容错的协议保证系统的一致性。
一般把由于系统故障导致节点不响应的情况归为“非拜占庭错误”,把节点伪造或篡信息进行恶意响应的情况归为“拜占庭错误”
非拜占庭容错类共识算法
paxos算法
拜占庭容错类共识算法主要用于实现封闭式的、系统节点都受控的企业级发布式系统
原理:
proposer(提出提案者):提出提案,提案信息包括提案编号n和提案内容v
Appector(接受提案者):收到并审批提案,若提案被多数acceptor接受,则该提案被批准。 Learner(学习提议者):被告知提案结果,并与之统一,执行被批准的提案中的提案内容
paxos的执行包括准备提案和提交提案,局限性是可能出现活锁
raft算法
raft算法有三种角色
leader(领导者):对于所有用户的请求进行处理,带领分布式系统的所有节点对数据更改达成一致,这个过程被称为日志同步。
follower(跟随者):只响应leader节点与candidate节点的请求,如果没有收到leader的消息就会变成candidate
candidate(候选人): candidate会向其他节点发起投票,包括给自己的一票。如果收到了半数以上的选票,就将成为新的leader节点。
(1)选举主节点 (2)日志复制 (3)安全性 (4)成员变更
拜占庭容错类共识算法
拜占庭容错允许发生任何错误节点的数量不超过一定比例,确保整个分布式系统的可靠性。 包括pbft.pow.pos
pbft
解决了原始拜占庭容错算法效率不高的问题,将算法复杂度有指数级降到多项式级
角色
(1)主节点(primary):对客户请求进行排序,发起新的请求
(2)副本节点(replica):验证请求是否有效
(3)客户端节点(client):负责发出请求
最大容错节点不超过(n-1)/3
流程:
pow的局限性
依靠算力竞争,造成巨大的算力资源和电力浪费。 运算时间长,获得记账权的等待时间变久,交易确认周期也会变长,严重影响产生区块的效率。
pos
每轮由当时具有最高权益值的节点获得
pos引入了币龄
DPos
为了解决POW算法的性能与巨大算力消耗问题以及POS算法后期可能出现少数节点持有大量权益证明带来的中心化风险问题。
Fabric
p2p+部分中心化服务节点
逻辑架构
fabric数据层
创世区块不包含任何交易数据,从第二个区块开始,每个区块由区块头、区块数据、区块元数据组成
账本数据
fabric每个通道都会拥有一个独立的分布式账本,其中区块链和状态数据库是最重要的组成部分。
(1)区块链
默认的区块文件大小上限是64MB,一个账本能保存最大数据量是61TB
(2)状态数据库
存储所有曾经在交易中出现的写操作相关的键值对的最新值
(3)区块索引库
对区块进行快读定位查找的索引信息
(4)键历史索引库 记录键值对数据的历史信息,查找某个key的历史修改记录
交易数据
写操作会改变区块链系统的状态和账本数据
网络层
非结构化P2P网络
节点类型:orderer、client、peer、ca,其中ca和orderer是中心化功能节点角色
(1)peer节点可以记账、背书、主节点(与oderer通信)、锚节点(路由),一定具有记账功能,至少有一个主节点和锚节点。
(2)orderer节点是实现共识管理,对交易进行排序、打包进区块
(3)client用户或基于区块链的应用系统
(4)ca client的注册事情、验证身份
ca和orderer通常由联盟链的发起与权威可信管理机构提供
多链多通道
每个通道对应一条逻辑和一个分布式账本 每个节点可以属于一个或多个通道
共识层
发起到打包进区块,最终被写入区块链的全过程(重点):
激励层
faric 智能合约称为链码,分为系统链码和用户链码
(1)系统链码 由fabric社区开发和维护,有配置管理链码、生命周期管理链码、查询管理链码、交易背书管理链码、交易验证链码
(2)用户链码
开发人员根据智能合约实际场景设计开发的链码,支持go\java\js语言
生命周期: 链码的开发、安装、实例化、运行、升级
gRPC
链码远程调用协议,实现分布式系统内外部服务调用
第七章 智能合约技术
定义(重点):
一系列以数字形式定义的承诺,合约参与方可以在上面执行这些承诺的协议。
(1)承诺
承诺是合约签订各方当事人一致同意的权利和义务,承诺可以包含合约条款和基于规则的用于执行业务逻辑的操作。
(2)数字形式
智能合约必须以电子形式表示与处理,合约的条款与功能结果作为代码嵌入到软件中
(3)协议
智能合约采用算法形式描述计算机协议定义规则,用于规定各参与方应如何处理与智能合约相关的数据
(4)自动执行
智能合约视为能自动执行合约条款的计算机程序代码
作用:
特点:
智能合约技术原理
智能合约设计模型:
以太坊智能合约(重点)
主要是编写
第八章 区块链P2P网络
概念(重点) 网络中的各个节点都是对等的,不存在主、从节点之分,每个节点既可以是网络服务的请求者又能对其他节点的请求进行响应。采用分布式方式,利用分布式资源完成关键功能的系统。
特点:
(1)高健壮性
(2)易扩展性
(3)高性价比
(4)强私密性
(5)低维护成本
P2P网络模型(重点)
主要有以下三种类型:
1.集中式p2p网络 --采用集中的索引服务器管理,星状拓扑结构
服务路由,对等节点与中心索引服务器节点间会建立连接通道传输相关请求或响应消息,这种通道称为边。只适合小型网络
2.纯分布式p2p网络
每个节点是完全对等的,每个节点同时提供客户端、服务路由查询和资源服务器三种功能,每个节点维护一个邻居节点列表
泛洪
从网络拓扑结构上分为非结构化覆盖和结构化覆盖
1.非结构化覆盖
2.结构化覆盖
结构化p2p主要采用分布式哈希表(不重点)
分布式哈希表能有效地避免单点故障和泛洪广播风暴
特性:纯分布式、大规模、容错性
3.混合式p2p网络