Bazaar.finance

We allow for a more sustainable financing of mission critical open source projects that better aligns depositor's sense of altruism with their profit motives by introducing a new Defi money lego

Demo Video Live Demo Source Code

Technologies

Ethereum

Solidity

Aave Borrow/Lending

Description

Bazaar Finance allows developers to capture value for their work in open-source software though decentralized finance (DeFi) protocols. Thanks to lending protocols, users around the globe now have a new avenue to fund the open-source tools they find valuable. Not by dipping into their wallets, but via interest earned on their savings. Instead of having to actively give lump sums or set up recurring monthly donations, people can allocate a portion of interest they earn, passively and transparently, with the ability to withdraw their principle at any time. Bazaar gives OSS developers a recurring, predictable source of income for their work, and an avenue for depositors to earn yield on their savings after the recipient goals have been met. **Depositors** pool their contributions towards an OSS project, and the interest earned on the total of deposits gets allocated to the developer that maintains it. This interest is withdrawable by the developer (the **recipient**) at any time. Any additional interest that is surplus to the recipient's stated desired **salary** gets reallocated to depositors. ### 📖 How it Works (above the hood) 1. An open-source project is added to Bazaar Finance. The `recipient` can decide on the `token` they want to be paid in, and the goal amount they wish to be paid each month (`salary`). 2. Individuals who wish to fund the project can `deposit` a specified amount of the project's chosen `token`, e.g. DAI 3. The depositor gets minted the project's `bToken`, redeemable for underlying funds when they `withdraw` their principal (and any additional interest) from the `Vault` 4. Interest on deposits accrues to the project's `Vault`. Every 30 days, the accrued interest gets allocated to be `recipient`, available to be withdrawn. 5. If the interest accrued from the sum of deposited funds exceeds the recipient's desired monthly `salary` for that month, additional interest earned for the remainder of that month gets allocated to depositors. 6. Recipients can `withdraw` a specified `amount` at any time. 7. Depositors can `withdraw` their principal (and any additional interest) at any time. Example scenario: - Alice is working on a popular open-source tool, she hopes to earn 1000 DAI/month for maintaining this project. She creates a project on Bazaar Finance - Bob is an avid user of Alice's tool and wants to help fund its maintenance. He deposits 100 DAI to Alice's project - Bob receives 100 bTokens* for his deposit - More users and supporters of Alice's tool deposit their funds, inflating the supply of Alice's project's bToken - If the interest accrued from the sum of deposited funds exceeds Alice's goal of 1000 DAI, additional interest gets allocated to Bob and other depositors - Alice can withdraw a specified `amount` of her funds, earned through interest accrual of deposited funds, at any time. - Bob can withdraw his principle of 100 DAI at any time. If Alice's salary goal has been reached, he will also receive his share of the interest that has been reallocated to depositors. This process burns Bob's balance of bTokens. \* The 1-1 exchange rate only applies to the initial deposit into the `Vault`. The exchange rate for a project's bToken is dynamic depending on how much has already been deposited into its `Vault`, which is why each project necessarily has its own `bToken` in addition to its own `Vault`. See the [bTokenExchangeRate](#bToken-Exchange-Rate) section for more info. ### 🎒 Features - Interests accrued in real-time. - Interests earned on Depositors funds are proportional to the amount of deposits they have. - Depositors can deposit and withdraw the principal without a lock-up period 🔒 - Recipient earns salary on a monthly basis. - Recipient can withdraw the salary at any point in time - Recipient's salary is accrued on a rolling basis and can be rolled over to the next month 📅 - The contract runs autonomously without any operations required. - Supports contract upgrades via Proxy Pattern

How It's Made

## 🛠 Technology - The smart contract was built on Ethereum using [Hardhat Framework](https://hardhat.org/), [Open Zeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts), [Solidity](https://docs.soliditylang.org/en/v0.6.12/) and [TypeScript](https://www.typescriptlang.org/) - The client application was built with [React JS](https://reactjs.org/), using [web3-react](https://github.com/NoahZinsmeister/web3-react), [create-eth-app](https://github.com/paulrberg/create-eth-app), [EthersJS](https://docs.ethers.io/v5/) and JavaScript (ES6) - Deposited funds accrue interest through the [AAVE Liquidity Protocol](https://aave.com/) - bTokens deployed for each recipient project adhere to the [ERC20 Token Standard](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.3.0/contracts/token/ERC20/IERC20.sol) ### 📖 How it Works (under the hood) 1. An open-source project is added to Bazaar Finance through the deployment of a new `Vault` and its associated `bToken` contract. For the MVP, this is done by calling `createVault` and `createBToken` in the `VaultFactory` contract. - The project's `bToken` is deployed first, and then its `Vault` is deployed with the following parameters - `recipient` address - `salary` desired amount the recipient wants to earn each month for working on the project - `token` address of the ERC20 the recipient wishes to be paid in (e.g. DAI) - `aToken` address the interest-accruing version of the `token`, issued through Aave - `bToken` address of the project's bToken, created through `createBToken` 2. Individuals who wish to contribute the interest on their savings to fund the project can `deposit` a specified `amount` of the projects `token` into its `Vault`. 3. The deposit gets automatically swapped to the interest-accruing equivalent on Aave, and is stored in the `Vault`. 4. The depositor gets minted the project's `bToken`, redeemable for underlying funds when they `withdraw` their principal (and any additional interest) from the `Vault` 5. Interest on deposits accrues to the project's `Vault`. Every 30 days, the accrued interest gets allocated to be `recipient`, available to be withdrawn. 6. If the interest accrued from the sum of deposited funds exceeds the recipient's desired monthly `salary` for that month, additional interest earned for the remainder of that month gets allocated to depositors. 7. Recipients can `withdraw` a specified `amount` at any time. 8. Depositors can `withdraw` their principal (and any additional interest) at any time.

Team

pong cheecharern Jacob Hite Nichanan Kesonpat Omar Kalouti
← click here to see all projects