Components ========== .. 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, 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. 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. Not started until the block processor has caught up with the daemon. Daemon ------ 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 for handling block chain reorganisations. When caught up, processes new blocks as they are found, and flushes the updates to the database immediately. 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 ---------- 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 --- Handles advertising of ElectrumX services via IRC.