Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

alt tag

Publish research for free, access research for free.

Downloadable Aletheia App



  • Decentralisation, as stated on Wikipedia, is the process of redistributing or dispersing functions, powers, people or things away from a central location or authority. While centralization, especially in the governmental sphere, is widely studied and practiced, there is no common definition or understanding of decentralization. The meaning of decentralization may vary in part because of the different ways it is applied. Concepts of decentralization have been applied to group dynamics and management science in private businesses and organizations, political science, law and public administration, economics and technology. Aletheia is technology, but using a broad definition of decentalisation rather than in a specifically technological one is a deliberate choice because Aletheia isn't just technology, it's also community. Decentralisation is as desirable state because it is strong. No single point of failure means it’s very hard for a system to collapse through neglect or to be taken down by a malicious actor. No single point of control means the system cannot be controlled by vested interests. Utilising decentralisation is an attempt to build a truly free and incorruptible system, a system that can be applied to, but also be applied past technology.

Why a downloadable app?

  • This is one of the ways Aletheia manifests its decentralised nature, by residing on a number of inividual computers across potentially a hundred or more legal jurisdictions. If Aletheia was a web platform it would be vulnerable because a website can be blocked, a website can be taken down, the server hosting the website could be physically damaged, it can have its contents deleted or can be turned off. A website is a single point of failure. Mirroring websites can only do so much. Try turning off, deleting the contents of, or destroying hundreds of computers in hundreds of different countries, it's much harder. By the same token, control of a website could be obtained through financially acquiring the domain name, acquiring the website host, acquiring the server or the data centre it resides in. Obtaining control of hundreds of personal computers spread across the globe is much more difficult, meaning in both cases, the degree to which Aletheia can be assailed and controled by malicious actors is lowered. Decentralisation is strength.


  • Ethereum is a blockchain technology for agreeing on data and logic in a completely decentralised way. Ethereum will be used to manage rules about which documents are approved by the network. Ethereum uses solidity smart contracts which are stored in the /contracts directory.


  • Truffle is a framework for developing, testing and deploying Ethereum contracts.


  • IPFS is a peer to peer filesharing technology similar to bittorrent. A core aspect of aletheia will be a private ipfs network which shares only the files which have been approved by the community. Currently we simply use the public IPFS network to share files.

Livenet vs Testnet vs Development

  • Despite using the Ethereum code, we do not have to use the main ethereum blockchain. To keep costs down we plan on going live with a sperate blockchain. For local development, a blockchain can be faked using testrpc. For public testing a testnet is being deployed for testing interactions between multiple aletheia clients.


  • Electron is a framework for developing cross platform applications with HTML and JavaScript. main.js bootstraps the app, each page is then self contained within the ./app directory. In future we may add a javascript UI framework such as react or angular.


  • Nodejs 6+
  • Python 2 (not python 3) test this with python --version
  • A running local IPFS node
  • A running ethereum node. Recommended to use testrpc for local development and geth for the testnet

OSX instructions

  git clone
  cd aletheia-app

  # note, this is not strictly required for local development as the fake ethereum client `testrpc` can be used.
  brew install ethereum # installs geth
  brew install nodejs
  # OSX should have python 2.X pre installed
  npm install -g electron

Ubuntu instructions

These instructions were tested on ubuntu 16.10

  git clone
  cd aletheia-app
  # this installs nodejs 6.x, geth and electron
  sudo ./scripts/

Run project in web browser

Clone this repo and cd into its directory

This project requires IPFS and Ethereum clients to be running in the background

  # open three terminal tabs in the project folder:
  # in tab 1
  npm config set python $(which python) # Python 2 is needed, not python 3
  npm install
  npm run ethereum-local
  # in tab 2 (must be in project directory)
  npm run ipfs-local
  # in tab 3 (must be in project directory)
  npm run start:web # (app will start but be unable to connect to filesharing or blockchain)

Test the app build on the testnet

npm run electron:serve

note: this will not be able to connect to the local ethereum testrpc (npm run ethereum-local) and can only be tested on the real testnet e.g.:

    # In tab 1
    npm run ethereum-testnet 
    # in tab 2 
    npm run ipfs-local
    # In tab 3
    npm run electron:serve

Test the dist build

You can also generate the actual executables for different platforms with

    npm run electron:linux
    npm run electron:windows
    npm run electron:mac

Video Tutorial

Note: The video mentions installing/running the project on Mac OS. The steps followed in the video are also applicable to any Linux distribution (Ubuntu, CentOS, ...).



npm run lint

Tests run in a browser with karma.

  npm run test:js

Smart contract tests with truffle

  # in tab 1 
  npm run ethereum-local

  # in tab 2
  npm run test:truffle

Testing notes

Test data

npm run test-data

Start the app with another user

ACCOUNT_NUMBER=1 npm run start

Force mine a block

Call this from debugger window:

        jsonrpc: "2.0",
        method: "evm_mine",
        id: 12345
    }, function(err, result) {
      // this is your callback
You can’t perform that action at this time.