Vitalik has previously created a crowdfunding contract,
https://github.com/ethereum/serpent/blob/develop/examples/crowdfund.se and even created a user interface for it:
https://github.com/ethereum/dapp-bin/tree/master/crowdfundHowever this work isn't currently maintained, and Serpent won’t be officially supported in V1. Your goal is to make this contract and its user interface usable on Ethereum POC-8 and ready for Genesis Day.
All core features should be exposed through the UI and access the companion contract:
- Link to a campaign via the URL
- Create a campaign
- Contribute to a campaign
- If sufficient funding received, payout to campaign recipient
- If expired, refund to contributors
- Display progress report of a campaign
Rules & Criteria:1) Contract should be implemented using Solidity. (you could use the Solidity port of Vitalik’s contract as starting point
https://github.com/chriseth/cpp-ethereum/wiki/Crowdfunding-example-contract-in-Solidity )
2) Frontend to use the ethereum.js API
3) Use a JavaScript framework such as Angular, Backbone, Meteor, React, etc.
4) Hosting of frontend assets (HTML + JS) on static server (ie GitHub pages)
5) No backend required (besides local Ethereum node and static www server)
6) Deployed on POC-8 (or later) testnet
7) UI fully works from within AlethZero, Mist and external browser using Ethereum's JSONRPC API (HttpSyncProvider).
8) All components open source & published on GitHub
9) DEV employees & contractors are excluded
10) Bounty donations are non-refundable
Bounty Award:0.5 BTC (as of 2015-02-03)
https://blockchain.info/address/1BHBJkboatpGaZykmQqwHHEshm4iuAkRgClaim the bounty:- Post your submission (including GitHub URL and Bitcoin address) as comment in this thread
- The ruling for this bounty will be by this post’s author
Comments
1. Do you want a fully functional crowd funding platform for multiple users/campaigns or just one user and their campaigns?
A: The DApp should support multiple users/campaigns, just like Vitalik's contract does. There is already enough risk in a crowdfunding campaign itself, I wouldn't want having to review the platform for each individual campaign on top of it. So by having a shared (and open source) platform, it can remain objective and well peer reviewed.
2. What about content, such as details about the campaign, do you want those left out?
A: Storing text, such as a campaign description, links to youtube videos, comments, status updates, etc in the contract storage would most likely be too extensive. In the future we might be able to use Swarm for this; but that is out of the scope of this bounty. To specify an authoritative source for content & updates, storing a single URL might be good enough for now. Suggestions are welcome how to make something operable while keeping the cost down.
1) There is a design flaw in the Solidity contract; when you 'start' a new bounty it is supposed to return the campaign id. However when sending a transaction to an ethereum contract, you won't get any results back (since the outcome depends on the miner that will eventually mine the block). Using 'call' you can get a result back, but this won't have any side effects / your campaign won't be created.
Vitalik has solved this in his contract by letting the creator specify the campaign id upfront. Another (recent) solution to this would be to use the 'LOG' operator (Event in Solidity) and in the frontend watch for the result of this.
2) It is a requirement to be able to link to a specific campaign directly (by its id). This would allow campaign creator to refer to it on their website, blog, forum post, etc. For bonus browny points you could create a widget that can be embedded on any site showing the campaign progress.
Hosted front-end (for display purposes): http://crowdfundrr.github.io/
Git: https://github.com/CrowdFundrr/CrowdFundrr
Summary:
Nice first impression, good presentation & companion website.
Solidity contract compiles, but has a few bugs; I wasn't able to deploy & test it; the contract in easydeploy.html doesn't get mined. No testnet deployment to try; unable to verify that the provided functionality actually works.
Javascript is unstructured 'oldskool' jquery, mixing UI and logic. Not using a web application framework.
Very promising progress, but needs a little work to make this demonstrable!
Also please provide your bitcoin address for future bounty payout
1. the contract was not deployed in the testnet, so the address specified in the code was not relevant.
2. even after changing the contract address, the transactions would not cause the contract storage to change.
The new Github is: http://github.com/weifund/weifund
And our brand new site is: http://weifund.io
Cheers, SC
The development of WeiFund is still in progress, do check it out and lend your hands to this great effort.
Also keep an eye on SC's other work:
* https://github.com/SilentCicero/meteor-dapp-pricefeed
* https://github.com/SilentCicero/meteor-dapp-boilerplate
Any thoughts on implementation?
Thanks - Massi
You will have to work out the ramifications of your contract design, but know that WeiFund can securely send your contract in real time the pertinent contributor data when someone contributes to your campaign.
Cheers, hope this helps! SC
I will see where I can get to using your code as a base and the explanation above. I will share output on GitHub once I am there. Looking forward to your WeiFund extensions too.
Have a good start of the week. Massi