Scorum
raw_block_api.cpp
Go to the documentation of this file.
1 
4 
7 
8 namespace scorum {
9 namespace plugin {
10 namespace raw_block {
11 
12 namespace detail {
13 
15 {
16 public:
18 
19  std::shared_ptr<scorum::plugin::raw_block::raw_block_plugin> get_plugin();
20 
22 };
23 
25  : app(_app)
26 {
27 }
28 
29 std::shared_ptr<scorum::plugin::raw_block::raw_block_plugin> raw_block_api_impl::get_plugin()
30 {
31  return app.get_plugin<raw_block_plugin>("raw_block");
32 }
33 
34 } // detail
35 
37 {
38  my = std::make_shared<detail::raw_block_api_impl>(ctx.app);
39 }
40 
42 {
43  FC_ASSERT(!my->app.is_read_only(), "get_raw_block is not available in read-only mode.");
44 
45  get_raw_block_result result;
46  std::shared_ptr<scorum::chain::database> db = my->app.chain_database();
47 
48  fc::optional<chain::signed_block> block = db->fetch_block_by_number(args.block_num);
49  if (!block.valid())
50  {
51  return result;
52  }
53  std::vector<char> serialized_block = fc::raw::pack(*block);
54  result.raw_block
55  = fc::base64_encode(std::string(&serialized_block[0], &serialized_block[0] + serialized_block.size()));
56  result.block_id = block->id();
57  result.previous = block->previous;
58  result.timestamp = block->timestamp;
59  return result;
60 }
61 
62 void raw_block_api::push_raw_block(std::string block_b64)
63 {
64  FC_ASSERT(!my->app.is_read_only(), "push_raw_block is not available in read-only mode.");
65 
66  std::shared_ptr<scorum::chain::database> db = my->app.chain_database();
67 
68  std::string block_bin = fc::base64_decode(block_b64);
69  fc::datastream<const char*> ds(block_bin.c_str(), block_bin.size());
70  chain::signed_block block;
71  fc::raw::unpack(ds, block);
72 
73  db->push_block(block);
74 
75  return;
76 }
77 
79 {
80 }
81 }
82 }
83 } // scorum::plugin::raw_block
std::shared_ptr< abstract_plugin > get_plugin(const std::string &name) const
std::shared_ptr< scorum::plugin::raw_block::raw_block_plugin > get_plugin()
raw_block_api_impl(scorum::app::application &_app)
raw_block_api(const scorum::app::api_context &ctx)
get_raw_block_result get_raw_block(get_raw_block_args args)
void push_raw_block(std::string block_b64)
Definition: asset.cpp:15