From 9ca68a5084d1bd7868337281f4ab0a1a5e2539e1 Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Tue, 3 Jan 2017 17:05:39 +0900 Subject: [PATCH] Update the ARCHITECTURE document Also has a pretty line diagram --- docs/ARCHITECTURE.rst | 94 +++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/docs/ARCHITECTURE.rst b/docs/ARCHITECTURE.rst index 81d9800..7c968fa 100644 --- a/docs/ARCHITECTURE.rst +++ b/docs/ARCHITECTURE.rst @@ -1,85 +1,85 @@ Components ========== -The components of the server are roughly like this:: - - ------- - - Env - - ------- - - ------- - - IRC - - ------- - < - ------------- ------------ - - ElectrumX -<<<<<- LocalRPC - - ------------- ------------ - < > - ---------- ------------------- - - Daemon -<<<<<<<<- Block processor - - ---------- ------------------- - < < > - -------------- ----------- - - Prefetcher - - FS + DB - - -------------- ----------- - +.. image:: https://docs.google.com/drawings/d/1Su_DR2c8__-4phm12hAzV65fL2tNm_1IhKr4XivkW6Q/pub?w=720&h=540 + :target: https://docs.google.com/drawings/d/1Su_DR2c8__-4phm12hAzV65fL2tNm_1IhKr4XivkW6Q/pub?w=960&h=720 Env --- -Holds configuration taken from the environment. Handles defaults -appropriately. Generally passed to the constructor of other -components which take their settings from it. +Holds configuration taken from the environment, with apprioriate +defaulting appropriately. Generally passed to the constructor of +other components which take their settings from it. + +Controller +---------- + +The central part of the server process initialising and coordinating +all the others. Manages resource usage. LocalRPC -------- Handles local JSON RPC connections querying ElectrumX server state. -Not started until the block processor has caught up with the daemon. +Started when the ElectrumX process starts. ElectrumX --------- Handles JSON Electrum client connections over TCP or SSL. One instance per client session. Should be the only component concerned -with the details of the Electrum wire protocol. Responsible for -caching of client responses. Not started until the block processor -has caught up with the daemon. Logically, if not yet in practice, a -coin-specific class. +with the details of the Electrum wire protocol. + +Not started until the block processor has caught up with the daemon. Daemon ------ -Used by the block processor, ElectrumX servers and prefetcher. -Encapsulates daemon RPC wire protcol. Logically, if not yet in -practice, a coin-specific class. +Encapsulates the RPC wire protcol with bitcoind for the whole server. +Transparently handles temporary daemon errors, and fails over if +necessary. + Block Processor --------------- Responsible for managing block chain state (UTXO set, history, -transaction and undo information) and processing towards the chain -tip. Uses the caches for in-memory state updates since the last -flush. Flushes state to the storage layer. Reponsible for handling -block chain reorganisations. Once caught up maintains a -representation of daemon mempool state. +transaction and undo information) and for handling block chain +reorganisations. -Database --------- +When caught up, processes new blocks as they are found, and flushes +the updates to the database immediately. -The database. Along with the host filesystem stores flushed chain state. +When syncing uses caches for in-memory state updates since the prior +flush. Occasionally flushes state to the storage layer when caches +get large. Prefetcher ---------- -Used by the block processor to asynchronously prefetch blocks from the -daemon. Holds fetched block height. Once it has caught up -additionally obtains daemon mempool tx hashes. Serves blocks and -mempool hashes to the block processor via a queue. +Cooperates with the block processor to asynchronously prefetch blocks +from bitcoind. Once it has caught up it additionally requests mempool +transaction hashes from bitcoind. Serves blocks to the block +processor via a queue, and the mempool hashes to the Mempool object. + +Mempool +------- + +Handles all the details of maintaining a representation of bitcoind's +mempool state. Obtains the list of current mempool transaction hashes +from the Daemon when notified by the Prefetcher. + +Notifies the controller that addresses have been touched when the +mempool refreshes (or implicitly when a new block is found). + +Database +-------- + +The database. Flushed chain state is stored in the DB backend, such +as leveldb, along with metadata on the host filesystem. IRC --- -Not currently imlpemented; will handle IRC communication for the -ElectrumX servers. +Handles advertising of ElectrumX services via IRC.