安装和实例化链码在超级账本结构中真正意味着什么?它们之间有什么区别?

Shu*_*kar 5 hyperledger hyperledger-fabric

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

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

在文档中,它说链码可以安装在多个对等点上,但可以实例化一次。我将这一点理解为通道只需要有关通道的信息。

我正在遵循余额转移示例,因此在创建通道后,节点需要加入该通道。

有 2 个节点加入了该通道["peer0.org1.example.com", "peer0.org1.example.com"],因此当我实例化链代码时,它会创建 2 个链代码的 docker 镜像

dev-peer0.org1.example.com-chaincode-v0  
dev-peer1.org1.example.com-chaincode-v0
Run Code Online (Sandbox Code Playgroud)

这两张图片的真正含义是什么?
初始化链码不就是通道的意思吗?
或者通道在所有加入它的对等点上初始化它?
这个初始化实际上发生在哪里?

谢谢!

Shu*_*kar 5

感谢@PaulO'Mahony 和@kajuken 提供的资源和解释。
以下是我的疑惑总结:

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

所有想要使用链码提交交易或读取数据的成员都需要在其节点上安装链码。

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

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

链码被安装到加入通道的每个节点的文件系统上,然后必须在通道上实例化链码,以便节点可以通过链码容器与账本交互。实例化执行链码的任何必要的初始化。这通常涉及设置构成链码初始世界状态的键值对。

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

参考资料:
安装并实例化链码
实例化链码