From 477dc7246a0acda5e518ecb293067a42e2fc1fcb Mon Sep 17 00:00:00 2001 From: Srdjan Obucina Date: Tue, 24 Mar 2020 10:21:41 +0100 Subject: [PATCH] Import both address and redeem script on primary wallet change, fix some compiler warnings --- .../chain/protocol/son_wallet_deposit.hpp | 10 +++++-- .../chain/protocol/son_wallet_withdraw.hpp | 12 +++++--- .../chain/son_wallet_deposit_object.hpp | 6 ++-- .../chain/son_wallet_withdraw_object.hpp | 8 ++--- .../peerplays_sidechain_plugin.cpp | 2 +- .../sidechain_net_handler.cpp | 11 +++---- .../sidechain_net_handler_bitcoin.cpp | 30 ++++++++++++------- 7 files changed, 49 insertions(+), 30 deletions(-) diff --git a/libraries/chain/include/graphene/chain/protocol/son_wallet_deposit.hpp b/libraries/chain/include/graphene/chain/protocol/son_wallet_deposit.hpp index ddc1ff53..a1b44fac 100644 --- a/libraries/chain/include/graphene/chain/protocol/son_wallet_deposit.hpp +++ b/libraries/chain/include/graphene/chain/protocol/son_wallet_deposit.hpp @@ -1,5 +1,6 @@ #pragma once #include +#include #include @@ -14,7 +15,7 @@ namespace graphene { namespace chain { son_id_type son_id; fc::time_point_sec timestamp; - peerplays_sidechain::sidechain_type sidechain; + sidechain_type sidechain; std::string sidechain_uid; std::string sidechain_transaction_id; std::string sidechain_from; @@ -46,7 +47,10 @@ namespace graphene { namespace chain { FC_REFLECT(graphene::chain::son_wallet_deposit_create_operation::fee_parameters_type, (fee) ) FC_REFLECT(graphene::chain::son_wallet_deposit_create_operation, (fee)(payer) - (son_id) (timestamp) (sidechain) (sidechain_uid) (sidechain_transaction_id) (sidechain_from) (sidechain_to) (sidechain_currency) (sidechain_amount) (peerplays_from) (peerplays_to) (peerplays_asset)) + (son_id) (timestamp) (sidechain) + (sidechain_uid) (sidechain_transaction_id) (sidechain_from) (sidechain_to) (sidechain_currency) (sidechain_amount) + (peerplays_from) (peerplays_to) (peerplays_asset) ) + FC_REFLECT(graphene::chain::son_wallet_deposit_process_operation::fee_parameters_type, (fee) ) FC_REFLECT(graphene::chain::son_wallet_deposit_process_operation, (fee)(payer) - (son_wallet_deposit_id)) + (son_wallet_deposit_id) ) diff --git a/libraries/chain/include/graphene/chain/protocol/son_wallet_withdraw.hpp b/libraries/chain/include/graphene/chain/protocol/son_wallet_withdraw.hpp index 4e9d4971..353d695e 100644 --- a/libraries/chain/include/graphene/chain/protocol/son_wallet_withdraw.hpp +++ b/libraries/chain/include/graphene/chain/protocol/son_wallet_withdraw.hpp @@ -1,5 +1,6 @@ #pragma once #include +#include #include @@ -14,12 +15,12 @@ namespace graphene { namespace chain { son_id_type son_id; fc::time_point_sec timestamp; - peerplays_sidechain::sidechain_type sidechain; + sidechain_type sidechain; std::string peerplays_uid; std::string peerplays_transaction_id; chain::account_id_type peerplays_from; chain::asset peerplays_asset; - peerplays_sidechain::sidechain_type withdraw_sidechain; + sidechain_type withdraw_sidechain; std::string withdraw_address; std::string withdraw_currency; safe withdraw_amount; @@ -45,7 +46,10 @@ namespace graphene { namespace chain { FC_REFLECT(graphene::chain::son_wallet_withdraw_create_operation::fee_parameters_type, (fee) ) FC_REFLECT(graphene::chain::son_wallet_withdraw_create_operation, (fee)(payer) - (son_id) (timestamp) (sidechain) (peerplays_uid) (peerplays_transaction_id) (peerplays_from) (peerplays_asset) (withdraw_sidechain) (withdraw_address) (withdraw_currency) (withdraw_amount) ) + (son_id) (timestamp) (sidechain) + (peerplays_uid) (peerplays_transaction_id) (peerplays_from) (peerplays_asset) + (withdraw_sidechain) (withdraw_address) (withdraw_currency) (withdraw_amount) ) + FC_REFLECT(graphene::chain::son_wallet_withdraw_process_operation::fee_parameters_type, (fee) ) FC_REFLECT(graphene::chain::son_wallet_withdraw_process_operation, (fee)(payer) - (son_wallet_withdraw_id)) + (son_wallet_withdraw_id) ) diff --git a/libraries/chain/include/graphene/chain/son_wallet_deposit_object.hpp b/libraries/chain/include/graphene/chain/son_wallet_deposit_object.hpp index 00b4e8cc..6ddc44c2 100644 --- a/libraries/chain/include/graphene/chain/son_wallet_deposit_object.hpp +++ b/libraries/chain/include/graphene/chain/son_wallet_deposit_object.hpp @@ -18,7 +18,7 @@ namespace graphene { namespace chain { static const uint8_t type_id = son_wallet_deposit_object_type; time_point_sec timestamp; - peerplays_sidechain::sidechain_type sidechain; + sidechain_type sidechain; std::string sidechain_uid; std::string sidechain_transaction_id; std::string sidechain_from; @@ -46,7 +46,7 @@ namespace graphene { namespace chain { member >, ordered_non_unique< tag, - member + member >, ordered_unique< tag, member @@ -56,7 +56,7 @@ namespace graphene { namespace chain { >, ordered_non_unique< tag, composite_key, + member, member > > diff --git a/libraries/chain/include/graphene/chain/son_wallet_withdraw_object.hpp b/libraries/chain/include/graphene/chain/son_wallet_withdraw_object.hpp index 973c10ce..ef39aadf 100644 --- a/libraries/chain/include/graphene/chain/son_wallet_withdraw_object.hpp +++ b/libraries/chain/include/graphene/chain/son_wallet_withdraw_object.hpp @@ -18,12 +18,12 @@ namespace graphene { namespace chain { static const uint8_t type_id = son_wallet_withdraw_object_type; time_point_sec timestamp; - peerplays_sidechain::sidechain_type sidechain; + sidechain_type sidechain; std::string peerplays_uid; std::string peerplays_transaction_id; chain::account_id_type peerplays_from; chain::asset peerplays_asset; - peerplays_sidechain::sidechain_type withdraw_sidechain; + sidechain_type withdraw_sidechain; std::string withdraw_address; std::string withdraw_currency; safe withdraw_amount; @@ -48,14 +48,14 @@ namespace graphene { namespace chain { member >, ordered_non_unique< tag, - member + member >, ordered_non_unique< tag, member >, ordered_non_unique< tag, composite_key, + member, member > > diff --git a/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp b/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp index 82dadc58..0815c62e 100644 --- a/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp +++ b/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp @@ -489,7 +489,7 @@ void peerplays_sidechain_plugin_impl::create_son_down_proposals() { proposal_create_operation proposal_op; proposal_op.fee_paying_account = get_current_son_object().son_account; - proposal_op.proposed_ops.push_back(op_wrapper(son_down_op)); + proposal_op.proposed_ops.emplace_back(op_wrapper(son_down_op)); uint32_t lifetime = (gpo.parameters.block_interval * gpo.active_witnesses.size()) * 3; proposal_op.expiration_time = time_point_sec(d.head_block_time().sec_since_epoch() + lifetime); return proposal_op; diff --git a/libraries/plugins/peerplays_sidechain/sidechain_net_handler.cpp b/libraries/plugins/peerplays_sidechain/sidechain_net_handler.cpp index 64fbcbf6..ea4a07ba 100644 --- a/libraries/plugins/peerplays_sidechain/sidechain_net_handler.cpp +++ b/libraries/plugins/peerplays_sidechain/sidechain_net_handler.cpp @@ -1,6 +1,7 @@ #include #include +#include namespace graphene { namespace peerplays_sidechain { @@ -90,7 +91,7 @@ void sidechain_net_handler::sidechain_event_data_received(const sidechain_event_ proposal_create_operation proposal_op; proposal_op.fee_paying_account = plugin.get_son_object(son_id).son_account; - proposal_op.proposed_ops.emplace_back(op_wrapper(op)); + proposal_op.proposed_ops.emplace_back(op); uint32_t lifetime = (gpo.parameters.block_interval * gpo.active_witnesses.size()) * 3; proposal_op.expiration_time = time_point_sec(database.head_block_time().sec_since_epoch() + lifetime); @@ -136,7 +137,7 @@ void sidechain_net_handler::sidechain_event_data_received(const sidechain_event_ proposal_create_operation proposal_op; proposal_op.fee_paying_account = plugin.get_son_object(son_id).son_account; - proposal_op.proposed_ops.emplace_back(op_wrapper(op)); + proposal_op.proposed_ops.emplace_back(op); uint32_t lifetime = (gpo.parameters.block_interval * gpo.active_witnesses.size()) * 3; proposal_op.expiration_time = time_point_sec(database.head_block_time().sec_since_epoch() + lifetime); @@ -184,8 +185,8 @@ void sidechain_net_handler::process_deposits() { proposal_create_operation proposal_op; proposal_op.fee_paying_account = plugin.get_current_son_object().son_account; - proposal_op.proposed_ops.emplace_back(op_wrapper(swdp_op)); - proposal_op.proposed_ops.emplace_back(op_wrapper(t_op)); + proposal_op.proposed_ops.emplace_back(swdp_op); + proposal_op.proposed_ops.emplace_back(t_op); uint32_t lifetime = (gpo.parameters.block_interval * gpo.active_witnesses.size()) * 3; proposal_op.expiration_time = time_point_sec(database.head_block_time().sec_since_epoch() + lifetime); @@ -223,7 +224,7 @@ void sidechain_net_handler::process_withdrawals() { proposal_create_operation proposal_op; proposal_op.fee_paying_account = plugin.get_current_son_object().son_account; - proposal_op.proposed_ops.emplace_back(op_wrapper(swwp_op)); + proposal_op.proposed_ops.emplace_back(swwp_op); uint32_t lifetime = (gpo.parameters.block_interval * gpo.active_witnesses.size()) * 3; proposal_op.expiration_time = time_point_sec(database.head_block_time().sec_since_epoch() + lifetime); diff --git a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp index 2f0b59f2..e6ff47f4 100644 --- a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp +++ b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp @@ -844,7 +844,7 @@ void sidechain_net_handler_bitcoin::recreate_primary_wallet() { proposal_create_operation proposal_op; proposal_op.fee_paying_account = plugin.get_current_son_object().son_account; - proposal_op.proposed_ops.emplace_back(op_wrapper(op)); + proposal_op.proposed_ops.emplace_back(op); uint32_t lifetime = (gpo.parameters.block_interval * gpo.active_witnesses.size()) * 3; proposal_op.expiration_time = time_point_sec(database.head_block_time().sec_since_epoch() + lifetime); @@ -916,7 +916,7 @@ void sidechain_net_handler_bitcoin::recreate_primary_wallet() { proposal_create_operation proposal_op; proposal_op.fee_paying_account = plugin.get_current_son_object().son_account; - proposal_op.proposed_ops.emplace_back(op_wrapper(stc_op)); + proposal_op.proposed_ops.emplace_back(stc_op); uint32_t lifetime = (gpo.parameters.block_interval * gpo.active_witnesses.size()) * 3; proposal_op.expiration_time = time_point_sec(database.head_block_time().sec_since_epoch() + lifetime); @@ -992,7 +992,7 @@ bool sidechain_net_handler_bitcoin::process_deposit(const son_wallet_deposit_obj proposal_create_operation proposal_op; proposal_op.fee_paying_account = plugin.get_current_son_object().son_account; - proposal_op.proposed_ops.emplace_back(op_wrapper(stc_op)); + proposal_op.proposed_ops.emplace_back(stc_op); uint32_t lifetime = (gpo.parameters.block_interval * gpo.active_witnesses.size()) * 3; proposal_op.expiration_time = time_point_sec(database.head_block_time().sec_since_epoch() + lifetime); @@ -1074,7 +1074,7 @@ bool sidechain_net_handler_bitcoin::process_withdrawal(const son_wallet_withdraw proposal_create_operation proposal_op; proposal_op.fee_paying_account = plugin.get_current_son_object().son_account; - proposal_op.proposed_ops.emplace_back(op_wrapper(stc_op)); + proposal_op.proposed_ops.emplace_back(stc_op); uint32_t lifetime = (gpo.parameters.block_interval * gpo.active_witnesses.size()) * 3; proposal_op.expiration_time = time_point_sec(database.head_block_time().sec_since_epoch() + lifetime); @@ -1380,15 +1380,25 @@ void sidechain_net_handler_bitcoin::on_changed_objects_cb(const vector().indices().get(); auto swo = swi.find(id); if (swo != swi.end()) { - vector son_pubkeys_bitcoin; - for (const son_info &si : swo->sons) { - son_pubkeys_bitcoin.push_back(si.sidechain_public_keys.at(sidechain_type::bitcoin)); - } - uint32_t nrequired = son_pubkeys_bitcoin.size() * 2 / 3 + 1; + std::stringstream pw_ss(swo->addresses.at(sidechain)); + boost::property_tree::ptree pw_pt; + boost::property_tree::read_json(pw_ss, pw_pt); + if (!wallet_password.empty()) { bitcoin_client->walletpassphrase(wallet_password, 5); } - bitcoin_client->addmultisigaddress(nrequired, son_pubkeys_bitcoin); + + std::string pw_address = ""; + if (pw_pt.count("address")) { + pw_address = pw_pt.get("address"); + bitcoin_client->importaddress(pw_address); + } + + std::string pw_redeem_script = ""; + if (pw_pt.count("redeemScript")) { + pw_redeem_script = pw_pt.get("redeemScript"); + bitcoin_client->importaddress(pw_redeem_script); + } } } }