No Description
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.
Thomas Kerber 8d301583bb Emergency fix. 1 year ago
bin It works! 1 year ago
examples Add cargo archive, examples. 1 year ago
geth @ 16d7f05965 Add geth modifications, cleanup parity directories. 1 year ago
parity @ 1e594b1f15 Emergency fix. 1 year ago
parity0 Emergency fix. 1 year ago
parity1 Add geth modifications, cleanup parity directories. 1 year ago
pinocchio @ 0df1815c3e Add stuff for modified parity. 1 year ago
report @ b05bf33ec1 Final. Seriously this time. 1 year ago
solidity @ 86925593ba Move modules over to https for clonability. Bump version. 1 year ago
.gitignore Add geth modifications, cleanup parity directories. 1 year ago
.gitmodules Move modules over to https for clonability. Bump version. 1 year ago
LICENSE Add readme, license. 1 year ago
Makefile Add geth modifications, cleanup parity directories. 1 year ago
README.md Submission version. 1 year ago
cargo.tar.xz Add cargo archive, examples. 1 year ago
example.txt It works! 1 year ago
node.pwds Add stuff for modified parity. 1 year ago
node0.toml Add test chains. 1 year ago
node1.toml Add test chains. 1 year ago
testchain.json Add stuff for modified parity. 1 year ago

README.md

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 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:

  • 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>.

Copyright

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.