Block[Chain] Lab Toolkit

Motivation

The goal of the project "Block[Chain] Lab" ‒ creation of a toolkit for educational and research activities for blockchain-related tasks. This toolkit consist from programming framework and tools for modelling different blockchain and not only blockchain (indicated by the optionality of "chain") environments. Programming framework oriented to flexibility and possibility of changing different layers of architecture: consensus machinery, storage systems, transaction transport, smart contract implementation, etc.

Framework implemenation

At present, the implemented Python framework consists of classes:

  1. BaseBlockChain with a basic blockchain functionality.
  2. POWBlockChain ‒ classical Proof Of Work (POW) blockchain with possibility of difficulty level setting.
  3. QuantumBlockChain ‒ blockchain with a Proof Of Infrastructure (POI) based on Quantum Key Distribution (QKD) technology.

The utiltity blockchain.py implements CLI for nodes running and REST API for handling of requests to nodes. Options of this utility:

'-p', '--port', default=5000, type=int, help='port to listen on'
'-k', '--kwport', default=55554, type=int, help='port keyworker to listen on'
'-i', '--ip', default='127.0.0.1', help='ip keyworker to listen on'
'-d', '--db', default='', help='db file, if not passed, then no persistance'
'-v', '--variant', default='pow', help='variant of blockchain "pow[:difficulty]" or "quant"

,where:

  1. pow[:difficulty] ‒ POWBlockChain with possibility of "difficulty" setting (4 by default)
  2. quant ‒ QuantumBlockChain

Supporting tools

Supporting tools implements functionality related to QKD channels. This tools may emulate QKD hardware, serve QKD "pools" and encrypt transport channels between nodes. They include:

  1. QKD_emulator ‒ software emulator for QKD (Quantum Key Distribution) hardware.
  2. keyworker ‒ server for handling of Quantum keys pool.
  3. qcrypt ‒ quantum key codec.

Virtual machines

Virtual machine images:

  1. KVM image (SHA256SUM)
  2. VirtualBox image (SHA256SUM)

More information

you may find in the project's Wiki.