Fabric背书策略相关概念与背书验证过程

目录

背书策略

CLI中背书策略语法

为chaincode指定背书策略

背书策略的验证过程


背书策略

节点通过背书策略来确定一个交易是否被正确背书。当一个peer接收一个交易后,就会调用与该交易Chaincode相关的VSCC(validator system chaincode实例化时指定的)作为交易验证流程的一部分来确定交易的有效性。为此,一个交易包含一个或多个来自背书节点的背书。

VSCC的任务是验证:

1.  所有的背书是有效的(即有效证书进行的有效签名)

2.  恰当的(满足要求的)背书数量

3.  背书来自预期的背书节点

背书策略即是用于定义2和3的验证规则。

CLI中背书策略语法

在CLI中,用一种简单的布尔表达式来表示背书策略。

Fabric使用MSP来描述主体,MSP用于验证签名者的身份和签名者在MSP中的角色、权限。目前支持:member, admin, client和peer。主体的描述形式是MSP.ROLE,其中MSP是MSP ID,ROLE是member,admin,client或peer。

比如一个有效的主体可表示为 'Org0.admin'(MSP Org0的管理员)或 'Org1.member'(MSP Org1的成员)或 'Org0.client(MSP Org0的客户端)或 'Org1.peer(MSP Org1的节点)。

CLI语法是:EXPR(E[, E...])

其中EXPR是AND或OR,表示布尔表达式;E是上面语法所描述的主体或者是另一个嵌套进去的EXPR。

例如:

  AND('Org1.member', 'Org2.member', 'Org3.member')表示需要三个主体共同签名背书

  OR('Org1.member', 'Org2.member')表示需要两个主体之一的签名背书

  OR('Org1.member',AND('Org2.member', 'Org3.member'))表示需要Org1的签名背书或者Org2和Org3共同的签名背书

为chaincode指定背书策略

如果在实例化chaincode时未指定背书策略,则背书策略默为“由通道中的组织的任何一个成员进行背书”。例如,一个带有“Org1”和“Org2”的通道将有一个默认的背书策略:OR(“Org1.成员”,“Org.成员”)。

命令:peerchaincode instantiate -C <channelid> -n mycc -P "AND('Org1.peer','Org2.peer')"

实例化chaincode后添加到通道中的新组织,可以查询chaincode,但将无法提交由其背书的事务。必须修改背书策略,来让由新加入的组织背书的交易得到认可。

背书策略的验证过程

1.  客户端(SDK)把交易提议(TX Proposal)发给指定的一个或多个背书节点(endorsing peer)。接收提议的背书节点在SDK的交易提议请求中指定,最终进行背书的节点由交易所属的ChainCode和该Chaincode所定义的背书策略(Endorsement Policy)共同决定。

例如node.js sdk的交易提议请求接口:

Channel. sendTransactionProposal(request, timeout)

request是一个ChaincodeInvokeRequest对象,可以在该对象中指定目标节点,如果未指定,则会将交易提议请求发送给加入该通道的所有节点。

2.  背书节点收到交易提议后,首先用客户端(SDK)的公钥验证它的签名、客户端是否可以在该channel进行操作、交易是否已被提交、交易提议组织是否正确。验证通过后模拟执行chaincode(不会将结果写入到账本里),将执行的结果反馈给客户端。

3.  客户端(SDK)收到足够多的背书节点的结果后(背书策略),表示这个交易已经正确背书,然后将交易提议、模拟结果和背书信息打包发给orderer节点;如果客户端没有搜集到足够多的背书节点反馈的背书信息,这个交易就会被舍弃。

4.  Orderer节点对来自客户端(SDK)的信息进行排序,并创建区块,然后在channel上进行广播。

channel上的peer节点接收到交易区块后,验证背书策略是否满足,然后更新账本,至此,背书策略的验证过程完成。


原文链接:Docs » Operations Guides » Endorsement policies

Fabric是一个分布式的、具有高度可扩展性的区块链平台。它采用了模块化设计,每个模块都可以独立运行,实现了更高的灵活性和可扩展性。下面详细介绍一下Fabric的运行过程中涉及到的概念。 1. Peer节点 Peer节点是Fabric网络的基本组成部分,它们负责维护账本和执行智能合约。Peer节点可以分为两类:背书Peer和排序Peer。背书Peer用于执行智能合约,并对交易进行背书签名,而排序Peer用于将交易排序并打包成区块。 2. Orderer节点 Orderer节点是一个独立的组件,用于管理区块链网络中的交易顺序。它负责将交易打包成区块,并将这些区块发送给Peer节点进行验证和执行。Orderer节点可以采用不同的共识算法来保证交易的顺序性。 3. Chaincode Chaincode是智能合约的实现,它通过编写代码来定义交易的行为和逻辑。Chaincode可以使用不同的编程语言来编写,例如Go、Java等。在Fabric中,Chaincode通过部署到Peer节点上来实现执行。 4. 账本 账本是记录交易的数据结构,它包括两种类型的账本:状态数据库和交易日志。状态数据库存储当前的状态,而交易日志则记录所有的交易历史。每个Peer节点都维护着自己的账本副本,以保证数据的一致性。 5. 通道 通道是一个逻辑上的概念,它将不同的参方组织为一个独立的区块链网络。通道可以用于隔离不同的业务场景,并提供更好的隐私保护和性能优化。在通道中,参方可以共享相同的账本,但只有特定的Peer节点才能访问和执行交易。 6. MSP MSP(Membership Service Provider)是Fabric中的成员服务提供者,用于管理和验证网络中的参方身份。MSP可以对参方进行身份验证和授权,以保证交易的安全性和可信度。 7. CA CA(Certificate Authority)是一个独立的组件,用于颁发数字证书和管理证书的生命周期。在Fabric中,CA可以用于为参方和管理员颁发数字证书,以保证其身份的真实性和可信度。 以上是Fabric运行过程中涉及到的一些基本概念,了解这些概念可以更好地理解Fabric的工作原理和应用场景。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值