Hyperledger Fabric 交易背书的基本工作流程详解

区块链技术巴比特2018-07-26 16:51:29  阅读 -评论 0

本文内容精选自华章鲜读专栏《Hyperledger-Fabric-源代码分析与深入解读》一书第二章“架构分析”。

《Hyperledger-Fabric-源代码分析与深入解读》纸书预计出版时间:2018年9月

华章鲜读上线:2018年7月(按章更新,纸书出版前更完本书全部内容)

Hyperledger Fabric 交易背书的基本工作流程详解

我们概述一个交易的请求流程。如图2-5所示。

Hyperledger Fabric 交易背书的基本工作流程详解

图2-5 交易的请求流程

图字翻译:

Peers 同级节点

Orderers 订单方

Endorse(TX) 发起交易TX

Respond(TX) 响应交易TX

Broadcast(EndorsedTX) 广播已发起的交易TX

Blocks 写入区块

(1)客户端创建交易和发送给它选择的背书peer节点

调用交易,客户端发送一个PROPOSE消息到它选择的一组背书peer节点。给定chaincodeID的背书peer节点的设置由客户端通过peer节点实现,从背书策略知道背书peer节点的设置。例如,交易能被发送给所有给定chaincodeID背书者,也就是说,一些背书者能够离线,其它人可能反对和选择不为交易背书。提交客户端尝试满足背书者可用的背书策略表达。

接下来,将描述PROPOSE消息格式,讨论在提交客户端和背书者之间可能的互动模式。

PROPOSE消息格式

一个PROPOSE消息的格式是,其中tx是强制的,anchor可选参数在下面列出。

clientID是提交客户端的身份,chaincodeID引用交易相关的链码,txPayload是提交交易自身的载体,timestamp是由客户端维护的一个单独递增整型值,clientSig是tx的其它域客户端签名.

txPayload的细节会在调用交易和部署交易之间有所不同。

对于调用交易,txPayload会包含两个域

● operation表示链码操作函数和参数 ● metadata表示调用相关的属性.

对于部署交易,txPayload会包含三个域

● source表示链码的源码 ● metadata表示链码和应用的相关属性 ● policies包含所有peer节点可访问的链码的相关策略,例如背书策略。注意背书策略在部署交易中不支持txPayload,但部署的txPayload包含背书策略ID和它的参数。 ● anchor包含读版本依赖,或更具体地说,键-版本对(即,anchor是KxN的一个子集),它捆绑或“锚”PROPOSE请求到指定KVS中key的版本。如果客户端指定anchor参数,背书者背书交易的情况是,只基于读它本地KVS匹配anchor中的相应KEY的版本号。

tx加密哈希被所有node节点用作唯一的交易标识tid(即,tid=HASH(tx))。客户端保存tid在内存中,等待背书peer节点的响应。

客户端决定与背书者互动的顺序。例如,客户端通常会发送(即,没有anchor参数)到一个单独的背书者,背书者随后产生版本依赖(anchor),客户端可以在晚些时候使用这个版本依赖(anchor)作为它的PROPOSE消息参数,发送给其它背书者。另外的例子,客户端能直接发送(没有anchor)到它选择的所有背书者。不同的通信模式都有可能,客户端在这方面是自由的。

(2)背书peer节点模拟交易和产生背书签名

在从客户端接收消息时,背书peer节点epID首先校验客户端签名clientSig,然后模拟一个交易。如果客户端指定了anchor,那么背书peer节点模拟交易只基于在它本地KVS匹配的由anchor指定的版本号对应的key读版本号(即下面定义的readset)。

模拟一个交易涉及背书节点尝试执行一个交易(txPayload),通过调用链码到交易引用(chaincodeID)和背书peer节点本地持有的状态拷贝。

作为执行的结果,背书peer节点计算读版本依赖(readset)和状态更新(writeset),也在DB语言中称为MVCC+postimage info。

回顾状态包含键/值对。所有键/值对实体都是版本化的,那就是说,每个实体包含排序版本信息,它是在每次键的值更新时增加的。解释交易的peer节点记录了所有的被链码访问的键/值对,不管读或是写,peer节点不会更新它的状态。更具体地说:

● 在背书节点执行一个交易前给定状态s,被交易读取的每个键k,键/值对(k,s(k).version)被添加到readset。 ● 此外,对于每一个被交易编辑的键k到值v’,键/值对(k,v’)被添加到writeset。或者,v’能成为新值与前值(s(k).value)的增量。

如果客户端在PROPOSE消息中指定了anchor,那么客户端指定的anchor在模拟交易时必须等于背书peer节点产生的readset.

然后,peer节点内部提交交易提案到它的逻辑部分来背书交易,称为背书逻辑。缺省时,一个peer节点的背书逻辑接受交易提案并简单签署。无论如何,背书逻辑可以执行任意功能。

如果背书逻辑决定背书一个交易,它发送消息到提交客户端,其中:

● 交易提案:=tran-proposal:=(epID,tid,chaincodeID,txContentBlob,readset,writeset),其中txContentBlob是链码/交易专用信息。目的是让txContentBlob用作tx的一些陈述(例如,txContentBlob=tx.txPayload). ● epSig是背书peer节点的交易提案签名。

否则,如果背书逻辑拒绝背书交易,背书者可以发送消息(TRANSACTION-INVALID,tid,REJECTED)到提交客户端。

注意背书者在这一步不能改变它的状态,在背书没有影响状态的情况下交易模拟产生状态更新。

(3)提交客户端收集交易背书并通过排序服务广播它

提交客户端一直等待直到它在(TRANSACTION-ENDORSED,tid,,)上收集到“足够”的消息和签名来推断出交易提案已背书。

“足够”的准确数字取决于链码背书策略。如果背书策略是安全的,交易已经背书;注意它还没提交。经过背书节点签过名的TRANSACTION-ENDORSED消息的集合包含了被背书过的交易。

如果提交客户端没有设法为交易提案收集背书,则放弃这个交易,稍后再试。

对于一个具有有效背书的交易,我们现在开始使用排序服务。提交客户端使用broadcast(blob)调用排序服务,其中blob=endorsement.如果客户端没有能力直接调用排序服务,它可以通过它选择的peer节点代理广播。这样的peer节点必须被客户端信任不会从背书移除任何消息或其它可能被无效的交易。注意一点,无论如何,代理peer节点不可能制造有效背书。

(4)排序服务向peer节点提交交易

当一个事件(seqno,prevhash,blob)发生并且一个peer节点已为所有序列号低于seqno的blosbs更新状态,peer节点执行如下流程,图2-6所示。

● 它检查blob.endorsement是有效的,根据的是它引用的链码(blob.tran-proposal.chaincodeID)。 ● 在典型情况下,它也验证了依赖(blob.endorsement.tran-proposal.readset)在期间没有被违反。在更复杂的用例中,背书中的交易提案域可能不同,在这种情况下,背书策略指定状态如何形成。

依赖的验证能以不同的方式实现,根据一致性属性或为状态更新选择的“孤立保证”。Serializability是一个缺省的孤立保证,除非链码背书策略指定一个不同的。Serializability能够通过在readset中的每个key关联的版本被提供,相当于key在状态中的版本,并拒绝不满足这个要求的交易。

● 如果所有这些检查通过,交易被视为有效或承诺。在这种情况下,peer节点在PeerLedger用1标记交易,适用于blob.endorsement.tran-proposal.writeset区块链状态(如果交易提案是相同的,其它背书策略逻辑定义了函数处理blob.endorsement)。 ● 如果blob.endorsement背书策略验证失败,交易无效,并且peer节点在PeerLedger的位掩码用0标记交易。重要的是要注意无效交易不会改变状态。

Hyperledger Fabric 交易背书的基本工作流程详解

图2-6 提交交易

Hyperledger Fabric 交易背书的基本工作流程详解

华章鲜读专栏用户特权:

一、作者写作开始,以“章”为单位更新电子书,真正边写边读; 二、专属社群,随时向作者、编辑提问,有问必答; 三、免费获赠一本作者签名版纸书; 四、纸书出版后作者仍将不断扩充、更新电子书内容;

马上订购本书鲜读专栏

(巴比特资讯经“华章鲜读”独家授权转载,本文未经华章鲜读授权严禁转载,违者必究)

声明:链世界登载此文仅出于分享区块链知识,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。此文如侵犯到您的合法权益,请联系我们100@7234.cn

    参与讨论 (0 人参与讨论)

    相关推荐

    区块链投资趋势报告:巨头入场布局行业趋于成熟

    区块链投资趋势报告:巨头入场布局行业趋于成熟

    来自:https://mp.weixin.qq.com/s?__biz=MzI4NzIxOTY1NA==&mid=2650632639&idx=1&sn=e6d1c29731d992a80410aaee82ec3ea6&chksm=f3d8db16c4af520097e4a64a71b1d4743ac326b9f027

    重新发明货币

    重新发明货币

    一、货币的演化过程 先简单回顾一下人类货币的演化过程,大概有以下阶段: a. 1.0版本:自然货币(贝壳、牲口、金银……) 这个阶段,货币基于一般等价物的稀有性或者实用性,货币不可能出现人为操纵的超发。 b. 2.0版本:早期纸币、银票到本位纸币 当贸易量越来越大,实物货币太不方便了,而且大家发现其实并不在意货币本身有什么价值,在意的只是这么多的货币能不能交换到足够的物品,于是纸币这种信用货

    从比特币交易看欧洲央行虚拟货币分类

    从比特币交易看欧洲央行虚拟货币分类

      互联网对传统社会的颠覆从未停止,在其完成对信息流、商流、物流、资金流的初步改造之后,或将以虚拟货币的形式打破现有货币体系   4月18日,在中国极客张沈鹏创办的比特币交易平台(42BTC.com)上,比特币对人民币的平均交易价为576元。当天,该平台完成了100个比特币的交易量。仅仅过去一周,4月25日上午,比特币对人民币的平均交易价已达到906元。据42BTC网站统计:在过去的32个月

    欧洲央行-比特币报告

    3.1 比特币 3.1.1 基本特征          比特币可能是最成功的,也可能是最有争议的虚拟货币方案,由日本程序员中本聪(译者注:事实上,中本聪是不是日本人,甚至是不是单个人无从考证)在2009年设计并实现。该计划基于一个类似于BitTorrent的P2P网络。BitTorrent是互联网上著名的共享文件协议,应用在电影,游戏和音乐领域。比特币在全球层面上运作,可用于各类货币交易(虚

    彻底玩转比特币地址和私匙

    彻底玩转比特币地址和私匙

    比特币地址和私匙是所有比特币初学者面对的一大难题,再加上那一串超长的字符串,让人更是摸不到头脑。 现在编者以问答的形式,带你一步步的揭开比特币地址和私匙的面纱。 还不知道什么是比特币地址和私匙的同学请点这里 问题一、比特币钱包由什么组成? 答 我们知道,比特币地址和私匙组成了比特币钱包,而私匙则决定了比特币地址上比特币的归属。 地址和私匙 问题二、如果只记得私匙我们还能还原比特币地址么? 答

    用GO语言实现比特币算法

    用GO语言实现比特币算法

    本节的这个例子展示一点点高精度数学包math/big、一点点散列包hash、一点点加密包crypto,还有一点点测试包testing的知识。这里不介绍bitcoin协议和算法——尽管它们很有趣,而是试图指出,Go对多种操作系统的支持,是实现这种跨平台应用的理想语言。 位钱(bitcoin)是一种使用加密手段制作的分布式电子货币。它最初于1998年由Wei Dai提出,并由中本聪(Satoshi

    详解比特币的找零机制

    详解比特币的找零机制

    比特币的找零机制一直让人有些迷惑,明明只向一个地址发送了比特币为什么 blockchain 上面的显示的有时是1个地址对多个地址,有时是多个地址对1个地址,有时又显示多个地址对多个地址? 为什么比特币资深用户要提醒大家当比特币钱包交易100次以上时再次交易后要重新备份钱包,恢复以前的钱包备份有可能会遭遇损失? 是的,这一切都是因为比特币的找零(Change)机制。本文参考 Bitcoin的维

    玩转比特币客户端之一:C盘转移和加速下载

    玩转比特币客户端之一:C盘转移和加速下载

    C盘空间不足?交易数据下载速度太慢?别着急,乐享比特币教你轻松玩转比特币官方客户端。 所有新人开始接触比特币时做的第一件事情大多数是安装比特币的官方客户端。 安全起见大家最好直接访问官方发布渠道sourceforge的地址进行下载:http://sourceforge.net/projects/bitcoin/files/Bitcoin/ 该网页列出了各版本的官方比特币客户端,目前

    麦妖榜
    更新日期 2019-06-19
    排名用户贡献值
    1BitettFan24007
    2等待的宿命23809
    3六叶树20309
    4区块大康18727
    5牛市来了16781
    6天下无双16192
    7linjm122716073
    8lizhen00215114
    9让时间淡忘14475
    10冷风大q11188
    返回顶部 ↑