Libbitcoin Network: Difference between revisions
Jump to navigation
Jump to search
Line 10: | Line 10: | ||
using namespace bc; | using namespace bc; | ||
// Decode a base16-encoded Bitcoin transaction. | |||
data_chunk decoded; | data_chunk decoded; | ||
if (argc < 1 || !decode_base16(decoded, argv[0])) | if (argc < 1 || !decode_base16(decoded, argv[0])) | ||
return -1; | return -1; | ||
// Parse the decoded transaction. | |||
const auto tx = chain::transaction::factory_from_data(decoded); | const auto tx = chain::transaction::factory_from_data(decoded); | ||
// Configure the P2P network session for best performance. | |||
auto settings = network::settings::mainnet; | auto settings = network::settings::mainnet; | ||
settings.inbound_port = 0; | settings.inbound_port = 0; | ||
Line 22: | Line 25: | ||
settings.relay_transactions = false; | settings.relay_transactions = false; | ||
// Start a network session. | |||
network::p2p network(settings); | network::p2p network(settings); | ||
std::promise<code> complete; | |||
// Declare completion signal. | |||
std::promise<nowiki><code></nowiki> complete; | |||
const auto send_handler = [&complete](const code& ec) | const auto send_handler = [&complete](const code& ec) | ||
{ | { | ||
Line 30: | Line 36: | ||
}; | }; | ||
const auto connect_handler = [&tx , &send_handler](const code& ec, | const auto connect_handler = [&complete, &tx , &send_handler]( | ||
const code& ec, network::channel::ptr node) | |||
{ | { | ||
if ( | if (ec) | ||
complete.set_value(ec); | |||
else | |||
node->send(tx, send_handler); | node->send(tx, send_handler); | ||
}; | }; | ||
// Wait for completion and return result. | |||
return complete.get_future().get() ? -1 : 0; | return complete.get_future().get() ? -1 : 0; | ||
} | } |
Revision as of 11:37, 4 February 2016
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.