Neil Booth
8 years ago
1 changed files with 99 additions and 0 deletions
@ -0,0 +1,99 @@ |
|||
Components |
|||
========== |
|||
|
|||
The components of the server are roughly like this:: |
|||
|
|||
------- |
|||
- Env - |
|||
------- |
|||
|
|||
------- |
|||
- IRC - |
|||
------- |
|||
< |
|||
------------- ------------ |
|||
- ElectrumX -<<<<<- LocalRPC - |
|||
------------- ------------ |
|||
< > |
|||
---------- ------------------- ---------- |
|||
- Daemon -<<<<<<<<- Block processor ->>>>- Caches - |
|||
---------- ------------------- ---------- |
|||
< < > < |
|||
-------------- ----------- |
|||
- Prefetcher - - Storage - |
|||
-------------- ----------- |
|||
|
|||
|
|||
Env |
|||
--- |
|||
|
|||
Holds configuration taken from the environment. Handles defaults |
|||
appropriately. Generally passed to the constructor of other |
|||
components which take their settings from it. |
|||
|
|||
|
|||
LocalRPC |
|||
-------- |
|||
|
|||
Handles local JSON RPC connections querying ElectrumX server state. |
|||
Not started until the block processor has caught up with the daemon. |
|||
|
|||
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. |
|||
|
|||
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. |
|||
|
|||
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 caching. Flushes state to |
|||
the storage layer. Reponsible for handling block chain |
|||
reorganisations. Once caught up maintains a representation of daemon |
|||
mempool state. |
|||
|
|||
Caches |
|||
------ |
|||
|
|||
The file system cache and the UTXO cache are implementation details of |
|||
the block processor, nothing else should interface with them. |
|||
|
|||
Storage |
|||
------- |
|||
|
|||
Backend database abstraction. Along with the host filesystem, used by |
|||
the block processor (and therefore its caches) to store chain state. |
|||
|
|||
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. |
|||
|
|||
IRC |
|||
--- |
|||
|
|||
Not currently imlpemented; will handle IRC communication for the |
|||
ElectrumX servers. |
|||
|
|||
Controller |
|||
---------- |
|||
|
|||
A historical artefact that currently coordinates some of the above |
|||
components. Not pictured as it is doesn't seem to have a logical |
|||
place and so is probably going away. |
Loading…
Reference in new issue