the blockchain actually sucks, sorry
we regret this project immensely
Many new projects are being developed for the blockchain every day. When we approached our project we wanted to build something that not only provided a solution for a specific problem, but also provided a proof of concept to solve larger problems faced by blockchain technology. We decided to attempt to solve the specific problem of safe charitable donations and the general problem of trustless promises on the blockchain. We felt that donation matching was an interesting problem to solve because of the inherent problems involved with trusting corporations to match donations in a timely manner. The need for trustless promises naturally arises from this problem. This further piqued our interested because of the need for trustless promises in fields ranging from investment to consulting and other contract based employment.
What it does
Our project allows people to donate through funds pledged by companies to benefit charities. We implemented this by first implementing two of our own cryptocurrencies, "Promises" and "CommitCoin." These cryptocurrencies are used to create a system of debit and credit that allows increased flexibility with cryptocurrency donations. When a user makes a donation, it creates a pledge from the company that must be fulfilled within 30 days. If the donation, made in CommitCoin, is not matched by the company within 30 days, the trustworthiness of the company goes down and the overall number of donations funneled through decreases as a result. If the donation is matched, the charity of choice will get the full Neo value and benefit from donations from individual users and larger corporations.
The benefits from our product are primarily to do with the accountability of the company. Since all donations are encoded on the blockchain, it is easy to see which companies follow through on their promises and which ones remain greedy and untrustworthy. In addition, the system of "promises" allows the company to keep their assets liquidated up until they decide to match the donations, rather than risking missing matches or keeping a lot of money tied up in a donation fund. This benefits the companies, because they can donate large amounts of money while having the freedom to invest or move around money over the period of donation matching, and it allows donors and charities to ensure that non-profits are receiving the money they were promised. It also maintains the charities that users are donating to, so the ratio of money going to those organizations is directly related to the number of users donating money. Therefore, everyone benefits from our novel system of donation matching through smart contracts on the Neo blockchain.
The promise system is a novel one that could be expanded far beyond this proof-of-concept. This could be used for any number of systems, that would allow credit through the blockchain without having to invest money. These coins would operate purely through a trust system, much like bonds. This distributes the risk of trust across the entire market. When we were discussing our idea, we even imagined a free marketplace of people trading "promises," which were backed by large companies and given trust that way. This would allow for a more secure cryptocurrency, that is less subject to the huge fluctuations in the market caused by speculation, for a more stable, long term investment. Thus, Promises are expandable beyond our idea.
How we built it
We wrote the smart contract in neo-python, with neo-boa to compile the code to the Neo VM. The smart contract creates a fund, and creates smaller pledges when a user donates money. These pledges are timed, so if they aren't fulfilled within 30 days, the company can be penalized, and the user can get their money back to have the opportunity to re-donate through a more trustworthy company matching service. Businesses have the ability to make transactions to fulfill pledges and match user donations to charities. Finally, charities can access the Neo and complete the promises by receiving the user money and the matched amount by the company. This is all achieved through a smart-contract that processes different transactions by different assets to successfully achieve our goals.
All of these components are connected using a modern web app created in React and Typescript. Someone who wants to donate can see a list of charities to donate to, and then choose a company's fund to match with.
Challenges we ran into
The Neo codebase was difficult to work with, with very little documentation to help us understand the methods and designs behind the Neo python framework. This was a huge cause of difficulty, restricting our ability to understand the methods needed for our system to work. In addition, we had difficulty setting up the Azure instance to contain or example chain. It was extremely difficult to hook the whole system together, because of difficulties setting up neoscan and the private network.
Accomplishments that we're proud of
Although none of us have had experience developing on a blockchain before, we were able to set up a smart contract and a private network within the time limitations. Our smart contract was adapted several times to take into account new information that we were learning about neo-python. In addition, we worked together to improve our understanding of neo-python and the systems we were using to develop on, with all of us working well in a team to create a project.
In order to achieve our working implementation of the smart contract component of our DApp, we had to carefully study many different open source components and understand how different systems worked together. Since our DApp is fairly novel, we had to be able to be able to immediately apply new concepts we learned. Sometimes this meant incredibly careful reverse engineering of code from the Neo project.
What we learned
We learned that although reaching for extensive goals is admirable, it isn't always possible to understand the extents of the tools we were using and that we have to factor in the learning curve of new software. We also found that careful organization and systemic design choices go a long way in helping us learn the new software and really hammer down on the requirements of the system.
What's next for Promise
Next, we hope to finalize our project and bring together our separate components into a harmonious whole. Also, we want to improve our smart contract to run more efficiently now that we've learned a lot about neo.