github.com/badrootd/nibiru-cometbft@v0.37.5-0.20240307173500-2a75559eee9b/docs/architecture/adr-021-abci-events.md (about)

     1  # ADR 012: ABCI Events
     2  
     3  ## Changelog
     4  
     5  - *2018-09-02* Remove ABCI errors component. Update description for events
     6  - *2018-07-12* Initial version
     7  
     8  ## Context
     9  
    10  ABCI tags were first described in [ADR 002](https://github.com/tendermint/tendermint/blob/v0.37.x/docs/architecture/adr-002-event-subscription.md).
    11  They are key-value pairs that can be used to index transactions.
    12  
    13  Currently, ABCI messages return a list of tags to describe an
    14  "event" that took place during the Check/DeliverTx/Begin/EndBlock,
    15  where each tag refers to a different property of the event, like the sending and receiving account addresses.
    16  
    17  Since there is only one list of tags, recording data for multiple such events in
    18  a single Check/DeliverTx/Begin/EndBlock must be done using prefixes in the key
    19  space.
    20  
    21  Alternatively, groups of tags that constitute an event can be separated by a
    22  special tag that denotes a break between the events. This would allow
    23  straightforward encoding of multiple events into a single list of tags without
    24  prefixing, at the cost of these "special" tags to separate the different events.
    25  
    26  TODO: brief description of how the indexing works
    27  
    28  ## Decision
    29  
    30  Instead of returning a list of tags, return a list of events, where
    31  each event is a list of tags. This way we naturally capture the concept of
    32  multiple events happening during a single ABCI message.
    33  
    34  TODO: describe impact on indexing and querying
    35  
    36  ## Status
    37  
    38  Implemented
    39  
    40  ## Consequences
    41  
    42  ### Positive
    43  
    44  - Ability to track distinct events separate from ABCI calls (DeliverTx/BeginBlock/EndBlock)
    45  - More powerful query abilities
    46  
    47  ### Negative
    48  
    49  - More complex query syntax
    50  - More complex search implementation
    51  
    52  ### Neutral