From 01f1b6137aa6db23a22038af740a497e032011fc Mon Sep 17 00:00:00 2001 From: Srdjan Obucina Date: Tue, 4 Feb 2020 23:40:40 +0100 Subject: [PATCH] Issue tokens to the user who deposited Bitcoin, WIP... --- .../chain/son_wallet_transfer_object.hpp | 7 +++--- .../chain/son_wallet_transfer_evaluator.cpp | 4 +++- .../graphene/peerplays_sidechain/defs.hpp | 4 ++++ .../peerplays_sidechain_plugin.cpp | 24 ++++++++++++++----- .../sidechain_net_handler_bitcoin.cpp | 9 +++++++ 5 files changed, 38 insertions(+), 10 deletions(-) diff --git a/libraries/chain/include/graphene/chain/son_wallet_transfer_object.hpp b/libraries/chain/include/graphene/chain/son_wallet_transfer_object.hpp index 0eb88c3d..94f07a90 100644 --- a/libraries/chain/include/graphene/chain/son_wallet_transfer_object.hpp +++ b/libraries/chain/include/graphene/chain/son_wallet_transfer_object.hpp @@ -25,13 +25,11 @@ namespace graphene { namespace chain { int64_t amount; bool processed; - - flat_map addresses; - vector sons; }; struct by_uid; struct by_sidechain; + struct by_processed; struct by_sidechain_and_processed; using son_wallet_transfer_multi_index_type = multi_index_container< son_wallet_transfer_object, @@ -45,6 +43,9 @@ namespace graphene { namespace chain { ordered_non_unique< tag, member >, + ordered_non_unique< tag, + member + >, ordered_non_unique< tag, composite_key, diff --git a/libraries/chain/son_wallet_transfer_evaluator.cpp b/libraries/chain/son_wallet_transfer_evaluator.cpp index 08b192dd..6776e07b 100644 --- a/libraries/chain/son_wallet_transfer_evaluator.cpp +++ b/libraries/chain/son_wallet_transfer_evaluator.cpp @@ -8,7 +8,9 @@ namespace graphene { namespace chain { void_result create_son_wallet_transfer_evaluator::do_evaluate(const son_wallet_transfer_create_operation& op) { try{ FC_ASSERT(db().head_block_time() >= HARDFORK_SON_TIME, "Not allowed until SON HARDFORK"); - FC_ASSERT(db().get_global_properties().parameters.get_son_btc_account_id() != GRAPHENE_NULL_ACCOUNT, "SON paying account not set."); + //FC_ASSERT(db().get_global_properties().parameters.get_son_btc_account_id() != GRAPHENE_NULL_ACCOUNT, "SON paying account not set."); + FC_ASSERT( op.payer == db().get_global_properties().parameters.get_son_btc_account_id() ); + const auto& idx = db().get_index_type().indices().get(); FC_ASSERT(idx.find(op.uid) == idx.end(), "Already registered " + op.uid); return void_result(); diff --git a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/defs.hpp b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/defs.hpp index 6c0b69fb..917de189 100644 --- a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/defs.hpp +++ b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/defs.hpp @@ -7,6 +7,8 @@ #include #include +#include + namespace graphene { namespace peerplays_sidechain { enum class sidechain_type { @@ -67,7 +69,9 @@ struct sidechain_event_data { sidechain_type sidechain; std::string transaction_id; std::string from; + chain::account_id_type peerplays_from; std::string to; + chain::account_id_type peerplays_to; int64_t amount; }; diff --git a/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp b/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp index 6f7a0d77..1d78d2dd 100644 --- a/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp +++ b/libraries/plugins/peerplays_sidechain/peerplays_sidechain_plugin.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -47,6 +48,7 @@ class peerplays_sidechain_plugin_impl private: peerplays_sidechain_plugin& plugin; + graphene::chain::database& database; bool config_ready_son; bool config_ready_bitcoin; @@ -59,7 +61,8 @@ class peerplays_sidechain_plugin_impl }; peerplays_sidechain_plugin_impl::peerplays_sidechain_plugin_impl(peerplays_sidechain_plugin& _plugin) : - plugin( _plugin ), + plugin(_plugin), + database(_plugin.database()), config_ready_son(false), config_ready_bitcoin(false), net_manager(nullptr) @@ -137,8 +140,8 @@ void peerplays_sidechain_plugin_impl::plugin_initialize(const boost::program_opt throw; } - plugin.database().applied_block.connect( [&] (const signed_block& b) { on_block_applied(b); } ); - plugin.database().new_objects.connect( [&] (const vector& ids, const flat_set& impacted_accounts) { on_objects_new(ids); } ); + database.applied_block.connect( [&] (const signed_block& b) { on_block_applied(b); } ); + database.new_objects.connect( [&] (const vector& ids, const flat_set& impacted_accounts) { on_objects_new(ids); } ); net_manager = std::unique_ptr(new sidechain_net_manager(plugin)); @@ -195,7 +198,7 @@ son_id_type peerplays_sidechain_plugin_impl::get_son_id() son_object peerplays_sidechain_plugin_impl::get_son_object() { - const auto& idx = plugin.database().get_index_type().indices().get(); + const auto& idx = database.get_index_type().indices().get(); auto son_obj = idx.find( get_son_id() ); if (son_obj == idx.end()) return {}; @@ -204,12 +207,12 @@ son_object peerplays_sidechain_plugin_impl::get_son_object() bool peerplays_sidechain_plugin_impl::is_active_son() { - const auto& idx = plugin.database().get_index_type().indices().get(); + const auto& idx = database.get_index_type().indices().get(); auto son_obj = idx.find( get_son_id() ); if (son_obj == idx.end()) return false; - const chain::global_property_object& gpo = plugin.database().get_global_properties(); + const chain::global_property_object& gpo = database.get_global_properties(); vector active_son_ids; active_son_ids.reserve(gpo.active_sons.size()); std::transform(gpo.active_sons.begin(), gpo.active_sons.end(), @@ -343,6 +346,15 @@ void peerplays_sidechain_plugin_impl::recreate_primary_wallet() } void peerplays_sidechain_plugin_impl::process_deposits() { + + const auto& idx = database.get_index_type().indices().get(); + const auto& idx_range = idx.equal_range(false); + + std::for_each(idx_range.first, idx_range.second, + [&] (const son_wallet_transfer_object& swto) { + + + }); } //void peerplays_sidechain_plugin_impl::process_withdrawals() { diff --git a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp index e8438100..6861e575 100644 --- a/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp +++ b/libraries/plugins/peerplays_sidechain/sidechain_net_handler_bitcoin.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -337,6 +338,12 @@ void sidechain_net_handler_bitcoin::handle_event( const std::string& event_data if( block != "" ) { const auto& vins = extract_info_from_block( block ); + account_id_type peerplays_to = GRAPHENE_NULL_ACCOUNT; + const auto& account_idx = database.get_index_type().indices().get(); + const auto& account_itr = account_idx.find("nathan"); + if (account_itr != account_idx.end()) + peerplays_to = (*account_itr).id; + const auto& sidechain_addresses_idx = database.get_index_type().indices().get(); for( const auto& v : vins ) { @@ -352,7 +359,9 @@ void sidechain_net_handler_bitcoin::handle_event( const std::string& event_data sed.sidechain = addr_itr->sidechain; sed.transaction_id = v.out.hash_tx; sed.from = ""; + sed.peerplays_from = addr_itr->sidechain_address_account; sed.to = v.address; + sed.peerplays_to = peerplays_to; sed.amount = v.out.amount; sidechain_event_data_received(sed); }