remove bitcoin-specific fields from son wallet

This commit is contained in:
gladcow 2020-03-03 16:37:15 +03:00
parent a06af5bf17
commit d710b320c0
5 changed files with 18 additions and 10 deletions

View file

@ -27,7 +27,6 @@ namespace graphene { namespace chain {
son_wallet_id_type son_wallet_id;
graphene::peerplays_sidechain::sidechain_type sidechain;
string address;
graphene::peerplays_sidechain::bytes redeem_script;
account_id_type fee_payer()const { return payer; }
share_type calculate_fee(const fee_parameters_type& k)const { return 0; }
@ -38,4 +37,4 @@ namespace graphene { namespace chain {
FC_REFLECT(graphene::chain::son_wallet_recreate_operation::fee_parameters_type, (fee) )
FC_REFLECT(graphene::chain::son_wallet_recreate_operation, (fee)(payer)(sons) )
FC_REFLECT(graphene::chain::son_wallet_update_operation::fee_parameters_type, (fee) )
FC_REFLECT(graphene::chain::son_wallet_update_operation, (fee)(payer)(son_wallet_id)(sidechain)(address)(redeem_script) )
FC_REFLECT(graphene::chain::son_wallet_update_operation, (fee)(payer)(son_wallet_id)(sidechain)(address) )

View file

@ -21,7 +21,6 @@ namespace graphene { namespace chain {
time_point_sec expires;
flat_map<peerplays_sidechain::sidechain_type, string> addresses;
flat_map<peerplays_sidechain::sidechain_type, peerplays_sidechain::bytes> redeem_scripts;
vector<son_info> sons;
};
@ -45,4 +44,4 @@ namespace graphene { namespace chain {
} } // graphene::chain
FC_REFLECT_DERIVED( graphene::chain::son_wallet_object, (graphene::db::object),
(valid_from) (expires) (addresses) (redeem_scripts) (sons) )
(valid_from) (expires) (addresses) (sons) )

View file

@ -72,7 +72,6 @@ object_id_type update_son_wallet_evaluator::do_apply(const son_wallet_update_ope
if (itr->addresses.find(op.sidechain) == itr->addresses.end()) {
db().modify(*itr, [&op](son_wallet_object &swo) {
swo.addresses[op.sidechain] = op.address;
swo.redeem_scripts[op.sidechain] = op.redeem_script;
});
}
}

View file

@ -105,7 +105,7 @@ private:
std::string send_transaction(const std::string &transaction);
std::string sign_and_send_transaction_with_wallet(const std::string &tx_json);
std::string create_weighted_multisignature_wallet( const std::vector<std::pair<std::string, uint64_t>>& public_keys );
void transfer_all_btc(const std::string& from_address, const bytes& from_redeem_script, const vector<son_info>& from_sons, const std::string& to_address);
void transfer_all_btc(const std::string& from_address, const vector<son_info>& from_sons, const std::string& to_address);
std::string transfer_deposit_to_primary_wallet(const son_wallet_deposit_object &swdo);
std::string transfer_withdrawal_from_primary_wallet(const son_wallet_withdraw_object &swwo);

View file

@ -637,7 +637,6 @@ void sidechain_net_handler_bitcoin::recreate_primary_wallet() {
op.son_wallet_id = (*active_sw).id;
op.sidechain = sidechain_type::bitcoin;
op.address = address;
op.redeem_script = redeem_script;
proposal_create_operation proposal_op;
proposal_op.fee_paying_account = plugin.get_son_object(plugin.get_current_son_id()).son_account;
@ -659,9 +658,8 @@ void sidechain_net_handler_bitcoin::recreate_primary_wallet() {
if (prev_sw != swi.rend()) {
std::string prev_pw_address = prev_sw->addresses.at(sidechain_type::bitcoin);
std::string active_pw_address = address;
bytes prev_redeem_script = prev_sw->redeem_scripts.at(sidechain_type::bitcoin);
vector<son_info> sons = prev_sw->sons;
transfer_all_btc(prev_pw_address, prev_redeem_script, sons, active_pw_address);
transfer_all_btc(prev_pw_address, sons, active_pw_address);
}
}
}
@ -726,7 +724,7 @@ std::string sidechain_net_handler_bitcoin::sign_and_send_transaction_with_wallet
return reply_str;
}
void sidechain_net_handler_bitcoin::transfer_all_btc(const std::string& from_address, const bytes& from_redeem_script, const vector<son_info>& from_sons, const std::string& to_address)
void sidechain_net_handler_bitcoin::transfer_all_btc(const std::string& from_address, const vector<son_info>& from_sons, const std::string& to_address)
{
uint64_t fee_rate = bitcoin_client->estimatesmartfee();
uint64_t min_fee_rate = 1000;
@ -762,6 +760,19 @@ void sidechain_net_handler_bitcoin::transfer_all_btc(const std::string& from_add
}
tx.vout.push_back(btc_out(to_address, uint64_t((total_amount - min_amount) * 100000000.0)));
std::vector<std::pair<fc::ecc::public_key, uint64_t> > key_data;
for(auto si: from_sons)
{
fc::ecc::public_key pk = si.signing_key;
key_data.push_back(std::make_pair(pk, si.total_votes));
}
std::sort(key_data.begin(), key_data.end(),
[](std::pair<fc::ecc::public_key, uint64_t> p1, std::pair<fc::ecc::public_key, uint64_t> p2){
return (p1.second > p2.second);
}
);
bytes from_redeem_script = generate_redeem_script(key_data);
bitcoin_transaction_send_operation op;
op.payer = GRAPHENE_SON_ACCOUNT;
op.redeem_script = from_redeem_script;