Ожидается ресурс или концепция - PullRequest
0 голосов
/ 20 ноября 2018

Я новичок в игровой площадке композитора, но получаю ошибку, указанную в названии.В моем коде транзакции что-то не так.Помощь очень ценится.

logic.js:

    /**
 * Make an entry for the action performed
 * @param {org.gbpcs.network.Document_Transaction} tx - transaction that contains the document,
 the user and the new action taken.
 * @transaction
 */
async function documentAction(tx) {


// add document action to user story
tx.modifier.actions.push(tx.action.action_id);
let assetRegistry = await getAssetRegistry('org.gbpcs.network.User')
// persist the state of the user
await assetRegistry.update(tx.modifier.actions);


// add document action to document story
tx.document.actions.push(tx.action.action_id);
assetRegistry = await getAssetRegistry('org.gbpcs.network.Document')
// persist the state of the document actions
await assetRegistry.update(tx.document.actions);


// emit a notification that entry was made
let actionNotification = getFactory().newEvent('org.gbpcs.network', 'Action_Notification');
actionNotification.document = tx.document;
actionNotification.user = tx.modifier;
emit(actionNotification);

}

модель

namespace org.gbpcs.network

enum OPERATION {
    o READ
    o WRITE
    o UPDATE
    o DELETE   
    o CREATE 
}

asset Document identified by document_id{
    o String document_id
    // list of action_ids
    o String[] actions
}

participant User identified by user_id {
    o String user_id
    // list of actions_ids
    o String[] actions
}

asset Document_Action identified by action_id {

  o String action_id
  o DateTime time
  o Boolean success
  o OPERATION operation

}

transaction Document_Transaction {
  // document action was performed upon
  --> Document document
  // user that performed this action
  --> User modifier
  // action that was performed upon the document
  --> Document_Action action
}

event Action_Notification {
  --> User user
  --> Document document
}

Как упоминалось выше, ошибка возникает, когда явыполнить Document_transaction на площадке Composer.Я посмотрел на ошибки, но они кажутся очень специфичными для модели.Поэтому я знаю, что ошибка произошла и с другими.

1 Ответ

0 голосов
/ 21 ноября 2018
  1. tx.modifier является ссылкой на Участника-пользователя, а не на Актив, поэтому вам нужно getParticipantRegistry вместо getAssetRegistry
  2. , вам нужно обновить только tx.modifier в participantRegistry.update() и tx.document in assetRegistry.update()

Здесь изменен login.js

    /**
 * Make an entry for the action performed
 * @param {org.gbpcs.network.Document_Transaction} tx - transaction that contains the document,
 the user and the new action taken.
 * @transaction
 */
async function documentAction(tx) {


    // add document action to user story
    tx.modifier.actions.push(tx.action.action_id);
    let participantRegistry = await getParticipantRegistry('org.gbpcs.network.User')
    // persist the state of the user
    await participantRegistry.update(tx.modifier);


    // add document action to document story
    tx.document.actions.push(tx.action.action_id);
    let assetRegistry = await getAssetRegistry('org.gbpcs.network.Document')
    // persist the state of the document actions
    await assetRegistry.update(tx.document);


    // emit a notification that entry was made
    let actionNotification = getFactory().newEvent('org.gbpcs.network', 'Action_Notification');
    actionNotification.document = tx.document;
    actionNotification.user = tx.modifier;
    emit(actionNotification);
    }
...