diff --git a/library-structure.adoc b/library-structure.adoc index c45a05a..283b8ba 100644 --- a/library-structure.adoc +++ b/library-structure.adoc @@ -8,50 +8,60 @@ Bitcoin Core compilation outputs a number of libraries, some which are designed The internally-used libraries generally have unstable APIs making them unsuitable for re-use, but `libbitcoin_consensus` and `libbitcoin_kernel` are designed to be re-used by external applications. Bitcoin Core has a https://github.com/bitcoin/bitcoin/blob/master/doc/design/libraries.md[guide^] which describes the various libraries, their conventions, and their various dependencies. -The dependency graph is shown below for convenience, but may not be up-to-date with the Bitcoin Core document. [id=library-dependency-graph] .Bitcoin library dependency graph -[mermaid, target=bitcoin-lib-dependencies] +[mermaid, target=bitcoion-lib-dependencies] + .... flowchart TB - bitcoin-wallet --> libbitcoin_wallet_tool - bitcoin-wallet --> libbitcoin_wallet - bitcoin-qt ---> libbitcoin_wallet - bitcoin-qt ---> libbitcoinqt - bitcoin-qt ---> libbitcoin_node +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; - bitcoind ---> libbitcoin_wallet - bitcoind --> libbitcoin_node +libbitcoin_cli-->libbitcoin_util; +libbitcoin_cli-->libbitcoin_common; - bitcoin-cli ---> libbitcoin-cli +libbitcoin_consensus-->libbitcoin_crypto; - libbitcoin_wallet_tool --> libbitcoin_wallet - libbitcoin_wallet_tool --> libbitcoin_util +libbitcoin_common-->libbitcoin_consensus; +libbitcoin_common-->libbitcoin_crypto; +libbitcoin_common-->libbitcoin_util; - libbitcoin-cli --> libbitcoin_common - libbitcoin-cli --> libbitcoin_util +libbitcoin_kernel-->libbitcoin_consensus; +libbitcoin_kernel-->libbitcoin_crypto; +libbitcoin_kernel-->libbitcoin_util; - libbitcoin_node --> libbitcoin_common - libbitcoin_node --> libbitcoin_consensus - libbitcoin_node --> libbitcoin_kernel - libbitcoin_node --> libbitcoin_util +libbitcoin_node-->libbitcoin_consensus; +libbitcoin_node-->libbitcoin_crypto; +libbitcoin_node-->libbitcoin_kernel; +libbitcoin_node-->libbitcoin_common; +libbitcoin_node-->libbitcoin_util; - libbitcoinqt --> libbitcoin_util - libbitcoinqt --> libbitcoin_common +libbitcoinqt-->libbitcoin_common; +libbitcoinqt-->libbitcoin_util; - libbitcoin_wallet --> libbitcoin_util - libbitcoin_wallet --> libbitcoin_common +libbitcoin_util-->libbitcoin_crypto; - libbitcoin_common --> libbitcoin_util - libbitcoin_common --> libbitcoin_consensus +libbitcoin_wallet-->libbitcoin_common; +libbitcoin_wallet-->libbitcoin_crypto; +libbitcoin_wallet-->libbitcoin_util; - libbitcoin_kernel --> libbitcoin_consensus - libbitcoin_kernel --> libbitcoin_util +libbitcoin_wallet_tool-->libbitcoin_wallet; +libbitcoin_wallet_tool-->libbitcoin_util; - classDef types fill:green,color:white,stroke:green; - class bitcoin-wallet,bitcoind,bitcoin-cli,bitcoin-qt types +classDef bold stroke-width:2px, font-weight:bold, font-size: smaller; +class bitcoin-qt,bitcoind,bitcoin-cli,bitcoin-wallet bold .... +**Dependency graph**. Arrows show linker symbol dependencies. `libbitcoin_crypto` depends on nothing. `libbitcoin_util` is depended on by everything. `libbitcoin_kernel` depends only on consensus, crypto, and util. It follows that API changes to the libraries which are internally-facing can be done slightly easier than for libraries with externally-facing APIs, for which more care for compatibility must be taken.