onion-wownero-blockchain-ex.../src/CurrentBlockchainStatus.h

115 lines
2.4 KiB
C
Raw Normal View History

2017-05-16 05:29:24 +00:00
//
// Created by mwo on 16/05/17.
//
#ifndef XMRBLOCKS_CURRENTBLOCKCHAINSTATUS_H
#define XMRBLOCKS_CURRENTBLOCKCHAINSTATUS_H
#include "MicroCore.h"
#include <boost/algorithm/string.hpp>
#include <iostream>
#include <memory>
#include <thread>
#include <mutex>
#include <atomic>
namespace xmreg
{
using namespace std;
namespace bf = boost::filesystem;
2017-05-17 00:20:43 +00:00
struct CurrentBlockchainStatus
2017-05-16 05:29:24 +00:00
{
2017-05-17 00:20:43 +00:00
2017-05-17 05:30:36 +00:00
struct Emission
{
uint64_t coinbase;
uint64_t fee;
uint64_t blk_no;
inline uint64_t
checksum() const
{
return coinbase + fee + blk_no;
}
operator
std::string() const
{
return to_string(blk_no) + "," + to_string(coinbase)
+ "," + to_string(fee) + "," + to_string(checksum());
}
};
static bf::path blockchain_path;
2017-05-16 05:29:24 +00:00
static cryptonote::network_type nettype;
2017-05-17 00:20:43 +00:00
2017-05-16 05:29:24 +00:00
static string output_file;
static string deamon_url;
2017-05-19 02:22:11 +00:00
// how many blocks to read before thread goes to sleep
2017-05-17 00:20:43 +00:00
static uint64_t blockchain_chunk_size;
2017-05-19 02:22:11 +00:00
// gap from what we store total_emission_atomic and
// current blockchain height. We dont want to store
// what is on, e.g., top block, as this can get messy
// if the block gets orphaned or blockchain reorganization
// occurs. So the top 3 blocks (default number) will always
// be calculated in flight and added to what we have so far.
static uint64_t blockchain_chunk_gap;
// current blockchain height and
// hash of top block
2017-05-16 05:29:24 +00:00
static atomic<uint64_t> current_height;
2017-05-19 02:22:11 +00:00
2017-05-17 05:30:36 +00:00
static atomic<Emission> total_emission_atomic;
2017-05-16 05:29:24 +00:00
2017-05-19 02:22:11 +00:00
static boost::thread m_thread;
2017-05-16 05:29:24 +00:00
static atomic<bool> is_running;
// make object for accessing the blockchain here
static MicroCore* mcore;
static Blockchain* core_storage;
2017-05-16 05:29:24 +00:00
static void
start_monitor_blockchain_thread();
static void
set_blockchain_variables(MicroCore* _mcore,
Blockchain* _core_storage);
2017-05-16 05:29:24 +00:00
static void
update_current_emission_amount();
2017-05-19 02:22:11 +00:00
static Emission
calculate_emission_in_blocks(uint64_t start_blk, uint64_t end_blk);
2017-05-16 05:29:24 +00:00
static bool
save_current_emission_amount();
static bool
load_current_emission_amount();
2017-05-17 05:30:36 +00:00
static Emission
get_emission();
2017-05-16 05:29:24 +00:00
static bf::path
2017-05-17 00:20:43 +00:00
get_output_file_path();
2017-05-16 05:29:24 +00:00
static bool
is_thread_running();
};
}
#endif //XMRBLOCKS_CURRENTBLOCKCHAINSTATUS_H