/blockchain-analytics-api

A general framework for blockchain analytics

Primary LanguageScala

Blockchain analytics API

A Scala framework for the development of general-purpose analytics on blockchains, by Livio Pompianu, Stefano Lande, and Daniele Stefano Ferru.

Our framework allows to combine data within the blockchain with data from the outside (e.g. exchange rates and tags). The workflow consists in two steps:

  1. construct a view of the blockchain and save it in a database;
  2. analyse the view by using the query language of the database.

The blockchains currently supported are Bitcoin and Ethereum. The DBMS currently supported are MongoDB and MySQL.

The library is dicussed in A general framework for blockchain analytics.

More material is available in the project page.

The Scaladoc (uploaded on this repository in the doc folder) is also available at the following link.

Install prerequisites

Prerequisites depends on the target analyses. Generally speaking the framework needs at least one blockchain client and one DBMS.

  1. Blockchain clients:
  2. DBMS:
    • MongoDB (constructs a NoSQL view of the data)
    • MySQL (constructs a SQL view of the data)
    • PostgreSQL (constructs a SQL view of the data)
  3. Either
    • use an IDE for executing a Scala SBT project (we used IntelliJ IDEA) or
    • use the command line in place of an IDE (Install SBT)

Before building the project, execute the following commands:

git clone https://github.com/bitbart/bitcoinj.git
cd bitcoinj
git checkout segwit
mvn install -DskipTests
cd core
mvn install -DskipTests

ICO Analytics

In order to use the ICO class (created to retrieve ICOs data) you must require the respective API keys:

  1. EtherScan
    • It is sufficient to sign up and then go here
  2. ICOBench
  3. Ethplorer
    • There is a default, free key: freekey. If you need more data or highload of service, you can to get personal API key.

After doing these steps, do the following:

  1. Copy EtherScan key into EtherScanAPI.apiKey attribute
  2. Copy ICOBench private key and public key into ICOBenchAPI.privateKey and ICOBenchAPI.publicKey attributes respectively
  3. Copy Ethplorer key into EthplorerAPI.apiKey attribute

Install blockchain analytics API

  1. Execute the blockchain client in order to obtain a local copy of the target blockchain (this process may take several hours)
  2. Enable the client RPC calls.
    • In the Bitcoin Core case
      bitcoind -datadir=path/to/blockchain -server -rpcuser=user -rpcpassword=password 
  3. Run a localhost instance of the DBMS on the default port.
  4. Clone this repository.
  5. From your IntelliJ welcome screen: select "Import Project" and open the build.sbt file from your repository directory.

Running

  1. Execute of one of the available examples. Either
    • open the file from your IDE and select run or
    • use the command line: from the root directory of the project, execute
      sbt "runMain tcs.examples.ClassName"

Our framework will build the selected database. Then you can query it for performing your analysis. For each available Scala script, we provide some default queries along with the resulting csv files.