FF Platform Overview
The Fugue Foundation is actively developing a few open source projects, which combine together to create an Ethereum-based donation platform guided by the principles of effective altruism.
This diagram depicts the basic flow. When a user visits the decentralized application (dApp), the page queries a dataset of nonprofit organizations through the application programming interface (API) and populates four selections. These represent four models for evaluating the criteria of nonprofit organizations in an effort to gauge maximum impact. The four charity evaluators currently available are Give Well, 80,000 Hours, The Life You Can Save, and Animal Charity Evaluators. Each apply the principles of effective altruism in their selection process, and Fugue Foundation will continue to explore how these evaluation criteria map to charitable impact as we build out the platform. The user then selects one of these options, which shows the nonprofits belonging to a given evaluator. Think of it as a type of charitable index fund. A page shows some of the metrics and estimated impact for the nonprofits and the user can then and send ether
(or any ERC20 token) to the dApp. Through the logic encoded in the smart contracts deployed to the Ethereum blockchain, the donation is split among the chosen nonprofits and the user is rewarded with a non-fungible token (NFT).
dApp
- Angular 9
- Truffle / Solidity
- Open Zeppelin
The angular frontend and the smart contract backend are being developed separately for now. However, the angular dapp does have services providing a functional Truffle/Web3 integration, which will make eventually combining the two together relatively simple.
For the frontend, the focus is on improving functionality, improving UX/UI (Angular Material), and writing tests (Karma, Jasmine, Protractor). The prototype is based off of the Angular Tour of Heroes tutorial.
For the smart contract backend, Truffle is used to compile and deploy smart contracts based off excellent resources from Open Zeppelin and the Kudos from Gitcoin. Specifically, there is an ERC721
contract and a PaymentSplitter
contract that work together, meaning that once a user makes a donation of a certain value, s/he will receive a unique edition of the Fugue Foundation NFT. Block Native is also integrated to help make the web3
experience as user friendly as possible. The focus currently is to build out a few of the methods to each contract to capture this functionality, and to write tests (in both Solidity and Javascript) to capture the intended behavior.
- Angular Frontend: https://github.com/fuguefoundation/ff-dapp
- Truffle Backend: https://github.com/fuguefoundation/ff-contracts
API
- MongoDB
- Node.js
- Javascript
The RESTful API is meant to not only serve as the data source for the dapp, but also to grow as a resource for the entire effective altruism community. Over the coming months, we hope to get insight from charity evaluation experts on the best metrics and data structures to use in order to model the API into something that academics, altruists, journalist, data scientists, and others will want to use in their own projects.
The API currently runs on Heroku in a dev environment. There are two primary objects - nonprofits
and evaluators
- each exposed through GET
, POST
, PATCH
, and DELETE
requests. In the short term, the goal is to build out the API in a secure and efficient fashion. However, long term the key is to create datasets that make other organizations want to use this resource to further their own research goals.