diff --git a/libraries/app/database_api.cpp b/libraries/app/database_api.cpp index 39a984d3..cf864e66 100644 --- a/libraries/app/database_api.cpp +++ b/libraries/app/database_api.cpp @@ -155,6 +155,7 @@ class database_api_impl : public std::enable_shared_from_this // Sidechain addresses vector> get_sidechain_addresses(const vector& sidechain_address_ids)const; vector> get_sidechain_addresses_by_account(account_id_type account)const; + vector> get_sidechain_addresses_by_sidechain(peerplays_sidechain::sidechain_type sidechain)const; fc::optional get_sidechain_addresses_by_account_and_sidechain(account_id_type account, peerplays_sidechain::sidechain_type sidechain)const; uint64_t get_sidechain_addresses_count()const; @@ -1799,6 +1800,21 @@ vector> database_api::get_sidechain_addresses vector> database_api_impl::get_sidechain_addresses_by_account(account_id_type account)const { + //const auto& idx = _db.get_index_type().indices().get(); + + vector> result; + return result; +} + +vector> database_api::get_sidechain_addresses_by_sidechain(peerplays_sidechain::sidechain_type sidechain)const +{ + return my->get_sidechain_addresses_by_sidechain( sidechain ); +} + +vector> database_api_impl::get_sidechain_addresses_by_sidechain(peerplays_sidechain::sidechain_type sidechain)const +{ + //const auto& idx = _db.get_index_type().indices().get(); + vector> result; return result; } @@ -1810,8 +1826,11 @@ fc::optional database_api::get_sidechain_addresses_by_ fc::optional database_api_impl::get_sidechain_addresses_by_account_and_sidechain(account_id_type account, peerplays_sidechain::sidechain_type sidechain)const { - sidechain_address_object result; - return result; + const auto& idx = _db.get_index_type().indices().get(); + auto itr = idx.find( boost::make_tuple( account, sidechain ) ); + if( itr != idx.end() ) + return *itr; + return {}; } uint64_t database_api::get_sidechain_addresses_count()const @@ -1821,7 +1840,7 @@ uint64_t database_api::get_sidechain_addresses_count()const uint64_t database_api_impl::get_sidechain_addresses_count()const { - return 0; + return _db.get_index_type().indices().size(); } ////////////////////////////////////////////////////////////////////// diff --git a/libraries/app/include/graphene/app/database_api.hpp b/libraries/app/include/graphene/app/database_api.hpp index 2cf1bcd0..9f6e8c34 100644 --- a/libraries/app/include/graphene/app/database_api.hpp +++ b/libraries/app/include/graphene/app/database_api.hpp @@ -623,11 +623,18 @@ class database_api */ vector> get_sidechain_addresses_by_account(account_id_type account)const; + /** + * @brief Get the sidechain addresses for a given sidechain + * @param sidechain Sidechain for which addresses should be retrieved + * @return The sidechain addresses objects, or null if the sidechain does not have any addresses + */ + vector> get_sidechain_addresses_by_sidechain(peerplays_sidechain::sidechain_type sidechain)const; + /** * @brief Get the sidechain addresses for a given account and sidechain * @param account The ID of the account whose sidechain addresses should be retrieved * @param sidechain Sidechain for which address should be retrieved - * @return The sidechain addresses objects, or null if the account does not have a sidechain addresses for a given network + * @return The sidechain addresses objects, or null if the account does not have a sidechain addresses for a given sidechain */ fc::optional get_sidechain_addresses_by_account_and_sidechain(account_id_type account, peerplays_sidechain::sidechain_type sidechain)const; @@ -848,6 +855,13 @@ FC_API(graphene::app::database_api, (lookup_son_accounts) (get_son_count) + // Sidechain addresses + (get_sidechain_addresses) + (get_sidechain_addresses_by_account) + (get_sidechain_addresses_by_sidechain) + (get_sidechain_addresses_by_account_and_sidechain) + (get_sidechain_addresses_count) + // workers (get_workers_by_account) // Votes diff --git a/libraries/chain/include/graphene/chain/sidechain_address_object.hpp b/libraries/chain/include/graphene/chain/sidechain_address_object.hpp index 2a42fde7..5ba00680 100644 --- a/libraries/chain/include/graphene/chain/sidechain_address_object.hpp +++ b/libraries/chain/include/graphene/chain/sidechain_address_object.hpp @@ -33,8 +33,8 @@ namespace graphene { namespace chain { }; struct by_account; - struct by_network; - struct by_account_and_network; + struct by_sidechain; + struct by_account_and_sidechain; using sidechain_address_multi_index_type = multi_index_container< sidechain_address_object, indexed_by< @@ -44,10 +44,10 @@ namespace graphene { namespace chain { ordered_unique< tag, member >, - ordered_unique< tag, + ordered_unique< tag, member >, - ordered_unique< tag, + ordered_unique< tag, composite_key, member diff --git a/libraries/chain/sidechain_address_evaluator.cpp b/libraries/chain/sidechain_address_evaluator.cpp index 518e5be3..d79d4cb1 100644 --- a/libraries/chain/sidechain_address_evaluator.cpp +++ b/libraries/chain/sidechain_address_evaluator.cpp @@ -9,7 +9,7 @@ namespace graphene { namespace chain { void_result add_sidechain_address_evaluator::do_evaluate(const sidechain_address_add_operation& op) { try{ - const auto& idx = db().get_index_type().indices().get(); + const auto& idx = db().get_index_type().indices().get(); FC_ASSERT( idx.find(boost::make_tuple(op.sidechain_address_account, op.sidechain)) == idx.end(), "Duplicated item" ); return void_result(); } FC_CAPTURE_AND_RETHROW( (op) ) } diff --git a/libraries/plugins/peerplays_sidechain/sidechain_net_manager.cpp b/libraries/plugins/peerplays_sidechain/sidechain_net_manager.cpp index 6e28319c..aa118075 100644 --- a/libraries/plugins/peerplays_sidechain/sidechain_net_manager.cpp +++ b/libraries/plugins/peerplays_sidechain/sidechain_net_manager.cpp @@ -23,6 +23,7 @@ bool sidechain_net_manager::create_handler(peerplays_sidechain::sidechain_type s std::unique_ptr h = std::unique_ptr(new sidechain_net_handler_bitcoin(options)); net_handlers.push_back(std::move(h)); ret_val = true; + break; } default: assert(false); diff --git a/tests/tests/sidechain_addresses_test.cpp b/tests/tests/sidechain_addresses_test.cpp index 33a585f9..eef76784 100644 --- a/tests/tests/sidechain_addresses_test.cpp +++ b/tests/tests/sidechain_addresses_test.cpp @@ -42,7 +42,7 @@ BOOST_AUTO_TEST_CASE( sidechain_address_add_test ) { BOOST_TEST_MESSAGE("Check sidechain_address_add_operation results"); - const auto& idx = db.get_index_type().indices().get(); + const auto& idx = db.get_index_type().indices().get(); BOOST_REQUIRE( idx.size() == 1 ); auto obj = idx.find( boost::make_tuple( alice_id, graphene::peerplays_sidechain::sidechain_type::bitcoin ) ); BOOST_REQUIRE( obj != idx.end() ); @@ -61,7 +61,7 @@ BOOST_AUTO_TEST_CASE( sidechain_address_update_test ) { GET_ACTOR(alice); - const auto& idx = db.get_index_type().indices().get(); + const auto& idx = db.get_index_type().indices().get(); BOOST_REQUIRE( idx.size() == 1 ); auto obj = idx.find( boost::make_tuple( alice_id, graphene::peerplays_sidechain::sidechain_type::bitcoin ) ); BOOST_REQUIRE( obj != idx.end() ); @@ -90,7 +90,7 @@ BOOST_AUTO_TEST_CASE( sidechain_address_update_test ) { { BOOST_TEST_MESSAGE("Check sidechain_address_update_operation results"); - const auto& idx = db.get_index_type().indices().get(); + const auto& idx = db.get_index_type().indices().get(); BOOST_REQUIRE( idx.size() == 1 ); auto obj = idx.find( boost::make_tuple( alice_id, graphene::peerplays_sidechain::sidechain_type::bitcoin ) ); BOOST_REQUIRE( obj != idx.end() ); @@ -110,7 +110,7 @@ BOOST_AUTO_TEST_CASE( sidechain_address_delete_test ) { GET_ACTOR(alice); - const auto& idx = db.get_index_type().indices().get(); + const auto& idx = db.get_index_type().indices().get(); BOOST_REQUIRE( idx.size() == 1 ); auto obj = idx.find( boost::make_tuple( alice_id, graphene::peerplays_sidechain::sidechain_type::bitcoin ) ); BOOST_REQUIRE( obj != idx.end() ); @@ -132,7 +132,7 @@ BOOST_AUTO_TEST_CASE( sidechain_address_delete_test ) { { BOOST_TEST_MESSAGE("Check sidechain_address_delete_operation results"); - const auto& idx = db.get_index_type().indices().get(); + const auto& idx = db.get_index_type().indices().get(); BOOST_REQUIRE( idx.size() == 0 ); auto obj = idx.find( boost::make_tuple( alice_id, graphene::peerplays_sidechain::sidechain_type::bitcoin ) ); BOOST_REQUIRE( obj == idx.end() );