From d91008ecb79faeeb088feb6ef6d63e368b8a6e0d Mon Sep 17 00:00:00 2001 From: gladcow Date: Tue, 7 Apr 2020 17:23:45 +0300 Subject: [PATCH] base transaction creation with libbitcoin --- .../sidechain_net_handler_bitcoin.cpp | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp index 6aa9aa63..5d38c6ce 100644 --- a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp +++ b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -1673,8 +1674,36 @@ std::string sidechain_net_handler_bitcoin::create_transaction_standalone(const s // } // ] //} + using namespace libbitcoin; + using namespace libbitcoin::machine; + using namespace libbitcoin::wallet; - return ""; + libbitcoin::chain::transaction tx; + tx.set_version(2u); + for(auto in: inputs) + { + libbitcoin::chain::input bin; + libbitcoin::hash_digest tx_id; + libbitcoin::decode_hash(tx_id, in.txid_); + bin.set_previous_output(libbitcoin::chain::output_point(tx_id, in.out_num_)); + bin.set_sequence(max_input_sequence); + tx.inputs().push_back(bin); + } + for(auto out: outputs) + { + libbitcoin::chain::output bout; + uint64_t satoshis = out.second * 100000000.0; + bout.set_value(satoshis); + libbitcoin::wallet::payment_address addr(out.first); + if(addr.version() == libbitcoin::wallet::payment_address::testnet_p2sh) + bout.set_script(libbitcoin::chain::script::to_pay_key_hash_pattern(addr)); + else + bout.set_script(libbitcoin::chain::script::to_pay_script_hash_pattern(addr)); + tx.outputs().push_back(bout); + } + + libbitcoin::data_chunk dc = tx.to_data(); + return fc::to_hex((char*)&dc[0], dc.size()); } std::string sidechain_net_handler_bitcoin::sign_transaction_raw(const sidechain_transaction_object &sto, bool &complete) {