2017-08-16 23 views
0

From fabric document,有一些话如下: 反对“一个”被发布到peer0.org1.example.com的值的查询。该chaincode以前安装的peer0.org1.example.com,所以这将DEV-peer0.org1.example.com-mycc-1.0的名字开始为ORG1 peer0的容器。查询的结果也被返回。没有发生写入操作,因此对“a”的查询仍然会返回值“100”。当两个org one orderer实例化之前,可能需要peer查询吗?

为什么查询操作可以通过DEV-peer0.org1.example.com-mycc-1.0的名称创建ORG1 peer0容器,通常我们首先应该实例化?

回答

1

为什么查询操作可以通过dev-peer0.org1.example.com-mycc-1.0的名称为Org1 peer0创建容器,通常我们应该首先实例化?

链代码的实例化只针对特定的对等体完成,它最终跨越具有特定对等体上的链接代码的容器。虽然你可能查询对另一个同行,因此:

  1. Chaincode必须建立在对等安装
  2. 它会检查每当chaincode实例化,并且它已经chaincode容器中运行,如果容器没有运行它会运行。

运行容器的原因很简单,查询必须针对chaincode,它实际上是chaincode定义的函数之一的调用。

0

您有关于它here的解释。但是,我粘贴答案。

的chaincode容器的目的是为了确保从对自身的智能合同的执行的隔离,让一个聪明的合同(chaincode)不能崩溃,甚至因为访问错误或恶意代码的同行。当您实例化链式代码时,对等体会使用链式代码填充容器图像,并调用Docker管理API来部署该映像。如果容器没有运行,它将启动一个新的容器。一旦运行,对等方接收到的所有事务和提议都将传输到该容器以供执行。

的chaincode容器中运行智能契约逻辑。当你实例化一个chaincode,Init方法进行了模拟和返回给客户端发送给订购者创造一个新的事务(INIT交易,结合了chaincode到通道)的。这就是容器启动的原因,如果它之前没有运行。