Libbitcoin Network
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.
Example
#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)
{
complete.set_value(ec);
};
const auto connect_handler = [&complete, &tx, &send_handler](
const bc::code& ec, bc::network::channel::ptr node)
{
if (ec)
complete.set_value(ec);
else
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;
}
History
- The P2P protocol was originally contained within the libbitcoin library.
- In late 2014 William Swanson reorganized libbitcoin sources[1] in accordance with the roadmap[2] 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.
Dependencies
See Also
This article is issued from Bitcoin. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.