1

我已经实现了 fabric sdk 来安装和实例化链码。一切正常,但无法弄清楚在结构节点dk中实施背书的正确方法

这是我在使用命令时使用的背书策略:

peer chaincode ${CHAINCODE_ACTION} -o orderer.google.com:7050 \
    --tls --cafile ${ORDERER_CA} -C $CHANNEL_NAME \
    -n ${CHAINCODE_NAME} -l ${LANG} -v "$CHAINCODE_VERSION" \
    -c '{"Args":[]}' \
    -P "AND (OR('Org1MSP.peer', 'Org1MSP.client','Org1MSP.member','Org1MSP.admin'),
    OR ('Org2MSP.peer', 'Org2MSP.client', 'Org2MSP.member', 'Org2MSP.admin'))"

如果我想在nodedk中实现相同的功能,下面是我从余额转移示例中获得的参考:

const request = {
      targets: [peer],
      chaincodeId: 'cc1',
      chaincodeType: 'java',
      chaincodeVersion: '7.0',
      txId: tx_id,

      // Use this to demonstrate the following policy:
      // The policy can be fulfilled when members from both orgs signed.
      'endorsement-policy': {
        identities: [
          {role: {name: 'member', mspId: 'Org1MSP'}},
          {role: {name: 'member', mspId: 'Org2MSP'}}
        ],
        policy: {'2-of': [{'signed-by': 0}, {'signed-by': 1}]}
      }
    };

我知道 2-of 只是组织之间的 AND 条件。由 0 和 1 签名的是身份的索引。但是我们如何在 Org member、client、admin、peer 中添加 OR 条件呢?

我没有找到任何文档来深入研究这一点。任何帮助都感激不尽。

4

1 回答 1

1

你对endorsement-policyin node-sdk 的理解是绝对正确的。“signaturePolicy”具有以下对象结构。

type -- SIGNATURE
rule
    Type -- n_out_of
    n_out_of
        N -- {int}
        rules -- {array}
            Type -- signed_by
            signed_by -- {int}
    identities -- {array}
        principal_classification -- {int}
        msp_identifier -- {string}
        Role -- MEMBER | ADMIN

你可以在这里阅读更多关于它的信息。您还可以参考ChaincodeInstantiateUpgradeRequest部分中的示例。

现在,谈到您提出的问题,我们如何OR在 Org member、client、admin、peer 中添加条件。检查以下示例,该示例最初来自节点 SDK 文档。

背书政策:“由 ordererOrg 的管理员和对等组织之一的任何成员签名”

{
  identities: [
    { role: { name: "member", mspId: "peerOrg1" }},
    { role: { name: "member", mspId: "peerOrg2" }},
    { role: { name: "admin", mspId: "ordererOrg" }}
  ],
  policy: {
    "2-of": [
      { "signed-by": 2},
      { "1-of": [{ "signed-by": 0 }, { "signed-by": 1 }]}
    ]
  }
}

如您所见,唯一的身份可以是admin或者member您可以在背书策略中指定的身份。此处的成员可以是管理员以外的任何成员。它可以是对等点、客户端、用户。如果您希望它由管理员签名,则必须在roleobject 中明确指定adminproperty的值name

对于您的情况,我认为以下结构将是合适的。

{
  identities: [
    { role: { name: "member", mspId: "peerOrg1" }},
    { role: { name: "admin", mspId: "peerOrg1" }},
    { role: { name: "member", mspId: "peerOrg2" }},
    { role: { name: "admin", mspId: "peerOrg2" }}
  ],
  policy: {
    "2-of": [
      { "1-of": [{ "signed-by": 0 }, { "signed-by": 1 }]}
      { "1-of": [{ "signed-by": 2 }, { "signed-by": 3 }]}
    ]
  }
}

遗憾的是,我在 node-sdk 中找不到更多背书策略示例,但我认为上面的示例可以解释其工作原理。

此外,我认为将帮助您更好地了解成员和管理员在背书政策中的内容。

于 2020-07-31T15:10:04.830 回答