I’m reading this part of the Tendermint docs:
To draw an analogy, lets talk about a well-known cryptocurrency, Bitcoin. Bitcoin is a cryptocurrency blockchain where each node maintains a fully audited Unspent Transaction Output (UTXO) database. If one wanted to create a Bitcoin-like system on top of ABCI, Tendermint Core would be responsible for
- Sharing blocks and transactions between nodes
- Establishing a canonical/immutable order of transactions (the blockchain)
The application will be responsible for
- Maintaining the UTXO database
- Validating cryptographic signatures of transactions
- Preventing transactions from spending non-existent transactions
- Allowing clients to query the UTXO database.
What happens (in this example) if the application layer of a node disagrees with the application layer on other nodes about the validity of a signature? In Bitcoin, the chain would immediately split into nodes on each side of the disagreement because they would each create a different block.
I’m assuming Tendermint validates application state somehow, e.g. putting an application state hash into blocks?