如何根据参与者更改名称空间?

时间:2018-09-27 11:22:57

标签: hyperledger-fabric hyperledger hyperledger-composer hyperledger-fabric-ca

我有2位参与者参与我的连锁代码和1次交易,以更改1个资产的所有权。 .cto 文件

asset Product identified by productId{
o String productId
--> User owner
}

abstract participant User {}

participant Buyer identified by buyerId extends User {
o String buyerId
} 

participant Seller identified by sellerId extends User {
o String sellerId
}
transaction changeOwner {
--> User user
--> Product product
} 

//script.js
async function change(tx) {
tx.product.owner = tx.user;
}'

我面临的问题是,当我在作曲家游乐场中对其进行测试时,我可以像

那样编辑事务
  

“所有者”:“ resource:org.example.basic。买方#buyer1”,“所有者”:   “ resource:org.example.basic。卖方#seller1”

如果我采用这种方式,则链代码可以正常工作,但
当我生成其有角度的骨架并提供值时,它看起来像这样

  

“所有者”:“资源:org.example.basic。用户#buyer1”,即使在API中,   正在使用用户

我如何确保它发送正确的命名空间或正确的用户?

1 个答案:

答案 0 :(得分:0)

Composer Playground会为您提供的内容建模,并为建模资产,参与者或交易等提供建议的JSON。它只是一天结束时的游乐场。

您需要将 resource 类传递给事务函数,而不是抽象类User(它不是用于存储或检索对象的资源注册表)。 >

因此您的交易可能应该是(仅基于产品所有者(“所有者”)可以“出售”资产:-)):

asset Product identified by productId{
  o String productId
  --> Seller owner
}

transaction changeOwner {
  --> Product product
  --> Buyer newOwner
}

以及基于当前模型的交易:

//script.js
async function change(tx) {
tx.product.owner.sellerId = tx.newOwner.buyerId;
}

您应该在Angular应用中看到相同的内容。