Libbitcoin is a full stack of C++20 libraries, from Bitcoin primitives
to a complete server and client. Bitcoin Server (bs) is built on
libbitcoin-server, and Bitcoin Explorer (bx) on libbitcoin-explorer.
Each library can be used on its own, by any application.
1. The stack#
Both executables rest on libbitcoin-system: Bitcoin Server through the node's libraries, and Bitcoin Explorer directly.
| Library | Namespace | Dependencies | Provides |
|---|---|---|---|
| libbitcoin-system | libbitcoin::system |
none | Bitcoin primitives: blocks, transactions, scripts and their execution, hashes and cryptography, keys, addresses and wallets, encodings and serialization |
| libbitcoin-database | libbitcoin::database |
system | The store: memory-mapped tables, and the queries over them |
| libbitcoin-network | libbitcoin::network |
system | Connections and protocols: the P2P network, and HTTP, websocket, JSON-RPC, TLS and ZMQ services |
| libbitcoin-node | libbitcoin::node |
database, network | The full node: sync, validation and confirmation, and the transaction pool |
| libbitcoin-server | libbitcoin::server |
node | The client interfaces of Bitcoin Server, and bs |
| libbitcoin-explorer | libbitcoin::explorer |
system | The commands of Bitcoin Explorer, and bx |
The node and the store are described in Architecture and Database.
2. Using a library#
Each library has one header that includes all of it:
#include <bitcoin/system.hpp>
using namespace libbitcoin::system;
| Library | Header | Package |
|---|---|---|
| libbitcoin-system | <bitcoin/system.hpp> |
libbitcoin-system |
| libbitcoin-database | <bitcoin/database.hpp> |
libbitcoin-database |
| libbitcoin-network | <bitcoin/network.hpp> |
libbitcoin-network |
| libbitcoin-node | <bitcoin/node.hpp> |
libbitcoin-node |
| libbitcoin-server | <bitcoin/server.hpp> |
libbitcoin-server |
| libbitcoin-explorer | <bitcoin/explorer.hpp> |
libbitcoin-explorer |
A library and those it depends on are found with pkg-config:
$ c++ -std=c++20 app.cpp $(pkg-config --cflags --libs libbitcoin-system)
3. Versioning#
| Version | Change |
|---|---|
| Major | Breaks compatibility |
| Minor | Adds compatible features |
| Build | Text, comments, style, refactoring and minor enhancements |
A version is <major>.<minor>.<build>, where the build is the number of
commits in the repository's history, so it never resets. From 4.0.3372:
| Version | Change |
|---|---|
4.0.3380 |
Build: eight more commits |
4.1.3400 |
Minor: a compatible change |
5.0.3500 |
Major: a compatibility break |