Key component of the every blockchain architecture must be a reliable event bus. There are many parallel actors working with the data of a node, like
- peers gossiping and requesting information, like new transactions, or new blocks
- wallets initiating transactions
- miners or validators working directly or indirectly with a node
- blockchain explorers requesting important data regularly
- and of course an advanced logging system writing everything to a local log and supporting both standard and debug mode is also required.
For this reason, it is practical that every node implements an event bus with the funcionalities:
- different actors can push different pieces of information on the bus, with the type of information and the severity of the information or error.
- different actors can subscribe for different pieces of information, as an example, a logger would write everything into a file, a wallet would be interested on events if the blockchain gets synchronized, if the initiated transaction gets mined or validated, if the balance of a supervised account changes and so on. Similarly, a blockchain explorer interested if there is a new transaction which is being gossiped into the system, if there is a new but still not validated block, if there is a new validated block and so on.
Even some part of the standard protocol might work totally asynchronous from each other realizing the central communication protocol via an internal event bus of the node.