Inspiration
Why can I not play my music bought on apple music on my TV or my other non apple devices?
What it does
Open ledger for music distribution
How we built it
An open platform where artists/ studios can mint/ register a song. The chain stores song's metadata link which contains song info to uniquely indentify song in real world, as a metadata song link, and an encrypted song link. Price of the song, as different ERC20 tokens including stable coins, is also stored on chain. A buyer can buy a song and get access to the song by calling a method on chain which transfers chosen ERC20 tokens from buyer to the contract. The transferred token is stored under artist's name and can be withdrawn by the artist. The buyers are NOT stored on the contract's storage but as events. The chain is open for all to view. The idea is to keep this open and extend's it's use so that and any other application can use this as a ledger, as a proof that a particular buyer has "bought" the song and provide different specialised service based on that. A Node.js application is being used to store combine data from contract events and metadata stored on IPFS. Some insights is also calculated like song sale, buyer's expenditure etc. This also exposes some APIs for the frontend application.
Note: The contracts are EVM based and was made to be deployed on Aurora Network. Specific config can be found in AuroraTestnet branch of contracts.music repository
Tech
- [React]: HTML enhanced for web apps!
- [Eth.js]: interact with contracts on the web app
- [Solidity]: For writing EVM compatible smart contracts
- [Hardhat]: Development enviroment for smart contracts
- [OpenZepplin]: Library for secure smart contract development
- [Node.js]: server for tracking various events from contracts and
- [MongoDB]: storage DB for events and gathering insights from it.
- [Express]: Supporting APIs for UI features
Challenges we ran into
- Scalable way to share files to people who buy songs
- Volatile currency not appropriate to buy music
- Decision to store buyers on contract storage or as events.
Accomplishments that we're proud of
My first project and hackathon.
What we learned
- Mentioned tech.
- Lot of frameworks, utilities and tools we take for granted in web2 space is not yet available on web3 world. Meaning not many things have a decentralised way like using encryption based sharing.
- Lot of projects can be built to help developers in the space.
- Major common user facing products need to relly heavily on web2 tech and only some parts are shifted to block chain.
What's next for musicone
- UI/ UX improvements
- Searching of songs using different feilds like song, artist's name.
- Implementing spilt wallets so the earnings from the song can be split between different shareholders like producers, studios etc.
- Giving artists ability to update song details and price
- Implementing encryption so that the song files can be privately shared to buyers of the song.
- Dynamic pricing of songs based on preset values from artists and demand. Demand to be bought to the chain using Oracles.
Future
The project can also be extended for other king of digital assets which excercise "Right To Use" like music, video games, one time purchase softwares like Microsoft Windows OS etc. The advantage of using an open blockchain here is a user has to buy only once. For example, imagine buying a game on one of the marketplace for a platform like Steam and being able to use it on other marketplaces like Sony Playstation or Nvidia's online game streaming GeforceNow. Similarly for music, buy on YoutubeMusic or using MusicOne and play on any other app like Spotify.
Update for shifting this idea to a generic digital asset marketplace
I have posted a small kind of white paper for the way I am thinking to move forward with this project. As a standard way of creating a open marketplace. Please refer the posted image. And if you get some time, please let me know what you think.
Built With
- estuary
- eth.js
- express.js
- hardhat
- ipfs
- mongodb
- node.js
- react
- solidity

Log in or sign up for Devpost to join the conversation.