From fa2fc36502cef986adcc050beedbae9bb52bc9dd Mon Sep 17 00:00:00 2001 From: gladcow Date: Sat, 21 Mar 2020 13:02:41 +0300 Subject: [PATCH] tx and inputs amounts serialization --- .../peerplays_sidechain/bitcoin_utils.cpp | 3 +++ .../sidechain_net_handler_bitcoin.cpp | 27 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/libraries/plugins/peerplays_sidechain/bitcoin_utils.cpp b/libraries/plugins/peerplays_sidechain/bitcoin_utils.cpp index a11647de..77e40bfc 100644 --- a/libraries/plugins/peerplays_sidechain/bitcoin_utils.cpp +++ b/libraries/plugins/peerplays_sidechain/bitcoin_utils.cpp @@ -6,6 +6,8 @@ #include #include +#include + namespace graphene { namespace peerplays_sidechain { static const unsigned char OP_0 = 0x00; @@ -677,4 +679,5 @@ bytes add_signatures_to_unsigned_tx(const bytes &unsigned_tx, const std::vector< return ret; } + }} // namespace graphene::peerplays_sidechain diff --git a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp index 448479b4..3bd435c7 100644 --- a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp +++ b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp @@ -1620,6 +1620,32 @@ libbitcoin::chain::script get_unlock_script(const std::vector &tx, std::vector &in_amounts) +{ + std::stringstream ss(string_buf); + boost::property_tree::ptree json; + boost::property_tree::read_json(ss, json); + std::string tx_hex = json.get("tx_hex"); + tx.clear(); + tx.resize(tx_hex.size() / 2); + fc::from_hex(tx_hex, (char*)&tx[0], tx.size()); + in_amounts.clear(); + for(auto &v: json.get_child("in_amounts")) + in_amounts.push_back(fc::to_uint64(v.second.data())); +} + +std::string save_tx_data_to_string(const std::vector &tx, const std::vector &in_amounts) +{ + std::string res = "{\"tx_hex\":\"" + fc::to_hex((const char*)&tx[0], tx.size()) + "\",\"in_amounts\":["; + for (unsigned int idx = 0; idx < in_amounts.size(); ++idx) { + res += fc::to_string(in_amounts[idx]); + if (idx != in_amounts.size() - 1) + res += ","; + } + res += "]}"; + return res; +} + std::string sidechain_net_handler_bitcoin::create_multisig_address_standalone(const std::vector> &son_pubkeys) { //using namespace libbitcoin; @@ -1912,6 +1938,7 @@ std::string sidechain_net_handler_bitcoin::sign_transaction_standalone(const sid std::vector> son_pubkeys; libbitcoin::chain::script witness_script = get_unlock_script(son_pubkeys); + std::string tx_signature = ""; complete = true;