diff --git a/libraries/plugins/peerplays_sidechain/bitcoin/libbitcoin_client.cpp b/libraries/plugins/peerplays_sidechain/bitcoin/libbitcoin_client.cpp index 07049781..00398a34 100644 --- a/libraries/plugins/peerplays_sidechain/bitcoin/libbitcoin_client.cpp +++ b/libraries/plugins/peerplays_sidechain/bitcoin/libbitcoin_client.cpp @@ -41,8 +41,6 @@ libbitcoin_client::libbitcoin_client(std::string url) : uint16_t port_num = std::stoi(port); std::string final_url = protocol + "://" + host; - std::cout << "Final URL is: " << final_url << std::endl; - libbitcoin::config::endpoint address(final_url, port_num); libbitcoin::client::connection_type connection; diff --git a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler_bitcoin.hpp b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler_bitcoin.hpp index ccd650e7..d37bf8e6 100644 --- a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler_bitcoin.hpp +++ b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/sidechain_net_handler_bitcoin.hpp @@ -187,8 +187,10 @@ public: bool settle_sidechain_transaction(const sidechain_transaction_object &sto, asset &settle_amount); private: - std::string ip; - uint32_t zmq_port; + std::string bitcoin_node_ip; + std::string libbitcoin_server_ip; + uint32_t libbitcoin_zmq_port; + uint32_t bitcoin_node_zmq_port; uint32_t rpc_port; std::string rpc_user; std::string rpc_password; diff --git a/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp b/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp index 8cd7e6f3..a22ea6c7 100644 --- a/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp +++ b/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp @@ -173,6 +173,9 @@ void peerplays_sidechain_plugin_impl::plugin_set_program_options( cli.add_options()("bitcoin-node-rpc-port", bpo::value()->default_value(8332), "RPC port of Bitcoin node"); cli.add_options()("bitcoin-node-rpc-user", bpo::value()->default_value("1"), "Bitcoin RPC user"); cli.add_options()("bitcoin-node-rpc-password", bpo::value()->default_value("1"), "Bitcoin RPC password"); + cli.add_options()("libbitcoin-server-ip", bpo::value()->default_value("127.0.0.1"), "Libbitcoin server IP address"); + cli.add_options()("libbitcoin-server-zmq-port", bpo::value()->default_value(9093), "ZMQ port of libbitcoin server"); + cli.add_options()("bitcoin-wallet", bpo::value(), "Bitcoin wallet"); cli.add_options()("bitcoin-wallet-password", bpo::value(), "Bitcoin wallet password"); cli.add_options()("bitcoin-private-key", bpo::value>()->composing()->multitoken()->DEFAULT_VALUE_VECTOR(std::make_pair("02d0f137e717fb3aab7aff99904001d49a0a636c5e1342f8927a4ba2eaee8e9772", "cVN31uC9sTEr392DLVUEjrtMgLA8Yb3fpYmTRj7bomTm6nn2ANPr")), @@ -229,11 +232,12 @@ void peerplays_sidechain_plugin_impl::plugin_initialize(const boost::program_opt } sidechain_enabled_bitcoin = options.at("bitcoin-sidechain-enabled").as(); - config_ready_bitcoin = options.count("bitcoin-node-ip") && - options.count("bitcoin-node-zmq-port") && options.count("bitcoin-node-rpc-port") && - options.count("bitcoin-node-rpc-user") && options.count("bitcoin-node-rpc-password") && - /*options.count("bitcoin-wallet") && options.count("bitcoin-wallet-password") &&*/ - options.count("bitcoin-private-key"); + config_ready_bitcoin = (((options.count("libbitcoin-server-ip") && options.count("libbitcoin-server-zmq-port")) || + (options.count("bitcoin-node-ip") && options.count("bitcoin-node-zmq-port") && + options.count("bitcoin-node-rpc-port") && options.count("bitcoin-node-rpc-user") && + options.count("bitcoin-node-rpc-password"))) && + /*options.count("bitcoin-wallet") && options.count("bitcoin-wallet-password") &&*/ + options.count("bitcoin-private-key")); if (!config_ready_bitcoin) { wlog("Haven't set up Bitcoin sidechain parameters"); } diff --git a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp index 5bbef7cb..afe4922d 100644 --- a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp +++ b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp @@ -373,10 +373,7 @@ std::vector bitcoin_libbitcoin_client::getblock(const block_data & const auto address_base58 = address; info_for_vin vin; vin.out.hash_tx = libbitcoin::config::hash256(tx.hash()).to_string(); - // TODO check this condition here - // amount.erase(std::remove(amount.begin(), amount.end(), '.'), amount.end()); - // vin.out.amount = std::stoll(amount); - vin.out.amount = o.value(); + vin.out.amount = std::floor(o.value()); vin.out.n_vout = vout_seq; vin.address = address_base58; result.push_back(vin); @@ -424,12 +421,7 @@ btc_tx bitcoin_libbitcoin_client::getrawtransaction(const std::string &txid, con tx_in.tx_address.emplace_back(ss.str()); } - // TODO check this condition here - // std::string tx_amount_s = input.second.get("value"); - // tx_amount_s.erase(std::remove(tx_amount_s.begin(), tx_amount_s.end(), '.'), tx_amount_s.end()); - // tx_in.tx_amount = std::stoll(tx_amount_s); - - tx_in.tx_amount = out.value(); + tx_in.tx_amount = std::floor(out.value()); tx.tx_in_list.emplace_back(tx_in); } @@ -554,8 +546,8 @@ zmq_listener_libbitcoin::~zmq_listener_libbitcoin() { } void zmq_listener_libbitcoin::start() { - - libbitcoin::config::endpoint address(ip, zmq_port); + std::string endpoint_address = "tcp://" + ip; + libbitcoin::config::endpoint address(endpoint_address, zmq_port); socket.connect(address); thr = std::thread(&zmq_listener_libbitcoin::handle_block, this); } @@ -564,7 +556,7 @@ void zmq_listener_libbitcoin::handle_block() { poller.add(socket); while (!stopped.load()) { - // TODO change the hard-coded value + // FIXME change the hard-coded value const auto identifiers = poller.wait(500); if (identifiers.contains(socket.id())) { @@ -605,8 +597,10 @@ sidechain_net_handler_bitcoin::sidechain_net_handler_bitcoin(peerplays_sidechain use_bitcoind_client = options.at("use-bitcoind-client").as(); } - ip = options.at("bitcoin-node-ip").as(); - zmq_port = options.at("bitcoin-node-zmq-port").as(); + bitcoin_node_ip = options.at("bitcoin-node-ip").as(); + bitcoin_node_zmq_port = options.at("bitcoin-node-zmq-port").as(); + libbitcoin_server_ip = options.at("libbitcoin-server-ip").as(); + libbitcoin_zmq_port = options.at("libbitcoin-server-zmq-port").as(); rpc_port = options.at("bitcoin-node-rpc-port").as(); rpc_user = options.at("bitcoin-node-rpc-user").as(); rpc_password = options.at("bitcoin-node-rpc-password").as(); @@ -631,10 +625,8 @@ sidechain_net_handler_bitcoin::sidechain_net_handler_bitcoin(peerplays_sidechain } } - std::string url = ip; - if (use_bitcoind_client) { - url = ip + ":" + std::to_string(rpc_port); + std::string url = bitcoin_node_ip + ":" + std::to_string(rpc_port); if (wallet.length() > 0) { url = url + "/wallet/" + wallet; } @@ -643,20 +635,12 @@ sidechain_net_handler_bitcoin::sidechain_net_handler_bitcoin(peerplays_sidechain bitcoin_client->loadwallet(wallet); } - listener = std::unique_ptr(new zmq_listener(ip, zmq_port)); - listener->start(); - listener->event_received.connect([this](const block_data &event_data) { - std::thread(&sidechain_net_handler_bitcoin::handle_event, this, event_data).detach(); - }); + listener = std::unique_ptr(new zmq_listener(bitcoin_node_ip, bitcoin_node_zmq_port)); } else { - bitcoin_client = std::unique_ptr(new bitcoin_libbitcoin_client("tcp://localhost")); + bitcoin_client = std::unique_ptr(new bitcoin_libbitcoin_client(libbitcoin_server_ip)); - listener = std::unique_ptr(new zmq_listener_libbitcoin("tcp://localhost", 9093)); - listener->start(); - listener->event_received.connect([this](const block_data &event_data) { - std::thread(&sidechain_net_handler_bitcoin::handle_event, this, event_data).detach(); - }); + listener = std::unique_ptr(new zmq_listener_libbitcoin(libbitcoin_server_ip, libbitcoin_zmq_port)); } std::string chain_info = bitcoin_client->getblockchaininfo(); @@ -672,6 +656,11 @@ sidechain_net_handler_bitcoin::sidechain_net_handler_bitcoin(peerplays_sidechain bitcoin_client->getnetworkinfo(); + listener->start(); + listener->event_received.connect([this](const block_data &event_data) { + std::thread(&sidechain_net_handler_bitcoin::handle_event, this, event_data).detach(); + }); + database.changed_objects.connect([this](const vector &ids, const flat_set &accounts) { on_changed_objects(ids, accounts); }); @@ -1207,7 +1196,7 @@ bool sidechain_net_handler_bitcoin::settle_sidechain_transaction(const sidechain if (tx.tx_in_list.empty()) { // This case will result with segmentation fault. - // TODO check if that happened before introducing libbitcoin + // FIXME check if that happened before introducing libbitcoin return false; }