Search code examples
hyperledgerhyperledger-composer

Resource or concept expected


I am new to composer playground but get the error mentioned in the title. There is something wrong in my transaction code. Help is greatly appreciated.

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);

}

model

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
}

As mentioned above, the error exists when i perform a Document_transaction in Composer playground. I have looked up the errors but they seem to be very model specific. Therefore, I am aware that the error occured to others as well.


Solution

    1. tx.modifier is a reference of Participant User not of Asset so you need getParticipantRegistry instead of getAssetRegistry
    2. you need to update only tx.modifier in participantRegistry.update() and tx.document in assetRegistry.update()

    Here Changed 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);
        }