Hyperledger Composer: обмен данными между двумя участниками

Пожалуйста, рассмотрите сценарий ниже:

  1. Участник А вызывает TP и создает актив XYZ.
  2. Теперь А также хочет сообщить участнику Б уникальный идентификатор актива, который он создал.

Должен ли А генерировать событие с идентификатором актива? Но я читал, что на события подписываются приложения node.js. Есть ли способ для B, чтобы получить идентификатор?

Предполагая, что идентификатор актива, который создал A, совпадает с идентификатором транзакции, может ли B прочитать реестр транзакций и получить эту информацию? Я пытался сделать это, но я получил ошибку:

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

Но композиторская площадка выдала ошибку, что getTransactionRegistry() не определено.

---РЕДАКТИРОВАТЬ--

На самом деле, getTransactionRegistry() не будет работать, потому что для получения конкретной транзакции мне сначала нужен идентификатор.

3 ответа

getTransactionRegistry это глобальная функция в коде цепи Вы звоните из своего клиентского приложения? В этом случае вы должны написать что-то вроде connection.getTransactionRegistry,

Насколько я знаю, когда вы создаете актив, вы должны дать ему уникальный идентификатор вручную. Кроме того, у вас не будет актива в реестре, пока транзакция не будет отправлена.

Вы правы, что события подписаны клиентским кодом. И это предпочтительный способ уведомить другого клиента о новых активах. Поэтому вместо поиска идентификатора транзакции вы должны подписаться на событие, которое вы генерируете в своем коде транзакции.

Например, ваше клиентское приложение вызывает транзакцию, которая добавляет ресурс в реестр и генерирует соответствующее событие. Другая компания запускает собственное клиентское приложение, которое слушает события. Как только транзакция обработана, они уведомляются о новом активе.

Правильный способ борьбы с ним не будет связан с событиями.

Вы просто создадите реестр активов, назовите его 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.

Надеюсь это поможет...

Другие вопросы по тегам