Hyperledger fabric 链码如何并行执行?

Hyperledger fabric 链码如何并行执行?,hyperledger-fabric,Hyperledger Fabric,我学习Hyperledger布料已经有一年了 但我仍然无法说出链码是如何工作的以及如何被准确地处理的,特别是在它的实现和过程方面 以下是我对链码的理解 链码正在运行并与对等方隔离,作为docker容器之一,以确保其在网络中的完整性。chaincode是一个程序,用于定义交易中的函数(例如AddTwoIntegerValues())应如何更新分类账 此外,背书对等方访问链码以执行来自客户或其他对等方的交易建议中的功能,以响应背书。(此过程不清楚) 在这种情况下,我想问您,那些背书的对等方如何并行执

我学习Hyperledger布料已经有一年了

但我仍然无法说出链码是如何工作的以及如何被准确地处理的,特别是在它的实现和过程方面

以下是我对链码的理解

链码正在运行并与对等方隔离,作为docker容器之一,以确保其在网络中的完整性。chaincode是一个程序,用于定义交易中的函数(例如AddTwoIntegerValues())应如何更新分类账

此外,背书对等方访问链码以执行来自客户或其他对等方的交易建议中的功能,以响应背书。(此过程不清楚)

在这种情况下,我想问您,那些背书的对等方如何并行执行或访问链码容器?我听说“链码执行”是指模拟链码逻辑计算。但我不明白

换句话说,我的问题是,他们如何同时执行或访问这些内容?他们有那个链码的副本吗?同行如何知道链码逻辑?若我错了,你们能纠正我或解释一下链码流程吗


如果你对我的问题有任何想法,请告诉我。我期待着你的回答

对于给定链码的每个版本,每个对等方都有自己的链码容器。 当链码安装在对等机上时,链码代码的代码包将写入文件系统

稍后,当对等方收到调用链码上函数的请求(Init()或invoke(),当Init()在实例化上运行时),对等方将检查链码是否已经运行,如果没有,则检查:

  • 旋转容器以编译链码包,生成链码填充二进制文件,然后将其销毁
  • 旋转实际运行链码填充二进制文件的容器
链码为二进制:

  • 通过gRPC连接到对等机,并将自身注册为安装时使用的名称
  • 运行一个无休止的循环,在此循环中,它等待命令来模拟来自对等方的事务
当对等方收到客户的提案时,它:

  • 定位链码容器gRPC流,并将建议从客户端转发到链码
  • 准备一个密钥读写映射,链码填充程序将在执行过程中询问对等方,这称为
然后,在容器内运行的链码填充程序从建议中提取参数,并开始运行链码逻辑(其二进制文件的一部分)

如果链码逻辑包含数据访问操作,如GetState或PutState,则它会通过与对等方连接的同一gRPC流向对等方发送请求,然后对等方执行以下操作:

  • 如果数据操作是读取操作,则会将从密钥读取的密钥和版本添加到读写集,并通过gRPC流将密钥和值发送回链码垫片容器
  • 如果数据操作是写入操作,则会将键、值和版本添加到读写集,然后向链码垫片(*)发回“OK”
(*)我个人认为这一步没有必要。。。这只会延长执行时间

链码垫片完成事务计算后,会将结果(即“OK”)发送回对等方,同时发送一个表示事务已完成执行的标记

由于写入的值不是真正写入数据库,而是添加到内存映射中,因此这称为“事务模拟”。 然后,对等方继续对事务模拟的结果(读写集映射和链码垫片的结果)进行签名,然后将签名的事务模拟(也称为“背书”)作为响应返回给客户端

In that case, I'd like to ask you how those endorsing peers can execute or access the chaincode container in parallel?

您可以并行地这样做,因为当链码垫片调用事务时,它会这样做

对于给定链码的每个版本,每个对等方都有自己的链码容器。 当链码安装在对等机上时,链码代码的代码包将写入文件系统

稍后,当对等方收到调用链码上函数的请求(Init()或invoke(),当Init()在实例化上运行时),对等方将检查链码是否已经运行,如果没有,则检查:

  • 旋转容器以编译链码包,生成链码填充二进制文件,然后将其销毁
  • 旋转实际运行链码填充二进制文件的容器
链码为二进制:

  • 通过gRPC连接到对等机,并将自身注册为安装时使用的名称
  • 运行一个无休止的循环,在此循环中,它等待命令来模拟来自对等方的事务
当对等方收到客户的提案时,它:

  • 定位链码容器gRPC流,并将建议从客户端转发到链码
  • 准备一个密钥读写映射,链码填充程序将在执行过程中询问对等方,这称为
然后,在容器内运行的链码填充程序从建议中提取参数,并开始运行链码逻辑(其二进制文件的一部分)

如果链码逻辑包含数据访问操作,如GetState或PutState,则它会通过与对等方连接的同一gRPC流向对等方发送请求,然后对等方执行以下操作:

  • 如果数据操作是读取操作,则会将从密钥读取的密钥和版本添加到读写集,并通过gRPC流将密钥和值发送回链码垫片容器
  • 如果数据操作是写入操作,则会在读写设置中添加键、值和