Libbitcoin Network

From Bitcoin Wiki
Revision as of 11:37, 4 February 2016 by Evoskuil (talk | contribs) (→‎Example)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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[])
{
    using namespace bc;

    // Decode a base16-encoded Bitcoin transaction. 
    data_chunk decoded;
    if (argc < 1 || !decode_base16(decoded, argv[0]))
        return -1;

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

    // Configure the P2P network session for best performance.
    auto settings = network::settings::mainnet;
    settings.inbound_port = 0;
    settings.host_pool_capacity = 0;
    settings.outbound_connections = 0;
    settings.relay_transactions = false;

    // Start a network session.
    network::p2p network(settings);
    // Declare completion signal.
    std::promise<code> complete;
    const auto send_handler = [&complete](const code& ec)
    {
        complete.set_value(ec);
    };

    const auto connect_handler = [&complete, &tx , &send_handler](
        const code& ec, network::channel::ptr node)
    {
        if (ec)
            complete.set_value(ec);
        else
            node->send(tx, send_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 the winter of 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, and by early 2016 the namespace was forked into its own repository and integrated with dependent repositories as of version 3.

Dependencies

See Also

References