Hyperledger在同一事务中更新资产和参与者

时间:2018-03-24 21:39:01

标签: hyperledger-composer

我正在测试hyperledger中的关系。

我的模型文件有一个事务myTransaction,它与使用from变量的帐户有关系。

from(帐户)与资产中使用accountholder的AccountHolder有关系

/*
 * My first BlockChain Application
 */
namespace org.bahrain.rashidbank

asset Account identified by accountId {
    o String accountId
    o Double balance
    -- > AccountHolder accountholder
}

participant AccountHolder identified by accountholderId {
    o String accountholderId
    o String additionaldata

}

transaction myTransaction {
    -- > Account from
    o Double somenumber
    o String additionaldataa
    o String accountholderID
}

Model file

我的Javascript脚本文件正在尝试使用事务对象balance

更新additionaldatarashidtransaction
/*
 * @param {org.bahrain.rashidbank.myTransaction} rashidtransaction
 * @transaction
 */
function anyfunctionname(rashidtransaction) {
    console.log("Passed Parameters", rashidtransaction);
    rashidtransaction.from.balance = rashidtransaction.somenumber;

    rashidtransaction.from.accountholder.accountholderId = rashidtransaction.accountholderID;
    rashidtransaction.from.accountholder.additionaldata = rashidtransaction.additionaldataa;


    return getAssetRegistry('org.bahrain.rashidbank.Account')
        .then(function(assetregistry) {

            return assetregistry.update(rashidtransaction.from);

        })
}

Script File

以下是我在测试页面中创建的交易。 但抛出以下错误

t: Instance org.bahrain.rashidbank.Account#Rashid missing required field accountholder

enter image description here

问题:为什么我无法更新同一交易中的AccountHolder.additionaldata参与者。

1 个答案:

答案 0 :(得分:1)

首先,我不认为您可以在更新资产时更改唯一ID。首先,您必须删除该资源并使用该唯一ID创建新资源。

要回答您的问题,为了更新帐户持有人资源,您必须更新自己的注册表,即您还必须更新帐户注册表,如下所示:

/**
 * @param {org.bahrain.rashidbank.myTransaction} rashidtransaction
 * @transaction
 */
async function anyfunctionname(rashidtransaction) {
  let assetReg = await getAssetRegistry('org.bahrain.rashidbank.Account')
  let participantReg = await getParticipantRegistry('org.bahrain.rashidbank.AccountHolder')

  rashidtransaction.from.balance = rashidtransaction.somenumber;
  rashidtransaction.from.accountholder.additionaldata = rashidtransaction.additionaldataa;

  await assetReg.update(rashidtransaction.from)
  await participantReg.update(rashidtransaction.from.accountholder)
}