在两个org one orderer之前,可以在实例化之前进行对等查询吗?

时间:2017-08-16 11:25:55

标签: hyperledger hyperledger-fabric

From fabric document,有以下几个字: 向peer0.org1.example.com发出针对“a”值的查询。该链代码以前安装在peer0.org1.example.com上,因此这将以dev-peer0.org1.example.com-mycc-1.0的名称为Org1 peer0启动一个容器。还将返回查询结果。没有发生写入操作,因此对“a”的查询仍将返回值“100”。

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

2 个答案:

答案 0 :(得分:1)

  

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

链代码的实例化只针对特定对等体执行一次,最终跨越该特定对等体上具有链代码的容器。因此,您可能会查询另一个对等方:

  1. 必须在该同伴上安装Chaincode
  2. 它将检查链代码实例化的时间,并且它已经运行了链代码容器,如果容器没有运行,它将运行它。
  3. 运行容器的原因很简单,查询必须反对链码,这实际上是对链码定义的函数之一的调用。

答案 1 :(得分:0)

你有一个关于它的解释here。但是,我会粘贴答案。

链代码容器的目的是确保智能合约的执行与对等方本身隔离,这样智能合约(链代码)就不会因为错误或恶意代码而崩溃甚至访问对等方。实例化链代码时,对等方使用链代码填充容器映像,并调用Docker管理API来部署该映像。如果容器未运行,它将启动一个新容器。一旦运行,对等方收到的所有事务和提议都将被传输到该容器以供执行。

chaincode容器运行智能合约逻辑。当您实例化链代码时,会模拟Init方法并将其返回给客户端,以便发送给订购者以创建新事务(init事务,将链代码绑定到通道)。这就是容器启动的原因,如果之前没有运行过。