The problem Stake for Impact solves
Our project presents an innovative method for individuals who hold ETH to donate to charitable projects. Through the utilization of the staking mechanism and the inherent security provided by immutable smart contracts, we offer a secure way for ETH hodlers to actively support charitable initiatives.
Assumptions about users’ behavior guiding this project’s development:
- People are willing to contribute to charitable causes but often forget to do so consistently due to various reasons. Our project addresses this by enabling users to make recurring donations without any actions, we can increase long tail of funding flowing to non-profits;
- People are more inclined to donate, when it doesn’t cost them anything. In the future iterations of the project, we plan to introduce a mechanism that allows users to retain a portion of their staking rewards while donating the remaining portion in the hopes of increasing participation even more.
Core implementation principles project is built upon::
- User control and withdrawal flexibility.
- Immutable and secure deposits.
- Permissionless and censorship-free campaigns.
- Fee-free, accessible public good.
On-chain part of the project consists of three contracts:
- Vault.sol: The core contract where users deposit ETH, stake it with Lido staking protocol, and distribute earned rewards to the beneficiary. The rule is: one campaign -> one beneficiary -> one vault.
- imETH.sol: Represents user's stake with fungible Impact ETH tokens, however, principal withdrawal and burning is limited to the vault of origin.
- VaultFactory.sol: Creates new campaigns (vaults) with specified beneficiaries’ address of a non-profit/individual who will receive donations. Factory will grant newly created vaults Minter role to be able to mint/burn imETH token.
Challenges we ran into
Due to the rebasable nature of the stETH token, accurately calculating the exact amount of stETH for user withdrawals has proven to be particularly challenging. As a result, we have encountered difficulties in determining the precise quantity of stETH to be returned to users.
We built a generalized system that allows creation of unlimited amounts of vaults, but at the same time we wanted the Impact ETH token to be fungible, so it can be re-used elsewhere in the DeFi ecosystem. For this reason we implemented Open Zeppelin’s AccessControl.sol framework, that allows all vaults created by the factory to mint/burn imETH.