| Name | Description |
|---|---|
| libbitcoin_cli | RPC client functionality used by bitcoin-cli executable |
| libbitcoin_common | Home for common functionality shared by different executables and libraries. Similar to libbitcoin_util, but higher-level (see Dependencies). |
| libbitcoin_consensus | Consensus functionality used by libbitcoin_node and libbitcoin_wallet. |
| libbitcoin_crypto | Hardware-optimized functions for data encryption, hashing, message authentication, and key derivation. |
| libbitcoin_kernel | Consensus engine and support library used for validation by libbitcoin_node. |
| libbitcoinqt | GUI functionality used by bitcoin-qt and bitcoin-gui executables. |
| libbitcoin_ipc | IPC functionality used by bitcoin-node and bitcoin-gui executables to communicate when `-DENABLE_IPC=ON` is used. |
| libbitcoin_node | P2P and RPC server functionality used by bitcoind and bitcoin-qt executables. |
| libbitcoin_util | Home for common functionality shared by different executables and libraries. Similar to libbitcoin_common, but lower-level (see Dependencies). |
| libbitcoin_wallet | Wallet functionality used by bitcoind and bitcoin-wallet executables. |
| libbitcoin_wallet_tool | Lower-level wallet functionality used by bitcoin-wallet executable. |
| libbitcoin_zmq | ZeroMQ functionality used by bitcoind and bitcoin-qt executables. |
- libbitcoin_node code lives in src/node/ in the node:: namespace
- libbitcoin_wallet code lives in src/wallet/ in the wallet:: namespace
- libbitcoin_ipc code lives in src/ipc/ in the ipc:: namespace
- libbitcoin_util code lives in src/util/ in the util:: namespace
- libbitcoin_consensus code lives in src/consensus/ in the Consensus:: namespace
<table><tr><td>
%%{ init : { "flowchart" : { "curve" : "basis" }}}%%
graph TD;
bitcoin-cli[bitcoin-cli]-->libbitcoin_cli;
bitcoind[bitcoind]-->libbitcoin_node;
bitcoind[bitcoind]-->libbitcoin_wallet;
bitcoin-qt[bitcoin-qt]-->libbitcoin_node;
bitcoin-qt[bitcoin-qt]-->libbitcoinqt;
bitcoin-qt[bitcoin-qt]-->libbitcoin_wallet;
bitcoin-wallet[bitcoin-wallet]-->libbitcoin_wallet;
bitcoin-wallet[bitcoin-wallet]-->libbitcoin_wallet_tool;
libbitcoin_cli-->libbitcoin_util;
libbitcoin_cli-->libbitcoin_common;
libbitcoin_consensus-->libbitcoin_crypto;
libbitcoin_common-->libbitcoin_consensus;
libbitcoin_common-->libbitcoin_crypto;
libbitcoin_common-->libbitcoin_util;
libbitcoin_kernel-->libbitcoin_consensus;
libbitcoin_kernel-->libbitcoin_crypto;
libbitcoin_kernel-->libbitcoin_util;
libbitcoin_node-->libbitcoin_consensus;
libbitcoin_node-->libbitcoin_crypto;
libbitcoin_node-->libbitcoin_kernel;
libbitcoin_node-->libbitcoin_common;
libbitcoin_node-->libbitcoin_util;
libbitcoinqt-->libbitcoin_common;
libbitcoinqt-->libbitcoin_util;
libbitcoin_util-->libbitcoin_crypto;
libbitcoin_wallet-->libbitcoin_common;
libbitcoin_wallet-->libbitcoin_crypto;
libbitcoin_wallet-->libbitcoin_util;
libbitcoin_wallet_tool-->libbitcoin_wallet;
libbitcoin_wallet_tool-->libbitcoin_util;
classDef bold stroke-width:2px, font-weight:bold, font-size: smaller;
class bitcoin-qt,bitcoind,bitcoin-cli,bitcoin-wallet bold
</td></tr><tr><td>
Dependency graph. Arrows show linker symbol dependencies. Crypto lib depends on nothing. Util lib is depended on by everything. Kernel lib depends only on consensus, crypto, and util.
</td></tr></table>
interfaces::Chain abstract class in `interfaces/chain.h` and node code calls wallet code through the interfaces::ChainClient and interfaces::Chain::Notifications abstract classes in the same file. In general, defining abstract classes in `src/interfaces/` can be a convenient way of avoiding unwanted direct dependencies or circular dependencies between libraries.