Skip to content

Commit f0e1481

Browse files
committed
update library structure
1 parent dd46ac7 commit f0e1481

File tree

1 file changed

+30
-26
lines changed

1 file changed

+30
-26
lines changed

library-structure.adoc

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
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.
1111

@@ -16,52 +16,56 @@ Bitcoin Core has a https://github.com/bitcoin/bitcoin/blob/master/doc/design/lib
1616
....
1717
flowchart TB
1818
19-
bitcoin-cli[bitcoin-cli]-->libbitcoin_cli;
19+
bitcoin-cli-->libbitcoin_cli;
2020
21-
bitcoind[bitcoind]-->libbitcoin_node;
22-
bitcoind[bitcoind]-->libbitcoin_wallet;
21+
bitcoind-->libbitcoin_node;
22+
bitcoind-->libbitcoin_wallet;
2323
24-
bitcoin-qt[bitcoin-qt]-->libbitcoin_node;
25-
bitcoin-qt[bitcoin-qt]-->libbitcoinqt;
26-
bitcoin-qt[bitcoin-qt]-->libbitcoin_wallet;
24+
bitcoin-qt-->libbitcoin_node;
25+
bitcoin-qt-->libbitcoinqt;
26+
bitcoin-qt-->libbitcoin_wallet;
2727
28-
bitcoin-wallet[bitcoin-wallet]-->libbitcoin_wallet;
29-
bitcoin-wallet[bitcoin-wallet]-->libbitcoin_wallet_tool;
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;
3039
31-
libbitcoin_cli-->libbitcoin_util;
3240
libbitcoin_cli-->libbitcoin_common;
41+
libbitcoin_cli-->libbitcoin_util;
3342
3443
libbitcoin_consensus-->libbitcoin_crypto;
3544
3645
libbitcoin_common-->libbitcoin_consensus;
37-
libbitcoin_common-->libbitcoin_crypto;
3846
libbitcoin_common-->libbitcoin_util;
3947
40-
libbitcoin_kernel-->libbitcoin_consensus;
41-
libbitcoin_kernel-->libbitcoin_crypto;
42-
libbitcoin_kernel-->libbitcoin_util;
48+
libbitcoinkernel-->libbitcoin_crypto;
4349
44-
libbitcoin_node-->libbitcoin_consensus;
45-
libbitcoin_node-->libbitcoin_crypto;
46-
libbitcoin_node-->libbitcoin_kernel;
4750
libbitcoin_node-->libbitcoin_common;
4851
libbitcoin_node-->libbitcoin_util;
52+
libbitcoin_node-->libbitcoin_zmq;
4953
50-
libbitcoinqt-->libbitcoin_common;
51-
libbitcoinqt-->libbitcoin_util;
54+
libbitcoinqt-->libbitcoin_cli;
55+
libbitcoinqt-->libbitcoin_wallet;
5256
5357
libbitcoin_util-->libbitcoin_crypto;
5458
5559
libbitcoin_wallet-->libbitcoin_common;
56-
libbitcoin_wallet-->libbitcoin_crypto;
57-
libbitcoin_wallet-->libbitcoin_util;
5860
59-
libbitcoin_wallet_tool-->libbitcoin_wallet;
60-
libbitcoin_wallet_tool-->libbitcoin_util;
61+
libbitcoin_ipc-->libbitcoin_util;
62+
63+
libbitcoin_zmq-->libbitcoin_util;
64+
libbitcoin_zmq-->libbitcoin_common;
6165
62-
classDef bold stroke-width:2px, font-weight:bold, font-size: smaller;
63-
class bitcoin-qt,bitcoind,bitcoin-cli,bitcoin-wallet bold
66+
classDef types fill:green,color:white,stroke:green;
67+
class bitcoin-wallet,bitcoind,bitcoin-cli,bitcoin-qt,bitcoin-node,bitcoin-gui types
6468
....
65-
**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.
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.
6670

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