Table of Links
2 Volunteer Computing
Citizen science of the digital era gave rise to volunteer computing, the sharing of computational resources for research. The earliest projects, such as the Great Internet Marsene Prime Search (1996), distributed.net (1997), and SETI@home (1999) shared custom programs to be run on client machines, using a custom server to communicate data and results. However, these widely successful projects were limited to perform a single task.
Recognizing the need to perform a wide range of computations, the Berkeley Open Infrastructure for Network Computing created a generalized platform for distributed applications, enabling research in mathematics, linguistics, medicine, molecular biology, climatology, environmental science, and astrophysics. BOINC includes a verified credit system which distributes credits for performed computations.
Six years after the introduction of blockchain technology, Gridcoin[1] developed a modified proofof-stake timestamping system called proof-ofresearch to reward participants for computational work completed on BOINC. However, by relying on the BOINC infrastructure, submitting new computations still requires the creation of client code for every platform, and the set-up and maintenance of a BOINC server. There are only 35 such projects, none supporting general-purpose computations.
Bitcoin dwarfs these projects, both in terms of the amount of computation and the decentralized original engineering effort.
3 PNPCoin
The PNPCoin Soft Fork for Bitcoin enables general NP-complexity computations using volunteer computing, performed as they are submitted for a turnaround of minutes. The hash of Bitcoin is replaced by the jash function, which is an arbitrary piece of code which much satisfy the following requirements:
- 
It compiles with the current gcc[2]
 - 
It is deterministic across runs, architectures, and compilations
 - 
It accepts a single binary argument, arg of length n bits
 - 
It returns a single m-bit string res of 0s and 1s for a given input
 
Every jash is accompanied by a meta file, and an optional data bundle. The data must be available online, and its checksum included in the meta. The meta file defines how data is acquired (direct download/peer to peer filesharing) and extracted/decompressed, and optionally which portion of data to retrieve for a given arg. The jash does not communicate with the internet, but it may include references to third-party libraries, such as CUDA®, DAKOTA, or ROOT.
As outlined in Figure 1, researchers submit their jash functions to the Runtime Authority (RA), for review, prioritization, and publication. Published functions are computed for every valid input argument arg by miners, who then submit concatenated plain results with hashed results for every valid input argument back to the RA. The RA collects the outputs, and returns them to each researcher.
Author:
(1) Martin Kolar, Brno University of Technology ([email protected]).
This paper is 
[2] GNU Compiler Collection
