Giter Club home page Giter Club logo

xmregcore's Introduction

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.

Identify outputs in a tx based on address and viewkey with subaddresses

// 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<xmreg::Output>(primary_account.get()));

identifier.identify();

// get the results of the identification
auto outputs_found = identifier.get<xmreg::Output>()->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)" proposal.

Possible spending based on address and viewkey

// 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<xmreg::Output>(account.get()),
      make_unique<xmreg::GuessInput>(account.get(), &mcore));

identifier.identify();

// get identified outputs and inputs in the tx
auto outputs_found = identifier.get<xmreg::Output>()->get();
auto inputs_found = identifier.get<xmreg::GuessInput>()->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

// 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<xmreg::IntegratedPaymentID>(account.get()));

identifier.identify();

auto payment_id = identifier.get<xmreg::IntegratedPaymentID>()->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.

# 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. 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.

xmregcore's People

Contributors

moneroexamples avatar sumogr avatar

Forkers

sumoprojects

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.