Skip to content

Event

Every Event emitted by FireFly shares a common structure.

See Events for a reference for how the overall event bus in Hyperledger FireFly operates, and descriptions of all the sub-categories of events.

Sequence

A local sequence number is assigned to each event, and you can use an API to query events using this sequence number in exactly the same order that they are delivered to your application.

Reference

Events have a reference to the UUID of an object that is the subject of the event, such as a detailed Blockchain Event, or an off-chain Message.

When events are delivered to your application, the reference field is automatically retrieved and included in the JSON payload that is delivered to your application.

You can use the ?fetchreferences query parameter on API calls to request the same in-line JSON payload be included in query results.

The type of the reference also determines what subscription filters apply when performing server-side filters.

Here is the mapping between event types, and the object that you find in the reference field.

Correlator

For some event types, there is a secondary reference to an object that is associated with the event. This is set in a correlator field on the Event, but is not automatically fetched. This field is primarily used for the confirm option on API calls to allow FireFly to determine when a request has succeeded/failed.

Topic

Events have a topic, and how that topic is determined is specific to the type of event. This is intended to be a property you would use to filter events to your application, or query all historical events associated with a given business data stream.

For example when you send a Message, you set the topics you want that message to apply to, and FireFly ensures a consistent global order between all parties that receive that message.

Transaction

When actions are submitted by a FireFly node, they are performed within a FireFly Transaction. The events that occur as a direct result of that transaction, are tagged with the transaction ID so that they can be grouped together.

This construct is a distinct higher level construct than a Blockchain transaction, that groups together a number of operations/events that might be on-chain or off-chain. In some cases, such as unpinned off-chain data transfer, a FireFly transaction can exist when there is no blockchain transaction at all. Wherever possible you will find that FireFly tags the FireFly transaction with any associated Blockchain transaction(s).

Note that some events cannot be tagged with a Transaction ID:

  • Blockchain events, unless they were part of a batch-pin transaction for transfer of a message
  • Token transfers/approvals, unless they had a message transfer associated with them (and included a data payload in the event they emitted)

Reference, Topic and Correlator by Event Type

Types Reference Topic Correlator
transaction_submitted Transaction transaction.type
message_confirmed
message_rejected
Message message.header.topics[i]* message.header.cid
token_pool_confirmed TokenPool tokenPool.id
token_pool_op_failed Operation tokenPool.id tokenPool.id
token_transfer_confirmed TokenTransfer tokenPool.id
token_transfer_op_failed Operation tokenPool.id tokenTransfer.localId
token_approval_confirmed TokenApproval tokenPool.id
token_approval_op_failed Operation tokenPool.id tokenApproval.localId
namespace_confirmed Namespace "ff_definition"
datatype_confirmed Datatype "ff_definition"
identity_confirmed
identity_updated
Identity "ff_definition"
contract_interface_confirmed FFI "ff_definition"
contract_api_confirmed ContractAPI "ff_definition"
blockchain_event_received BlockchainEvent From listener **
blockchain_invoke_op_succeeded Operation
blockchain_invoke_op_failed Operation
blockchain_contract_deploy_op_succeeded Operation
blockchain_contract_deploy_op_failed Operation
  • A separate event is emitted for each topic associated with a Message.

** The topic for a blockchain event is inherited from the blockchain listener, allowing you to create multiple blockchain listeners that all deliver messages to your application on a single FireFly topic.

Example

{
    "id": "5f875824-b36b-4559-9791-a57a2e2b30dd",
    "sequence": 168,
    "type": "transaction_submitted",
    "namespace": "ns1",
    "reference": "0d12aa75-5ed8-48a7-8b54-45274c6edcb1",
    "tx": "0d12aa75-5ed8-48a7-8b54-45274c6edcb1",
    "topic": "batch_pin",
    "created": "2022-05-16T01:23:15Z"
}

Field Descriptions

Field Name Description Type
id The UUID assigned to this event by your local FireFly node UUID
sequence A sequence indicating the order in which events are delivered to your application. Assure to be unique per event in your local FireFly database (unlike the created timestamp) int64
type All interesting activity in FireFly is emitted as a FireFly event, of a given type. The 'type' combined with the 'reference' can be used to determine how to process the event within your application FFEnum:
"transaction_submitted"
"message_confirmed"
"message_rejected"
"datatype_confirmed"
"identity_confirmed"
"identity_updated"
"token_pool_confirmed"
"token_pool_op_failed"
"token_transfer_confirmed"
"token_transfer_op_failed"
"token_approval_confirmed"
"token_approval_op_failed"
"contract_interface_confirmed"
"contract_api_confirmed"
"blockchain_event_received"
"blockchain_invoke_op_succeeded"
"blockchain_invoke_op_failed"
"blockchain_contract_deploy_op_succeeded"
"blockchain_contract_deploy_op_failed"
namespace The namespace of the event. Your application must subscribe to events within a namespace string
reference The UUID of an resource that is the subject of this event. The event type determines what type of resource is referenced, and whether this field might be unset UUID
correlator For message events, this is the 'header.cid' field from the referenced message. For certain other event types, a secondary object is referenced such as a token pool UUID
tx The UUID of a transaction that is event is part of. Not all events are part of a transaction UUID
topic A stream of information this event relates to. For message confirmation events, a separate event is emitted for each topic in the message. For blockchain events, the listener specifies the topic. Rules exist for how the topic is set for other event types string
created The time the event was emitted. Not guaranteed to be unique, or to increase between events in the same order as the final sequence events are delivered to your application. As such, the 'sequence' field should be used instead of the 'created' field for querying events in the exact order they are delivered to applications FFTime