预期的资源或概念

Resource or concept expected

我是 composer playground 的新手,但遇到标题中提到的错误。我的交易代码有问题。非常感谢帮助。

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 playground 中执行 Document_transaction 时存在错误。 我已经查找了错误,但它们似乎是特定于模型的。因此,我知道该错误也发生在其他人身上。

  1. tx.modifier 是参与者用户而非资产的引用,因此您需要 getParticipantRegistry 而不是 getAssetRegistry
  2. 您只需更新 participantRegistry.update() 中的 tx.modifierassetRegistry.update()
  3. 中的 tx.document

这里改了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);
    }