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.
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 https://git.tkerber.org/uni/proj.git $ 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:
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
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.
For usage instructions, and detailed descriptions of the functionality of this project, please see the report.
The changes made by me can are between the following commits:
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.
ethvcparity module doesn't deal well with negative numbers, and causes unexpected behaviour.