我正在基于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 ];
issue.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
我可以通过将对象类型(以字符串形式)存储为“ class”字段,并通过搜索id和class来查找对象,来解决这个问题,这很有效,但是感觉非常混乱,无法在一个数组中存储一堆完全不同的对象类型。我怀疑这是打算使用的方式。
我不确定为什么会出现上述错误,或者那是否甚至是处理核心问题的最佳方法。任何帮助将不胜感激。
const SubContract = require('./lib/SubContract.js');
const FundContract = require('./lib/FundContract.js');
const PartnerContract = require('./lib/PartnerContract.js');
module.exports.contracts = [SubContract,FundContract,PartnerContract];
关于组织问题,如果您对要在合同中操作的对象(状态和状态列表)实施抽象,如图here所示,则可以将不同的对象保存在不同的数组中。以这种方式,查询您的世界状态将更加简单。清楚吗?