hyperledger-fabric - 如何在对等 cli 中调用不同合约的方法
问题描述
在 Hyperledger Fabric 中,我在同一个链码(两个控制器)中加载了两个合约。在对等 CLI 上,我设法只调用了我在代码中加载的第一个合约方法。
“调用链代码 Invoke() 返回错误响应 [错误:您要求调用不存在的函数:createPost]。将错误消息发送回对等方”
我的 index.ts (typescript): export const contracts: any[] = [stController, PostController];
2019-03-25T21:11:23.217Z INFO [contracts-spi/chaincodefromcontract.js] Metadata is :
{ contracts:
{ stController:
{ name: 'stController',
contractInstance: { name: 'stController', default: true },
transactions:
[ { name: 'initLedger' },
{ name: 'queryStDoc' },
{ name: 'createStDoc' },
{ name: 'queryAllStDocs' },
{ name: 'queryStByOwner' },
{ name: 'changeStOwner' },
{ name: 'cancel' } ],
info: { title: '', version: '' } },
PostController:
{ name: 'PostController',
contractInstance: { name: 'PostController' },
transactions: [ { name: 'createPost' }, { name: 'deletePost' } ],
info: { title: '', version: '' } },
'org.hyperledger.fabric':
{ name: 'org.hyperledger.fabric',
contractInstance: { name: 'org.hyperledger.fabric' },
transactions: [ { name: 'GetMetadata' } ],
info: { title: '', version: '' } } },
info: { version: '1.0.0', title: 'sget' },
components: { schemas: {} } }
解决方案
我没有在 Typescript 中这样做,但我在 JavaScript 中做了同样的事情——我在两个合约中都使用了超类型来获取命名空间来区分合约。(在我的示例中,我有重复的函数名称 - Fabcar 的 2 个副本。)
constructor() {
super('org.example.car');
}
constructor() {
super('org.example.rob');
}
然后我从 cli 调用函数,如下所示:
peer chaincode invoke -o orderer.example.com:7050 -C mychannel -c '{"Args":["org.example.car:queryCar","CAR2"]}' -n fcnstest
和
peer chaincode invoke -o orderer.example.com:7050 -C mychannel -c '{"Args":["org.example.rob:changeCarOwner","CAR2","Rob"]}' -n fcnstest
商业票据教程有一个使用命名空间/超类型的示例。但它也是 Javascript 而不是打字稿。
推荐阅读
- r - 强制离散时间序列单调递减
- python - 计算交换次数以按降序对列表进行排序
- c# - Visual Studio 用于通过 msbuild 命令行进行增量构建的构建目标
- asp.net-mvc - Automapper - 忽略仅存在于 ViewModel 中的属性
- python - 巴特沃斯低通滤波器
- android - 我有图像查看页面,我想添加一个按钮以从 ImageView 共享图像
- reactjs - 反应不更新重用组件的状态?
- c++ - 为什么我会收到“无效使用 ::(范围解析运算符)?”
- r - gganimate::transition_time() 在不存在的观测值之间转换
- controller - 如何在 Odoo 10 中提供下载二进制文件的路径