一、什么是背书策略
Committing Peers在验证交易的时候,通过背书策略来验证一个交易是否有效,背书策略里面定义了一些要求,只有根据背书策略进行背书的交易才被认为是有效的。每个智能合约在部署的时候,都会指定背书策略。
Fabric定义了ESCC和VSCC两个system chaincode来为交易进行背书和验证:
- ESCC (Endorsement System ChainCode)在Endorsering Peer上签署提案响应
- VSCC(Validation System ChainCode)在Committing Peer上验证背书
背书节点仿真执行完交易后,会通过ESCC对执行结果进行签名,返回给client端;记账节点收到排序节点发送的交易区块后,会通过VSCC来验证是否符合背书策略,如下图所示:
二、背书策略的指定
背书策略在chaincode实例化的时候会被指定,使用-P参数即可,示例如下所示:
peer chaincode instantiate
-C mychannel
-n mycc
-v 1.0
-p chaincode_example02
-c '{"Args":["init","a", "100", "b","200"]}'
-P "AND('Org1MSP.member')"
2.1 背书策略句法
策略句法为:EXPR(E[, E…])
- EXPR可以是:AND、OR或者OutOf
- E:主体或者嵌套的EXPR
主体句法:MSP.ROLE
- 支持的角色(ROLE)有:member, admin, client, peer
- 在MSP为“MSP ID”的情况下,ROLE可以为"member" 或者 “admin”
2.2 背书策略示例
Request 1 signature from all three principals
- AND(‘Org1.member’, ‘Org2.member’, ‘Org3.member’)
Request 1 signature from either one of the two principals
- OR(‘Org1.member’, ‘Org2.member’)
Request either one signature from a member of the Org1 MSP or (1 signature from a member of the Org2 MSP and 1 signature from a member of the Org3 MSP)
- OR(‘Org1.member’, AND(‘Org2.member’, ‘Org3.member’))