diff --git a/Dockerfile b/Dockerfile index 9dc4fbf..61fe87c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,7 @@ FROM ubuntu:20.04 as builder # Set Monero branch/tag to be used for monerod compilation + ARG MONERO_BRANCH=release-v18 # Added DEBIAN_FRONTEND=noninteractive to workaround tzdata prompt on installation diff --git a/README.md b/README.md index b5d60f6..844041d 100644 --- a/README.md +++ b/README.md @@ -24,26 +24,27 @@ Monero C++ libraries, but also demonstrates how to use: ## Explorer hosts Clearnet versions: - - [https://xmrchain.net/](https://xmrchain.net/) - https enabled, most popular and very stable. - - [https://monerohash.com/explorer/](https://monerohash.com/explorer/) - nice looking one, https enabled. + - [https://xmrchain.net/](https://xmrchain.net/) - HTTPS enabled, most popular, and very stable. + - [https://monerohash.com/explorer/](https://monerohash.com/explorer/) - nice looking one, HTTPS enabled. - [http://monerochain.com/](http://monerochain.com/) - JSON API based, multiple nodes. - - [https://blox.minexmr.com/](https://blox.minexmr.com/) - - https enabled. - - [https://community.xmr.to/explorer/mainnet/](https://community.xmr.to/explorer/mainnet/) + - [https://blox.minexmr.com/](https://blox.minexmr.com/) - HTTPS enabled. Testnet version: - [https://testnet.xmrchain.com/](https://testnet.xmrchain.com/) - https enabled. - - [https://community.xmr.to/explorer/testnet/](https://community.xmr.to/explorer/testnet/) Stagenet version: - [https://stagenet.xmrchain.net/](https://stagenet.xmrchain.net/) - - [https://community.xmr.to/explorer/stagenet/](https://community.xmr.to/explorer/stagenet/) i2p users (main Monero network): - [http://7o4gezpkye6ekibhgpkg7v626ze4idsirapufzrefkdysa6zxhha.b32.i2p/](http://7o4gezpkye6ekibhgpkg7v626ze4idsirapufzrefkdysa6zxhha.b32.i2p/) +Tor versions: + + - [http://exploredv42tq2nowrll6f27nuymenndwupueqvyugaqzbrvmjhhceqd.onion/](http://exploredv42tq2nowrll6f27nuymenndwupueqvyugaqzbrvmjhhceqd.onion/) - Native v3 Onion, JSON API enabled, emission enabled, rawtx enabled. + Alternative block explorers: - [https://localmonero.co/blocks](https://localmonero.co/blocks) @@ -235,16 +236,6 @@ docker-compose up -d When running via Docker, please use something like [Traefik](https://doc.traefik.io/traefik/) or [enable SSL](#enable-ssl-https) to secure communications. - - - - - - - - - - ## The explorer's command line options ``` @@ -297,7 +288,7 @@ xmrblocks, Onion Monero Blockchain Explorer: functionality --ssl-key-file arg path to key file for ssl (https) functionality - -d [ --deamon-url ] arg (=127.0.0.1:18081) + -d [ --daemon-url ] arg (=http:://127.0.0.1:18081) Monero daemon url --daemon-login arg Specify username[:password] for daemon RPC client @@ -326,7 +317,6 @@ docker run -it -d -v :/home/monero/.bitmo Make sure to always start the portion of command line flags with `./xmrblocks` and set any flags you would like after that, as shown above. - ## Enable Monero emission Obtaining current Monero emission amount is not straight forward. Thus, by default it is diff --git a/main.cpp b/main.cpp index ffa36b7..c96d4c0 100644 --- a/main.cpp +++ b/main.cpp @@ -56,7 +56,7 @@ main(int ac, const char* av[]) auto port_opt = opts.get_option("port"); auto bindaddr_opt = opts.get_option("bindaddr"); auto bc_path_opt = opts.get_option("bc-path"); - auto deamon_url_opt = opts.get_option("deamon-url"); + auto daemon_url_opt = opts.get_option("daemon-url"); auto ssl_crt_file_opt = opts.get_option("ssl-crt-file"); auto ssl_key_file_opt = opts.get_option("ssl-key-file"); auto no_blocks_on_index_opt = opts.get_option("no-blocks-on-index"); @@ -206,13 +206,13 @@ main(int ac, const char* av[]) return EXIT_FAILURE; } - string deamon_url {*deamon_url_opt}; + string daemon_url {*daemon_url_opt}; if (testnet && deamon_url == "127.0.0.1:18081") deamon_url = "127.0.0.1:28081"; if (stagenet && deamon_url == "127.0.0.1:18081") deamon_url = "127.0.0.1:38081"; - + uint64_t mempool_info_timeout {5000}; try @@ -248,8 +248,8 @@ main(int ac, const char* av[]) = blockchain_path; xmreg::CurrentBlockchainStatus::nettype = nettype; - xmreg::CurrentBlockchainStatus::deamon_url - = deamon_url; + xmreg::CurrentBlockchainStatus::daemon_url + = daemon_url; xmreg::CurrentBlockchainStatus::set_blockchain_variables( &mcore, core_storage); @@ -265,8 +265,8 @@ main(int ac, const char* av[]) = blockchain_path; xmreg::MempoolStatus::nettype = nettype; - xmreg::MempoolStatus::deamon_url - = deamon_url; + xmreg::MempoolStatus::daemon_url + = daemon_url; xmreg::MempoolStatus::login = daemon_rpc_login; xmreg::MempoolStatus::set_blockchain_variables( @@ -300,7 +300,7 @@ main(int ac, const char* av[]) // contains logic for the website xmreg::page xmrblocks(&mcore, core_storage, - deamon_url, + daemon_url, nettype, enable_pusher, enable_randomx, diff --git a/src/CmdLineOptions.cpp b/src/CmdLineOptions.cpp index 05c6eef..31b846e 100644 --- a/src/CmdLineOptions.cpp +++ b/src/CmdLineOptions.cpp @@ -71,7 +71,7 @@ namespace xmreg "path to key file for ssl (https) functionality") ("daemon-login", value(), "Specify username[:password] for daemon RPC client") - ("deamon-url,d", value()->default_value("127.0.0.1:18081"), + ("daemon-url,d", value()->default_value("127.0.0.1:18081"), "Monero daemon url") ("enable-mixin-guess", value()->default_value(false)->implicit_value(true), "enable guessing real outputs in key images based on viewkey"); diff --git a/src/CurrentBlockchainStatus.cpp b/src/CurrentBlockchainStatus.cpp index 040f01d..602eec4 100644 --- a/src/CurrentBlockchainStatus.cpp +++ b/src/CurrentBlockchainStatus.cpp @@ -303,7 +303,7 @@ cryptonote::network_type CurrentBlockchainStatus::nettype {cryptonote::network_t string CurrentBlockchainStatus::output_file {"emission_amount.txt"}; -string CurrentBlockchainStatus::deamon_url {"http:://127.0.0.1:18081"}; +string CurrentBlockchainStatus::daemon_url {"http:://127.0.0.1:18081"}; uint64_t CurrentBlockchainStatus::blockchain_chunk_size {10000}; diff --git a/src/CurrentBlockchainStatus.h b/src/CurrentBlockchainStatus.h index 54e0bc1..580ca64 100644 --- a/src/CurrentBlockchainStatus.h +++ b/src/CurrentBlockchainStatus.h @@ -51,7 +51,7 @@ struct CurrentBlockchainStatus static string output_file; - static string deamon_url; + static string daemon_url; // how many blocks to read before thread goes to sleep static uint64_t blockchain_chunk_size; diff --git a/src/MempoolStatus.cpp b/src/MempoolStatus.cpp index 61e23ed..24cc6e3 100644 --- a/src/MempoolStatus.cpp +++ b/src/MempoolStatus.cpp @@ -96,7 +96,7 @@ MempoolStatus::start_mempool_status_thread() bool MempoolStatus::read_mempool() { - rpccalls rpc {deamon_url, login}; + rpccalls rpc {daemon_url, login}; string error_msg; @@ -222,7 +222,7 @@ MempoolStatus::read_mempool() bool MempoolStatus::read_network_info() { - rpccalls rpc {deamon_url, login}; + rpccalls rpc {daemon_url, login}; COMMAND_RPC_GET_INFO::response rpc_network_info; @@ -329,7 +329,7 @@ MempoolStatus::is_thread_running() } bf::path MempoolStatus::blockchain_path {"/home/mwo/.bitmonero/lmdb"}; -string MempoolStatus::deamon_url {"http:://127.0.0.1:18081"}; +string MempoolStatus::daemon_url {"http:://127.0.0.1:18081"}; cryptonote::network_type MempoolStatus::nettype {cryptonote::network_type::MAINNET}; atomic MempoolStatus::is_running {false}; boost::thread MempoolStatus::m_thread; diff --git a/src/MempoolStatus.h b/src/MempoolStatus.h index 8699c65..8c952e0 100644 --- a/src/MempoolStatus.h +++ b/src/MempoolStatus.h @@ -125,7 +125,7 @@ struct MempoolStatus static atomic mempool_size; // size in bytes. static bf::path blockchain_path; - static string deamon_url; + static string daemon_url; static cryptonote::network_type nettype; static rpccalls::login_opt login; diff --git a/src/page.h b/src/page.h index d06b671..e07638a 100644 --- a/src/page.h +++ b/src/page.h @@ -499,7 +499,7 @@ public: page(MicroCore* _mcore, Blockchain* _core_storage, - string _deamon_url, + string _daemon_url, cryptonote::network_type _nettype, bool _enable_pusher, bool _enable_randomx, @@ -517,7 +517,7 @@ page(MicroCore* _mcore, rpccalls::login_opt _daemon_rpc_login) : mcore {_mcore}, core_storage {_core_storage}, - rpc {_deamon_url, _daemon_rpc_login}, + rpc {_daemon_url, _daemon_rpc_login}, server_timestamp {std::time(nullptr)}, nettype {_nettype}, enable_pusher {_enable_pusher}, @@ -1436,6 +1436,7 @@ show_block_hex(size_t block_height, bool complete_blk) epee::byte_slice complete_block_data_slice; + if(!epee::serialization::store_t_to_binary( complete_block_data, complete_block_data_slice)) { @@ -1447,6 +1448,7 @@ show_block_hex(size_t block_height, bool complete_blk) complete_block_data_slice.begin(), complete_block_data_slice.end()); + return epee::string_tools ::buff_to_hex_nodelimer(block_data_str); } @@ -2203,6 +2205,8 @@ show_my_outputs(string tx_hash_str, // check if generated public key matches the current output's key bool mine_output = (std::get<0>(outp) == tx_pubkey); + + bool with_additional = false; if (!mine_output && txd.additional_pks.size() diff --git a/src/rpccalls.cpp b/src/rpccalls.cpp index 51277dc..31d23c5 100644 --- a/src/rpccalls.cpp +++ b/src/rpccalls.cpp @@ -9,13 +9,13 @@ namespace xmreg rpccalls::rpccalls( - string _deamon_url, + string _daemon_url, login_opt login, uint64_t _timeout) - : deamon_url {_deamon_url}, + : daemon_url {_daemon_url}, timeout_time {_timeout} { - epee::net_utils::parse_url(deamon_url, url); + epee::net_utils::parse_url(daemon_url, url); port = std::to_string(url.port); @@ -23,12 +23,13 @@ rpccalls::rpccalls( m_http_client.set_server( deamon_url, + login, epee::net_utils::ssl_support_t::e_ssl_support_disabled); } bool -rpccalls::connect_to_monero_deamon() +rpccalls::connect_to_monero_daemon() { //std::lock_guard guard(m_daemon_rpc_mutex); @@ -48,9 +49,9 @@ rpccalls::get_current_height() std::lock_guard guard(m_daemon_rpc_mutex); - if (!connect_to_monero_deamon()) + if (!connect_to_monero_daemon()) { - cerr << "get_current_height: not connected to deamon" << endl; + cerr << "get_current_height: not connected to daemon" << endl; return false; } @@ -60,8 +61,8 @@ rpccalls::get_current_height() if (!r) { - cerr << "Error connecting to Monero deamon at " - << deamon_url << endl; + cerr << "Error connecting to Monero daemon at " + << daemon_url << endl; return 0; } @@ -80,9 +81,9 @@ rpccalls::get_mempool(vector& mempool_txs) { std::lock_guard guard(m_daemon_rpc_mutex); - if (!connect_to_monero_deamon()) + if (!connect_to_monero_daemon()) { - cerr << "get_mempool: not connected to deamon" << endl; + cerr << "get_mempool: not connected to daemon" << endl; return false; } @@ -93,8 +94,8 @@ rpccalls::get_mempool(vector& mempool_txs) if (!r || res.status != CORE_RPC_STATUS_OK) { - cerr << "Error connecting to Monero deamon at " - << deamon_url << endl; + cerr << "Error connecting to Monero daemon at " + << daemon_url << endl; return false; } @@ -127,9 +128,9 @@ rpccalls::commit_tx(tools::wallet2::pending_tx& ptx, string& error_msg) std::lock_guard guard(m_daemon_rpc_mutex); - if (!connect_to_monero_deamon()) + if (!connect_to_monero_daemon()) { - cerr << "commit_tx: not connected to deamon" << endl; + cerr << "commit_tx: not connected to daemon" << endl; return false; } @@ -166,9 +167,9 @@ rpccalls::get_network_info(COMMAND_RPC_GET_INFO::response& response) { std::lock_guard guard(m_daemon_rpc_mutex); - if (!connect_to_monero_deamon()) + if (!connect_to_monero_daemon()) { - cerr << "get_network_info: not connected to deamon" << endl; + cerr << "get_network_info: not connected to daemon" << endl; return false; } @@ -192,15 +193,15 @@ rpccalls::get_network_info(COMMAND_RPC_GET_INFO::response& response) if (!err.empty()) { - cerr << "Error connecting to Monero deamon due to " + cerr << "Error connecting to Monero daemon due to " << err << endl; return false; } } else { - cerr << "Error connecting to Monero deamon at " - << deamon_url << endl; + cerr << "Error connecting to Monero daemon at " + << daemon_url << endl; return false; } @@ -226,9 +227,9 @@ rpccalls::get_hardfork_info(COMMAND_RPC_HARD_FORK_INFO::response& response) { std::lock_guard guard(m_daemon_rpc_mutex); - if (!connect_to_monero_deamon()) + if (!connect_to_monero_daemon()) { - cerr << "get_hardfork_info: not connected to deamon" << endl; + cerr << "get_hardfork_info: not connected to daemon" << endl; return false; } @@ -253,15 +254,15 @@ rpccalls::get_hardfork_info(COMMAND_RPC_HARD_FORK_INFO::response& response) if (!err.empty()) { - cerr << "Error connecting to Monero deamon due to " + cerr << "Error connecting to Monero daemon due to " << err << endl; return false; } } else { - cerr << "Error connecting to Monero deamon at " - << deamon_url << endl; + cerr << "Error connecting to Monero daemon at " + << daemon_url << endl; return false; } @@ -294,9 +295,9 @@ rpccalls::get_dynamic_per_kb_fee_estimate( { std::lock_guard guard(m_daemon_rpc_mutex); - if (!connect_to_monero_deamon()) + if (!connect_to_monero_daemon()) { - cerr << "get_dynamic_per_kb_fee_estimate: not connected to deamon" << endl; + cerr << "get_dynamic_per_kb_fee_estimate: not connected to daemon" << endl; return false; } @@ -321,15 +322,15 @@ rpccalls::get_dynamic_per_kb_fee_estimate( if (!err.empty()) { - cerr << "Error connecting to Monero deamon due to " + cerr << "Error connecting to Monero daemon due to " << err << endl; return false; } } else { - cerr << "Error connecting to Monero deamon at " - << deamon_url << endl; + cerr << "Error connecting to Monero daemon at " + << daemon_url << endl; return false; } @@ -357,9 +358,9 @@ rpccalls::get_block(string const& blk_hash, block& blk, string& error_msg) { std::lock_guard guard(m_daemon_rpc_mutex); - if (!connect_to_monero_deamon()) + if (!connect_to_monero_daemon()) { - cerr << "get_block: not connected to deamon" << endl; + cerr << "get_block: not connected to daemon" << endl; return false; } @@ -384,15 +385,15 @@ rpccalls::get_block(string const& blk_hash, block& blk, string& error_msg) if (!err.empty()) { - cerr << "Error connecting to Monero deamon due to " + cerr << "Error connecting to Monero daemon due to " << err << endl; return false; } } else { - cerr << "get_block: error connecting to Monero deamon at " - << deamon_url << endl; + cerr << "get_block: error connecting to Monero daemon at " + << daemon_url << endl; return false; } diff --git a/src/rpccalls.h b/src/rpccalls.h index a20285f..05dce44 100644 --- a/src/rpccalls.h +++ b/src/rpccalls.h @@ -69,7 +69,7 @@ using namespace std; class rpccalls { - string deamon_url ; + string daemon_url ; uint64_t timeout_time; std::chrono::milliseconds timeout_time_ms; @@ -86,12 +86,12 @@ public: using login_opt = boost::optional; - rpccalls(string _deamon_url = "http:://127.0.0.1:18081", + rpccalls(string _daemon_url = "http:://127.0.0.1:18081", login_opt _login = login_opt {}, uint64_t _timeout = 200000); bool - connect_to_monero_deamon(); + connect_to_monero_daemon(); uint64_t get_current_height(); @@ -136,9 +136,9 @@ public: { std::lock_guard guard(m_daemon_rpc_mutex); - if (!connect_to_monero_deamon()) + if (!connect_to_monero_daemon()) { - cerr << "get_alt_blocks: not connected to deamon" << endl; + cerr << "get_alt_blocks: not connected to daemon" << endl; return false; } @@ -162,15 +162,15 @@ public: if (!err.empty()) { - cerr << "Error connecting to Monero deamon due to " + cerr << "Error connecting to Monero daemon due to " << err << endl; return false; } } else { - cerr << "Error connecting to Monero deamon at " - << deamon_url << endl; + cerr << "Error connecting to Monero daemon at " + << daemon_url << endl; return false; }