Last year's Ocean hackathon featured a project called Jellyfish, which was a browser extension that let the user publish and search the Ocean commons. With the advent of datatokens and the Ocean market, we recognized that this abandoned project desperately needed to be updated. By creating a repository _ designed _ to be extended by other developers, and recreating the simplicity of the original project's prototype, MoonJelly has been shaped to become a powerful tool for members of the Ocean ecosystem.
What It Does
When designing MoonJelly, we focused on three main ideas: filling the ocean, browsing the ocean, and developer extendibility. To accomplish this, we created core functionality:
- Mint Panel to upload/publish datasets & price datatokens.
- Market Panel (and a context menu button) to search the Ocean market for datatokens.
- An Alert system that regularly searches the Ocean market for new datasets based on your keywords, and notifies you of any high-quality sets of interest.
- Wallets & Bookmarks to keep track of which datasets may be of interest.
- Modules of functionality that can be enabled and disabled by the user.
The modules feature is where the extendibility of MoonJelly shines. Developers can view MoonJelly's documentation and create modules by contributing to the GitHub repository. Modules can hook into the functionality of the rest of the project, such as modifying inputs of the Mint or Market pages, or deciding which panel the extension should immediately go to on open.
To provide an example of the modules feature, we created 3 modules.
Slate (Filecoin) Integration
The Slate Integration module reduces interoperability friction between the Ocean and Filecoin ecosystems by letting users easily publish datasets hosted on Slate. We have created an extra video to focus on the module's features. The module (requires a Slate API key) will:
- Add a button to the Slate interface that sends the details of an uploaded object and adds it to MoonJelly's Mint Panel for easy publishing of datasets.
- Add a new Slate Integration panel.
- Allows users to browse the contents of their slates from the extension's interface. Provides links to the slates, the objects in the slates, and allows users to send the details of an uploaded object to MoonJelly's Mint Panel.
1inch Exchange Integration
The 1inch Exchange module utilizes the 1inch API and Ocean's Aquarius API to monitor the price fluctuations of datatokens based on any cryptocurrency on 1inch Exchange. We have created an extra video to focus on the 1inch Exchange features. The module will:
- Display the price of bookmarked datatokens based on whichever cryptocurrency you choose.
- Allow the user to modularly create alerts for when the price of a datatoken relative to any 1inch supported cryptocurrency reaches a certain threshold.
- Easily direct the user to the 1inch exchange.
Ocean Pools for MoonJelly
The Ocean Pools module allows users to view the statistics of their bookmarked pools. We have created an extra video to focus on the features. The module will:
- Display pie charts and line graphs to represent pool data.
- Allow users to view all the information of pools normally found on the Ocean Market.
How We Built It
Similar to the original Jellyfish, the MoonJelly extension is based off of React. By importing Ocean's React library, the extension was able to make use of Ocean's functionality within the extension's panel. Other functionality, such as that of the Slate module, used other external REST APIs. While we took many of the design choices from the original Jellyfish repository, nearly 100% of the functional code had to be rewritten since the original project dealt with the ocean commons instead of the new datatoken-powered market. We also converted the project from scss to css, as we were more familiar with it, and we know that developers can have issues with installing the scss library.
Challenges We Ran Into
New technologies are always difficult to work with because there isn't as high of a level of support as systems that have many years of developers working with them. That being said, the developers on the Ocean discord channel (shoutout for Alex) and especially the Slate slack (shoutout to cake) were quite helpful at times.
Accomplishments That We're Proud Of
While we lamented the difficulty of working with new technologies in the previous section, it's also a point of pride. Creating this extension with the functionality that it provides would not be as impressive if it was not hard. We are proud of our product, and we think that there will be people who will seriously use this product. We tried to build it for long-term support, not just a hackathon.
If you like the direction of the project and are a developer that wants to contribute, then by all means do so! If you think that there's react components that should be updated/added to the project, or if you think that the css needs some fixing up, then feel free to make a branch on the GitHub repository. If you want to add your own new functionality, then you should make a module. Their functionality must be togglable. We're looking for new modules for other integrations, like for Google Drive or Kaggle.
What's Next For MoonJelly
There were a lot of ideas that we had to scrap for sake of time, funding, or lack of experience, we hope to continue adding features with support from the community.
In regards to Filecoin, we are also considering expanding our integration by allowing users to use their own buckets and have MoonJelly manage their Ocean publishing.
In general, we hope to add modules like that of Slate to help reduce the difficulty of flow between cloud storage services and Ocean Protocol, as well as improving the built-in algorithms for alert-based market curation. Unfortunately, some modules like Google Drive require understanding of the Google APIs as well funding for long-term support, so we hope that the community will support the continuation of the project! Our next focus is making allowing the extension to dynamically switch networks & improving the modules development workflow. We have open project boards on Github here, as well as open issues here.