当前位置:首页 » 区块链精品文章 » 正文

13.6 应用开发案例三:调用其他链码

3188 人参与  2018年09月29日 11:03  分类 : 区块链精品文章  评论

在同一个区块链上可以部署多个链码,链码与链码之间可以相互调用。这种方式有助于将智能合约的工作模块化,并为应用开发带来更多灵活性。

本节将通过一个示例介绍如何在链码中调用其他链码,详细代码可见examples/chaincode/go/passthru/passthru.go。

该链码的功能可以形容为同一个区块链中其他链码的“网关”,其对外暴露的Invoke接口功能可以使用户指定想要调用的其他链码的ID、方法和参数,通过该“网关”链码传递给指定链码,获得调用结果后再返回给用户。

这里对最核心的Invoke方法进行分析,其核心实现代码如下:


func (p *PassthruChaincode) iq(stub shim.ChaincodeStubInterface, function string,
    args []string) pb.Response {
    if function == "" {
        return shim.Error("Chaincode ID not provided")
    }
    chaincodeID := function

    return stub.InvokeChaincode(chaincodeID, util.ToChaincodeArgs(args...), "")
}

func (p *PassthruChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
    function, args := stub.GetFunctionAndParameters()
    return p.iq(stub, function, args)
}

调用其他链码需要使用stub.InvokeChaincode方法。该方法用于调用另一个链码中的Invoke方法, 格式为InvokeChaincode(chaincodeName string,args[][]byte,channel string)pb.Response,其中chaincodeName为链码ID,args为调用参数,channel为调用的链码所在通道。如果 channel为空,则默认为当前通道。

需要注意,stub.InvokeChaincode方法目前仅限于读操作,同时不会生成新的交易。

示例中,将Invoke的参数原封不动传递给iq方法,其中function的值表示想要调用的链码的ID。

iq方法以链码ID、调用参数(需要用"github.com/hyperledger/fabric/common /util"的To-ChaincodeArgs方法将[]string类型转换为[][]byte类型)、默认当前通道为参数,通过Invoke- Chaincode来完成对另一个链码的调用,并返回结果。


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

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

区块链是什么  

微信号:qq444848023    QQ号:444848023

加入【我是码农】QQ群:864689844(加群验证:我是码农)

<< 上一篇 下一篇 >>

网站分类

标签列表

最近发表

全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试

本站资源大部分来自互联网,版权归原作者所有!