Как я могу фиксировать события, сгенерированные транзакциями в Hyperledger Fabric?

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


person Pippo Pluto    schedule 08.06.2020    source источник


Ответы (1)


События, которые генерирует чейнкод, сохраняются в транзакции.

В вашем случае вам нужно будет подключиться к узлу и прослушивать события контракта.

Это пример клиента Node.JS:

const n = await gateway.getNetwork("mychannel");
const contract: network.Contract = n.getContract("fabcar");
contract.addContractListener(async (event) => {
  console.log(event.eventName, event.payload.toString("utf-8"));
});

Вывод будет:

itemCreated 1f6629d7-999b-4cbb-8b36-68e1de2aa373

Затем в чейнкоде вы установите событие, это пример на Java:

ctx.getStub().setEvent("itemCreated", StringUtils.getBytes(item.id, StandardCharsets.UTF_8));

Если вы хотите выяснить, какие события происходят в транзакции, вы можете получить блок, выполнив следующие сценарии:

BLOCK_NUMBER=1 # whatever block you want to fetch
peer channel fetch -c mychannel ${BLOCK_NUMBER}
configtxlator proto_decode --input mychannel_${BLOCK_NUMBER}.block --type common.Block > mychannel_${BLOCK_NUMBER}.json

И тогда вы увидите в JSON ключ с именем events:

свойство событий в формате JSON

person David Viejo    schedule 10.06.2020
comment
Хорошо, у меня есть две папки: одна с моим проектом, другая с оригинальными образцами ткани. Во втором я создал два приложения (для Org1 И Org2 (они находятся в одном канале и имеют один и тот же контракт)). Если я отправлю транзакцию от пользователя приложения 1, пользователь приложения 2 получит событие (установленное через addContractListener). В первом проекте этого не происходит, и я не могу понять, почему. - person Pippo Pluto; 11.06.2020