Crowdfund contract for open sourcing GPU miners

I've written a preliminary simple crowdfunding contract in Ethereum to incentivize the open sourcing of several (GPU) miners for Zcash, such as those by Toomim Brothers and Tromp. This is independent of the official Zcash Open Source mining contest.

Solidity contract and github repo here.

Web interface tracking testnet contract.

The current features of the contract are:
* A single arbiter must approve before the deadline.
* If the goal is not met after the deadline, all backers can safely withdraw their contributions, guarded against re-entrant attacks.
* It supports multiple beneficiaries with an even split if the goal is met
* Beneficiaries and backers must initiate withdrawal to pay for gas costs.

Currently, it requires a trusted arbiter to hold the source code in escrow, verify that the code works, and then release it if the goal is met by the deadline.

These features are subject to change based on the actual projects that are being crowdfunded.
The same contract can be instantiated multiple times on the blockchain with different funding deadlines, funding goals, arbiters, and beneficiaries.

If you'd like to participate in a public testnet trial run as an arbiter or a beneficiary, please send me your testnet Ethereum address (either online or direct message).

If you'd like to be a testnet backer, you can get some free testnet Ether at the Zerogox faucet.

1 Like

Hey cryptogoth. This is awesome! I'm personally an eth dev myself.

I suppose this is a bidding war for those programmers who will wait to see which contract pulls the most, either private or ethereum. Maybe an unfortunate aspect of this is that the community may not be able to see what bids the private contracts hold and how much is needed to out bid them. A private funder could easily watch the contract and out bid it.

I have already pledged as much free time as I can to an open source miner, where the code is always visible.

It would be cool if we could structure a contract that would begin funding devs jumping on board immediately to build it out over the next three weeks. However working out that governance model in eth in time might be crazy. Might end up being nothing more than a transparent escrow handing out funds to open source devs. But those wanting a gpu miner who can't afford a contract could watch the open repo and justify donating more or not to the project. I know if i received donations I could put other project on hold to invest more time,

Hi voxelot, nice to meet another eth dev.

I agree, the bidding and valuation process is complex, but this contract is meant to be public, and also for the open sourcing of zcash miners to everyone (so doubly public). Both the source code, and the valuation, will add more information to the market.

Cool project! I'll take a look at it in more detail soon and see if there's a way I can contribute.

I'm in favor of a transparent escrow to pay open source devs. Would you like to use my contract to raise funds for your project? I can modify it to include, for example, recording hours worked, so that different contributors can receive a proportional share of the payout.

The governance doesn't need to be too crazy, just enough to gain the trust of backers. We can still have a human arbiter verify that the miner works and approve payouts. The advantage of the contract is that neither the arbiter nor anyone else has to hold the money.

We could start the contract now. Based on the donations of GPU hosting you've already received, I bet we could raise some funds for you to continue working on this.

Excellent ideas. If you can manage to fit a model for paying devs for working toward a miner over the next 24 days, I would be more than willing to work with those parameters.

I would be impressed if you could stand up the model in time. I started on it last night but figured it was too time consuming for me and simple donation addy was easiest. Of course the model could continue after the launch of zcash to improve the miner if the project is successful.

I currently have received two donations,

0.25 BTC from iCimo
0.01 BTC from Anon


Shapeshift now accepts contract payments, which would let us combine BTC and ETH in the same crowdfund. The contract can now pay out to BTC as well through Shapeshift.

I'll create a simple one-time receiving contract whose only purpose is to serve as a 24-hour deposit address for Shapeshift and then forward the money into the main contract.

I don't think the model is too complex. What did you have in mind? Do you want workers to be able to submit their hours, and you can approve them, including yourself?

Then you could split any rewards proportionally, paid on a certain deadline.

Great job guys, this is how it should be done, and exactly what Ethereum is great at. This would be the most transparent way of doing the crowdfund for sure.

Later tonight, I'll be uploading a contract to Ethereum mainnet to raise 20 BTC for open sourcing John Tromp's GPU miner, with a deadline of 14 October 2016 (in less than four days) at 12noon EDT (16:00 UTC).

I'll do a test run through several accounts I own and any volunteers who happen to be awake, then I'll post the annotated transcript from the blockchain to explain how the contract works.

The contract will accept contributions in ETH, and OgNasty will accept contributions in BTC. Both will count towards the funding goal of 20 BTC, in ETH at the Shapeshift market rate at the time of the contract creation.
(Currently it's at 1 BTC = 535.59914024 ETC, so 20 BTC would be 10711.98280480 ETH).
As contract owner, I will manually bump up the amount raised for any BTC donation that OgNasty receives, again at the Shapeshift market rate.

If the goal is met by the deadline, any ETH user can initiate withdrawal to OgNasty's BTC account, which he will hold in escrow until Tromp's software is verified. I will ask Tromp to post details of his terms soon.

If the goal is not met by the deadline, all backers can safely withdraw their money (ETH backers through the contract, BTC backers from OgNasty).

I will personally guarantee the funds in the smart contract. If, according to the blockchain, more ETH is withdrawn to an account than originally contributed from that account, I will reimburse whichever backers have not yet withdrawn their funds.

The crowdfund will level a 2% fee against the 20 BTC, 1% to OgNasty for his escrow service and 1% to me for running the contract.

As a bonus, if I have time, I'll implement a token (perhaps transferrable) that will go to each backer in exchange for a contribution, and you can choose to have your name immortalized on the blockchain.

1 Like

If the goal isn't met do the funds get reimbursed by Ethereum "smart contract" or are we putting in formal request and trusting that it will be returned?

You can initiate a "safeWithdrawal" method to retrieve the funds if the goal isn't met. There's no need for intervention on my or anyone else's part. The rationale is that it costs gas to run a withdrawal, so it's fair for the person withdrawing to initiate it.

Likewise, anyone can initiate the payout to the beneficiary, but in this case it will probably be the contract owner (me).

Awesome! I am interested

1 Like

Great Calibitcoin I'll reach out soon.

Here's the status of the automated contract.
I've finished and tested the solidity contract on Ethereum testnet, and I've tested against all the security vulnerabilities that I'm aware of currently, including a re-entrant hacker contract that tries to drain the crowdfund like the DAO exploit.

I'll upload it to mainnet in the next hour and then it'll be live.

1 Like

Parity and geth are incompatible somehow in uploading smart contracts. To be continued tomorrow.

Thanks for taking this up, great project!!

Looking forward to your progress with the contract tomorrow. Any way to help you with the contract?

Thanks onics, if you have any experience with parity let me know offline.

The finished source code is at:

I'm currently stuck on uploading the contract to mainnet.

With Parity. It is giving me an "Invalid params" response to uploading a new contract via JSON RPC.
I finally sync'd Geth on my MacBook, which took all day, and now it is hard to get my contract mined even with 25 Gwei per gas.

I'm going to keep trying with higher and higher gas prices. It's possible Ethereum is still being attacked, which would explain why it's hard to upload a new contract. Seriously, now I am considering Ethereum classic :]


The Parity error seems strange, are you getting invalid params error when you try to upload to testnet with Parity?

I'll attempt to reproduce the issue on my machine tonight and tomorrow.

Without starting up a whole flame war, ETC still seems like it has better long-term survivability and the moral high-ground.

1 Like

etherum classic is real ethereum and ethereum not classic is FEDCOIN.

Don't, just don't!

If you want to talk about merits of ETC vs ETH or the other way round, there are other places to do that.

It's not about a flame war or religions. I'm determining a way to get my contract mined soon, and which chain is best for it.

I'm having difficulty getting a contract picked up on ETH right now at 25-30 gwei gas price.
A recent contract was deployed (1 day ago) with 80 gwei gas price, so I'll try that next.

In the meantime, I'm syncing parity on ETC as a possible future alternative.
However, both ETH and ETC are experiencing network attacks right now. This speaks to the desirability of having multiple competing programmable blockchains, instead of a single monoculture right now.

1 Like