diff --git a/libraries/app/database_api.cpp b/libraries/app/database_api.cpp index 09052f20..7654b3fc 100644 --- a/libraries/app/database_api.cpp +++ b/libraries/app/database_api.cpp @@ -65,6 +65,7 @@ class database_api_impl : public std::enable_shared_from_this // Blocks and transactions optional get_block_header(uint32_t block_num)const; + map get_block_header_batch(const vector block_num)const; optional get_block(uint32_t block_num)const; processed_transaction get_transaction( uint32_t block_num, uint32_t trx_in_block )const; @@ -362,6 +363,24 @@ optional database_api_impl::get_block_header(uint32_t block_num) c return *result; return {}; } +map database_api::get_block_header_batch(const vector block_num)const +{ + return my->get_block_header_batch( block_num ); +} + +map database_api_impl::get_block_header_batch(const vector block_num) const +{ + map results; + for (const uint32_t& i : block_num) { + auto result = _db.fetch_block_by_number(i); + if (result) + results[i] = *result; + else + results[i] = {}; + + } + return results; +} optional database_api::get_block(uint32_t block_num)const { diff --git a/libraries/app/include/graphene/app/database_api.hpp b/libraries/app/include/graphene/app/database_api.hpp index 56a486e8..2d801207 100644 --- a/libraries/app/include/graphene/app/database_api.hpp +++ b/libraries/app/include/graphene/app/database_api.hpp @@ -158,6 +158,14 @@ class database_api */ optional get_block_header(uint32_t block_num)const; + /** + * @brief Retrieve multiple block header by block numbers + * @param block_num vector containing heights of the block whose header should be returned + * @return array of headers of the referenced blocks, or null if no matching block was found + */ + map get_block_header_batch(const vector block_num)const; + + /** * @brief Retrieve a full, signed block * @param block_num Height of the block to be returned @@ -588,6 +596,7 @@ FC_API(graphene::app::database_api, // Blocks and transactions (get_block_header) + (get_block_header_batch) (get_block) (get_transaction) (get_recent_transaction_by_id)