diff --git a/libraries/app/api.cpp b/libraries/app/api.cpp index f36fd8d3..eee02ea4 100644 --- a/libraries/app/api.cpp +++ b/libraries/app/api.cpp @@ -141,7 +141,7 @@ namespace graphene { namespace app { vector> block_api::get_blocks(uint32_t block_num_from, uint32_t block_num_to)const { - FC_ASSERT( block_num_to >= block_num_from ); + FC_ASSERT( block_num_to >= block_num_from && block_num_to - block_num_from <= 100, "Total blocks to be returned should be less than 100"); vector> res; for(uint32_t block_num=block_num_from; block_num<=block_num_to; block_num++) { res.push_back(_db.fetch_block_by_number(block_num)); diff --git a/libraries/app/database_api.cpp b/libraries/app/database_api.cpp index a0a7cfc2..5b5fb589 100644 --- a/libraries/app/database_api.cpp +++ b/libraries/app/database_api.cpp @@ -71,6 +71,7 @@ class database_api_impl : public std::enable_shared_from_this optional get_block_header(uint32_t block_num)const; map> get_block_header_batch(const vector block_nums)const; optional get_block(uint32_t block_num)const; + vector> get_blocks(uint32_t block_num_from, uint32_t block_num_to)const; processed_transaction get_transaction( uint32_t block_num, uint32_t trx_in_block )const; // Globals @@ -499,6 +500,21 @@ optional database_api_impl::get_block(uint32_t block_num)const return _db.fetch_block_by_number(block_num); } +vector> database_api::get_blocks(uint32_t block_num_from, uint32_t block_num_to)const +{ + return my->get_blocks( block_num_from, block_num_to ); +} + +vector> database_api_impl::get_blocks(uint32_t block_num_from, uint32_t block_num_to)const +{ + FC_ASSERT( block_num_to >= block_num_from && block_num_to - block_num_from <= 100, "Total blocks to be returned should be less than 100"); + vector> res; + for(uint32_t block_num=block_num_from; block_num<=block_num_to; block_num++) { + res.push_back(_db.fetch_block_by_number(block_num)); + } + return res; +} + processed_transaction database_api::get_transaction( uint32_t block_num, uint32_t trx_in_block )const { return my->get_transaction( block_num, trx_in_block ); diff --git a/libraries/app/include/graphene/app/database_api.hpp b/libraries/app/include/graphene/app/database_api.hpp index 5b275f3f..80fe78dd 100644 --- a/libraries/app/include/graphene/app/database_api.hpp +++ b/libraries/app/include/graphene/app/database_api.hpp @@ -199,6 +199,14 @@ class database_api */ optional get_block(uint32_t block_num)const; + /** + * @brief Retrieve a list of signed blocks + * @param block_num_from start + * @param block_num_to end + * @return list of referenced blocks + */ + vector> get_blocks(uint32_t block_num_from, uint32_t block_num_to)const; + /** * @brief used to fetch an individual transaction. */ @@ -985,6 +993,7 @@ FC_API(graphene::app::database_api, (get_block_header) (get_block_header_batch) (get_block) + (get_blocks) (get_transaction) (get_recent_transaction_by_id) diff --git a/libraries/wallet/include/graphene/wallet/wallet.hpp b/libraries/wallet/include/graphene/wallet/wallet.hpp index b09d950e..58d78228 100644 --- a/libraries/wallet/include/graphene/wallet/wallet.hpp +++ b/libraries/wallet/include/graphene/wallet/wallet.hpp @@ -312,6 +312,7 @@ class wallet_api */ variant_object about() const; optional get_block( uint32_t num ); + vector> get_blocks(uint32_t block_num_from, uint32_t block_num_to)const; /** Returns the number of accounts registered on the blockchain * @returns the number of registered accounts */ @@ -2652,6 +2653,7 @@ FC_API( graphene::wallet::wallet_api, (get_account) (get_account_id) (get_block) + (get_blocks) (get_account_count) (get_account_history) (get_relative_account_history) diff --git a/libraries/wallet/wallet.cpp b/libraries/wallet/wallet.cpp index 29306675..874e10b5 100644 --- a/libraries/wallet/wallet.cpp +++ b/libraries/wallet/wallet.cpp @@ -4351,6 +4351,11 @@ optional wallet_api::get_block(uint32_t num) return my->_remote_db->get_block(num); } +vector> wallet_api::get_blocks(uint32_t block_num_from, uint32_t block_num_to) const +{ + return my->_remote_db->get_blocks(block_num_from, block_num_to); +} + uint64_t wallet_api::get_account_count() const { return my->_remote_db->get_account_count();