From 6d2039c67be23da4a8bc1f0cec22b730abaf9433 Mon Sep 17 00:00:00 2001 From: gladcow Date: Thu, 26 Dec 2019 15:07:28 +0300 Subject: [PATCH] Add importaddress call Allows to watch for related transactions without private keys import --- .../sidechain_net_handler_bitcoin.hpp | 1 + .../sidechain_net_handler_bitcoin.cpp | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) 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 803b24de..007a4c3b 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 @@ -21,6 +21,7 @@ public: void send_btc_tx( const std::string& tx_hex ); std::string add_multisig_address( const std::vector public_keys ); bool connection_is_not_defined() const; + void import_address( const std::string& address_or_script); private: diff --git a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp index 3d89938f..ff50267c 100644 --- a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp +++ b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp @@ -173,6 +173,33 @@ bool bitcoin_rpc_client::connection_is_not_defined() const return ip.empty() || rpc_port == 0 || user.empty() || password.empty(); } +void bitcoin_rpc_client::import_address(const std::string &address_or_script) +{ + const auto body = std::string("{\"jsonrpc\": \"1.0\", \"id\":\"init_wallet\", \"method\": \"importaddress\", \"params\": [") + + std::string("\"") + address_or_script + std::string("\"") + std::string("] }"); + + const auto reply = send_post_request( body ); + + if( reply.body.empty() ) + { + wlog("Failed to import address [${addr}]", ("addr", address_or_script)); + return; + } + + std::string reply_str( reply.body.begin(), reply.body.end() ); + + std::stringstream ss(reply_str); + boost::property_tree::ptree json; + boost::property_tree::read_json( ss, json ); + + if( reply.status == 200 ) { + idump(( address_or_script )); + return; + } else if( json.count( "error" ) && !json.get_child( "error" ).empty() ) { + wlog( "Failed to import address [${addr}]! Reply: ${msg}", ("addr", address_or_script)("msg", reply_str) ); + } +} + fc::http::reply bitcoin_rpc_client::send_post_request( std::string body ) { fc::http::connection conn;