Inspiration
The team are builders and gamers. RPG + blockchain presented an intersection of technical interest and real world experience as Players / GMs -- a compelling combination from which the team could explore and learn blockchain technology and concepts, while being grounded in a problem domain the team was both experienced and interested in.
What it does
The current capabilities of the project are far from complete. The team did spend time focusing on the core mechanics of generating Relics + Relic Caches, and the initial version of loot distribution. To be blunt, we didn't get as far as we'd hoped at the start of the hackathon ;-) However, the team learned a great deal, and intends to continue to expand the capabilities of Lost Relics.
How we built it
Our first priorities were:
- Create the core functionality to mint the "season" NFTs, obtain and unlock Relic Caches, and distribute Relics when a Cache was unlocked.
- Establishing a solid build -> test -> deploy toolchain.
We explored both ERC721 and ERC115 standards for the project. The current version of the project is based on ERC1155.
One intentional design choice, which had a large impact on the project, was to pre-mint all the Lost Relic season loot, but to distribute Relics dynamically. Think of Magic: The Gathering or other similar systems -- At the beginning of a new "season" or release, everyone knows what's available. However, you don't know what's in a Cache until you open it.
We had other goals and secondary priorities in mind, but ran out of time or encountered issues which we still need to address.
Challenges we ran into
Re-thinking the roles and responsibilities of Dapps. The team are developers with decades of experience. However, that experience leads one to certain biases about Web application architectures, and the roles / responsibilities of software components. We often had to "unlearn" some biases to approach topics such as state management, and what should be handled on-chain vs off-chain. This was a challenge, but really enjoyable at the same time -- We had to approach many problems with "beginner's mind". The project spent considerable time implementing two different versions of Contracts using ERC721 and ERC1155. We got "curious" about how we might leverage ERC1155's fee efficiency, but also tackle loot distribution. There are still open questions here we're exploring.
Creating a front end application was more time intensive than expected. Front end app dev isn't our area of focus. It was great to learn, but we got way behind schedule trying to drink from the React.js fire-hose. As a result, our current version of the UI isn't something we're including in the submission. We developed some Hardhat tasks to show the basic end-to-end user experience of obtaining Caches, unlocking Caches, and gaining Relics.
Another challenge was leveraging mocks in our unit tests for the Chainlink VRF. Specifically, we could mock the call to request randomness, but struggled to get the mock to call our Contracts fulfillRandomness function -- We hit a time-box on this, and had to switch course. So our Chainlink VRF integration is pending until we can address the mock callback.
Accomplishments that we're proud of
The first accomplishment is taking the leap to invest time and energy in starting our journey of developing decentralized applications. We learned so much, and had some really enjoyable brainstorming sessions.
The questions and ideas we've begun to explore with different NFT standards and loot distribution algorithms are an area we're proud of. We've seen some ideas in the community, and think we can add some new concepts as we continue to explore the capabilities of ERC1155 based NFTs.
We established a solid build -> test -> deploy toolchain, and focused learning on Contract unit testing patterns. This is an investment that will pay off in future projects.
What we learned
We learned so much over the past 5 weeks about decentralized app concepts, technologies and tools: Solidity, React, Chainlink Oracles, Moralis, OpenZeppelin, Hardhat, unit testing patterns for Smart Contracts. We also learned much about Web 3 architectures, and are beginning to grapple with interesting questions of on-chain vs off-chain design decisions. Finally, the time spent exploring alternate implementations of the core logic as ERC721 and ERC1155 standards began to shed light on pro / con of those choices, and has presented some interesting questions for us as we continue to explore implementation ideas.
What's next for Lost Relics
We've got some enhancements to leverage Chainlink VRF during Relic distribution. We want to explore how to do this effectively using pre-minted ERC1155 NFTs. There are some interesting questions to explore around on-chain vs off-chain state.
Some other topics the team wants to explore are:
- Dynamic Relic generation when a Cache is unlocked
- Expanding the contents of a Cache; e.g., could a Cache also include a custom dungeon map, or custom Relic art? Could we enable these types of creators to engage in the community, and be fairly rewarded for their efforts?
- Is there a role for a Lost Relics Oracle? Could things that happen at the tabletop (i.e. off-chain / real-world) influence the on-chain state?
Log in or sign up for Devpost to join the conversation.