数据科学每日总结--Day17--区块链
区块链
活跃性(Liveness)
定义:指的是区块链网络中节点能够持续、有效地参与共识过程,确保新的区块能够被不断添加到区块链上。这反映了区块链网络的活跃度和生命力。
特点:
即使只有单个诚实的矿工,只要其哈希算力虽小但持续存在,也有可能通过不断尝试挖掘新区块来延长最长的区块链。这体现了区块链网络中节点(矿工)的活跃性和参与度。
Liveness强调了区块链网络的持续性和可扩展性,确保网络能够不断向前发展。
安全性(Safety)
定义:指的是区块链网络中已确认的交易和区块不会被篡改或撤销。这保证了区块链的不可篡改性和数据的完整性
特点:
当诚实节点的哈希算力超过50%时,区块链网络的安全性可以得到保证。这是因为在工作量证明(PoW)等共识机制下,攻击者需要拥有超过50%的哈希算力才能对区块链进行双花攻击或51%攻击。
然而,这种安全性保证并非绝对,而是基于概率的。即使诚实节点的哈希算力超过50%,也存在被攻击者利用短暂算力优势进行攻击的可能性。因此,Safety是一种概率性的保证。
此外,网络安全性的保证还依赖于网络的同步性。如果网络不同步,攻击者可能利用网络延迟或分区攻击来破坏区块链的完整性。因此,网络必须保持同步以确保安全性。
Liveness和Safety是区块链技术中的两个核心概念,它们共同构成了区块链网络的基本安全框架。Liveness强调了网络的活跃性和参与度,而Safety则保证了已确认的交易和区块的不可篡改性。虽然Safety是一种概率性的保证,并且依赖于网络的同步性,但这两个概念共同确保了区块链网络的稳定性和安全性
Streamlet
定义:是一种新型的区块链协议,它融合了传统BFT协议和区块链的设计精髓。Streamlet协议遵循BFT协议的容错规则,即在节点数目为n的网络中,可以容忍最多f个拜占庭节点,需要满足n>3f。
特点:
Streamlet协议依赖于半异步(partially synchronous)网络假设,即网络在大部分情况下都是好的,消息可以在一个能够预测的延迟内传播。但在某些情况下,网络可能会经历一段波动期(Global Stabilization Time, GST),并最终会恢复。在GST期间,网络延迟无法预测。
Streamlet协议保证了在异步网络下的安全性(safety),即不存在两个同样高度的不同区块被确认。当网络回归同步时,协议可以进一步保证活性(liveness),即客户端发送的交易最终会在区块链上被确认。
Streamlet协议的运行被划分为一个个同步的epoch,每个epoch都由哈希算法随机分配一个leader。leader在属于自己的epoch中发布(propose)一个区块给其他节点投票(vote)。已证区块并不一定最终会被确认,但在一个已证链中,当存在三个连续的已证区块时,其中前两个区块以及同一链上之前的所有区块都被确认。
Hotstuff
定义:HotStuff是一种基于BFT的共识协议,它提出了一个三阶段投票的过程来实现安全性(safety)、活性(liveness)和响应性。HotStuff协议是基于View的共识协议,每个View表示一个共识单元,由一个确定的Leader来主导共识协议。
消息类型:
Prepare消息用于启动共识过程
Precommit消息用于确认Prepare消息的结果
Commit消息则用于最终确认区块
BFT协议设置
Streamlet和HotStuff是与BFT紧密相关的两种协议,而设置通常涉及到一个固定数量的参与者,这些参与者的身份对于所有节点来说都是已知的,并且它们之间通过签名进行身份验证。这种设置通常被称为“许可制”(permissioned),意味着只有经过授权的节点才能参与共识过程。
固定数量的参与者:在BFT协议中,参与者的数量是固定的。这意味着在协议开始之前,就已经确定了哪些节点将参与共识过程。这种设置有助于协议的设计和分析,因为可以假设参与者的数量是已知的,并且不会发生变化
身份已知的节点:所有节点的身份在BFT协议中都是已知的。这通常通过数字签名或公钥基础设施(PKI)来实现。每个节点都有一个唯一的身份标识,并且可以通过签名来验证其身份。这种设置有助于防止恶意节点的加入,因为未经授权的节点无法伪造有效的签名
许可制:由于BFT协议中的节点身份已知且数量固定,因此这种设置通常被称为“许可制”。与“无许可制”(permissionless)的区块链协议(如比特币和以太坊)相比,许可制区块链的节点加入需要经过授权和验证。这有助于确保网络的安全性和可靠性,因为只有经过验证的节点才能参与共识过程
BFT协议一轮共识步骤
提议新块:
在每一轮的开始,一个被选中的节点(通常称为Leader或提议者)会提议一个新的区块。这个区块可能包含了一系列的交易或其他需要被共识的数据
提议者会将新块的信息广播给网络中的所有其他节点
投票:
收到提议的新块后,每个节点都会对这个新块进行验证。验证过程可能包括检查区块的合法性、交易的签名等。
如果节点验证通过了这个新块,它会向网络中的其他节点广播一个投票消息,表明它支持这个新块。
这个过程会持续一段时间,允许网络中的所有节点都有机会对新块进行验证和投票
公证
当一个新块获得了足够的投票(即达到了某个预定的阈值,这个阈值通常是根据网络中节点的总数和拜占庭容错能力来确定的),它就被认为是“公证”的或“确认”的。
一旦一个新块被公证,它就被添加到区块链上,成为不可篡改的一部分
