Scorum
block_info_api.cpp
Go to the documentation of this file.
1 
4 
7 
8 namespace scorum {
9 namespace plugin {
10 namespace block_info {
11 
12 namespace detail {
13 
15 {
16 public:
18 
19  std::shared_ptr<scorum::plugin::block_info::block_info_plugin> get_plugin();
20 
21  void get_block_info(const get_block_info_args& args, std::vector<block_info>& result);
22  void get_blocks_with_info(const get_block_info_args& args, std::vector<block_with_info>& result);
23 
25 };
26 
28  : app(_app)
29 {
30 }
31 
32 std::shared_ptr<scorum::plugin::block_info::block_info_plugin> block_info_api_impl::get_plugin()
33 {
34  return app.get_plugin<block_info_plugin>("block_info");
35 }
36 
37 void block_info_api_impl::get_block_info(const get_block_info_args& args, std::vector<block_info>& result)
38 {
39  const std::vector<block_info>& _block_info = get_plugin()->_block_info;
40 
41  FC_ASSERT(args.start_block_num > 0);
42  FC_ASSERT(args.count <= 10000);
43  uint32_t n = std::min(uint32_t(_block_info.size()), args.start_block_num + args.count);
44  for (uint32_t block_num = args.start_block_num; block_num < n; block_num++)
45  result.emplace_back(_block_info[block_num]);
46  return;
47 }
48 
49 void block_info_api_impl::get_blocks_with_info(const get_block_info_args& args, std::vector<block_with_info>& result)
50 {
51  const std::vector<block_info>& _block_info = get_plugin()->_block_info;
52  const chain::database& db = get_plugin()->database();
53 
54  FC_ASSERT(args.start_block_num > 0);
55  FC_ASSERT(args.count <= 10000);
56  uint32_t n = std::min(uint32_t(_block_info.size()), args.start_block_num + args.count);
57  uint64_t total_size = 0;
58  for (uint32_t block_num = args.start_block_num; block_num < n; block_num++)
59  {
60  uint64_t new_size = total_size + _block_info[block_num].block_size;
61  if ((new_size > 8 * 1024 * 1024) && (block_num != args.start_block_num))
62  break;
63  total_size = new_size;
64  result.emplace_back();
65  result.back().block = *db.fetch_block_by_number(block_num);
66  result.back().info = _block_info[block_num];
67  }
68  return;
69 }
70 
71 } // detail
72 
74 {
75  my = std::make_shared<detail::block_info_api_impl>(ctx.app);
76 }
77 
79 {
80  std::vector<block_info> result;
81  my->get_block_info(args, result);
82  return result;
83 }
84 
86 {
87  std::vector<block_with_info> result;
88  my->get_blocks_with_info(args, result);
89  return result;
90 }
91 
93 {
94 }
95 }
96 }
97 } // scorum::plugin::block_info
std::shared_ptr< abstract_plugin > get_plugin(const std::string &name) const
tracks the blockchain state in an extensible manner
Definition: database.hpp:52
optional< signed_block > fetch_block_by_number(uint32_t num) const
Definition: database.cpp:470
block_info_api(const scorum::app::api_context &ctx)
std::shared_ptr< scorum::plugin::block_info::block_info_plugin > get_plugin()
void get_blocks_with_info(const get_block_info_args &args, std::vector< block_with_info > &result)
void get_block_info(const get_block_info_args &args, std::vector< block_info > &result)
std::vector< block_info > get_block_info(get_block_info_args args)
std::vector< block_with_info > get_blocks_with_info(get_block_info_args args)
Definition: asset.cpp:15