Proof of Useful Work: Proof of Concept

This simulation has been created during the hackathon that is part of the course Blockchain Engineering at OTH Regensburg.

For the Bitcoin blockchain, a new block can be created by the first miner who solves a certain puzzle. This is called Proof of Work. The block creation is useful for various reasons, the solution of the puzzle itself however is not of interest. Moreover, puzzle solving requires powerful hardware while on the algorithmic side no innovation is required or to be expected.

The intention of this work is to propose an alternative system of puzzles for which the puzzles themselves are more informative. While also the Bitcoin Proof of Work may be called "useful", having the indirect effect that innovation in hardware development has been rewarded, our proposed Proof of Work would have the additional "useful" effect that innovations in algorithm design, including the development of artificially intelligent agents, are rewarded. The next step would be to adapt the proposed scheme to comprise truely useful work, where the solution of the puzzle itself is valuable.
In the following, the proposed scheme is explained. There are infinitely many potential puzzles to be solved. Solved or attempted puzzles are circularly arranged in a tree-like manner. Each puzzle consists of an input vector I and an output vector O=(o[1],...,o[n]), where n is the level of the puzzle; the n^th level corresponds to the n^th circle around the origin. The task is to find a sequence of program instructions that maps the input vector I to the output vector O.

We use a stack based programming language here, similar to Bitcoin Script. The user can propose a custom solution by clicking on a puzzle; admissible instructions are shown. Moreover, any already obtained solution to another puzzle is itself an admissible instruction that may be used. Whenever necessary, a 0 is put on top of the stack if an instruction would otherwise operate on an empty stack.

The output can be read off the puzzle labels: e.g. a level 2 puzzle has the output (o[1], o[2]), where o[2] is the label of the puzzle itself, and o[1] is the label of the parent puzzle that connects the puzzle to the origin. The input is different in the two modes:
  • Function mode: The input to a level n puzzle is (0,...,n-1).
  • Recursion mode: The input to a level n puzzle is (o[1],...,o[n-1]).
Each solution spawns an infinite ray in the solution tree, by extending the input sequence recursively. These rays are drawn in grey. A subsequent solution to a solved puzzle gets rewarded if it is either shorter (fewer instructions) or "novel", i.e. spawns a unique infinite ray.