Hyperledger Fabric中的渠道内和跨渠道的Chaincode(智能合约)交互

时间:2018-08-02 15:20:02

标签: hyperledger-fabric blockchain hyperledger smartcontracts

如图所示,在Hyperledger Fabric网络中考虑组织对等设置。

enter image description here

组织1有两个对等体,组织2有一个对等体-所有这些对等体都存在于同一通道中-X。组织3具有一个对等体,它们存在于同一个通道之外。

对等方具有各自不同的链码(c1,c2,c3和c4),并具有上述功能。

write() - put a key-value pair into the ledger  
update() - update a value for an existing key  
read() - query an existing key-value pair  

现在有几个问题。

  1. c3可以调用c2来更新键的值(因为c3不具有update()功能)吗?
  2. c4是否可以调用c2来更新键的值(因为c4不具有update()功能)?
  3. c3.read()是否可以查询c1.write()创建的数据?
       链码教程上的This link说:“一个链码创建的状态仅适用于该链码,并且不能被另一个链码直接访问”。这是否也适用于同一渠道中的对等方?据我了解,所有参与的同行都可以访问区块链分类帐数据。
  4. c4.read()可以查询c1.write()创建的数据吗?
  5. c2.update()是否可以更新c1.write()创建的数据?

1 个答案:

答案 0 :(得分:2)

对等只能执行已安装并有权访问(本地)的链码。给定对等方可以有多个链码,但是对等方不能执行其他对等方的链码。

摘自https://fabric-shim.github.io/ChaincodeStub.html#invokeChaincode__anchorChaincodeStub.invokeChaincode(chaincodeName, args, channel)文档:

  

使用相同的事务上下文在本地调用指定的链码invoke();也就是说,chaincode调用chaincode不会创建新的交易消息。

您应该能够为所有对等方安装每个链码,并使用ChaincodeStub.invokeChaincode方法和ClientIdentity类(https://fabric-shim.github.io/ClientIdentity.html)来进行访问控制。