analitiko-v0.1.0
analitiko-v0.1.0
This is the initial release for Hyahatiph Labs Monero blockchain analytics tool suite.
Just getting started off here with our NRPS stack (Node.js typescript, R statistical
programming, Postgresql database and Sequelize object relational mapping.
The Postgresql "analytics chain" is a trimmed down version of the real blockchain. The
block hex
, transaction rctsig_prunable
and transaction fullHex
are removed. The intent
is to bootstrap an analytics playground for new developers, researchers and anyone interested
in exploring the Monero blockchain data. This repo will grow to provide stepping stones for learning
how to derive useful insights from complex data.
This release also has a R script to generate a Hierarchical Network Graph of ring output indices.
The data is tweaked such that D1 -> from (block height) | to (tx hash)
and D2 -> from (tx hash) | to (key offset)
. This field plays a crucial role during
spending because ring members need to be checked if "rings contain keys originating
from the same tx or temporally very close block heights" (simplewallet.cpp/process_ring_members).
More information about Monero transaction structure can be found in the stack exchange link below:
Key offsets are the set of outputs your ring is using as "fake"outputs, as well as yours.
Outputs of a given denomination are ordered in blockchain order, and thus can be
represented by their index in that list. This is smaller than using the public key.
Moreover, they're stored as offsets from the previous one (the first one from 0),
as this will result in smaller values, which can often result in a yet smaller amount
of data, since those numbers are written out in a variable length output (kinda like UTF-8 in rough outline).
Check the readme for more details on typescript middle-ware setup.
R script for this release is located in infosec/analitiko/scripts/xmr-ring-output-network-graph.R
.
The associated Shiny App is in infosec/analitiko/scripts/xmr-ring-output-network-graph/app.R
.
Postgresql authentication information needs to be put in a infosec/.Renivron
file with the contents:
PG_USER=<postgresql username>
PG_CRED=<postgresql password>
PG_DB_NAME=<postgresql database name>
SHINY_PORT=<port to run shiny server>
Postgresql database setup is beyond the scope for now. It will be automated via Docker at some point
in the future. Although the effort is manual, it is not too time consuming. It is a popular database and many
guides are available online. Just install Postgresql, create a database and make an owner for it.
Postgresql is expected to be running at the default, localhost:5432
.
RStudio IDE is helpful for interacting with R scripts but not required. Happy Hacking!
Known bug:
Shiny app slide input does not update the network graph. For now the graph is static.
A temp fix is progress for refreshing the server.
#28
What's Changed
- [Snyk] Upgrade chai from 4.3.4 to 4.3.6 by @snyk-bot in #9
- [Snyk] Upgrade axios from 0.21.4 to 0.26.0 by @snyk-bot in #14
- [Snyk] Upgrade express from 4.17.2 to 4.17.3 by @snyk-bot in #15
- [Snyk] Upgrade mocha from 9.2.0 to 9.2.1 by @snyk-bot in #17
- [Snyk] Upgrade sass from 1.49.8 to 1.49.9 by @snyk-bot in #19
- [Snyk] Upgrade axios from 0.25.0 to 0.26.0 by @snyk-bot in #18
- [Snyk] Security upgrade ubuntu from latest to 20.04 by @snyk-bot in #20
- [Snyk] Security upgrade react-scripts from 4.0.3 to 5.0.0 by @snyk-bot in #21
- build(deps): bump node-forge from 0.10.0 to 1.3.0 in /himitsu by @dependabot in #22
**Report issues to https://github.com/hyahatiph-labs/infosec/issues
Full Changelog: himitsu-v0.1.1-experimental...analitiko-v0.1.0