Я строю систему на основе Hyperledger Fabri c, в которой необходимо хранить информацию, касающуюся:
- списка фондов
- списка партнеров (инвесторов) инвестирование в эти фонды и
- список подписок, представляющих отношения между фондом и партнером
Каждый из них представляет собой отдельный тип объекта со своим собственным набором поля, и должны храниться и запрашиваться независимо. И объект фонда, и объект партнера должны включать массив связанных подписок.
Однако мне очень трудно найти примеры цепных кодов с такой структурой. Все объекты тесно взаимосвязаны (модификация данных одного объекта напрямую подразумевает модификацию других), поэтому я бы хотел, чтобы они были сохранены в одном цепочечном коде, но операции с ними очень разные. Пространства имен предназначены для использования таким образом?
Я пытался хранить их как отдельные контракты в одном и том же коде цепи (используя верхний ответ из этого вопроса):
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
Я могу обойти это, сохранив тип объекта (в строковой форме) как поле "класс", и найдя объекты путем поиска как идентификатора, так и класса, который ... работает, но очень кажется грязным, чтобы хранить кучу совершенно разных типов объектов в одном массиве. Я сомневаюсь, что это способ, которым это предназначено для использования.
Я не уверен, почему я получаю вышеупомянутую ошибку, или если это было бы даже лучшим способом решения основной проблемы, чтобы начинается с. Любая помощь будет высоко ценится.