Oracles are a gateway to information for a lot of companies (eg getting market data about BTC price). However, a major pain-point that exists today is that in the case that one oracle starts relaying wrong information or spews data that is not accurate, the onus is on the company to account for that. To eliminate this problem, Companies subscribe to numerous oracles and rely on them for getting information paying each oracle for their services. We wanted to make this entire pipeline/process more robust.
What it does
Messiah is an oracle management interface that developers can interact with to get the most reliable data. Messiah subscribes to the top 100 Oracles. Now, if a company wants to rely on data from say 10 oracles, when using our service, they specify that they want 10 oracles. We then randomly select 10 oracles from the list of 100 and using a sliding window method. What this does is essentially provide companies the service of 100 oracles for the price of 10.
In addition to this, the community can choose to add or delete new/existing oracles based on their previous performance. This ensures that our "master" oracle list remains at the highest quality that it can be.
How I built it
We implemented an oracle voting system in a smart contract. This allows anyone to initiate a voting period for an oracle while specifying how many blocks the voting period will last. Once a voting period has begun, users can vote for or against an oracle. After the end of the voting period, anyone can close the vote, at which point an oracle will either be added, removed, or remain on the list depending on the majority vote.
The oracles that are voted in are “vouched”. At any point, users can request a random subset of vouched oracles by specifying the size of the set they want. This set is generated with a pseudorandom number generator but can be improved in the future by using oracle proofs.
We also have a Java utility to deploy an arbitrary number of oracles and continuously update their data on a predefined timer. This allows the list of oracle contract addresses to be retrieved.
We have implemented a prototype web UI which graphs the oracle results (for example the price of bitcoin) over time, and plan to enable users to interact with the oracle voting contract through this UI.
Challenges I ran into
- Difficulty in actually using an oracle to retrieve a random number, so we utilized a psueudorandom number generator for prototype purposes.
- Some development tools were difficult for beginners.
- Solidity was a new language for some of the team.
- Not enough time to complete the UI prototype.
Accomplishments that I'm proud of
We were able to get an MVP working and running. After talking to a few mentors, this seems like something that could actually be useful for developers & companies alike.
How much each of us learnt about blockchain development
What I learned
- A whole bunch of solidity (1 of the 3 members did not know anything whatsoever about blockchain development)
- Oracles (2/3 didn't know what oracles were prior to the hackathon) -d3.js -web3j (java server)
What's next for Messiah
Due to the restricted time, we were not able to finish a few features that we were planning to build. These features are as follows:
1) Provide users the ability to submit a parameter that allows them to specify how often they want us to change their oracle fleet.
2) Add a tier system which enables us to make tiers of the quality of oracles which will be incumbent upon each oracle's community rating and accuracy/reliancy
3) Use ML (anomaly detection) to analyze oracle behaviour and predict any downtime/ time of inefficiency.