如何在 Hyperledger Fabric 的不同节点上多次安装一份合约?
How to install one contract many times on different nodes in Hyperledger Fabric?
我面临这样一种情况,即网络中的所有节点都需要安装并实例化相同的智能合约。但是出于隐私原因,我想将它们保留在不同的频道上。换句话说,每两个对等点都有自己的频道。但它们的商业逻辑和交易条件都是相同的。因此,智能合约也是一样的。
我可以在一个节点上为它所属的所有通道安装一次智能合约吗?假设网络中有 400 个对等点。它是一个完整的网格。因此每个节点属于 399 个通道。每个通道有一个智能合约,这使得每个节点上需要安装 399 个智能合约。但是这些合约都有相同的逻辑,都是相同的。我想知道是否有可能引用智能合约,并且只安装一次,但对于节点所属的所有通道。此外,如果将来需要更改智能合约,则需要进行大量重复工作,这是糟糕的设计决策。
请注意,出于某种原因 我不想使用 ACL ,因为我想 100% 确保数据的隐私得到实现。因此,我想通过没有ACL的通道来实现这个场景。
另外请考虑我正在使用 composer 进行开发。所以我想知道是否可以在 Hyperledger Fabric 和 Composer 中实现它
感谢您的关注。感谢您的帮助。
您可以使用命令 composer network install --card <your admin card> --archiveFile <your archive file>
为 connection.json
中指定的任何节点和通道安装 Composer 链码。
您可以像这样为两个通道指定一个智能合约(您可以将此原则用于任意数量的通道):
"channels": {
"first": {
"orderers": [
"orderer0.ex.ru"
],
"peers": {
"peer0.org1.ex.ru": {
"endorsingPeer": true,
"chaincodeQuery": true,
"eventSource": true
},
"peer0.org2.ex.ru": {
"endorsingPeer": true,
"chaincodeQuery": true,
"eventSource": true
}
},
"second": {
"orderers": [
"orderer0.ex.ru"
],
"peers": {
"peer0.org1.ex.ru": {
"endorsingPeer": true,
"chaincodeQuery": true,
"eventSource": true
},
"peer1.org2.ex.ru": {
"endorsingPeer": true,
"chaincodeQuery": true,
"eventSource": true
}
}
}
(请不要忘记指定剩余的字段)
创建管理卡后:
composer card create -p connection.json -u <identity name> -c <public key path> -k <secret key path> -r <admin card name> -r <role> -f <card filename>
然后导入钱包商店:
composer card import -f <admin card file> --card <admin card name>
创建归档文件:
composer archive create -t dir -n .
安装:
composer network install --card <admin card name> --archiveFile <archive file produced in the previous step>
"Is it a way that I can install the smart contract once on a node for all the channels it belongs to? Lets say there are 400 peers in a network. and it is a full mesh" - 是的。您只需安装一次链码 - 您可以在通道上实例化/启动该 [相同] 链码,正如您在上面描述的那样。
另请注意(在 Hyperledger Fabric 1.2 中)您可以阅读有关 Fabric 1.2 中发布的新频道私有数据功能(私有数据集合和数据存储位置)的更多信息https://hyperledger-fabric.readthedocs.io/en/release-1.2/private-data/private-data.html?highlight=private%20data
我面临这样一种情况,即网络中的所有节点都需要安装并实例化相同的智能合约。但是出于隐私原因,我想将它们保留在不同的频道上。换句话说,每两个对等点都有自己的频道。但它们的商业逻辑和交易条件都是相同的。因此,智能合约也是一样的。
我可以在一个节点上为它所属的所有通道安装一次智能合约吗?假设网络中有 400 个对等点。它是一个完整的网格。因此每个节点属于 399 个通道。每个通道有一个智能合约,这使得每个节点上需要安装 399 个智能合约。但是这些合约都有相同的逻辑,都是相同的。我想知道是否有可能引用智能合约,并且只安装一次,但对于节点所属的所有通道。此外,如果将来需要更改智能合约,则需要进行大量重复工作,这是糟糕的设计决策。
请注意,出于某种原因 我不想使用 ACL ,因为我想 100% 确保数据的隐私得到实现。因此,我想通过没有ACL的通道来实现这个场景。
另外请考虑我正在使用 composer 进行开发。所以我想知道是否可以在 Hyperledger Fabric 和 Composer 中实现它
感谢您的关注。感谢您的帮助。
您可以使用命令 composer network install --card <your admin card> --archiveFile <your archive file>
为 connection.json
中指定的任何节点和通道安装 Composer 链码。
您可以像这样为两个通道指定一个智能合约(您可以将此原则用于任意数量的通道):
"channels": {
"first": {
"orderers": [
"orderer0.ex.ru"
],
"peers": {
"peer0.org1.ex.ru": {
"endorsingPeer": true,
"chaincodeQuery": true,
"eventSource": true
},
"peer0.org2.ex.ru": {
"endorsingPeer": true,
"chaincodeQuery": true,
"eventSource": true
}
},
"second": {
"orderers": [
"orderer0.ex.ru"
],
"peers": {
"peer0.org1.ex.ru": {
"endorsingPeer": true,
"chaincodeQuery": true,
"eventSource": true
},
"peer1.org2.ex.ru": {
"endorsingPeer": true,
"chaincodeQuery": true,
"eventSource": true
}
}
}
(请不要忘记指定剩余的字段)
创建管理卡后:
composer card create -p connection.json -u <identity name> -c <public key path> -k <secret key path> -r <admin card name> -r <role> -f <card filename>
然后导入钱包商店:
composer card import -f <admin card file> --card <admin card name>
创建归档文件:
composer archive create -t dir -n .
安装:
composer network install --card <admin card name> --archiveFile <archive file produced in the previous step>
"Is it a way that I can install the smart contract once on a node for all the channels it belongs to? Lets say there are 400 peers in a network. and it is a full mesh" - 是的。您只需安装一次链码 - 您可以在通道上实例化/启动该 [相同] 链码,正如您在上面描述的那样。
另请注意(在 Hyperledger Fabric 1.2 中)您可以阅读有关 Fabric 1.2 中发布的新频道私有数据功能(私有数据集合和数据存储位置)的更多信息https://hyperledger-fabric.readthedocs.io/en/release-1.2/private-data/private-data.html?highlight=private%20data