diff --git a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp index 4957d08e..5b7563f9 100644 --- a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp +++ b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp @@ -1379,7 +1379,7 @@ std::string sidechain_net_handler_bitcoin::create_withdrawal_transaction(const s fc::flat_map outputs; outputs[swwo.withdraw_address] = swwo.withdraw_amount.value / 100000000.0; if ((total_amount - fee_rate) > 0.0) { - outputs[pw_address] = double(total_amount - fee_rate) / 100000000.0; + outputs[pw_address] = double(total_amount - swwo.withdraw_amount.value - fee_rate) / 100000000.0; } return create_transaction(inputs, outputs); @@ -1689,6 +1689,8 @@ std::string sidechain_net_handler_bitcoin::sign_transaction_standalone(const sid read_tx_data_from_string(sto.transaction, tx_hex, in_amounts); + wlog("skoneru: sign transaction retreived: ${s}", ("s", tx_hex)); + accounts_keys son_pubkeys; for (auto& son: sto.signers) { std::string pub_key = son.sidechain_public_keys.at(sidechain_type::bitcoin); @@ -1708,7 +1710,7 @@ std::string sidechain_net_handler_bitcoin::sign_transaction_standalone(const sid std::string tx_signature = write_byte_arrays_to_string(sigs); - wlog("skoneru: signatures: ${s}", ("s", tx_signature)); + wlog("skoneru: signatures: son-id = ${son}, pkey = ${prvkey}, tx_signature = ${s}", ("son", plugin.get_current_son_id())("prvkey", prvkey)("s", tx_signature)); return tx_signature; } @@ -1765,6 +1767,7 @@ std::string sidechain_net_handler_bitcoin::send_transaction_standalone(const sid std::string tx_hex; read_tx_data_from_string(sto.transaction, tx_hex, in_amounts); + wlog("skoneru: send transaction retreived: ${s}", ("s", tx_hex)); accounts_keys son_pubkeys; for (auto& son: sto.signers) { diff --git a/tests/peerplays_sidechain/bitcoin_address_tests.cpp b/tests/peerplays_sidechain/bitcoin_address_tests.cpp index 17b4273e..ebccb53c 100644 --- a/tests/peerplays_sidechain/bitcoin_address_tests.cpp +++ b/tests/peerplays_sidechain/bitcoin_address_tests.cpp @@ -175,4 +175,51 @@ BOOST_AUTO_TEST_CASE( create_segwit_address_10_of_14_test ) BOOST_CHECK( address.get_address() == "2MwhYhBrZeb6mTf1kaWcYfLBCCQoMqQybFZ" ); } +BOOST_AUTO_TEST_CASE( create_segwit_address_11_of_15_test ) +{ + std::vector public_key1 = parse_hex( "03456772301e221026269d3095ab5cb623fc239835b583ae4632f99a15107ef275" ); + std::vector public_key2 = parse_hex( "02d67c26cf20153fe7625ca1454222d3b3aeb53b122d8a0f7d32a3dd4b2c2016f4" ); + std::vector public_key3 = parse_hex( "025f7cfda933516fd590c5a34ad4a68e3143b6f4155a64b3aab2c55fb851150f61" ); + std::vector public_key4 = parse_hex( "0228155bb1ddcd11c7f14a2752565178023aa963f84ea6b6a052bddebad6fe9866" ); + std::vector public_key5 = parse_hex( "037500441cfb4484da377073459511823b344f1ef0d46bac1efd4c7c466746f666" ); + std::vector public_key6 = parse_hex( "02ef0d79bfdb99ab0be674b1d5d06c24debd74bffdc28d466633d6668cc281cccf" ); + std::vector public_key7 = parse_hex( "0317941e4219548682fb8d8e172f0a8ce4d83ce21272435c85d598558c8e060b7f" ); + std::vector public_key8 = parse_hex( "0266065b27f7e3d3ad45b471b1cd4e02de73fc4737dc2679915a45e293c5adcf84" ); + std::vector public_key9 = parse_hex( "023821cc3da7be9e8cdceb8f146e9ddd78a9519875ecc5b42fe645af690544bccf" ); + std::vector public_key10 = parse_hex( "0229ff2b2106b76c27c393e82d71c20eec32bcf1f0cf1a9aca8a237269a67ff3e5" ); + std::vector public_key11 = parse_hex( "024d113381cc09deb8a6da62e0470644d1a06de82be2725b5052668c8845a4a8da" ); + std::vector public_key12 = parse_hex( "03df2462a5a2f681a3896f61964a65566ff77448be9a55a6da18506fd9c6c051c1" ); + std::vector public_key13 = parse_hex( "02bafba3096f546cc5831ce1e49ba7142478a659f2d689bbc70ed37235255172a8" ); + std::vector public_key14 = parse_hex( "0287bcbd4f5d357f89a86979b386402445d7e9a5dccfd16146d1d2ab0dc2c32ae8" ); + std::vector public_key15 = parse_hex( "02053859d76aa375d6f343a60e3678e906c008015e32fe4712b1fd2b26473bdd73" ); + + fc::ecc::public_key_data key1 = create_public_key_data( public_key1 ); + fc::ecc::public_key_data key2 = create_public_key_data( public_key2 ); + fc::ecc::public_key_data key3 = create_public_key_data( public_key3 ); + fc::ecc::public_key_data key4 = create_public_key_data( public_key4 ); + fc::ecc::public_key_data key5 = create_public_key_data( public_key5 ); + fc::ecc::public_key_data key6 = create_public_key_data( public_key6 ); + fc::ecc::public_key_data key7 = create_public_key_data( public_key7 ); + fc::ecc::public_key_data key8 = create_public_key_data( public_key8 ); + fc::ecc::public_key_data key9 = create_public_key_data( public_key9 ); + fc::ecc::public_key_data key10 = create_public_key_data( public_key10 ); + fc::ecc::public_key_data key11 = create_public_key_data( public_key11 ); + fc::ecc::public_key_data key12 = create_public_key_data( public_key12 ); + fc::ecc::public_key_data key13 = create_public_key_data( public_key13 ); + fc::ecc::public_key_data key14 = create_public_key_data( public_key14 ); + fc::ecc::public_key_data key15 = create_public_key_data( public_key15 ); + + std::vector witness_script = parse_hex("00205fcdce3c62b477553b8dc957a935adda8305cbd47a408f07d2cb867d588279eb"); + std::vector redeem_script = parse_hex("5b2103456772301e221026269d3095ab5cb623fc239835b583ae4632f99a15107ef2752102d67c26cf20153fe7625ca1454222d3b3aeb53b122d8a0f7d32a3dd4b2c2016f421025f7cfda933516fd590c5a34ad4a68e3143b6f4155a64b3aab2c55fb851150f61210228155bb1ddcd11c7f14a2752565178023aa963f84ea6b6a052bddebad6fe986621037500441cfb4484da377073459511823b344f1ef0d46bac1efd4c7c466746f6662102ef0d79bfdb99ab0be674b1d5d06c24debd74bffdc28d466633d6668cc281cccf210317941e4219548682fb8d8e172f0a8ce4d83ce21272435c85d598558c8e060b7f210266065b27f7e3d3ad45b471b1cd4e02de73fc4737dc2679915a45e293c5adcf8421023821cc3da7be9e8cdceb8f146e9ddd78a9519875ecc5b42fe645af690544bccf210229ff2b2106b76c27c393e82d71c20eec32bcf1f0cf1a9aca8a237269a67ff3e521024d113381cc09deb8a6da62e0470644d1a06de82be2725b5052668c8845a4a8da2103df2462a5a2f681a3896f61964a65566ff77448be9a55a6da18506fd9c6c051c12102bafba3096f546cc5831ce1e49ba7142478a659f2d689bbc70ed37235255172a8210287bcbd4f5d357f89a86979b386402445d7e9a5dccfd16146d1d2ab0dc2c32ae82102053859d76aa375d6f343a60e3678e906c008015e32fe4712b1fd2b26473bdd735fae"); + + btc_multisig_segwit_address address(11, { { son_id_type(1), public_key_type(key1) }, { son_id_type(2), public_key_type(key2) }, { son_id_type(3), public_key_type(key3) }, + { son_id_type(4), public_key_type(key4) }, { son_id_type(5), public_key_type(key5) }, { son_id_type(6), public_key_type(key6) }, { son_id_type(7), public_key_type(key7) }, + { son_id_type(8), public_key_type(key8) }, { son_id_type(9), public_key_type(key9) }, { son_id_type(10), public_key_type(key10) }, { son_id_type(11), public_key_type(key11) }, + { son_id_type(12), public_key_type(key12) }, { son_id_type(13), public_key_type(key13) }, { son_id_type(14), public_key_type(key14) }, { son_id_type(15), public_key_type(key15) }}); + + BOOST_CHECK( address.get_witness_script() == witness_script ); + BOOST_CHECK( address.get_redeem_script() == redeem_script ); + BOOST_CHECK( address.get_address() == "2NAL3YhMF4VcbRQdectN8XPMJipvATGefTZ" ); +} + BOOST_AUTO_TEST_SUITE_END()