You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openmonero/src/BlockchainSetup.cpp

183 lines
4.9 KiB

//
// Created by mwo on 10/07/18.
//
#include "BlockchainSetup.h"
#include "xmregcore/src/tools.h"
namespace xmreg
{
BlockchainSetup::BlockchainSetup(
network_type _net_type,
bool _do_not_relay,
string _config_path)
: net_type {_net_type},
do_not_relay {_do_not_relay},
config_path {_config_path}
{
config_json = read_config(config_path);
_init();
}
BlockchainSetup::BlockchainSetup(
network_type _net_type,
bool _do_not_relay,
nlohmann::json _config)
: net_type {_net_type},
do_not_relay {_do_not_relay},
config_json (_config)
{
_init();
}
void
BlockchainSetup::parse_addr_and_viewkey()
{
if (import_payment_address_str.empty()
|| import_payment_viewkey_str.empty())
std::runtime_error("config address or viewkey are empty.");
try
{
if (!parse_str_address(
import_payment_address_str,
import_payment_address,
net_type))
{
throw std::runtime_error("Cant parse config address: "
+ import_payment_address_str);
}
if (!xmreg::parse_str_secret_key(
import_payment_viewkey_str,
import_payment_viewkey))
{
throw std::runtime_error("Cant parse config viewkey: "
+ import_payment_viewkey_str);
}
}
catch (std::exception const& e)
{
throw;
}
}
void
BlockchainSetup::get_blockchain_path()
{
switch (net_type)
{
case network_type::MAINNET:
blockchain_path = config_json["blockchain-path"]["mainnet"]
.get<string>();
deamon_url = config_json["daemon-url"]["mainnet"];
import_payment_address_str
= config_json["wallet_import"]["mainnet"]["address"];
import_payment_viewkey_str
= config_json["wallet_import"]["mainnet"]["viewkey"];
break;
case network_type::TESTNET:
blockchain_path = config_json["blockchain-path"]["testnet"]
.get<string>();
deamon_url = config_json["daemon-url"]["testnet"];
import_payment_address_str
= config_json["wallet_import"]["testnet"]["address"];
import_payment_viewkey_str
= config_json["wallet_import"]["testnet"]["viewkey"];
break;
case network_type::STAGENET:
blockchain_path = config_json["blockchain-path"]["stagenet"]
.get<string>();
deamon_url = config_json["daemon-url"]["stagenet"];
import_payment_address_str
= config_json["wallet_import"]["stagenet"]["address"];
import_payment_viewkey_str
= config_json["wallet_import"]["stagenet"]["viewkey"];
break;
default:
throw std::runtime_error("Invalid netowork type provided "
+ std::to_string(static_cast<int>(net_type)));
}
if (!xmreg::get_blockchain_path(blockchain_path, net_type))
throw std::runtime_error("Error getting blockchain path.");
}
string
BlockchainSetup::get_network_name(network_type n_type)
{
switch (n_type)
{
case network_type::MAINNET:
return "mainnet";
case network_type::TESTNET:
return "testnet";
case network_type::STAGENET:
return "stagenet";
default:
throw std::runtime_error("wrong network");
}
}
json
BlockchainSetup::read_config(string config_json_path)
{
// check if config-file provided exist
if (!boost::filesystem::exists(config_json_path))
throw std::runtime_error("Config file " + config_json_path
+ " does not exist");
json _config;
try
{
// try reading and parsing json config file provided
std::ifstream i(config_json_path);
i >> _config;
}
catch (const std::exception& e)
{
throw std::runtime_error(string{"Cant parse json string as json: "}
+ e.what());
}
return _config;
}
void
BlockchainSetup::_init()
{
refresh_block_status_every
= seconds {config_json["refresh_block_status_every_seconds"]};
blocks_search_lookahead
= config_json["blocks_search_lookahead"];
max_number_of_blocks_to_import
= config_json["max_number_of_blocks_to_import"];
search_thread_life
= seconds {config_json["search_thread_life_in_seconds"]};
import_fee
= config_json["wallet_import"]["fee"];
mysql_ping_every
= seconds {config_json["mysql_ping_every_seconds"]};
blockchain_treadpool_size
= config_json["blockchain_treadpool_size"];
get_blockchain_path();
parse_addr_and_viewkey();
}
}