9.4 链码的相互调用

在第5章中,我们已经介绍过,不同链的账本数据和状态数据等都是物理隔离或者逻辑隔离的。对于同一个链不同链码的状态 数据,会按链码名称生成不同前缀的键,对状态数据进行逻辑隔离。不同的链码实现不同的业务逻辑,是可以相互调用的。调用的方法通过 shim.InvokeChaincode:


 

InvokeChaincode(chaincodeName string, args [][]byte, channel string) pb.Response


其中,chaincodeName是被调用链码的名称,链码名称可以指定版本,比如mycc:1.0这样的形式,args是被调用链码的参数,channel是被调用链码的通道名称,默认调用的是同一个链的链码。链码名称会规范化处理,生成的链码名称是:


 

chaincodeName:chaincodeVersion/channelName


其中的链码版本chaincodeVersion和通道名称channelName都是可选的,对应的分隔符也是可选的,所以链码名称可能有如下几种组合,如表9-10所示。

表9-10 链码相互调用的名称列表

image.png

从上面链码的规范化名称,我们可以看到,链码的相互调用分为以下两种情况:

·同一个链的链码相互调用;

·不同链的链码相互调用。

同一个链或者不同链的调用流程是基本一样的,调用shim.InvokeChaincode后会构造一个类型为 ChaincodeMessage_INVOKE_CHAINCODE的ChaincodeMessage,消息是通过链码和背书节点之间的gRPC连接 直接提交给背书节点的有限状态机处理的,不是通过背书节点接收Proposal的背书流程。背书节点对链码相互调用的处理过程如图9-9所示。

不同链的链码相互调用不同的地方在于会生成一个新的交易模拟器TxSimulator,实现对被调用链数据的访 问,最终生成交易的读写集只会包含调用链的数据,并不会修改被调用链的状态数据。如果是调用相同链的链码,会复用相同的交易模拟器 TxSimulator,链码执行的结果会修改最终的状态数据。


来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=1055

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值