Я пытаюсь построить бизнес-модель в Hyperledger Composer. У меня есть 2 участника: продавец и покупатель, а также один актив - доставка. У меня есть 2 транзакции: создать доставку и получить доставку. createDelivery создает актив, а receiveDelivery изменяет статус доставки.
У клиента есть поле Инвентаризация, и моя цель состоит в том, чтобы при прохождении транзакции receiveDelivery поле Инвентаризация в активе клиента обновлялось по количеству поставки.
Я получаю сообщение об ошибке, когда пытаюсь вызвать функцию verifyDelivery, и ошибка выглядит следующим образом: Обратите внимание, что 01 - это идентификатор клиента.
Вот мой файл модели:
namespace org.example
participant customer identified by CompanyID {
o String CompanyID
o String Name
o Integer Inventory
}
participant vendor identified by CompanyID {
o String CompanyID
o String Name
}
asset Delivery identified by DeliveryID {
o String DeliveryID
o String Material
o Integer Quantity
o DeliveryStatus Status
--> vendor vendor
--> customer customer
}
enum DeliveryStatus {
o Created
o Received
}
transaction createDelivery {
o String DeliveryID
o String Material
o Integer Quantity
--> vendor vendor
--> customer customer
}
transaction receiveDelivery {
--> Delivery Delivery
}
Ниже приведен файл скрипта:
'use strict';
/**
* Create Delivery.
* @param {org.example.createDelivery} createDelivery
* @transaction
*/
async function createDelivery(createDelivery) { // eslint-disable-line no-unused-vars
const factory = getFactory();
const NS = 'org.example';
var delivery = factory.newResource(NS, 'Delivery', createDelivery.DeliveryID);
delivery.customer = factory.newRelationship(NS, 'customer', createDelivery.customer.getIdentifier());
delivery.vendor = factory.newRelationship(NS, 'vendor', createDelivery.vendor.getIdentifier());
delivery.Material = createDelivery.Material;
delivery.Quantity = createDelivery.Quantity;
delivery.Status = "Created";
//save the asset
const assetRegistry = await getAssetRegistry(delivery.getFullyQualifiedType());
await assetRegistry.add(delivery);
}
/**
* Receive Delivery.
* @param {org.example.receiveDelivery} receiveDelivery
* @transaction
*/
async function receiveDelivery(receiveDelivery) { // eslint-disable-line no-unused-vars
const factory = getFactory();
const NS = 'org.example';
var delivery = receiveDelivery.Delivery
var quantity = delivery.Quantity
const customer = await getParticipantRegistry(delivery.customer.getIdentifier());
customer.Inventory += quantity;
await customer.update(customer)
delivery.Status = 'Received'
}
ACL по умолчанию:
rule NetworkAdminUser {
description: "Grant business network administrators full access to user resources"
participant: "org.hyperledger.composer.system.NetworkAdmin"
operation: ALL
resource: "**"
action: ALLOW
}
rule NetworkAdminSystem {
description: "Grant business network administrators full access to system resources"
participant: "org.hyperledger.composer.system.NetworkAdmin"
operation: ALL
resource: "org.hyperledger.composer.system.**"
action: ALLOW
}
rule GrantSysAccess {
description: "Grant access to all Participants to target system registries"
participant: "org.hyperledger.composer.system.Participant"
operation: ALL
resource: "org.hyperledger.composer.system.**"
action: ALLOW
}
Я уже час пытаюсь решить эту ошибку и буду признателен, если вы поможете мне с этим.