创建新参与者并参考它添加资产阵列 [英] Creating new participant and adding array of assets by reference to it

查看:64
本文介绍了创建新参与者并参考它添加资产阵列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在尝试将新资产添加到作为参与者一部分的一组资产作为参考时,我遇到问题.

I have a problem when trying to add a new asset to an array of assets which are part of the participant as a reference.

在这里,我有一个SharedAccount参与者,该参与者由其成员控制,这些成员通过其帐户中的份额进行连接. 我想编写一个事务来由一个人创建一个新的SharedAccount.当某人提交交易时,应创建该人的股票资产,并将其添加到SharedAccount的股票数组中.

Here I have SharedAccount participant controlled by its members who are connected via their share in the account. I want to write a transaction for creating a new SharedAccount by one person. When a person submits a transaction, it should create a share asset if that person and add it to SharedAccount's shares array.

这是我的代码的样子

.cto:

...
participant SharedAccount identified by sharedAccountId {
  o String sharedAccountId
  --> Share[] shares
  o Double balance
  o Double originalBalance
}

asset Share identified by shareId {
  o String shareId
  --> Person shareHolder
  o Double amount
}

transaction CreateSharedAccount {
  --> Person creator
  o String accountName
  o Integer amount
}
...

.js:

...
/**
 * @param {org.mistral.bulliongrower.CreateSharedAccount} createSharedAccount
 * @transaction
 */
async function CreateSharedAccount(createSharedAccount) {

  const factory = getFactory();
  const NS = 'org.mistral.bulliongrower';

  // create share

  const share = factory.newResource(NS, 'Share', createSharedAccount.creator.personId + 'SHARE');
  share.amount = createSharedAccount.amount;
  share.shareHolder = createSharedAccount.creator;
  share.shareHolder.balance -= createSharedAccount.amount;

  const sharesRegistry = await getAssetRegistry(NS + '.Share');
  await sharesRegistry.add(share);

  const personRegistry = await getParticipantRegistry(NS + '.Person');
  await personRegistry.update(share.shareHolder);

  // create sharedAccount

  const sharedAcc = factory.newResource(NS, 'SharedAccount', createSharedAccount.accountName);
  sharedAcc.shares.push(share);
  sharedAcc.balance = createSharedAccount.amount;
  sharedAcc.originalBalance = createSharedAccount.amount;

  const sharedAccRegistry = await getAssetRegistry(NS + '.SharedAccount');
  await sharedAccRegistry.add(sharedAcc);

}
...

当将共享资产添加到SharedAccount时,我不确定是否应该使用factory.newRelationship以及如何使用. 尝试执行事务时,我在操场上遇到的错误是

I'm not sure if I should use factory.newRelationship and how, when adding a share Asset to SharedAccount. The error I get in the playground when trying to execute the transaction is

TypeError:无法读取未定义的属性"push"

TypeError: Cannot read property 'push' of undefined

推荐答案

尝试执行以下操作:

/**
* @param {org.mistral.bulliongrower.CreateSharedAccount} createSharedAccount
* @transaction
*/
async function CreateSharedAccount(createSharedAccount) {

const factory = getFactory();
const NS = 'org.mistral.bulliongrower';

// create share

const share = factory.newResource(NS, 'Share', createSharedAccount.creator.personId + 'SHARE');
//const share = factory.newRelationship(NS, 'Share', createSharedAccount.creator.personId + 'SHARE');
share.amount = createSharedAccount.amount;
//share.shareHolder = factory.newRelationship(NS, 'Share', createSharedAccount.creator.personId);
share.shareHolder = createSharedAccount.creator;
share.shareHolder.balance -= createSharedAccount.amount;


const sharesRegistry = await getAssetRegistry(NS + '.Share');
await sharesRegistry.add(share);

const personRegistry = await getParticipantRegistry(NS + '.Person');
await personRegistry.update(share.shareHolder);

// create sharedacc

const sharedAcc = factory.newResource(NS, 'SharedAccount', createSharedAccount.accountName);
//sharedAcc.shares = factory.newRelationship(NS, 'Share', createSharedAccount.creator.personId);
//sharedAcc.shares[0] = factory.newRelationship(NS, 'Share', share.shareId);

// define an array  
let  sharesArray = [];
sharesArray.push(share);

sharedAcc.shares = sharesArray;
sharedAcc.balance = createSharedAccount.amount;
sharedAcc.originalBalance = createSharedAccount.amount;

// use getParticipantRegistry not getAssetRegistry
const sharedAccRegistry = await getParticipantRegistry(NS + '.SharedAccount');
await sharedAccRegistry.add(sharedAcc);

}

这篇关于创建新参与者并参考它添加资产阵列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆