Project Name: GiftBox
Project Track: Web3
Team Name: Hackers Guild
Team Member(s): 2 members, @sumitg and @whitewolf
DevPost URL: GiftBox | Devpost
Project Goal: Decentralized crowdfunding platform which incentivizes donors.
Slides: GiftBox.pdf (85.1 KB)
Whitepaper: GiftBox Hypepaper - Google Docs
Deployed frontend: https://giftbox-testnet.vercel.app/
Project organization on Github: 0xGiftBox · GitHub
Contract deployed on Shasta testnet: TRONSCAN | TRON BlockChain Explorer | 波场区块链浏览器
Project Test Instructions: Please make sure to have TronLink installed and unlocked. Also, switch to Shasta Testnet on TronLink. Then just play around the deployed website!
You can create a new fund if you have trx on shasta testnet. To donate to a fund you will need the test stable coin giftbox uses. You can mint it to your address from this link https://giftbox-testnet.vercel.app/mint-stablecoins
We believe crowdfunding and enabling donations at scale could be one of the most impactful ways web3 can contribute towards social good. The building blocks are already there, transferring tokens, voting on proposals, etc. And moreover, in the web2 we’ve already seen that crowdfunding works, e.g. Milaap, Kickstarter etc.
But there are some fundamental problems that these platforms haven’t solved yet.
Dependence on centralized middleman
In traditional crowdfunding platforms, donors have to rely on a centralized middleman to verify if the fundraisers are genuine or not. Also all the usual problems around centralized finance crop up, such as invasion of privacy, dependence on a middleman to handle money, etc.
Lack of control around how the donated money is being used
We have seen lots of cases where people raise a lot of money for some causes, but once the money is donated, the donors do not have any more control over how that money should be spent. In case the donor wants their fund back after some time suspecting a scam, they are usually powerless in that situation.
Lack of incentives for the donors
Donating to a good social cause should be enough incentive in-itself, but the world isn’t perfect. We believe if there were more incentives for donation than just moral satisfaction, we can attract a lot more money towards social goods.
GiftBox aims to solve all of these, and more!
Decentralized platform without any middleman
GiftBox is a web3 app and every logic is handled by a smart contract. Thus there is no chance of any malicious centralised middleman misappropriating donor funds. Every transaction and movement of funds is transparent and available on the blockchain. We believe this will promote more trust compared to its web2 counterparts.
We also plan to add IPFS support for uploading supporting documents, that way every document uploaded on GiftBox would be immutable and stored in a decentralised manner, reducing fraud and increasing trust.
More control around how the donated money is being used
We plan to tackle the second issue by not sending the collected money to the cause directly. Instead, the fund manager will create a withdrawal request for a specific amount of money, on which the donors will vote. If he convinces the donors that there’s a solid use case for that specific amount of money by showing supporting evidence, the request will be granted and he will receive the money. In this way, there is transparency and control around how the donated money is being spent. In case the donors are not convinced that the money is being spent properly, they can reject the withdrawal request, and in the worst case, close the fund and get their money back.
Incentives for the donors
The third issue can be solved by investing the money that’s sitting in the fund into stablecoin yield farming, e.g. providing liquidity to a SunSwap pool. The money earned from that can be given back to the investors in some way.
We plan to give options to the users about what to do with the amount of profit earned from his share of funds.
- The user can choose to participate in tiered de-fi lottery where a few lucky users will be able to win major amounts of money from the accumulated interests of all the users who opted for the lottery.
- The user can opt to claim the interest back to his own wallet. This way he can later choose to utilize this amount to donate to another charity, if he wants to.
- The user can opt to donate the interest generated back to the charity fund from where it was originally generated.
Now let’s see how the typical user experience flow in GiftBox would be for the fund managers and donors.
Typical user flow for a fund manager
- Someone wants to raise money for a cause, let’s call him the fund manager.
- The fund manager creates a fund on GiftBox, mentioning the cause and providing supporting references i.e. external links to documents.
- Once there is some money donated to the fund and he has some immediate explicit reason for withdrawing some money, he creates an withdraw request. In the withdraw request he mentions the amount of money he needs and provides supporting references.
- If the donors are not convinced, he uploads more supporting references.
- If the donors are convinced and they vote and pass his request, he gets to withdraw that amount of money from the fund.
For every fund created, GiftBox creates an associated TRC20 fungible token, let’s call this token the fund token. Whenever a donor donates money to the fund, a certain amount of fund token gets minted back to him. This token is primarily used to track how much percentage of total donation is donated by a user. We can use this metric to determine voting power, share of generated interest etc.
At any point, the price of 1 fund token relative to the stablecoin would be:
(TotalStablecoinsInFund / TotalSupplyOfFundToken)
The amount of fund token minted follows the following formula,
FundTokensMinted = StableCoinsDonated x (TotalSupplyOfFundToken / TotalStableCoinsInFund )
This would ensure that the price of the fund token does not change when a donor donates some money to the fund. The price would however change whenever there is a successful withdrawal.
Withdraw requests have to be voted by donors, accordingly they will be accepted or rejected. For a withdraw request to pass it has to satisfy two conditions:
- Majority vote: More than 50% of the total voters should accept the request.
- Minimum number of votes: To deter fraudulent behavior, a minimum number of votes as percentage of total donors have to be satisfied, e.g. at least 50% of total donors have to vote.
Typical user flow for a donor
- The donor visits the home page and looks through the active funds. He goes to a fund’s page that he likes and wants to contribute to.
- He donates a certain amount of stablecoins to that fund.
- Anytime after that, whenever there’s a new withdraw request, he comes to the fund page and votes on the withdraw request according to his judgment.
- Smart contract with essential functionalities written and deployed on Shasta testnet.
- MVP frontend application to interact with the smart contract written and deployed via Vercel at https://giftbox-testnet.vercel.app/
- Submitted for Tron season 3 hackathon on Devpost.
- Write yield farming logic in smart contract.
- Update the frontend to make the UX smoother.
- Add direct document upload support for references through IPFS.
- Publish on mainnet and integrate with a real stablecoin e.g. USDD.
- Hire a professional designer to make the frontend prettier.