Hey everyone,
I created a simple crowdfunding dapp called Mage Hands that is running on holodeck-2: https://testnet.magehands.xyz . Please let me know what you think! (The holodeck API seems sluggish so things might be a bit slow).
Rationale
As far as I know, there are two main ways to get funded for projects in the Secret ecosystem. The first is to apply for a grant that is approved by Enigma or Secret Foundation, and the other is to make an on-chain proposal. In the first case, the decision is necessarily made by a small number of people, and for the second there is still a high bar that must be met–reaching quorum, etc. I think there are likely a number of smaller/bespoke projects that could be crowdfunded by interested backers, which would not be funded otherwise because maybe they are only of interest to a minority of stakeholders or they are not seen as a central priority for the network. In my opinion, having a way for these projects to still get funded will help create a more vibrant community all around. This would also not preclude Enigma or the foundation contributing to projects if they wanted to.
Besides projects that are specifically about secret network, this dapp could also be used to crowdsource projects that have nothing to do with the network at all.
Design
I’ve built the dapp to have a main platform contract that spins up a new contract for each crowdfunding project. A project has a deadline, a goal (target funding), and one of three states: fundraising, expired, and successful. The fundraising ends at the deadline. If the goal is met, then it is successful, otherwise it is expired. A project is successful the moment the goal is met, but people can still contribute more up to the deadline. While a project is still fundraising (not yet successful) a contributor can request a refund, but once the goal has been met they cannot. A project is expired if the deadline has been reached without getting to the goal. Refunds can always be requested for expired projects. Once a project’s deadline is past and it is successful, then the creator of the project can Pay out.
Each project has a title, description, category labels (up to 5), deadline. In addition, optionally a message can be added that is shown as soon as someone pledges money (while still fundraising), and another message can be added that is only visible to contributors if the project is successful and paid out. This could be used to share information about an airdrop for contributors or in other creative ways.
At the moment, it only uses SCRT. If there’s interest in this project going forward, then I’ll add in sSCRT and other tokens people might want.
Additional comments
I think some kind of deadman switch would be good. E.g. if the creator does not pay out from a successful project within 1 month, then the project is treated as expired and people can get refunds.
Personally, I think that the creator of the project should always have a public address. I certainly would be uneasy about contributing to a project where the creator is completely anonymous. Ideally, the project description should have links that go to more information about the creator, etc. Contributors, on the other hand, should have an option to be anonymous (to the creator), though that would mean that the creator cannot send them airdrops etc. Also, with SCRT it is pretty much not anonymous anyway once you look on the chain. Even with secret wrapped tokens, I need to think about it because each project is its own contract so it might be hard to hide if someone has contributed to a project (even if you don’t know how much). Maybe this is not such a big issue? (I suppose people could always create a burner scrt account to contribute if they want).
In the platform contract I added an option to require a payment of some nominal amount of SCRT (e.g. 3) to create a new crowdfunding project. I think this would be necessary to prevent spam projects.
Are there other features people would like to see?





). Maybe it is a dark mode CSS thing? The UI definitely needs some more tweaking before it is ready. And whoops I forgot to make the repo public! It is now. That’s cool about sending in the code hash in the exec, I didn’t realise about that.