问题描述
练手一个小项目时,在fabric链上部署了两个合约,一个是DidContract.java,另一个是VerifiableClaimsContract.java,直接使用peer命令调用链码时报错找不到合约。
扒源码
但是查看官方的开发文档,合约“编写-打包-部署”又没有问题,于是查看java的fabric SDK的底层源码,发现SDK在连接区块链执行命令时,进行了一个简单的字符串拼接,即“合约name:”+“函数name”。
解决办法
使用命令调用合约时,如果你在合约中使用了@Default注解,那么直接用peer即可,如果是多个合约,另一个合约没有@Default,在函数前加上所属的合约名。
譬如,调用命令为:
peer chaincode query -C mychannel -n test -c '{"Args":["DidContract:queryDidContextByDid","test"]}'