Skip to content

Commit 7375c6f

Browse files
heyolaniranwillcl-ark
authored andcommitted
[Library] Update dependencies graph and typo about libraries links description
In this commit, I've updated the dependency graph to the Bitcoin 29.0 (The actual maintained version for bitcoin Core). This graph show the entire dependencies links between various library of the code base structure.
1 parent 69e794b commit 7375c6f

File tree

1 file changed

+42
-33
lines changed

1 file changed

+42
-33
lines changed

library-structure.adoc

Lines changed: 42 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,50 +8,59 @@ Bitcoin Core compilation outputs a number of libraries, some which are designed
88
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.
99

1010
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.
11-
The dependency graph is shown below for convenience, but may not be up-to-date with the Bitcoin Core document.
1211

13-
[id=library-dependency-graph]
14-
.Bitcoin library dependency graph
15-
[mermaid, target=bitcoin-lib-dependencies]
16-
....
17-
flowchart TB
18-
bitcoin-wallet --> libbitcoin_wallet_tool
19-
bitcoin-wallet --> libbitcoin_wallet
12+
```mermaid
2013

21-
bitcoin-qt ---> libbitcoin_wallet
22-
bitcoin-qt ---> libbitcoinqt
23-
bitcoin-qt ---> libbitcoin_node
14+
%%{ init : { "flowchart" : { "curve" : "basis" }}}%%
2415

25-
bitcoind ---> libbitcoin_wallet
26-
bitcoind --> libbitcoin_node
16+
graph TD;
2717

28-
bitcoin-cli ---> libbitcoin-cli
18+
bitcoin-cli[bitcoin-cli]-->libbitcoin_cli;
2919

30-
libbitcoin_wallet_tool --> libbitcoin_wallet
31-
libbitcoin_wallet_tool --> libbitcoin_util
20+
bitcoind[bitcoind]-->libbitcoin_node;
21+
bitcoind[bitcoind]-->libbitcoin_wallet;
3222

33-
libbitcoin-cli --> libbitcoin_common
34-
libbitcoin-cli --> libbitcoin_util
23+
bitcoin-qt[bitcoin-qt]-->libbitcoin_node;
24+
bitcoin-qt[bitcoin-qt]-->libbitcoinqt;
25+
bitcoin-qt[bitcoin-qt]-->libbitcoin_wallet;
3526

36-
libbitcoin_node --> libbitcoin_common
37-
libbitcoin_node --> libbitcoin_consensus
38-
libbitcoin_node --> libbitcoin_kernel
39-
libbitcoin_node --> libbitcoin_util
27+
bitcoin-wallet[bitcoin-wallet]-->libbitcoin_wallet;
28+
bitcoin-wallet[bitcoin-wallet]-->libbitcoin_wallet_tool;
4029

41-
libbitcoinqt --> libbitcoin_util
42-
libbitcoinqt --> libbitcoin_common
30+
libbitcoin_cli-->libbitcoin_util;
31+
libbitcoin_cli-->libbitcoin_common;
4332

44-
libbitcoin_wallet --> libbitcoin_util
45-
libbitcoin_wallet --> libbitcoin_common
33+
libbitcoin_consensus-->libbitcoin_crypto;
4634

47-
libbitcoin_common --> libbitcoin_util
48-
libbitcoin_common --> libbitcoin_consensus
35+
libbitcoin_common-->libbitcoin_consensus;
36+
libbitcoin_common-->libbitcoin_crypto;
37+
libbitcoin_common-->libbitcoin_util;
4938

50-
libbitcoin_kernel --> libbitcoin_consensus
51-
libbitcoin_kernel --> libbitcoin_util
39+
libbitcoin_kernel-->libbitcoin_consensus;
40+
libbitcoin_kernel-->libbitcoin_crypto;
41+
libbitcoin_kernel-->libbitcoin_util;
5242

53-
classDef types fill:green,color:white,stroke:green;
54-
class bitcoin-wallet,bitcoind,bitcoin-cli,bitcoin-qt types
55-
....
43+
libbitcoin_node-->libbitcoin_consensus;
44+
libbitcoin_node-->libbitcoin_crypto;
45+
libbitcoin_node-->libbitcoin_kernel;
46+
libbitcoin_node-->libbitcoin_common;
47+
libbitcoin_node-->libbitcoin_util;
48+
49+
libbitcoinqt-->libbitcoin_common;
50+
libbitcoinqt-->libbitcoin_util;
51+
52+
libbitcoin_util-->libbitcoin_crypto;
53+
54+
libbitcoin_wallet-->libbitcoin_common;
55+
libbitcoin_wallet-->libbitcoin_crypto;
56+
libbitcoin_wallet-->libbitcoin_util;
57+
58+
libbitcoin_wallet_tool-->libbitcoin_wallet;
59+
libbitcoin_wallet_tool-->libbitcoin_util;
60+
61+
classDef bold stroke-width:2px, font-weight:bold, font-size: smaller;
62+
class bitcoin-qt,bitcoind,bitcoin-cli,bitcoin-wallet bold
63+
```
64+
**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.
5665

5766
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.

0 commit comments

Comments
 (0)