Hyperledger Composer: обмен данными между двумя участниками
Пожалуйста, рассмотрите сценарий ниже:
- Участник А вызывает TP и создает актив XYZ.
- Теперь А также хочет сообщить участнику Б уникальный идентификатор актива, который он создал.
Должен ли А генерировать событие с идентификатором актива? Но я читал, что на события подписываются приложения 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.
Надеюсь это поможет...