Hyperledger fabric 超分类账结构。是否可以将多个链码部署到同一通道?

Hyperledger fabric 超分类账结构。是否可以将多个链码部署到同一通道?,hyperledger-fabric,hyperledger,Hyperledger Fabric,Hyperledger,是否可以将两个不同的链码部署到Hyperledger结构中的同一个通道中是。并且可以将相同的链码部署到2个或多个通道。如果使用不同的名称,甚至可以将相同的链码部署到相同的通道 jworthington的回答是正确的,但我想从评论中澄清一些事情 一个频道意味着一个分类账。() 每个链码在分类账上都有单独的“视图”(我将其可视化为数据库中的每个键都有链码名称前缀,链码可以访问) 仅限前缀与其名称相同的特定键) 您可以从第一个链码调用第二个链码的读/写,这将只进行一次区块链交易(在链码位于同一个通道

是否可以将两个不同的链码部署到Hyperledger结构中的同一个通道中

是。并且可以将相同的链码部署到2个或多个通道。如果使用不同的名称,甚至可以将相同的链码部署到相同的通道

jworthington的回答是正确的,但我想从评论中澄清一些事情

  • 一个频道意味着一个分类账。()
  • 每个链码在分类账上都有单独的“视图”(我将其可视化为数据库中的每个键都有链码名称前缀,链码可以访问) 仅限前缀与其名称相同的特定键)
  • 您可以从第一个链码调用第二个链码的读/写,这将只进行一次区块链交易(在链码位于同一个通道/分类账上的情况下,如果它们不在,写入操作将被忽略)

检查块结构时,我发现块中有一个“Chaincode Name”字段,我假设:

  • 一个频道有一个分类账()
  • 一个通道可以有两个或多个链码
  • 由不同链码生成的块(我们可以简单地这样认为)将存储在同一个分类账中
  • 块中的“链码名称”字段将区分它是从哪个链码生成的

是的,我们可以使用不同的链码ID将多个链码部署到同一频道。 每个链表在通道中都有单独的分类帐,我们可以将其视为命名空间。 一个链码不能直接读取/更新其他渠道分类账

然而,fabric shim包提供了“InvokeChaincode”功能,可以调用另一个链码来读取/更新它的分类账


stub.InvokeChaincode(“另一个CCName”,chainCodeArgs,“channelName”)

我试过了,它运行正常;然而,它为每个链码创建不同的分类账,即使它在同一个通道中!但为什么每个链码都有不同的分类账呢。根据文件,我认为分类账与channel.No.有关。1链码包含1个分类账。如果使用不同的名称再次部署相同的链码实现,则会得到2个分类账。请注意,默认情况下,1个通道将包含一个分类账。然而,如果多个链码安装在一个通道上,每个链码将导致创建一个单独的分类账(即每个链码一个分类账),实际上,似乎你们都是正确的-一个新的链码创建一个新的分类账,但doc与此相矛盾。此外,Gari的回答令人困惑:“一个链码不能直接读取或更新另一个链码的状态”,我猜他的意思是“分类账”。它会直接从不同的分类账获取数据,还是这个过程会完成整个交易流程(提案->背书->订购->委托)?