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 web2 platforms donors have to rely on the centralized middleman to verify if the fundraisers are genuine or not. So, ultimately the donors have to trust a middleman to handle their money.

Lack of control around how the donated money is being used:

In traditional web2 platforms people raise a lot of money for various causes but usually once 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!

What it does

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 centralized 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 decentralized 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.

Typical user flow

Now let’s see how the typical user experience flow in GiftBox would be for the fund managers and donors.

For a fund manager

  1. Someone wants to raise money for a cause, let’s call him the fund manager.
  2. The fund manager creates a fund on GiftBox, mentioning the cause and providing supporting references i.e. external links to documents.
  3. 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.
  4. If the donors are not convinced, he uploads more supporting references.
  5. If the donors are convinced and they vote and pass his request, he gets to withdraw that amount of money from the fund.

For a donor

  1. 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.
  2. He donates a certain amount of stablecoins to that fund.
  3. 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.


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.

Voting logic

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.

Revenue Model

To keep the project sustainable via continuing to put manpower into it, we need to have a source of revenue. We do not want to take any cut from the primary donation amounts as that would defeat the cause for which the donations were raised. Instead, we plan to generate revenue by taking a percentage of the yield farming profits for our team.

How we built it

We started with working on the smart contract. Once a barebones version of the smart contract was developed, we started preparing the slides, whitepaper and frontend for it in parallel. We used NextJS with TypeScript for the frontend, and Solidity for writing the smart contracts.

Testing instructions

Please make sure to have TronLink installed and unlocked. Also, switch to Shasta Testnet on TronLink.

Challenges we ran into

One major challenge was understanding how developing on the Tron network is ever so slightly different from developing on Ethereum or its sidechains. But once we got hang of it, it wasn't an issue anymore.

What's next for GiftBox

  • Improving the frontend's UI and UX.
  • Adding IPFS support for uploading supporting references for funds and withdraw request.
  • Adding support for yield farming with the money that's sitting in the funds.
  • Add support for yield farming profits to be returned to donors via the methods we described above.

Built With

Share this project: