Published on

fabric 背书策略 java-sdk初始化链码背书策略

Authors

环境

fabric 1.4.x fabric-java-sdk 1.4.7 release

背书策略介绍

每个链码都有一个认可策略,该策略指定必须执行链码并认可执行结果才能使交易被视为有效的通道上的一组对等体。这些认可政策定义了必须(通过其同行)“认可”(即批准)提案执行的组织。

背书策略配置方法

如果在实例化时未指定,则背书策略默认为“channel中org的任何成员”。例如,具有“ Org1”和“ Org2”的channel的默认背书策略为“ OR('Org1.member','Org2.member')”。

默认只有有任意成员签名即可

背书政策语法

正如您在上面看到的那样,策略是根据主体(“主体”是与角色匹配的身份)表达的。主体被描述为 'MSP.ROLE',其中MSP表示所需MSP ID和ROLE 代表4个接受角色之一:member,admin,client,和 peer。

以下是一些有效主体的示例:

'Org0.admin':Org0MSP的任何管理员 'Org1.member':Org1MSP的任何成员 'Org1.client':Org1MSP的任何客户端 'Org1.peer':Org1MSP的任何同级 该语言的语法为:

EXPR(E[, E...])

其中EXPR或者是AND,OR,或OutOf,并且E可以是一个主要(与上述的语法)或另一个嵌套调用EXPR。

例如: AND('Org1.member', 'Org2.member', 'Org3.member') 向三个委托人分别要求一个签名。 OR('Org1.member', 'Org2.member') 向两个委托人之一请求一个签名。 OR('Org1.member', AND('Org2.member', 'Org3.member'))请求来自Org1MSP 成员的一个签名或来自Org2MSP 成员的一个签名以及来自MSP 成员的一个签名Org3。 OutOf(1, 'Org1.member', 'Org2.member'),解决与相同的问题。OR('Org1.member', 'Org2.member') 同样,等效于 ,并且等效于。OutOf(2, 'Org1.member', 'Org2.member')AND('Org1.member', 'Org2.member')OutOf(2, 'Org1.member', 'Org2.member', 'Org3.member')OR(AND('Org1.member', 'Org2.member'), AND('Org1.member', 'Org3.member'), AND('Org2.member', 'Org3.member'))

admin代表只有admin用户 才可以背书,client表示所有的org用户都可以进行签名,peer代表org的peer节点可以签名,此种方式可以自动进行签名,member代表三种方式任一一种可以签名。

OR 是最宽松的策略,测试时推荐使用。否则经常提案出错。

java sdk 链码初始化配置背书策略

在sdk中找到参考的yaml文件。

#member admin client peer 自己替换字段即可,官方示例的测试网络,应该是只有两个组织
identities:  # 列出参与背书的role
    user1: {"role": {"name": "member", "mspId": "Org1MSP"}} # role member in org with mspid Org1MSP
    user2: {"role": {"name": "member", "mspId": "Org2MSP"}}
    admin1: {"role": {"name": "admin", "mspId": "Org1MSP"}} # admin role.
    admin2: {"role": {"name": "admin", "mspId": "Org2MSP"}}

policy: # 策略可以不嵌套数组,也可以嵌套。下面这种情况就是嵌套
    1-of: # 指定被签名的策略,1-of其中之一,2-of其中之二 。。。 n-of其中之n
      - 1-of:
        - signed-by: "user1" # a reference to one of the identities defined above.
        - signed-by: "admin1"
      - 1-of:
        - signed-by: "user2"
        - signed-by: "admin2"

以上策略类似cli里面的

OR( OR('Org1.member', 'Org1.admin'), OR('Org2.member', 'Org2.admin'))
ChaincodeEndorsementPolicy chaincodeEndorsementPolicy = new ChaincodeEndorsementPolicy();
chaincodeEndorsementPolicy.fromYamlFile(yamlFile);

参考链接

1.4官方文档 帖子