# Core repository of moneroexamples This repository includes code that is oftenly used among moneroexamples projects. It includes: - classess for decoding outputs/inputs, payment ids, - general utility tools (e.g., get default monero blockchain path), - unified representation of monero addresses/accounts, - identification of outputs for subaddresses based on primary address, - estimation of possible spendings based on address and viewkey. # Example usage More examples along with its full code are located in [example.cpp](https://github.com/moneroexamples/xmregcore/blob/master/example.cpp). ### Identify outputs in a tx based on address and viewkey with subaddresses ```C++ // use Monero forum donation address and viewkwey. // will search for outputs in a give tx to // to the primary address and its subaddresses. auto primary_account = xmreg::make_primaryaccount( "45ttEikQEZWN1m7VxaVN9rjQkpSdmpGZ82GwUps66neQ1PqbQMno4wMY8F5jiDt2GoHzCtMwa7PDPJUJYb1GYrMP4CwAwNp", "c9347bc1e101eab46d3a6532c5b6066e925f499b47d285d5720e6a6f4cc4350c"); auto tx = get_tx("54cef43983ca9eeded46c6cc1091bf6f689d91faf78e306a5ac6169e981105d8"); // so now we can create an instance of a universal identifier // which is going to identify outputs in a given tx using // address and viewkey data. the search will include subaddresses. auto identifier = make_identifier(*tx, make_unique(primary_account.get())); identifier.identify(); // get the results of the identification auto outputs_found = identifier.get()->get(); cout << "Found following outputs in tx " << tx << ":\n" << outputs_found << '\n'; ``` Identified output for `0.081774999238` xmr is for a subaddress of index `0/10` which in this case is for the ["xiphon part time coding (3 months)"](https://ccs.getmonero.org/proposals/xiphon-part-time.html) proposal. ### Possible spending based on address and viewkey ```C++ // use offical Monero project donation address and viewkwey. // will search for outputs and inputs in a give tx addressed // to the primary address only. this search will not account // for any outputs sent to subaddresses. auto account = xmreg::make_account( "44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A", "f359631075708155cc3d92a32b75a7d02a5dcf27756707b47a2b31b21c389501"); auto tx = get_tx("aa739a3ce8d3171a422ed3a3f5016384cdb17a5d3eb5905021f1103574d47eaf"); // we can join individual identifiers as shown below, since to estimate // spendings we need to identify possible inputs with their amount values, // as well as outputs corresponding to the change returned to Monero // donation address auto identifier = make_identifier(*tx, make_unique(account.get()), make_unique(account.get(), &mcore)); identifier.identify(); // get identified outputs and inputs in the tx auto outputs_found = identifier.get()->get(); auto inputs_found = identifier.get()->get(); // possible spending is just basic math auto possible_total_spent = xmreg::calc_total_xmr(inputs_found) - xmreg::calc_total_xmr(outputs_found) - get_tx_fee(*tx); cout << "Possible spending from Monero project donation is: " << print_money(possible_total_spent) << " xmr\n"; ``` Result is `118.778154000000` xmr which possibly were withdrawn from Monero donation address. ### Identify and decrypt integrated payment id ```C++ // use Monero forum donation address and viewkwey auto account = xmreg::make_account( "45ttEikQEZWN1m7VxaVN9rjQkpSdmpGZ82GwUps66neQ1PqbQMno4wMY8F5jiDt2GoHzCtMwa7PDPJUJYb1GYrMP4CwAwNp", "c9347bc1e101eab46d3a6532c5b6066e925f499b47d285d5720e6a6f4cc4350c"); auto tx = get_tx("401bf77c9a49dd28df5f9fb15846f9de05fce5f0e11da16d980c4c9ac9156354"); auto identifier = make_identifier(*tx, make_unique(account.get())); identifier.identify(); auto payment_id = identifier.get()->get(); cout << "Found following itegrated payment id in tx " << payment_id << '\n'; ``` The result is decrypted short payment id of `1fcbb836a748f4dc`. The tx is also a possible withdrawn from Monero forum donation wallet for `350` xmr (see examples.cpp for the code). # Compilation The project depends on monero libraries and it has same dependecies as the monero (except C++14 requirement). Thus monero needs to be setup first. ### Monero download and compilation Follow instructions in the following link: https://github.com/moneroexamples/monero-compilation/blob/master/README.md ### Compilation of the xmregcore C++14 is required to compile the project. This means that GCC 7.1 or higher can be used. For example, Ubuntu 18.04 ships with GCC 7.3 which is sufficient. ```bash # go to home folder if still in ~/monero cd ~ git clone --recurse-submodules https://github.com/moneroexamples/xmregcore.git cd xmregcore mkdir build && cd build cmake .. # alternatively can use cmake -DMONERO_DIR=/path/to/monero_folder .. # if monero is not in ~/monero make # run tests make test ``` # Other examples Other examples can be found on [github](https://github.com/moneroexamples?tab=repositories). Please know that some of the examples/repositories are not finished and may not work as intended. # How can you help? Constructive criticism and code are always welcomed. They can be made through github.