state, which describes the current state of the system, and
transactions, that trigger state transitions.
CheckTx: When a transaction is received by Tendermint Core, it is passed to the application to check if a few basic requirements are met.
CheckTxis used to protect the mempool of full-nodes against spam transactions. A special handler called the
AnteHandleris used to execute a series of validation steps such as checking for sufficient fees and validating the signatures. If the checks are valid, the transaction is added to the mempool (opens new window) and relayed to peer nodes. Note that transactions are not processed (i.e. no modification of the state occurs) with
CheckTxsince they have not been included in a block yet.
DeliverTx: When a valid block (opens new window) is received by Tendermint Core, each transaction in the block is passed to the application via
DeliverTxin order to be processed. It is during this stage that the state transitions occur. The
AnteHandlerexecutes again along with the actual
Msgservice RPC for each message in the transaction.
EndBlock: These messages are executed at the beginning and the end of each block, whether the block contains transaction or not. It is useful to trigger automatic execution of logic. Proceed with caution though, as computationally expensive loops could slow down your blockchain, or even freeze it if the loop is infinite.