From 5c2758b8df862f2cb48fff890f8d00a4c507ccba Mon Sep 17 00:00:00 2001 From: Adrian Brink Date: Wed, 21 Feb 2018 20:16:22 +0100 Subject: [PATCH] Clarify AnteHandler and MsgHandler --- docs/apps.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/apps.md b/docs/apps.md index 13a356b38c..76434791c2 100644 --- a/docs/apps.md +++ b/docs/apps.md @@ -17,10 +17,14 @@ stores they're given the key for. The BaseApp ensures all stores are properly lo One mounted store is considered the "main" - it holds the latest block header, from which we can find and load the most recent state. -BaseApp distinguishes between two handler types - the `AnteHandler` and the `Handler`. -The former is a stateful validity check (eg. checking nonce and sufficient balance), -the later the full state transition function. Only AnteHandler runs during CheckTx, -while both run in DeliverTx. +BaseApp distinguishes between two handler types - the `AnteHandler` and the `MsgHandler`. +The former is a global validity check (checking nonces, sigs and sufficient balances to pay fees, +e.g. things that apply to all transaction from all modules), the later is the full state transition function. +During CheckTx the state transition function is only applied to the checkTxState and should return +before any expensive state transitions are run (this is up to each developer). It also needs to return the estimated +gas cost. +During DeliverTx the state transition function is applied to the blockchain state and the transactions +need to be fully executed. BaseApp is responsible for managing the context passed into handlers - it makes the block header available and provides the right stores for CheckTx and DeliverTx.