fabric nodesdk 中的 Hyperledger fabric 背书策略
Hyperledger fabric Endorsement policy in fabric nodesdk
我已经实现了 fabric sdk 来安装和实例化链码。一切正常,但无法找出在 fabric nodesdk
中实施背书的正确方法
这是我在使用命令时使用的背书策略:
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'))"
如果我想在nodesdk中实现同样的功能,下面是我从余额转账示例中得到的参考:
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 签名的是身份的索引。但是我们如何在组织成员、客户、管理员、同行中添加 OR 条件?
我找不到任何文档来深入研究这个问题。任何帮助将不胜感激。
你对node-sdk中endorsement-policy
的理解完全正确。 “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
您可以阅读更多相关信息 here. You can also refer to examples in the section ChaincodeInstantiateUpgradeRequest。
现在,回到您提出的问题,即我们如何在组织成员、客户、管理员、同行中添加 OR
条件。查看以下示例,该示例最初来自节点 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
,您可以在背书政策中指定。这里的成员可以是除管理员之外的任何成员。它可以是对等点、客户端、用户。如果您希望它由管理员签名,您必须在 role
对象中明确指定值为 admin
的 属性 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 中找不到更多背书策略的示例,但我认为上面的示例可以解释其工作原理。
此外,我认为 this 将帮助您更好地了解背书政策中的成员和管理员。
我已经实现了 fabric sdk 来安装和实例化链码。一切正常,但无法找出在 fabric nodesdk
中实施背书的正确方法这是我在使用命令时使用的背书策略:
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'))"
如果我想在nodesdk中实现同样的功能,下面是我从余额转账示例中得到的参考:
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 签名的是身份的索引。但是我们如何在组织成员、客户、管理员、同行中添加 OR 条件?
我找不到任何文档来深入研究这个问题。任何帮助将不胜感激。
你对node-sdk中endorsement-policy
的理解完全正确。 “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
您可以阅读更多相关信息 here. You can also refer to examples in the section ChaincodeInstantiateUpgradeRequest。
现在,回到您提出的问题,即我们如何在组织成员、客户、管理员、同行中添加 OR
条件。查看以下示例,该示例最初来自节点 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
,您可以在背书政策中指定。这里的成员可以是除管理员之外的任何成员。它可以是对等点、客户端、用户。如果您希望它由管理员签名,您必须在 role
对象中明确指定值为 admin
的 属性 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 中找不到更多背书策略的示例,但我认为上面的示例可以解释其工作原理。
此外,我认为 this 将帮助您更好地了解背书政策中的成员和管理员。