You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.


Verifiable Computation on Ethereum

This repository is the master repository for work done in my fourth year project at the University of Edinburgh. It integrates verifiable computation with Ethereum, as a proof-of-concept for utilising verifiable computation within smart contracts. For more details, see the report.

Installation Instructions

This project consists of modifications to multiple large software projects. Compiling all of them, and utilising them require a significant amount of software to be installed. Specifically, from a fresh installation of ArchLinux, the following needed to be executed to build to project from scratch:

# pacman -S git make base-devel pkg-config rustup wine cmake boost npm go
$ rustup default stable
$ git clone --recursive
$ cd proj
$ make
$ export PATH="$(pwd)/bin:$PATH"

Setup for other linux distributions may vary slightly. Setup under Windows was not attempted. Specifically, the following software is needed:

  • git
  • make
  • cmake
  • pkg-config
  • rustc and cargo
  • wine
  • boost
  • npm
  • autoconf
  • automake
  • gcc
  • g++
  • libtool
  • go

If Parity Breaks

Parity is a fast moving project, depending on libraries which are used specifically designed for it. The rust build proccess is designed to download and compile these on the fly, however this may cause the Parity authors to inadvertently break backward compatibility. This has occurred during the project, which is why the Parity master branch was merged back in.

For the case that this happens, a copy of the package cache has been supplied in cargo.tar.xz. This cache can be used as follows:

$ cp cargo.tar.xz ~/.cargo
$ cd ~/.cargo
$ rm -rf git registry
$ tar -xJf cargo.tar.xz
$ rm cargo.tar.xz

Combined with ensuring that rust 1.16.0 is used, this should ensure successful compilation of Parity.

Usage Instructions

For usage instructions, and detailed descriptions of the functionality of this project, please see the report.

Changes made

The changes made by me can are between the following commits:

  • parity: 877388953, and 738a9db69
  • geth: 1cf2ee45, and 16d7f059
  • solidity: b46a14f4, and 86925593

You can view a diff by entering the respective directory, and executing git diff <start hash> <end hash>.

This project is released under the GPL, just as the original geth, parity, and solidity implementations. It makes use of Pinocchio, which is licensed under the Microsoft Research License. Pinocchio is not linked against, or compiled into any of the other projects, meaning all generated binaries are GPL licensed. The Pinocchio binary itself is, of course, not.

Known Bugs

  • Functions without a return statement will return an incorrect proof index.
  • The ethvc parity module doesn't deal well with negative numbers, and causes unexpected behaviour.