libbitcoin is a bitcoin library targeted towards high end use. The library places a heavy focus around asychronicity. This enables a big scope for future scalability as each component has its own thread pool. By increasing the number of threads for that component the library is able to scale outwards across CPU cores. This will be vital in the future as the demands of the bitcoin network grow.
Another core design principle is libbitcoin is not a framework, but a toolkit. Frameworks hinder development during the latter stages of a development cycle, enforce one style of coding and do not work well with other frameworks. By contrast, we have gone to great pains to make libbitcoin function as an independent set of mutual components with no dependencies between them.
Broadly speaking the main services in libbitcoin can be divided down three lines.
These services are concerned with the network side of things.
Bitcoin's blockchain is usually disk oriented. Backends all implement the blockchain interface allowing programs to utilise backends using the same code.
These services utilise other services and provide additional functionality. They can be thought of as composed services.
libbitcoin operates around primitives. Each primitive corresponds to one of the messages in the bitcoin network protocol.
These primitives make up the corpus of libbitcoin.
These classes provide foundational functionality that is widely used.
In accordance with C++ principles of encapsulation, operations which wrap or compose other operations are not provided as member functions, but as free functions.
This minimises intrusion of class interfaces and provides a clear separation as a matter of API design choice.