Events in Solidity are a way for a contract to communicate that something happened on the blockchain to your app front-end, which can be listening for certain events and take action when they happen.
Events are declared with the
event keyword, followed by the name of the event, and then a list of parameters.
event MyEvent(bool _myParam);
Events are emitted with the
emit keyword, followed by the name of the event, and then a list of arguments.
Events can be indexed, which allows you to filter events based on the indexed parameters.
event MyEvent(uint256 indexed _myParam);
💰 Cost of indexing
Indexing events costs more gas than non-indexed events. You should only index events that you plan to filter on, otherwise you are unnecessarily increasing the cost on users of your contract.