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创建容器,通常我们应该首先实例化?
答案 0 :(得分:1)
为什么查询操作可以通过dev-peer0.org1.example.com-mycc-1.0的名称为Org1 peer0创建容器,通常我们应该首先实例化?
链代码的实例化只针对特定对等体执行一次,最终跨越该特定对等体上具有链代码的容器。因此,您可能会查询另一个对等方:
运行容器的原因很简单,查询必须反对链码,这实际上是对链码定义的函数之一的调用。
答案 1 :(得分:0)
你有一个关于它的解释here。但是,我会粘贴答案。
链代码容器的目的是确保智能合约的执行与对等方本身隔离,这样智能合约(链代码)就不会因为错误或恶意代码而崩溃甚至访问对等方。实例化链代码时,对等方使用链代码填充容器映像,并调用Docker管理API来部署该映像。如果容器未运行,它将启动一个新容器。一旦运行,对等方收到的所有事务和提议都将被传输到该容器以供执行。
chaincode容器运行智能合约逻辑。当您实例化链代码时,会模拟Init方法并将其返回给客户端,以便发送给订购者以创建新事务(init事务,将链代码绑定到通道)。这就是容器启动的原因,如果之前没有运行过。