如何在 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