在超级账本结构中,安装和实例化链码的真正含义是什么?它们之间有什么区别?

时间:2019-03-05 11:11:48

标签: hyperledger-fabric hyperledger

在Hyperledger Fabric文档中,使用了2个术语
1.在对等节点上安装chaincode,
2.实例化通道上的链码

两者之间的主要区别是什么?

在文档中说,链码可以安装在多个节点上,但是可以实例化一次。我了解这一点,因为通道只需要有关该通道的信息。

我遵循余额转移示例,因此在创建频道之后,需要将同级加入该频道。

有2个对等方加入了频道[“ peer0.org1.example.com”,“ peer0.org1.example.com”],因此当我实例化chaincode时,它正在创建2个chaincode的docker镜像。 /> dev-peer0.org1.example.com-chaincode-v0
dev-peer1.org1.example.com-chaincode-v0

这两张图片的真正含义是什么?
不是初始化频道的链码方法吗?
还是通道在所有加入它的对等节点上对其进行初始化?
初始化实际上在哪里发生?

谢谢!

2 个答案:

答案 0 :(得分:0)

  

这两张图片的真正含义是什么?   不是初始化通道的链码方法吗?

是,不是。每个对等方都需要在自身上安装相同版本的链码,因为每个人都需要能够执行和验证传入的查询/调用。 因此,有两个步骤要做。

  1. 在频道的每个对等节点上安装链码
  2. 在频道上实例化链码
  

此初始化实际上在哪里发生?

因此,链码的实例化是在每个对等点都知道链码并且可以被验证之后才进行的。

答案 1 :(得分:0)

感谢@ PaulO'Mahony和@kajuken的资源和解释。
以下是我的疑问摘要:

  1. 链码在Docker容器中运行,该容器与需要与之交互的任何对等方关联。
  2. Chaincode已安装在对等方上,然后在通道上实例化。
  

所有想要使用链码提交事务或读取数据的成员都需要在其对等方上安装链码。

  1. 实例化将输入链码使用的初始数据,然后启动已安装链码的已加入通道的对等链上的链码容器
  

请注意,只有一个网络成员需要实例化链码。如果安装了chaincode的对等方加入已经实例化的通道,则chaincode容器将自动启动。

     

链码已安装到加入通道的每个对等方的文件系统上,然后必须在通道上实例化链码,以便对等方可以通过链码容器与分类帐进行交互。实例化执行链码的任何必要的初始化。这通常涉及设置包含链码初始世界状态的键值对。

  1. 对等方可以一次安装链码,然后在已实例化链码的任何通道上使用相同的链码容器。

参考文献:
install and instantiate the chaincode
instantiate the chaincode