mirror of
https://github.com/tendermint/tendermint.git
synced 2026-02-03 18:42:14 +00:00
* Update docs references from master to main Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update DOCS_README to reflect current reality Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update vuepress config with current versions and updated discussions link Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update generated docs versions Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update docs build to use temp folder instead of home Signed-off-by: Thane Thomson <connect@thanethomson.com> * Document build-docs Makefile target Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add serve-docs Makefile target to serve local build of docs Signed-off-by: Thane Thomson <connect@thanethomson.com> * Ensure 404 page is copied during docs build Signed-off-by: Thane Thomson <connect@thanethomson.com> * Redirect /master/ to /main/ Signed-off-by: Thane Thomson <connect@thanethomson.com> * Attempt to resolve #7908 Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update OpenAPI references from master to main Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update CHANGELOG references from master to main Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update Docker readme references from master to main Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update UPGRADING references from master to main Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update package-specific documentation references from master to main Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update spec references from master to main Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update all code comment references to docs site from master to main Signed-off-by: Thane Thomson <connect@thanethomson.com> * Build v0.34.x as "latest" Signed-off-by: Thane Thomson <connect@thanethomson.com> * Explicitly mark v0.34 docs as latest in version selector Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update all links from docs.tendermint.com/main to docs.tendermint.com/latest Signed-off-by: Thane Thomson <connect@thanethomson.com> * ci: Redeploy docs on pushes to v0.34.x Signed-off-by: Thane Thomson <connect@thanethomson.com> * Temporarily copy spec directory into docs while building Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add nav link to main and clearly mark as unstable Signed-off-by: Thane Thomson <connect@thanethomson.com> * Revert to only publishing docs in nav for v0.34 and v0.33 with no latest Signed-off-by: Thane Thomson <connect@thanethomson.com> * Link to docs.tendermint.com/v0.34 from RFCs Signed-off-by: Thane Thomson <connect@thanethomson.com> * Rather just use main for all docs.tendermint.com references on main branch Signed-off-by: Thane Thomson <connect@thanethomson.com> * Rename GitHub tree links from master to main Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update link for ABCI Rust client Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update github links from master to main Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update badges in root readme Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove codecov badge since we do not use it any more Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove Java and Kotlin tutorials Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove specs from docs build Signed-off-by: Thane Thomson <connect@thanethomson.com> * Migrate spec links to GitHub repo from docs site Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove references to non-existent PEX reactor spec Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix linting badge in README Signed-off-by: Thane Thomson <connect@thanethomson.com> Signed-off-by: Thane Thomson <connect@thanethomson.com>
61 lines
2.9 KiB
Markdown
61 lines
2.9 KiB
Markdown
---
|
|
order: 3
|
|
---
|
|
|
|
# Application Architecture Guide
|
|
|
|
Here we provide a brief guide on the recommended architecture of a
|
|
Tendermint blockchain application.
|
|
|
|
The following diagram provides a superb example:
|
|
|
|

|
|
|
|
We distinguish here between two forms of "application". The first is the
|
|
end-user application, like a desktop-based wallet app that a user downloads,
|
|
which is where the user actually interacts with the system. The other is the
|
|
ABCI application, which is the logic that actually runs on the blockchain.
|
|
Transactions sent by an end-user application are ultimately processed by the ABCI
|
|
application after being committed by the Tendermint consensus.
|
|
|
|
The end-user application in this diagram is the [Lunie](https://lunie.io/) app, located at the bottom
|
|
left. Lunie communicates with a REST API exposed by the application.
|
|
The application with Tendermint nodes and verifies Tendermint light-client proofs
|
|
through the Tendermint Core RPC. The Tendermint Core process communicates with
|
|
a local ABCI application, where the user query or transaction is actually
|
|
processed.
|
|
|
|
The ABCI application must be a deterministic result of the Tendermint
|
|
consensus - any external influence on the application state that didn't
|
|
come through Tendermint could cause a consensus failure. Thus _nothing_
|
|
should communicate with the ABCI application except Tendermint via ABCI.
|
|
|
|
If the ABCI application is written in Go, it can be compiled into the
|
|
Tendermint binary. Otherwise, it should use a unix socket to communicate
|
|
with Tendermint. If it's necessary to use TCP, extra care must be taken
|
|
to encrypt and authenticate the connection.
|
|
|
|
All reads from the ABCI application happen through the Tendermint `/abci_query`
|
|
endpoint. All writes to the ABCI application happen through the Tendermint
|
|
`/broadcast_tx_*` endpoints.
|
|
|
|
The Light-Client Daemon is what provides light clients (end users) with
|
|
nearly all the security of a full node. It formats and broadcasts
|
|
transactions, and verifies proofs of queries and transaction results.
|
|
Note that it need not be a daemon - the Light-Client logic could instead
|
|
be implemented in the same process as the end-user application.
|
|
|
|
Note for those ABCI applications with weaker security requirements, the
|
|
functionality of the Light-Client Daemon can be moved into the ABCI
|
|
application process itself. That said, exposing the ABCI application process
|
|
to anything besides Tendermint over ABCI requires extreme caution, as
|
|
all transactions, and possibly all queries, should still pass through
|
|
Tendermint.
|
|
|
|
See the following for more extensive documentation:
|
|
|
|
- [Interchain Standard for the Light-Client REST API](https://github.com/cosmos/cosmos-sdk/pull/1028)
|
|
- [Tendermint RPC Docs](https://docs.tendermint.com/main/rpc/)
|
|
- [Tendermint in Production](../tendermint-core/running-in-production.md)
|
|
- [ABCI spec](https://github.com/tendermint/spec/tree/95cf253b6df623066ff7cd4074a94e7a3f147c7a/spec/abci)
|