A decentralized fundraising application using Tezos technology with its own consensus protocol. It can be used to donate and raise funds and also 'conditionally' funds. It also contains its own consensus algorithm (halfway implemented due to time constraint) which is similar to proof-of-stake, which is being designed to verify the fundraising organizations/individuals. These are elaborated in the upcoming sections.
View Demo · Report Bug · Request Feature
NOTE : This repository is a built up version of our original repository
Table of Contents
The major doubt almost everyone has before using a fundraising platform is how trustworthy are they? Is the funding amount reaching the needy? If so, how much of it? A lot of doubts arise when using such platforms.
Almost all the fundraising platforms that are in the market today, either collect some percent of the total funds the organizations receive or have their own premium plans for the users to use their platform. Also, almost all of these have a single point of failure workflow. Since platforms like these only require a mode of communication and fund transfer between two parties, eliminating the central power systems which act as a single point of failures i.e. there was a requirement to bring a decentralization in the whole process.
This is the major challenge Fundchain solves! We came up with the idea of a decentralized app that connects the donor to the needy directly without any involvement of a third party. In this system, since we’re relying on everyone, we effectively rely on no one.
Fundchain is a decentralized application that directly connects the funders to the needy. The following are the key-words used in our project:
Each organization has an upvote feature for other users to show support and a downvote feature to report an organization as spam. A little amount of gas fee will used for using this feature.
There are two ways in which one can donate to these organizations. One way is to directly send the amount to the organization. But in this case, there is a slight risk factor as the organization may turn out to be a fake one. So to take fake organizations out of the equation the user may opt for conditional funding. In this type of funding, the number of downvotes plays a deciding role for an organization to be fake or genuine. Since marking an organization fake just by a fixed number of downvotes seems unfair, we let the donor fix this number. So the donor is asked the threshold number of downvotes at the time of donating. If the number of downvotes for the organization crosses the downvotes set by the donor, the donor may then choose to reclaim his money back. But the donor must be aware that he/she only gets 80% of the amount donated. The remaining 20% is redistributed to the field workers who spent their money to upvote or downvote the organization.
When a user donates using the conditional fund feature, the amount is stored in the smart contract until the deadline of the organization is reached. If in between the number of downvotes has crossed the threshold set by the donor, he/she may reclaim their amount(80%). Else after the deadline is reached the organization will claim the amount which the donor has donated.
There are two variants of XP for a user.
This is a proportional indicator of the amount donated by the user to different organizations. To be precise, a donor gains this type of XP which is equal to 10 times the amount he/she donates through direct funding and 5 times if he/she donates with the help of conditional funding.
This represents the reputation of the organization from the number of upvotes/downvotes and the number of goals reached through this organization. To be precise, for each upvote or downvote, the organization gains or loses 5 XP (of this type) respectively. Also, there is one more way to gain XP for an organization, that is through accomplishing the goals set by themselves. If an organization reaches its goal before the deadline, the organization gains one-tenth of the target amount.
This ensures that the decision taken by the validator solely depends upon only himself and his verification work.
Since our entire workflow is dependent upon a decentralized mechanism, a traditional login method using passwords wasn’t the best way. But this would certainly make the site vulnerable to spam. Also, we were required to map user email IDs with their wallet IDs (one to many mapping).
So there was a requirement of a way where we were required to ask users for their email ID and have appropriate auth mechanism (again not traditional login as the system was designed to be a decentralized system)
So, we thought the best suit of an auth model in our workflow is to have some kind of a password-less login and at the same time need some mechanism to verify the email ID which user enters. After some research, we found SAWO labs api can be used to achieve the same! SAWO provides a way for the users to login without using a password and at the same time eliminates the spam using its own auth model.
A list of all the references and resources we used to achieve (partially) our goal are listed in the acknowledgements.
💲 Tezos - Evolutionary, revolutionary, and everything in-between.
📷 IPFS is a peer-to-peer hypermedia protocol designed to preserve and grow humanity's knowledge.
🔐 SAWO is the only user-authentication tool that developers would crave for.
First we came up with a problem statement, then went in search of best blockchain technology that can be used. Then we followed with building a basic prototype of all the features that can be included and also specifically brainstormed for an hour to find a suitable verification algorithm.
Then went with designing UI accordingly (with help of few resources mentioned in the last section).
The frontend developers are only familiar with angular. So it took a while to build frontend.
This is our first time to integrate SAWO labs with a web application.
We had a very less time to finish the project.
We intially thought of making a flutter app but were not able to proceed due to lack of resources.
Our entire team is quite new to blockchain technology and this is our first attempt to make a DApp using blockchain technology. So choosing an appropriate blockchain for implementing our idea was very challenging. After brainstorming for some time, we found Tezos to be a suitable blockchain as it is a best suit for public distributed ledger applications as it has a unique on-chain governance mechanism.
Due to the time constraint of the hackathon, many things were accomplished only till half way. These include :
- Unique Digital Badges : We are planning to build a feature where after reaching a certain XP, we assign a unique digital badge as an NFT (using FA2) to the funder profile, representing his contributions. Also updating his/her avatar.
- Field Workers : Currently the system doesn't contain any distinction between a normal funder and field worker.
- CRON jobs : Introducing CRON jobs to automate the claims and re-claims (which are currently being triggered manually by a user using 'claim' and 'reclaim' options) based on either “deadline” or “number of dislikes” for a particular fund raising post.
Make sure you switch to [email protected]
To install [email protected]
nvm install 12.22.1
nvm use 12.22.1
Clone the repo
git clone https://github.com/Dhamodhar-DDR/Fundchain-dapp
Go to client folder
cd client
Install NPM packages
npm install
Run the local server inside the client folder
ng serve --open
To actually try out our DApp, there are certain requirements to set up, which include :
- Install Temple wallet in your browser.
- Use a standard Tezos faucet to get Testnet ꜩ (required to pay gas, which is required to register an email) [NOTE that this is only a one time spend for a given email]
- Network : Flourence Testnet
- RPC : https://florencenet.smartpy.io/ (The network might be depricated eventually. Check the latest RPC node and make changes accordingly)
- Lambda View : KT1BbTmNHmJp2NnQyw5qsAExEYmYuUpR2HdX
- Enjoy!
-
Infura standard IPFS API for getting access to the IPFS networks.
-
Coin Layer API to get the live exchange rates of XTZ.
-
ngx-admin for base angular components.
You can refer the sample shots our project here