预期资源或概念

时间:2018-11-20 20:15:52

标签: hyperledger hyperledger-composer

我是作曲家游乐场的新手,但遇到标题中提到的错误。我的交易代码有问题。非常感谢您的帮助。

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
}

如上所述,当我在Composer操场上执行Document_transaction时,存在错误。 我查找了错误,但它们似乎是特定于模型的。因此,我知道该错误也发生在其他人身上。

1 个答案:

答案 0 :(得分:1)

  1. tx.modifier是参与者用户(不是资产)的引用,因此您需要getParticipantRegistry而不是getAssetRegistry
  2. 您只需要更新tx.modifier中的participantRegistry.update()tx.document中的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);
    }