Libbitcoin Network

From BitcoinWiki
This is the approved revision of this page, as well as being the most recent.
Jump to: navigation, search

The libbitcoin-network library is a partial implementation of the Bitcoin P2P network protocol. Excluded are all sub-protocols that require access to a blockchain. The libbitcoin-node library extends this P2P networking capability and incorporates libbitcoin-blockchain in order to implement a full node. The libbitcoin-explorer library uses the P2P networking capability to post transactions to the P2P network.


#include <future>
#include <bitcoin/network.hpp>

// Send a transaction to a single P2P node.
int main(int argc, char* argv[])
// Decode a base16-encoded Bitcoin transaction. 
bc::data_chunk decoded;
if (argc < 1 || !bc::decode_base16(decoded, argv[0]))
return -1;

// Parse the decoded transaction.
const auto tx = bc::chain::transaction::factory_from_data(decoded);

// Configure the P2P network session for best performance.
auto settings = bc::network::settings(bc::config::settings::mainnet);
settings.outbound_connections = 0;
settings.manual_attempt_limit = 3;

// Start a network session.
bc::network::p2p network(settings);

// Declare completion signal.
std::promise<bc::code> complete;

const auto send_handler = [&complete](const bc::code& ec)

const auto connect_handler = [&complete, &tx, &send_handler](
const bc::code& ec, bc::network::channel::ptr node)
if (ec)
node->send(tx, send_handler);

// Connect to the one specified host with retry.
network.connect("localhost", 8333, connect_handler);

// Wait for completion and return result.
return complete.get_future().get() ? -1 : 0;


  • The P2P protocol was originally contained within the libbitcoin library.
  • In late 2014 William Swanson reorganized libbitcoin sources in accordance with the roadmap agreed in Toronto earlier that year. Later sources were moved into the libbitcoin::network namespace.
  • By early 2016 Eric Voskuil completed the version 3 redesign to improve reliability, performance and readability. The namespace was forked into its own repository and integrated with dependent repositories.


See Also on BitcoinWiki[edit]