【发布时间】:2020-01-23 08:45:07
【问题描述】:
我正在构建一个基于 Hyperledger Fabric 的系统,该系统需要存储以下相关信息:
- 资金清单
- 投资这些基金的合作伙伴(投资者)名单,以及
- 订阅列表,代表基金与合作伙伴之间的关系
每一个都是单独的对象类型,有自己的一组字段,需要独立存储和查询。基金对象和合作伙伴对象都应该包含它们相关的订阅数组。
但是,我发现很难找到具有这种结构的链码示例。所有的对象都是强互连的(一个对象数据的修改直接意味着其他对象的修改),所以我希望它们存储在一个链码上,但是它们使用的操作是非常不同的。命名空间是否打算以这种方式使用?
我尝试将它们作为单独的合约存储在同一个链码上(使用来自this 问题的最佳答案):
papercontract.js
class FundContext extends Context {
constructor() {
super();
this.subList = new SubList(this);
this.fundList = new FundList(this);
this.partnerList = new PartnerList(this);
}
}
class PartnerContext extends Context...
class SubContext extends Context...
class FundContract extends Contract {
constructor() {
super('fund');
}
async createFund(ctx, id, name, amount_committed, amount_raised) {
...
}
}
...
class SubContract extends Contract...
class PartnerContract extends Contract...
...
module.exports.FundContract = FundContract;
module.exports.PartnerContract = PartnerContract;
module.exports.SubContract = SubContract;
index.js
const SubContract = require('./lib/papercontract').SubContract;
const FundContract = require('./lib/papercontract').FundContract;
const PartnerContract = require('./lib/papercontract').PartnerContract;
module.exports.SubContract = SubContract;
module.exports.FundContract = FundContract;
module.exports.PartnerContract = PartnerContract;
module.exports.contracts = [ SubContract, FundContract, PartnerContract ];
问题.js
const contract = await network.getContract('papercontract','FundContract');
await contract.submitTransaction('createFund', data._id, data.name, data.amount_committed, data.amount_raised);
但这会返回错误:
Error: Contract name is not known: FundContract
我可以通过将对象类型(以字符串形式)存储为“类”字段来解决这个问题,并通过搜索 id 和类来查找对象,这...有效,但感觉 非常在一个数组中存储一堆完全不同的对象类型很麻烦。我怀疑这是打算使用它的方式。
我不确定为什么会出现上述错误,或者这是否是处理核心问题的最佳方式。任何帮助将不胜感激。
【问题讨论】:
-
在您的基金合约构造函数中,您将合约注册为
fund而不是FundContract。所以尝试const contract = await network.getContract('papercontract','fund');或将super('fund')替换为super('FundContract')。 -
但是关于您更广泛的问题,您是否有需要更新多种状态的单独操作?
-
@GariSingh 是的,这就是想法 - 操作需要一次更新多个对象(订阅更新还必须在单个链码调用中更新其关联的基金和合作伙伴)。
标签: hyperledger-fabric hyperledger