From c3c5f413c354d850c25ce62de8a9705eae1ed2c4 Mon Sep 17 00:00:00 2001 From: Matias Romeo Date: Mon, 12 Jun 2017 00:22:17 -0300 Subject: [PATCH] Add API function to return account registered types --- libraries/chain/include/eos/chain/types.hpp | 4 ++-- plugins/chain_api_plugin/chain_api_plugin.cpp | 1 + plugins/chain_plugin/chain_plugin.cpp | 20 +++++++++++++++++++ .../include/eos/chain_plugin/chain_plugin.hpp | 9 +++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/libraries/chain/include/eos/chain/types.hpp b/libraries/chain/include/eos/chain/types.hpp index 088a6bda5..5faebeb53 100644 --- a/libraries/chain/include/eos/chain/types.hpp +++ b/libraries/chain/include/eos/chain/types.hpp @@ -180,8 +180,8 @@ namespace eos { namespace chain { } } // eos::chain namespace fc { - void to_variant(const shared_vector& c, fc::variant& v); - void from_variant(const fc::variant& v, shared_vector& fields); + void to_variant(const eos::chain::shared_vector& c, fc::variant& v); + void from_variant(const fc::variant& v, eos::chain::shared_vector& fields); } FC_REFLECT_ENUM(eos::chain::object_type, diff --git a/plugins/chain_api_plugin/chain_api_plugin.cpp b/plugins/chain_api_plugin/chain_api_plugin.cpp index c899e6094..bd8ed12ac 100644 --- a/plugins/chain_api_plugin/chain_api_plugin.cpp +++ b/plugins/chain_api_plugin/chain_api_plugin.cpp @@ -49,6 +49,7 @@ void chain_api_plugin::plugin_startup() { app().get_plugin().add_api({ CHAIN_RO_CALL(get_info), CHAIN_RO_CALL(get_block), + CHAIN_RO_CALL(get_types), CHAIN_RW_CALL(push_block), CHAIN_RW_CALL(push_transaction) }); diff --git a/plugins/chain_plugin/chain_plugin.cpp b/plugins/chain_plugin/chain_plugin.cpp index 3a7ed938d..2331bc28f 100644 --- a/plugins/chain_plugin/chain_plugin.cpp +++ b/plugins/chain_plugin/chain_plugin.cpp @@ -8,6 +8,7 @@ #include #include +#include namespace eos { @@ -16,6 +17,8 @@ using fc::flat_map; using chain::block_id_type; using chain::fork_database; using chain::block_log; +using chain::type_index; +using chain::by_scope_name; class chain_plugin_impl { public: @@ -162,6 +165,23 @@ read_only::get_block_results read_only::get_block(const read_only::get_block_par "Could not find block: ${block}", ("block", params.block_num_or_id)); } +read_only::get_types_results read_only::get_types(const get_types_params& params) const { + + auto& _db = app().get_plugin().db(); + auto& index = _db.get_index(); + auto range = index.equal_range( boost::make_tuple( params.account_name ) ); + + get_types_results res; + + for( const auto& to : boost::make_iterator_range( range.first, range.second ) ) { + fc::variant v; + fc::to_variant(to, v); + res.emplace_back(v); + } + + return res; +} + read_write::push_block_results read_write::push_block(const read_write::push_block_params& params) { db.push_block(params); return read_write::push_block_results(); diff --git a/plugins/chain_plugin/include/eos/chain_plugin/chain_plugin.hpp b/plugins/chain_plugin/include/eos/chain_plugin/chain_plugin.hpp index 7a64b991b..c9edb532a 100644 --- a/plugins/chain_plugin/include/eos/chain_plugin/chain_plugin.hpp +++ b/plugins/chain_plugin/include/eos/chain_plugin/chain_plugin.hpp @@ -4,6 +4,8 @@ #include +namespace fc { class variant; } + namespace eos { using eos::chain::chain_controller; using std::unique_ptr; @@ -35,6 +37,12 @@ public: }; using get_block_results = chain::signed_block; get_block_results get_block(const get_block_params& params) const; + + struct get_types_params { + string account_name; + }; + using get_types_results = std::vector; + get_types_results get_types(const get_types_params& params) const; }; class read_write { @@ -89,3 +97,4 @@ FC_REFLECT(eos::chain_apis::read_only::get_info_results, (head_block_num)(head_block_id)(head_block_time)(head_block_producer) (recent_slots)(participation_rate)) FC_REFLECT(eos::chain_apis::read_only::get_block_params, (block_num_or_id)) +FC_REFLECT(eos::chain_apis::read_only::get_types_params, (account_name)) \ No newline at end of file -- GitLab