Hyperledger Composer:两个参与者之间的数据交换

时间:2018-04-13 11:28:09

标签: hyperledger hyperledger-composer

请考虑以下情况:

  1. 参与者A调用TP并创建资产XYZ。
  2. 现在,A还想告诉参与者B他创建的资产的唯一ID。
  3. A应该使用资产ID发出事件吗?但我读到node.js应用程序订阅了事件。有没有办法让B获得身份证?

    假设A创建的资产ID与事务ID相同,B可以读取事务注册表并获取该信息吗?我试图这样做,但我收到了一个错误:

    var tReg = await getTransactionRegistry('org.acme.sample.SampleTransaction');

    但作曲家游乐场发出的错误是getTransactionRegistry()未定义。

    ---编辑 -

    实际上,getTransactionRegistry()不起作用,因为要获得特定的交易,我首先需要id。

3 个答案:

答案 0 :(得分:0)

getTransactionRegistry是链码中的全局函数。你是从你的客户端应用程序调用它吗?在这种情况下,你应该像connection.getTransactionRegistry一样编写smth。

答案 1 :(得分:0)

据我所知,在创建资产时,您应手动为其指定唯一ID。此外,在提交事务之前,您不会在注册表中拥有该资产。

您是正确的,客户端代码订阅了事件。这是向另一个客户通知新资产的首选方式。因此,您应该订阅在事务代码中发出的事件,而不是查找事务ID。

例如,您的客户端应用程序调用将资产添加到注册表并发出相应事件的事务。另一家公司运行自己的客户端应用程序来监听事件。交易完成后,会立即通知新资产。

答案 2 :(得分:0)

处理它的正确方法与事件无关。

您只需创建一个资产注册表,将其调用MyAsset,然后使用另一个名为AssetListing的注册表,此资产列表可以引用您的资产,如果您在其上执行交易,该资产将被创建调用该事务ListMyAsset

participant Person identified by personId {
  o String personId
  o String fullName
}

asset MyAsset identified by assetId {
  o String assetId
  o String assetName
}

asset AssetListing identified by listingId {
  o String listingId
  o Integer assetPrice
  --> MyAsset asset
}

transaction ListMyAsset {
  --> MyAsset asset
  o Integer assetPrice
}

然后,您可以定义您的交易,该交易将获取资产和价格,并在您的AssetListing注册中创建另一个资产/资源。

接下来,您应该定义ACL规则,允许所有者参与者通过他们自己的资产访问MyAsset注册,并且所有参与者都可以使用AssetListing,如果您不希望AssetListing可用,您可以更新其模型和添加一个sharedWithParticipant关系,可以帮助您编写更具体的ACL规则。

希望这会有所帮助......