Skip to content

Commit f8c0fa9

Browse files
authored
Merge pull request #98 from willcl-ark/update-lib-structure
2 parents 69e794b + f0e1481 commit f8c0fa9

File tree

1 file changed

+43
-29
lines changed

1 file changed

+43
-29
lines changed

library-structure.adoc

Lines changed: 43 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,53 +5,67 @@
55
== Library structure
66

77
Bitcoin Core compilation outputs a number of libraries, some which are designed to be used internally, and some which are designed to be re-used by external applications.
8-
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.
8+
The internally-used libraries generally have unstable APIs making them unsuitable for re-use, but `libbitcoin_kernel` (still a WIP) is 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

1312
[id=library-dependency-graph]
1413
.Bitcoin library dependency graph
15-
[mermaid, target=bitcoin-lib-dependencies]
14+
[mermaid, target=bitcoion-lib-dependencies]
15+
1616
....
1717
flowchart TB
18-
bitcoin-wallet --> libbitcoin_wallet_tool
19-
bitcoin-wallet --> libbitcoin_wallet
2018
21-
bitcoin-qt ---> libbitcoin_wallet
22-
bitcoin-qt ---> libbitcoinqt
23-
bitcoin-qt ---> libbitcoin_node
19+
bitcoin-cli-->libbitcoin_cli;
20+
21+
bitcoind-->libbitcoin_node;
22+
bitcoind-->libbitcoin_wallet;
23+
24+
bitcoin-qt-->libbitcoin_node;
25+
bitcoin-qt-->libbitcoinqt;
26+
bitcoin-qt-->libbitcoin_wallet;
27+
28+
bitcoin-wallet-->libbitcoin_wallet;
29+
bitcoin-wallet-->libbitcoin_common;
30+
bitcoin-wallet-->libbitcoin_util;
31+
32+
bitcoin-node-->libbitcoin_node;
33+
bitcoin-node-->libbitcoin_ipc;
34+
bitcoin-node-->libbitcoin_wallet;
35+
36+
bitcoin-gui-->libbitcoinqt;
37+
bitcoin-gui-->libbitcoin_node;
38+
bitcoin-gui-->libbitcoin_ipc;
39+
40+
libbitcoin_cli-->libbitcoin_common;
41+
libbitcoin_cli-->libbitcoin_util;
2442
25-
bitcoind ---> libbitcoin_wallet
26-
bitcoind --> libbitcoin_node
43+
libbitcoin_consensus-->libbitcoin_crypto;
2744
28-
bitcoin-cli ---> libbitcoin-cli
45+
libbitcoin_common-->libbitcoin_consensus;
46+
libbitcoin_common-->libbitcoin_util;
2947
30-
libbitcoin_wallet_tool --> libbitcoin_wallet
31-
libbitcoin_wallet_tool --> libbitcoin_util
48+
libbitcoinkernel-->libbitcoin_crypto;
3249
33-
libbitcoin-cli --> libbitcoin_common
34-
libbitcoin-cli --> libbitcoin_util
50+
libbitcoin_node-->libbitcoin_common;
51+
libbitcoin_node-->libbitcoin_util;
52+
libbitcoin_node-->libbitcoin_zmq;
3553
36-
libbitcoin_node --> libbitcoin_common
37-
libbitcoin_node --> libbitcoin_consensus
38-
libbitcoin_node --> libbitcoin_kernel
39-
libbitcoin_node --> libbitcoin_util
54+
libbitcoinqt-->libbitcoin_cli;
55+
libbitcoinqt-->libbitcoin_wallet;
4056
41-
libbitcoinqt --> libbitcoin_util
42-
libbitcoinqt --> libbitcoin_common
57+
libbitcoin_util-->libbitcoin_crypto;
4358
44-
libbitcoin_wallet --> libbitcoin_util
45-
libbitcoin_wallet --> libbitcoin_common
59+
libbitcoin_wallet-->libbitcoin_common;
4660
47-
libbitcoin_common --> libbitcoin_util
48-
libbitcoin_common --> libbitcoin_consensus
61+
libbitcoin_ipc-->libbitcoin_util;
4962
50-
libbitcoin_kernel --> libbitcoin_consensus
51-
libbitcoin_kernel --> libbitcoin_util
63+
libbitcoin_zmq-->libbitcoin_util;
64+
libbitcoin_zmq-->libbitcoin_common;
5265
53-
classDef types fill:green,color:white,stroke:green;
54-
class bitcoin-wallet,bitcoind,bitcoin-cli,bitcoin-qt types
66+
classDef types fill:green,color:white,stroke:green;
67+
class bitcoin-wallet,bitcoind,bitcoin-cli,bitcoin-qt,bitcoin-node,bitcoin-gui types
5568
....
69+
**Dependency graph**. Arrows show linker symbol dependencies. `libbitcoin_crypto` depends on nothing and is fundamental. `libbitcoin_util` depends on crypto. `libbitcoinkernel` (experimental kernel library) depends only on crypto.
5670

5771
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)