Is there any way to create some kind of proof-of-work system where people who want to back the project can volunteer computer time to verify builds automatically and serve as a foil to any potential attackers?
Some kind of blockchain-like trust verification system isn't the craziest idea I've ever pitched.
Proof-of-work systems have to be slow to compute but quick to verify. This problem is equally slow to compute and verify, because you also have to compile a package to check someone else's assertion that the source compiles to a given binary.
They necessarily have to be slow to compute, but they don't neccessarily have to be quick to verify. The higher the verification cost is, the less likely people are to pay it, but that doesn't mean it might not be "cost effective" under some circumstances.
Like if 500 people can independently confirm a build produces a binary with result X then they could all share in the reward, whatever that is. Nanokarmas?
Other systems are designed to be more asymmetric in order to facilitate scale. Crypto coins would never work at all if to verify a possible hash you had to spend days mining to reproduce the work. Spending five minutes compiling a program to achieve consensus isn't a problem.
The problem is in verifying that someone actually did the work and didn't steal someone else's solution. Maybe encrypting the result you get and sending it off in escrow to a centralized verification location would work, and once a sufficient number of solutions are collected the solutions are unsealed and the results shared so everyone can see what happened and raise any objections.
Verifying a proof-of-work has to at least be quicker than computing the proof-of-work. Verifying and computing can't be literally the same operation. That's not a proof-of-work.
>Like if 500 people can independently confirm a build produces a binary with result X then they could all share in the reward, whatever that is.
In a cryptocurrency blockchain, every single node verifies every block received from another node in order to check whether it should be included in the node's local copy of the blockchain. If computing and verifying are the same operation, it's not "500 people independently verify a source produces a given binary and the rest of the network rewards them", but "the entire network verifies that a source produces a given binary and they all equally pat each other on the back". Unless you only reward the first to verify a build, but then no node would bother spending time verifying blocks made by other people and building off that chain rather than mining its own blocks if they both take as long as each other.
>The problem is in verifying that someone actually did the work and didn't steal someone else's solution.
Bitcoin uses the hash of the rest of the block (which includes the address for the reward of the miner who is doing the proof-of-work) as an input into the proof-of-work such that the result of the proof-of-work is only valid for that input. It's not apparent to me whether where there could be room to add an input like that into checking whether a source compiles to a binary. (I thought through whether you could make a Lamport-signature-like scheme involving picking specific intermediate values generated during the compilation that correspond to parts from a pre-committed series of hash pairs, but then I realized it wouldn't work because anyone who does the build once would get all of the intermediate values and be able to create as many of these signatures as they wanted for little effort.)
>Maybe encrypting the result you get and sending it off in escrow to a centralized verification location would work, and once a sufficient number of solutions are collected the solutions are unsealed and the results shared so everyone can see what happened and raise any objections.
Sounds like what you're looking for is some kind of web-of-trust reputation system with a trusted authority rather than a cryptocurrency blockchain. (If you have a trusted authority, then nearly all of the design of a bitcoin-like cryptocurrency is ridiculous dead weight. You can shed nearly everything, you don't need a broadcast-everything blockchain, and you could choose to have really cool things like blind signatures for anonymous transactions.) (Though if you have a trusted authority who can afford to be running build processes, it'd be a lot simpler to just have them do all the build-verifying for you, and you could do away with anything discussed in this post and just have them publish a PGP/HTTPS-encrypted webpage with their results.)
because you also have to compile a package to check someone else's assertion that the source compiles to a given binary.
You don't have to do that on the server right away, though. Just give the same task to multiple random users and only verify the result when all of the users return the same hash.
You could have a system that does that. I'm just saying that it's not a proof-of-work and wouldn't work as the foundation of a decentralized cryptocurrency blockchain. The system that does what you say couldn't be a cryptocurrency blockchain.
Some kind of blockchain-like trust verification system isn't the craziest idea I've ever pitched.