区块链入门-完整版V1.0-Part6

PBFT算法过程

算法过程:

  • 主节点(primary)和备节点(backups),系统整体有一个视图(view)的概念。
  • 首先所有的副本(replica)中选择一个主节点(primary),主节点负责把所有客户端(client)的请求进行排序,然后按排序发送给备节点。在主节点出现故障,如:不分配序号、分配相同的序号等情况,那么备节点主动检查序号的合法性,通过一个timeout的机制检测主节点是否已经失效,出现这种情况,备节点触发view change协议来选择一个新的主节点。
  • 定义所有副本(replice)集为|R|,那么|R|=3f+1.f就是一直在说的最大容忍失效节点个数。
  • 通过公式:p = v mod |R|选择出来一个replica,为主节点。v是view全局视图的编号。再每一次view change触发的时候,replica依次转换角色。
  • 客户端(client)发送请求给主节点(primary),发送一个【REQUEST,o,t,c】,o就来表示具体的操作,t为时间戳(timestamp),给请求加一个时间戳,也对后来的请求有一个约束验证。
  • 总体上客户端和主节点交互,即验证请求后主节点写到自己的log中,然后回复客户端【REPLY,v,t,c,i,r】v是当前的view的序号,t还是时间戳,i是replica节点的编号(主节点副本编号)、r是执行结果。整个算法中,客户端接收到f+1个replicas回复,且t和r一致,那么就认为是合法的。这个过程中replica和客户端(client)共享一份秘钥。 
    具体三阶段:(pre-prepare, prepare, commit)
  • 三阶段说明:pre-prepare和prepare阶段在系统同一个view里发送的请求给确定序列,各个replica节点都认可这个序列。下图说明: 
    屏幕快照 2018-07-04 下午5.22.09.png-286.3kB
  • 一个client和4个replica节点。replica-0是主节点,其余为备节点。系统中存在3种情况:1.所有节点都是正常节点。2.主节点故障,剩下的三个节点正常。3.主节点是正常节点,三个备节点中有一个是故障节点。上述三种情况下都可以保证整个系统正常。 
    注:在prepare和commit阶段中,view change新的view后,之前的序列保持不变。pre-prepare和prepare阶段中view change新的view后,在新的view之前的序列不作数。(后续说明为什么prepare两者都有)
  • pre-prepare阶段:主节点收到客户端请求,分配编号,主节点在系统中广播一条PRE-PREPARE到每一个备节点。 
    PRE-PREPARE包括信息请求编号n、view编号v、信息的消息摘要d(digest)。这条消息到每一个备节点。 
    备节点验证,验证主节点分配的编号n,如果发现备节点之前已经接收到了一条在同一view下并且编号也是n,但是digest不同的PRE-PREPARE消息,那么就拒绝。验证通过过就备节点就进入prepare阶段。
  • prepare阶段:备节点在确认主节点信息后,那么进入prepare阶段,同时将PREPARE信息广播给主节点和其他两个备节点(参考上图)。每个备节点会互相收到其他备节点的PREPARE信息,接收后对PREPARE信息验证,先整理其他两个备节点的PREPARE信息和自身的PREPARE信息,如果备节点和其他两个备节点都同意主节点分配的n编号,view编号v、请求消息m。那么就说明这个节点的状态是prepare,这时候生成一个prepared certificate。 
    注: 排序工作在这个时候理论上完成,但是存在漏洞,比如1节点收集完成验证后,到了prepare状态,但是2.3节点并未验证完成,这个时候view change又刚好触发,进入到了一个新的view编号中,那么1的编号可以纳入序列。2和3的编号n则不作数,那么这时候发现单单有1的编号,无法全网认可,所以在新的view,之前1的编号也作废,重新发起提议。但是节点1会把pre-prepare和prepare阶段中的收到和发送的信息记录到log中。
  • commit阶段:prepare阶段后节点确定分配编号n后,那么在系统中广播一条commit信息,告诉所有节点获得prepared certificate,同时节点也会收到相关其他节点的commit信息,如果节点收到了2f+1条commit消息,并且验证不同节点发来的commit消息中的编号n和view的v值是一致的,那么该节点就拥有一个committed certificate,在这个节点上状态就被commit了。那么观察一个节点的状态commit,也说明了整个系统中处于了prepared状态,其余节点等待到达commit状态。
步骤 具体步骤 说明
1.客户端发送请求 客户端发送【REQUEST,o,t,c】请求 o是操作、t是时间戳时间戳保证请求只执行一次
2.主节点收到客户请求 主节点收到客户端的请求  
3.预准备阶段 主节点分配一个序列号n给收到的请求,并发送所有备节点预准备消息。【PRE-PREPARE,v,n,d>,m】 v是视图编号,m是客户端发送的请求消息,d是请求消息m的摘要
4.备份节点接受预准备消息 请求和预准备消息的签名正确,并且d与m的摘要一致、当前视图编号是v。备份节点从未在视图v中接受过序号为n但是摘要d不同的消息m。预准备消息的序号n必须在水线上下限h和H之间 水线存在的意义在于防止一个失效节点使用一个很大的序号消耗序号空间。
5.准备阶段开始 备份节点进入准备阶段,然后向其他副本节点发送准备消息【PREPARE,v,n,d,i】 将预准备和准备消息写入消息日志
6.准备阶段 所有节点收到准备消息后,验证签名,视图编号和消息序号。 验证完成写入日志
7.准备阶段完成 副本节点将【m,v,n,i】写入消息日志 m是请求内容,预准备消息m在视图v中的编号n,以及2f个从不同副本节点收到的与预准备消息一致的准备消息
8.确认阶段开始 副本节点将【COMMIT,v,n,D(m),i】向其他节点广播。接受确认消息条件:签名正确、消息的视图编号与节点的当前视图编号一致、消息的序号n满足水线条件 确认消息写入消息日志
8.确认阶段 任意f+1个正常副本节点集合中的所有副本其prepared(m,v,n,i)为真,同时本地确认,prepared(m,v,n,i)为真,并且已经接受了2f+1个确认(包括自身在内)与预准备消息一致。确认与预准备消息一致的条件是具有相同的视图编号、消息序号和消息摘要 确认消息写入消息日志

垃圾回收机制

  • 分布式系统较中心化系统复杂,更多的不确定性。整个过程中,节点执行完操作后,需要有一个清理,清理之前各个阶段的相关信息,但不是盲目清理,比如在prepared阶段,生成的prepared certificat就有可能被再次使用。故清理机制也是很重要的一个部分。
  • 清理机制,在执行完成每一条请求后,节点再次发送一次广播,在全网对清理信息达成一致。比如在执行多次请求后,约定在规定数量次数请求后,全网发起一次清理,如:连续执行K条操作,全网反馈K条操作已完成,那么删除K条记录。接下来在执行K次,重读上述操作。这个X的点成为checkpoint,重读的这个操作形成一个stable checkpoint(记录在第K条的编号)。
  • 上述的都是理想化的状态,实际运行过程中会有响应不及时,节点之间步伐不一致等问题,那么就加上一个上文提到过的高低水位。对某个节点来说,它的低水位h等于它上一个stable checkpoint的编号,高水位H=h+L,L是我们指定的数值,它一般是checkpoint周期K的常数倍(这个常数是比较小的,比如2倍)
  • 大致介绍了PBFT算法的概念和三阶段过程。参考上面两篇文章,大致整合了下,如果有理解不对的地方请及时指出。

数字货币及扩展

区块链-数字货币:

之前断断续续写了一些区块链相关的东西,也认识了一些区块链行业的从业者,有大牛、有入门的小伙伴。最近事情比较多,更新的速度明显不行了,但也尽量坚持,有空的时候就写点东西,自己想到什么就写什么,比较随意。

网上也常能看到一些关于怎么和不懂行的人简单快速解释区块链,这里也不免俗从个人的理解来解释下区块链,从比特币、数字货币到区块链的技术、技术价值。

比特币:

相信很多人最先肯定是先听到比特币,再了解到区块链,数字货币很早之前就一直有人在研究尝试。

1982年,David Chaum最早提出了不可追踪的密码学网络支付系统。

1990年,Chaum将他的想法扩展为最初的密码学匿名现金系统,ecash。

1998年,Wei Dai开发分布式的电子现金系统,他将其命名为“b-money”。

1998年,ick Szabo发明了“Bit gold”。

2009年,中本聪,发表比特币论文,并建立比特币系统。

货币:

货币的概念:货币 CCY(Currency)本质上是一种所有者与市场关于交换权的契约,根本上是所有者相互之间的约定。吾以吾之所有予市场,换吾之所需,货币就是这一过程的约定,它反映的是个体与社会的经济协作关系。货币的契约本质决定货币可以有不同的表现形式,如一般等价物,贵金属货币,纸币,电子货币等。它可以用作交易媒介、储藏价值、延期支付标准和记帐单位。实物货币是专门在物资与服务交换中充当等价物的特殊商品,是人们的商品价值观的物质附属物和符号附属物。既包括流通货币,尤其是合法的通货,也包括各种储蓄存款,在现代经济领域,货币的领域只有很小的部分以实体通货方式显示,即实际应用的纸币或硬币,大部分交易都使用支票或电子货币。货币区是指流通并使用某一种单一的货币的国家或地区。不同的货币区之间在互相兑换货币时,需要引入汇率的概念。在现代经济中,货币起着根本性和基础性的作用。在宏观经济学中,货币不仅是指现金,而且是现金加上一部分有形和无形的资产。

货币的定义:

人们普遍接受的用于支付商品劳务和清偿债务的物品;

充当交换媒介,价值、贮藏、价格标准和延期支付标准的物品;

超额供给或需求会引起对其它资产超额需求或供给资产;

购买力的暂栖处。

货币存在的核心职能:价值的一个衡量尺度,流通手段或交易媒介。

电子货币:

电子货币(Electronic Money),通过电子化方式支付的货币,是指用一定金额的现金或存款从发行者处兑换并获得代表相同金额的数据或者通过银行及第三方推出的快捷支付服务,通过使用某些电子化途径将银行中的余额转移,从而能够进行交易。

电子货币和传统货币最大的区别,电子货币借助电脑(终端设备)硬件连接网络完成支付,通过电子设备网络来实现货币的存储和支付功能。数字货币和虚拟货币也应该包含在电子货币类别中。现实生活中,电子货币通常都被理解为网银账户中余额或信用额度。通过转移账户中的数字来实现支付。当然前提是国家银行系统支持的法定的货币,或者理解为国家银行系统支持的法定货币的一种电子形式。

电子货币特点:

依赖电子计算机技术,进行存储,支付,流同功能。

集多种现实货币的功能为一体。

简便,安全(相对安全),实时,可靠(中心化机构保证)。

通用。为电子商务交易支付提供了简洁可靠的平台。

一定的匿名性。

虚拟货币:

虚拟货币是指非真实的货币。

虚拟货币不用讲解太深刻的理论,简单举些例子:

魔兽世界这一类网络游戏中的游戏金币。在游戏中作为买卖游戏装备的货币。

QQ中的Q币,最简单用来买QQ秀。

互联网中的虚拟货币:比特币,以太币。

上述三类也有本质区别,游戏中的货币,用于买卖游戏中的货物,虽然可以通过法定货币去购买游戏币,但是游戏币的流通在游戏内(这里单指游戏币在游戏内的流通)。Q币类,可以购买不仅是虚拟网络中的QQ秀,还有一些专属服务,如会员。红黄绿等钻等级。比特币和以太币,现在应该是最为火爆的网络虚拟货币,大部分用于互联网金融投资,当然国外也有一部分可用于生活支付。

虚拟货币伴随互联网的发展,互联网技术改变的人们之前固有的一些生活方式,从而衍生出来虚拟货币,虚拟货币用于互联网中各种需求的支付,虚拟货币的本身是一种虚拟的存在,不通过国家法定机构发放(一般为央行),货币的发行在分布式节点的个体中。一般货币与虚拟货币的价值基础不同,前者代表效用,后者代表价值。从行为经济学的观点推导,货币作为一般等价物,它所“等”之“价”,语言上虽称为价值,但实际上是指效用。而虚拟货币代表的不是一般等“价”之“效”,而是价值本身。虚拟货币不是一般等价物,而是价值相对性的表现形式,或者说是表现符号;也可以说,虚拟货币是个性化货币。在另一种说法中,也可称为信息货币。它们的共性在于都是对不确定性价值、相对价值进行表示的符号。这样说的时候,货币的传统含义已经被突破了。原有含义的货币,只能是新的更广义货币的一个特例。货币既可以作为一般等价物的符号,也可以作为相对化价值集的符号。

数字货币:

数字货币简称为DIGICCY,是英文的“Digital Currency”(数字货币)的缩写。是电子货币形式的替代货币。

数字货币比上面说了三种都要复杂,目前应该也没有一个完整明确的说明,数字货币也因为其特殊性,对其也各有对待的态度。既然涉及到区块链,区块链必定会联系到比特币等一系列数字货币,那么就以比特币类来解释。

数字货币现在更多是一种加密数字货币,通过加密算法,共识机制来保证。之前很多研究数字货币都被称为电子现金系统,中本聪在2008年发表的比特币电子现金支付系统的论文,到2009年比特币的出现直至现在,基本出现了一个数字货币的实现模式,通过密码学、分布式计算等技术,基本解决双花问题,让电子现金系统得以运行,从而出现数字货币,并实现节点之间的支付、交易功能。

数字货币的出现并流行,从一定程度上来说实现了全球网络节点中,节点之间的简单支付交易的模式,从而实现去中心的交易模式,改变传统交易习惯,提高交易的效率。现在数字货币出现后人,区块链技术的发展为交易支付提供智能合约,代码实现交易规范,区块链技术保证交易中的信息的可靠,逐步完善整个数字货币的模式。

通过比特币让人们了解到区块链技术,数字货币只是区块链技术的一种应用模式,真正区块链技术的价值意义不简单在一个应用场景。


区块链的通俗解释:

区块链是因为比特币等数字货币的火热,让人关注到加密数字货币的底层技术,被归结为区块链技术。

区块链技术架构是一系列之前成熟技术的结合,加密算法,共识机制,分布式系统理念,P2P网络技术等。

讲的通俗一点,“区块链”本质是一条链,当然你可能不能很直观去观察这个链,这个链连接一个个区块,区块中记录相关信息,通过区块头的hash值进行连接。

和现在流行的云平台架构一样,区块链也有三个大概的分类,公链、联盟链、私有链。

那么区块链能做什么,区块链兴起是因为中本聪的比特币论文和比特币系统,比特币系统实现了加密电子货币系统的交易,通过共识机制和加密算法很好的规避了“双花问题”,实现了互联网上交易的可靠性,比特币的火爆,让人们关注到底层的技术架构,发现一种去中心化的系统架构,保证每个节点可保存一份完整数据,数据一旦写入区块形成共识后,无法篡改并可追溯。

结合目前的应用场景,参考区块链架构特性,目前为区块链设计了众多应用模拟场景。

去中心的特性:

区块链技术架构最早被关注的一个特性,去中心化和互联网最初的设计初衷吻合,在互联网中,更多的要求节点之间的平等,类似这样一种理念:每个人都说,每个人选择性听。区块链的去中心化需要二次解读,去中心化是最佳的状态,结合现在的场景,更多的选择多中心化、弱中心化的概念去建设区块链系统,更有利于应用的实现。

去中心化的好处,最简单的理解,以交易为例子,不通过第三方中介保证机构,两个节点之间互相就可以交易,简化整个交易流程,节省交易成本。稍微深入理解下,结合分布式系统的概念,去中心化对数据的多份副本保存,节点之间相对平等,实现整个系统一种活性化,系统运行不依赖于个别节点,那么整个系统中只要有正常运行的节点,那么理想化下,系统会一直永不停歇的运行下去。也更好解决了一些冗余容灾问题。

去中心化在介绍区块链技术架构中被提的最多,也是区块链技术最大的一个特点。

价值传递:

现代互联网发展迅速,数字资产应用越来越频繁,互联网已改变人们之前传统的生活习惯,试想一下离开网络,现在生活中会有多少不便。

互联网中一开始的电脑,到现在的移动终端,越来越普遍,那么在互联网上价值信任的传递将会成为新的互联网挑战,区块链技术的出现,由于数字货币的火热,实现了网络上加密数字货币的交易,那么更深入理解,数字资产的普及,在互联网上价值的传递,最重要是一个认可共识,简而言之就是信任,区块链技术能提供底层解决信任问题来提高效率的服务,或者说区块链会重新架构互联网,称作下一代信任互联网的基础。

区块链中信任的传递,需要各种应用实践,不单单是数字货币的应用场景,一直在说区块链技术不仅仅是一个加密数字货币,真正的应用价值在各个需要信任传递的场景,实现信任的保障。

不可篡改:

结合传统的中心化的系统来看,信任都来源于对中心化节点的认可,那么一旦中心化节点出现故障,或者中心化节点被恶意攻击或篡改,那么数据也会相应被改变,在区块链架构中,分布式节点,通过共识机制来写入数据后再广播分发到各节点,继而确认数据,那么以比特币的共识机制和算法为例,如果想对数据进行篡改,一旦区块中hash值有过改变,整个链上都需要去改变,这个要实现需要“51%”算力支持,理论上可能出现篡改的数据,但是随着节点算力的增长,“51%”的攻击需要的大量成本,难度也极大,所以认为区块链的数据写入后不可篡改。

数据不可篡改,理想化的状态,保证了权益的公正,对于追溯数据也是一样有证可靠。

匿名性和效率:

一直对区块链技术中匿名性和效率有不同观点,匿名在计算机领域中的解释:unlinkability,中文叫无关联性。那么在比特币中,地址是一串公钥加工后的显示,在网络上交易时一直通过地址来记录个人信息,区块链全节点中记录了所有的账目明细。那么如果黑客通过对某地址的数据挖掘,其实不难得到地址-账户-个人的关联关系,不考虑交易双方,每次交易找零的地址,就不难发现地址-账户-个人之间的关系。

运行效率现在不同的共识机制有不同的运行效率,区块的大小和区块生成的速度,一直影响区块链的发展,不但但是比特币中区块大小讨论,以太坊对共识算法的更换考虑。

猜你喜欢

转载自blog.csdn.net/sxjinmingjie/article/details/80927531