【笔记】区块链原理与技术

【笔记】区块链原理与技术,第1张

文章目录 区块链介绍基本概念数字货币工作量证明区块链的分类 比特币介绍coinbaseUTXO交易池条目交易的结构区块校验交易校验Merkle 树的特点 以太坊介绍账户模型世界状态数据结构货币Gas交易包含的公共字段交易的有效性验证叔父区块矿工执行的功能 超级账本介绍架构 Fabric介绍成员服务共识算法消息类型channel节点交易处理模型交易过程 Sawtooth lake介绍特点PoET交易族 智能合约定义以太坊虚拟机使用步骤编写智能合约编译智能合约部署智能合约调用智能合约事件 Event事件主题 TopicBloom 过滤器智能合约的优缺点应用场景 P2PP2P 特点P2P 优势P2P 技术的应用拓扑结构中心化拓扑全分布式非结构化拓扑全分布式结构化拓扑半分布式拓扑 分布式系统与去中心化分布式系统一致性分布式系统的主要特点强一致性弱一致性Paxos角色约束要求两阶段提交 Raft拜占庭将军问题CAP 定理 区块链共识算法共识机制PBFT角色基本流程核心三阶段流程视图检查点PBFT、Paxos、Raft、OM(m)、SM(m) 对比 POW工作量证明函数Merkle 树难度值POW 工作量证明流程POW 优缺点 POSDPoS优点缺点

区块链 介绍 区块链是一种去中心化的分布式账本,它本质上是一个去中心化的数据库,又不仅仅是一个数据库。区块链的特点:不可篡改、去中心化、可追溯、匿名性。比特币首次真正从实践意义上实现了安全可靠的去中心化数字货币机制。区块链技术最早的应用出现在比特币项目中 。 基本概念 交易:一次对账本的 *** 作,导致账本状态的一次改变,如添加一条转账记录。区块:记录一段时间内发生的所有交易和状态结果,是对当前账本状态的一次共识链:由区块按照发生顺序串联而成,是整个账本状态变化的日志记录 。 数字货币 数字货币可以认为是一种基于节点网络和数字加密算法的虚拟货币。由于来自于某些开放的算法,数字货币没有发行主体,因此没有任何人或机构能够控制它的发行。由于算法解的数量确定,所以数字货币的总量固定,这从根本上消除了虚拟货币滥发导致的可能。由于交易过程需要网络中的各个节点的认可,因此数字货币的交易过程足够安全。 工作量证明 工作量证明( PoW ):即比特币的这种基于算力寻找 nonce 串的共识机制(俗称挖矿)。 区块链的分类

根据成员的许可类型,区块链可以分类为:

公有链:任何人都可以参与使用和维护,如比特币区块链,信息是完全公开的。私有链:由集中管理者进行管理限制,只有内部少数人可以使用,信息不公开。联盟链:介于两者之间,由若干组织一起合作维护一条区块链,该区块链的使用必须是带有权限的限制访问,相关信息会得到保护,如供应链机构或银行联盟 。 比特币 介绍 中本聪(Satoshi Nakamoto)创建了比特币区块链平台。区块链 1.0 最典型的代表是比特币。在比特币中,主链是最长的链。比特币使用的共识机制是 PoW。比特币获取记账权的方式是——“挖矿”。俗称的“比特币挖矿”是指计算比特币新区块 nonce 值。比特币底层使用的数据库类型是 Key-value 型数据库。比特币没有账户的概念,每个账户的余额都是从他们在区块链上的 UTXO 计算出来的。 coinbase coinbase 分为出块奖励和手续费。coinbase 没有父交易,币由系统生成。 UTXO UTXO 全称是 Unspent Transaction Output,未花费的交易输出。在比特币中,每个账户的余额都是从他们在区块链上的 UTXO 计算出来的。发生交易时,UTXO 上剩余的比特币(如果有的话)将会交付给一个新的 UTXO。相比账户模型,UTXO 有更强的匿名性,但是同步当前账本繁琐、余额管理不便、密钥管理麻烦。 交易池条目 tx:交易指针,指向当前条目所对应的交易。nFree:交易手续费。nTxWeight:交易重量。nUsageSize:交易的内存使用量。nTime:交易被加入交易池的时间。entryHeight:加入交易池时,区块链的高度。 交易的结构 交易结构的字段有:版本号、输入计数器、输入列表、输出计数器、输出列表、Lock_time。 区块校验 内容:区块的格式校验、区块头的哈希值小于规定难度目标、区块的时间戳小于未来两小时、区块大小在规定值区间、区块的第一个交易是挖币奖励(coinbase)且仅有一个 coinbase 交易、对所有交易按交易验证的规则校验。比特币节点新收到的区块,如果找不到其前置区块,那么它会将这个区块暂时保存下来。如果一个块不是最长链的一部分,那么它被称为是“孤块”,它可能是由于发现的较晚或者网络传输较慢等原因,没能跟上最长的链。 交易校验 内容:交易的语法与数据结构、交易的大小及输入输出、交易的字节大小、交易的签名 *** 作数、脚本的格式及合规性、交易的费用、和收到的交易相匹配的交易是否能找到。对于孤儿交易,比特币网络会将它保存到交易池中的特殊区域。 Merkle 树的特点 大多数是二叉树,也可以是多叉树。叶节点的 value 是数据集合的单元数据或者单元数据 HASH。非叶子节点的 value 是根据它下面所有的叶子节点值,然后按照 Hash 算法计算而得出的。 以太坊 介绍 区块链 2.0 是可编程金融,是经济、市场和金融领域的区块链应用,核心理念是把区块链作为一个可编程的分布式信用基础设施,支撑智能合约应用,以与过去比特币区块链作为一个虚拟货币支撑平台区别开来。以太坊是图灵完备的。以太坊提供 Solidity、Serpent、LLL 等高级语言让用户编写智能合约,高级语言会编程在 EVM 中执行的 EVM 字节码。以太坊架构中包含智能合约、密码模块、校验模块、挖矿模块等部分。 账户模型 外部账户为用户账户,由私钥控制。合约账户包含了余额和与私钥相关联的代码,并在响应交易事务或消息时触发和执行代码。此外,合约账户可维持自身参数状态,并可以调用其他合约。外部账户可以调用合约账户,需要双方地址及数据。 世界状态 以太坊中的世界状态定义为以太坊区块链中的全局状态,表示为以太坊地址和账户状态之间的映射。账户状态由 4 个字段组成:nonce、balance、storageroot、codehash。nonce:当每次从地址发送交易时,该值递增。在合约账户中,该值代表账户创建的合约数量。balance:账户余额。storageroot:代表 MPT 的根节点,并对账户的存储内容进行编码。codehash:作为一个不可变字段,包含了与账户关联的智能合约代码的哈希值。 数据结构 以太坊通过 MPT(Merkle Patricia tree)实现对交易和状态的校验和查询。状态树:用于账户地址和账户状态的映射。交易树:由区块内的交易列表组成。收据树:每个交易执行完会有一个收据,记录这个交易的相关信息,与交易树上的节点一一对应。 货币 作为对矿工的激励,以太坊提供了称为 Ether 的本地货币。在 DAO 被入侵之后,为了缓解该问题产生的负面影响,此处产生了一个硬分叉(分支)。因此,当前存在两种以太坊区块链。以太坊经典,其货币表示为 ETH。硬分叉版本则表示为 ETC,且处于持续增长状态,并且正在进行积极的开发。1 Ether = 10e18 Wei Gas 在以太坊区块链上执行的各项 *** 作,须支付 gas。交易付费成本 = gasUsed * gasPrice。gasUsed 表示执行过程中被交易消费的总 gas 量。gasPrice 由消费发起者指定,以激励矿工将当前交易纳入下一个区块中。如果在交易完成之前耗尽了 gas,那么由交易执行的任何 *** 作都将回滚。如果交易成功执行那么任何剩余的 gas 都将退回至交易的发起者。 交易包含的公共字段 Nonce:交易的唯一标识码,在每次由发送者发送交易时递增。gasPrice:交易时所需的 Wei 数量。gasLimit:包含了最大 gas 值,并在交易时被消费。to:交易接收者的地址值。Value:表示转移到接收者的 Wei 的总量。在合约账户中,该字段表示合约将持有的余额。 交易的有效性验证 交易必须是格式良好的 RLP 编码,且不包含任何附加的尾随字节。确保交易签名的有效性。交易 nonce 须等于发送者账户中的当前 nonce。gas 限定条件不应小于交易所消费的 gas。发送者账户中应包含足够的余额以支付执行费用。 叔父区块 在以太坊中,主链是最重的链。以太坊不认为孤块没有价值,而是会给发现孤块的矿工回报。这激励了矿工在新发现的块中去引用叔块,从而增强主链安全性,使主链更重。叔块是被相应算法合并进主链的分叉区块。 矿工执行的功能 监听以太坊上的交易广播,进而确定所处理的交易。确定 Uncles 或 Ommers 无效区块,并将其纳入至当前区块中。利用区块挖掘获得的奖励更新账户余额。计算有效状态并结束当前区块,这将定义全部状态交易的最终结果。 超级账本 介绍 超级账本(hyperledge)是一个推进区块链数字技术和交易验证的开源项目,目标是让成员共同合作,以构建一个开源的分布式账本框架。特性:隐私和保密性、身份、可审核性、互 *** 作性、可移植性。超级账本提供了各种 API 和命令行接口,以支持与账本的交互。对应的 API 包括身份、交易、链式码、账本、网络、存储和事件的接口。链式码包括公共型、机密型和访问控制型。用户调用链式码中的函数,导致状态变更,进而更新账本。 架构 Hyperledge 参考体系架构包括两个主要组件:Hyperledge 服务和 Hyperledge API、SDK 和 CLI。Hyperledge 服务包含了身份验证服务、策略服务、区块链服务和智能合约等。Hyperledge API、SDKs 和 CLIs 通过适当的应用程序编程接口、软件开发工具包或命令行接口提供了一个面向区块链服务的接口。Menbership Services:这项服务用来管理节点身份、隐私、confidentiality 和 auditability。依靠 Public Key Infrastructure(PKI)、去中心和一致性,将一个非许可的区块链网络变成一个许可区块链网络。Blockchain Services:使用建立在 HTTP/2 上的 P2P 协议来管理分布式账本。提供最有效的哈希算法来维护 world state 的副本。Chaincode Services:会提供一种安全且轻量级的沙盒运行模式,来在 VP 节点上执行 chainnode 逻辑。Events:在 blockchain 网络里,VP 节点和 chainnode 会发送 events 来触发一些监听动作。 Fabric 介绍 Fabric 是超级账本旗下包含的项目,它为区块链解决方案的开发提供支持。它基于插接式架构,必要时,可以将各种组件接入至系统中。 成员服务 功能:用户身份验证、用户注册、根据具体角色,为用户分配适当的权限。构成组件:注册授权、注册证书授权、交易证书授权、TLS 证书授权。 共识算法 批处理 PBFT 协议、SIEVE 算法、NOOPS。 消息类型 Discovery:以发现网络上的其他对等节点。交易:按照使用方式,可以分为部署交易和调用交易;按照公开性,可以分为公共交易、保密交易和保密链式码交易。同步:由对等点调用,使区块链更新状态,并与其他节点同步。共识:用于共识管理和载荷广播中,进而验证对等点。 channel 一个 peer 节点要想与另一个 peer 节点发送交易,最基本的前提就是两个节点必须同时处于同一个 channel 中。block 账本与 channel 也是一对一的关系,即一个 channel 一个账本。 节点 背书节点(endorser):校验 proposal 签名、模拟执行交易结果(会生成读写集)并签名。提交节点(Commiter):校验区块中的交易。排序节点(Orderers):构造新区块、对新区块达成共识、对交易进行排序。 交易处理模型 validate-order-execute 模型。 交易过程 App 获取身份z书。App 向区块链网络发起交易提案(Proposal)。背书节点(Endorser)验证签名提案,同时根据背书策略模拟智能合约,并将结果及其各自的 CA 证书签名发还给应用程序客户端。应用程序客户端收到背书节点返回的信息后,判断提案结果,如果没有足够的背书,则中止处理;否则,将数据打包到一起,组成一个交易并签名,发送给 Orderers。Orderers 对接收到的交易进行共识排序,将一批交易打包到一起,生成新的区块,发送给提交节点(Commiter)。提交节点收到区块后,对区块中的每笔交易进行校验,完成后将区块追加到本地的区块链,并修改世界状态。 Sawtooth lake 介绍 Sawtooth lake 是一种分布式账本技术,它既可以在授权许可模式下运行,也可以在非许可模式下运行。它引入了一种新的共识算法,即消逝时间量证明(PoET),并提出了交易族的概念。 特点 将账本从交易中分离出来。在多个业务领域中灵活地使用交易族。可插接的共识机制。 PoET PoET 使用 Intel SGX 架构提供的一种可信的执行环境,来确保领导者选举过程的安全性和随机性,而不需要在大多数“证明”算法中高昂能源花费和专门硬件投资。每个验证节点都从 enclave(可信函数)请求等待时间。对于特定交易区块,等待时间最短的验证节点被选为 leader。一个函数(如“CreateTimer”)为交易区块创建一个计时器,该计时器保证由 enclave 创建。另一个函数(如“CheckTimer”)验证计时器是由 enclave 创建。如果计时器已经过期,该函数将创建一个证明,该证明可用于证实验证节点的确等待了分配的时间后才声明领导者角色。 交易族 交易族是通过将逻辑层分解成规则集和一个特定域的合成层来创建的。业务逻辑于交易族中构成,提供了一种更安全、更强大的方式来构建智能合约。同时,交易族还包含了特定领域的规则,以及支持为该域创建交易的另一个层。 智能合约 定义 按照预先任意制定的规则来自动转移数字资产的系统。存储在区块链上的代码,用以实现执行特定的功能。 以太坊虚拟机 高度脚本化的设计语言使得智能合约的开发更加简单。简单式堆栈架构,可应用于 256 位的 Keccak 散列算法和椭圆曲线计算。图灵完备,支持任何种类的计算,代码执行受参数 Gas 的严格制约。和以太坊区块链一样同时存储于各个节点计算机上。可处理异常执行,包括堆栈溢出和无效指令等。 使用步骤 创建:使用高级合约语言编译智能合约,将编译好的合约代码转换成以太坊虚拟机位码,将编译好的合约代码部署到网络上,合约发起用户使用自己的外部所有账户对将要部署的合约进行签名,最后由矿工验证交易。调用:使用 web3.js 库所提供的 JavaScript API 接口来调用合约。其中以太坊具体消耗值取决于所调用的合约功能。监听:使用 web3.js 库所提供的 JavaScript API 接口来监听合约。销毁:使用 web3.js 库所提供的 JavaScript API 接口来销毁合约。 编写智能合约 编写合约,需要输入合约版本、合约名称、合约内容。 编译智能合约 代码以以太坊特有的二进制的形式存储在区块链上,并由以太坊虚拟机解释,因此被称为以太坊虚拟机位码。选择合适的编译版本,点击编译按钮,若编译成功,就会生成对应的 ABI 以及字节码。ABI 用于调用智能合约,它用一个数组表示,其中包含数个用 JSON 格式表示的 Function 或 Event。 部署智能合约 部署合约就是将编译好的合约字节码通过外部账户发送交易的形式部署到以太坊区块链上。挖矿节点生成智能合约地址,合约地址对应合约的代码会保存在区块链数据库。智能合约地址的生成是由创建者的账号和发送的交易数作为随机数输入,通过 Kecca-256 加密算法重新创建一个地址作为账号。 调用智能合约 只读调用:只在本地运行,且运行完毕之后状态更改不会进行全网共识,大多数查询 *** 作都可以通过直接向全节点发送 API 请求的方式进行调用。可写调用:由于需要对数据库和账户的状态进行更改,需要通过发送调用合约交易的方式得到全网的共识,否则这个更改即使在某一个全节点上调用成功,也无法影响全节点的存储,更无法影响链上所有节点的存储。 调用者只需要有合约地址(用来表明我们是要调用哪一个合约)和 ABI 文件(为了指明具体调用合约中的哪一个方法)就可以调用合约的代码。 以太坊底层通过 EVM 模块支持合约的执行与调用,调用时根据合约地址从区块链获取代码,生成环境后载入到 EVM 中运行。 事件 Event 帮助用户客户端(Web3.js)读取智能合约的返回值。智能合约异步通知用户客户端(Web3.js)。通过 filter 过滤出历史交易数据。用于智能合约的存储。 事件主题 Topic 主题是用来把事件索引化的数值,一个事件最多可以有四个主题。第一个主题是事件签名,匿名事件除外。剩下三个主题是索引化的参数数值,被索引的的参数将不会保存它们自己,可以搜索它们的值,但不能检索值本身。所有未被索引的参数将被作为日志的一部分被保存起来。 Bloom 过滤器 Bloom 是一个 256 个字节数组,一共 2048 位,它只提供一个快速查找数据是否存在的工具,本身不包含任何数据,它会根据合约地址和 Topic 在过滤器中按位与 *** 作,看是否在这个区块中。每个收据里都有一个Bloom Filter,记录了此交易的类型、地址等相关信息。每个区块头都有一个Bloom Filter,是收据 Bloom Filter 的并集。 智能合约的优缺点 优点:高效的实时更新,较低的人为干预,去中心化权威,较低的运行成本,准确执行。缺点:漏洞无法修复,隐私保护风险,缺乏有效监管,无法完全实施。 应用场景 数字身份。记录。证券。贸易金融。供应链。汽车保险。 P2P P2P 特点 动态:动态地提供信息和服务。双向:切实实现信息和服务的交换与共享。直接:无中介、等级和格式限制,直接交换信息和服务。平等:生产者与消费者地位平等,角色合二为一。及时:无服务器参与空间分配,可提供实时、可升级的信息。有效:可充分利用个人计算机的硬件设备、传输信息和服务时目标确定。 P2P 优势 非中心化:网络中的资源和服务分散在所有节点上,信息传输和服务的实现都直接在节点之间进行,可以无需中间环节和服务器的介入,避免了可能的瓶颈。可扩展性:在 P2P 网络中,节点在获取其他节点资源的同时也为其他节点服务。随着用户的加入,不仅服务的需求增加了,系统整体的资源和服务能力也在同步扩充,始终能较便捷地满足用户的需求。健壮性:P2P 网络通常都是以自组织的方式建立起来的,并允许节点自由地加入和离开。由于服务是分散在各个节点之间进行的,当部分节点或网络遭到破坏时,对其他部分的影响很小。高性价比:采用 P2P 架构可以有效地利用互联网中散步的大量普通节点,将计算任务或存储资料分布到所有节点上,利用其中空置的计算能力或存储空间达到高性能计算和海量存储的目的。隐私保护:在 P2P 中,所有参与者可以提供中继转发的功能,因此大大提高了匿名通信的灵活性和可靠性,能够为用户提供更好的隐私保护。负载均衡:在 P2P 网络环境下由于每个节点既是服务器又是客户端,减少了对传统C/S结构中服务器计算能力、存储能力的要求,同时由于资源分布在多个节点,因此能更好地实现整个网络的负载均衡。 P2P 技术的应用 文件内容共享和下载。计算能力和存储共享。基于 P2P 技术的协同与服务共享平台。即时通讯工具。P2P 通讯与信息共享。基于 P2P 技术的网络电视。 拓扑结构 拓扑结构是指分布式系统中各个计算单元之间的物理或逻辑的互联关系,结点之间的拓扑结构一直是确定系统类型的重要依据。根据结构关系可以将 P2P 系统细分为四种拓扑形式:中心化拓扑、分布式非结构化拓扑、全分布式结构化拓扑、半分布式拓扑。 中心化拓扑 存在一个中心节点保存了其他所有节点的索引信息,索引信息一般包括IP地址、端口、节点资源等。优点:维护简单、资源发现效率高。缺点:中央索引服务器的瘫痪容易导致整个网络的崩溃,因此可靠性和安全性较低;随着网络规模的扩大,对中央索引服务器进行维护和更新的费用将急剧增加,所需成本较高;中央索引服务器的存在常引起版权问题上的纠纷,服务提供商容易被追究法律责任。 全分布式非结构化拓扑 移除了中心节点,在 P2P 节点之间建立随机网络,就是在一个新加入节点和 P2P 网络中的某个节点间随机建立连接通道,从而形成一个随机拓扑结构。新节点加入该网络的实现方法也有很多种,最简单的就是随机选择一个已经存在的节点并建立邻居关系。像比特币的话,则是使用 DNS 的方式来查询其他节点。新节点与邻居节点建立连接后,还需要进行全网广播,让整个网络知道该节点的存在。这种广播方法也称为泛洪机制。Gossip协议:比特币网络核心技术,在一个有界网络中,每个节点都随机地与其他节点通信,经过一番杂乱无章的通信,最终所有节点的状态都会达成一致。Gossip 优点:扩展性、容错、去中心化、一致性收敛、简单。Gossip 缺点:消息的延迟、消息冗余。 全分布式结构化拓扑 将所有节点按照某种结构进行有序组织,比如形成一个环状网络或树状网络。而结构化网络的具体实现上,普遍都是基于 DHT(Distributed Hash Table,分布式哈希表)算法思想。分布式哈希表是分布式计算系统中的一类,用来将一个键(key)的集合分散到所有在分布式系统中的节点。一致性哈希:分布式哈希是将哈希表分散在不同的节点上,并且能够提供相应的方法来查找,但当节点宕机或者需要重新哈希时,一致性哈希可以避免对大量的数据重新哈希。Chord:SHA-1 会产生一个 2160 的空间,每项为一个 160 bit 的大整数。我们可以认为这些整数首尾相连形成一个环,称之为 Chord 环。优点:容错性好、支持复杂的查询,节点频繁加入和退出系统影响小。缺点:查询结果可能不全,查询速度慢,系统对网络带宽的消耗大、扩展性查。Pastry:比 Chord 算法复杂,因为它引入了最长前缀匹配算法,但它仍然是利用 Hash 函数对资源和计算机进行计算,得到编号空间,同时 Pastry 算法仍然是将资源索引放置到离编号最近的节点。与 Chord 算法不同的是,Pastry 算法没有采用二分差索引指针,而是采用了一种层次化的结构。Pastry 是将节点编号空间进行了分层、分类,这种分层、分类依赖于编号的数值表示。Kademlia:使用的拓扑结构是二叉树。它用二进制的形式来表示 key,进行“最短唯一前缀”来处理,二进制的第 n 位表示二叉树的第 n 层,这样一个子树的每个节点连起来就是完整的 id 二进制表示。“1”代表进入左子树,“0”代表进入右子树(反过来也行)。按上面的步骤处理后得到到最后的叶子节点,就是该 key 对应的节点。 半分布式拓扑 吸取了中心化结构和全分布式非结构化拓扑的优点,选择性能较高(处理、存储、带宽等方面性能)的结点作为超级结点。优点:性能、可扩展性较好,较容易管理。缺点:对超级点依赖性大,易于受到攻击,容错性也易受到影响。 分布式系统与去中心化 分布式系统一致性 区块链的核心是一个去中心化的分布式系统。分布式系统中的节点可以相互交换信息。节点分为可信节点、缺陷节点、恶意节点。一个有恶意行为的节点被称为拜占庭节点,网路上某个出现任何意外行为的节点都可归类于拜占庭节点。分布式系统的主要挑战:节点与容错的协调,即一个节点的失效不影响整个系统的运行,也就是各个节点的状态如何同步。 分布式系统的主要特点 独立的处理器、站点、过程。消息传递。无共享存储。无共享时钟。相互独立的失败模型。 强一致性 顺序一致性:是一种比较强的约束,保证所有进程看到的全局执行顺序(total order)一致,并且每个进程看自身的执行(local order)跟实际发生顺序一致。线性一致性:在顺序一致性前提下加强了进程间的 *** 作排序,形成唯一的全局顺序(系统等价于是顺序执行,所有进程看到的所有 *** 作的序列顺序都一致,并且跟实际发生顺序一致),是很强的原子性保证。但是比较难实现,目前基本上要么依赖于全局的时钟或锁,要么通过一些复杂算法实现,性能往往不高。 弱一致性 最终一致性(Eventual Consistency):总会存在一个时刻(而不是立刻),系统达到一致的状态。
比较容易实现,性能较高。 Paxos 角色 proposer:提出一个提案,等待大家批准为结案。往往是客户端担任该角色。acceptor:负责对提案进行投票。往往是服务端担任该角色。learner:被告知结案结果,并与之统一,不参与投票过程。可能为客户端或服务端。 约束要求 safety:证决议结果是对的,无歧义的,不会出现错误情况。决议在被 proposers 提出的 proposal 才能被最终批准。在一次执行实例中,只批准一个最终决议,意味着多数接受的结果能成为决议。liveness:保证决议过程能在有限时间内完成。决议总会产生,并且 learners 能获得被批准的决议。 两阶段提交 准备阶段:提案者发送自己计划提交的提案的编号(Proposal ID)到多个接受者,试探是否可以锁定多数接受者的支持。提交阶段。提案者如果收到大多数的回复(表示大部分人听到它的请求),则可准备发出带有刚才提案号的接受消息。 Raft 是 Paxos 算法的一种简化实现。三种角色:leader、candiate 和 follower。Leader 选举:每个 candidate 随机经过一定时间都会提出选举方案,最近阶段中得票最多者被选为 leader。同步 log:leader 会找到系统中 log 最新的记录,并强制所有的 follower 来刷新到这个记录。 拜占庭将军问题 在将军总数大于3m ,背叛者为m 或者更少时,忠诚的将军可以达成命令上的一致。条件一:所有忠诚的副官遵守相同的命令。条件二:如果发出命令的将军是忠诚的,那么所有忠诚的副官遵守司令的命令。 CAP 定理 任意分布式系统不能同时拥有一致性,可用性,分区容错性。一致性(Consistency):任意节点拥有最新数据副本。可用性(Availability):系统在使用期间可以被访问,接收请求并在必要时做出响应。分区容错性(Partition Tolerance):网络可能发生分区,节点之间的通信不可保障。CP without A:一旦发生网络故障或者消息丢失等情况,就要牺牲用户的体验,等待所有数据全部一致了之后再让用户访问系统。AP wihtout C:要高可用并允许分区,则需放弃一致性。一旦网络问题发生,节点之间可能会失去联系。为了保证高可用,需要在用户访问时可以马上得到返回,则每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。 区块链共识算法 共识机制 共识机制在区块链中扮演着核心的地位,共识机制决定了谁有记账的权利,以及记账权利的选择过程和理由 PBFT PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错算法),复杂度为 n2。 角色 client。primary。backups。 基本流程 客户端发送请求给主节点。主节点广播请求给其它节点,节点执行pbft算法的三阶段共识流程。节点处理完三阶段流程后,返回消息给客户端。客户端收到来自 f+1 个节点的相同消息后,代表共识已经正确完成。 核心三阶段流程 预准备阶段:主节点对签名进行校验,并分配一个序列号n给收到的请求然后向所有备份节点群发预准备消息。节点收到预准备消息后,会选择接受或不接受。准备阶段:如果备份节点接受了预准备消息,则进入准备阶段。在准备阶段的同时,该节点向所有副本节点发送准备消息,并且将预准备消息和准备消息写入自己的消息日志。节点(包括主节点)收到准备消息后,进行验证。如果验证通过则把这个准备消息写入消息日志中。准备阶段完成需要 2f 个从不同副本节点收到的与预准备消息一致的准备消息。提交阶段:当节点收到超过 2f+1(包括自身)个不同节点发送过来的提交请求之后,进入 committed-local 状态,然后将执行结果发送给客户端。客户端如果收到 f+1 的消息,说明客户端发起的请求已经达到全网共识。 视图 预准备阶段和准备阶段保证了客户端请求的序列号在同一视图达成一致。准备阶段和提交阶段保证了客户端请求的序列号在不同视图达成一致。 检查点 通常在执行完多条请求后生成一次证明,即检查点。将具有证明的检查点称作稳定检查点。同一节点可以有多个稳定检查点。 PBFT、Paxos、Raft、OM(m)、SM(m) 对比 PBFT 和 Paxos 算法从节点会拒绝主节点的请求,而 Raft 算法不会拒绝主节点的请求。PBFT、OM(m)、SM(m) 算法能容错故障节点和作恶节点,最大容错节点数为 (n-1)/3,而 Paxos 和 Raft 只能容错故障节点,并且最大容错点数为 (n-1)/2。PBFT 算法三阶段判定,OM(m) 通过递归转发确认要接受的消息,SM(m) 通过 m+1 轮复制确认要接受的消息。 POW POW工作量证明就是大家所熟悉的挖矿,通过与或运算,计算出一个满足规则的随机数,即获得本次记账权,发出本轮需要记录的数据,全网其它节点验证后一起存储。三要素:工作量证明函数、Merkle 树、难度值。 工作量证明函数 免碰撞:即不会出现输入 x≠y,但是 H(x)=H(y)。隐匿性:对于一个给定的输出结果H(x),想要逆推出输入x,在计算上是不可能的。。 Merkle 树 Merkle root 哈希值存在每一个区块的头部,通过这个 root 值连接着区块体,区块体内包含着大量的交易,每个交易就相当于前面提到的数据块,交易本身有都有自己的哈希值来唯一标识自己。SPV:全节点存储完整的区块链数据,轻节点只存储区块头。虽然用户不能自己验证交易,但如果能够从区块链的某处找到符合的交易,就可以知道这笔交易已被网络确认,也可以确认该笔交易得到网络多少笔确认。Bloom 过滤器,用以解决 SPV 节点的隐私风险问题。允许用户描述特定的关键词组合但不必精确表述、基于概率的过滤方法。 难度值 比特币的难度和出块速度将成反比例适当调整出块速度。 POW 工作量证明流程 生成 Merkle 根哈希。组装区块头。计算出工作量证明的输出。 POW 优缺点 优点:完全去中心化,节点自由进出。缺点:目前 bitcoin 已经吸引全球大部分的算力,其它再用 Pow 共识机制的区块链应用很难获得相同的算力来保障自身的安全;挖矿造成大量的资源浪费;共识达成的周期较长,不适合商业应用。 POS Pos 权益证明:Pow 的一种升级共识机制,根据每个节点所占代币的比例和时间,等比例的降低挖矿难度,从而加快找随机数的速度。优点:在一定程度上缩短了共识达成的时间。缺点:还是需要挖矿,本质上没有解决商业应用的痛点。 DPoS DPos 股份授权证明机制,类似于董事会投票,持币者投出一定数量的节点,代理他们进行验证和记账。DPoS 优化方案在于:通过不同的策略,不定时的选中一小群节点,这一小群节点做新区块的创建,验证,签名和相互监督,这样就大幅度的减少了区块创建和确认所需要消耗的时间和算力成本。 优点 能耗更低:DPoS 机制将节点数量进一步减少,在保证网络安全的前提下,整个网络的能耗进一步降低,网络运行成本最低;更快的确认速度:每个区块的时间为 10 秒,一笔交易(在得到 6 ~10 个确认后)大概 1 分钟,一个完整的区块的周期大概仅仅需要数分钟。而 PoW 机制下产生一个区块需要 10 分钟,一笔交易完成需要数个小时。 缺点 投票的积极性并不高:绝大多数持股人从未参与投票。这是因为投票需要时间、精力以及技能,而这恰恰是大多数投资者所缺乏的。垄断性高:DPoS 延续了 PoS 的弊端,只有持币者才可以获得区块链奖励,其实这就带来了一种制度性门槛,最终导致 DPoS 币的流动性大大减少,穷者越穷,富者越富。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/1498341.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-25
下一篇 2022-06-25

发表评论

登录后才能评论

评论列表(0条)

保存