Inspiration
We were inspired to fix problems that we and many other NFT enthusiasts face with firstly, acquiring NFTs and then optimising and extracting value from them.
We are building a platform to provide various options to solve these problems but our focus for the hackathon was to solve two critical problems in the NFT space; Illiquid NFTs and high barrier to entry for a lot of people.
We'll bring this to life with the story of Ben and Natasha.
Bens NFT collection is filled with a variety of blue chip NFTs, he's had diamond hands for a while but needs some liquidity, so he decided to sell one from his BAYC collection, he has 3. He has one which is super rare, so he's holding on to that, despite receiving offers exceeding the amount of capital he needs he doesn't want to let that one go. He has a mid-ranked BAYC which is the one he has decided to sell, it's been listed on OpenSea for over a month and no one seems to be willing to pay his asking price. He's had offers at the floor and below but he doesn't want to settle for that price, as although it's not super rare it has some rare attributes and it is definitely worth more than the floor! Of course, the pool of people that can afford these blue chip NFTs decreases as the collections value increases, theres not huge amounts of people with a couple hundred ETH to spare, but he'd hoped to have sold it by now. Unless he finds that one buyer who agrees with his set value then he may have to accept the latest offer which is below floor.
Natasha is relatively new in the NFT space, after hearing about BAYC she wanted in but could only dream of owning one. She has tried her chances with a couple of upcoming projects promising to be the next BAYC and Cryptopunk. Taking the gamble, she minted a few and bought some on the secondary market, so far she's spent 2.8ETH which is currently worth 1.2ETH. Not the best start but she's continuing to research new projects and is constantly grinding in Discord to grab a whitelist spot, it's tiresome and overwhelming. She had a look at fractionalised NFTs but it wasn't for her. If you can't even have it as your pfp, what's the point?!
Goobig.com solves both Ben and Natashas problems and variations of these problems that exist for NFT enthusiasts. Goobig is a platform that democratises the ownership of NFTs and provides access to liquidity that is often locked in them. As the NFT market matures and more use cases are born the desire for ownership and extracting value will keep growing.
What it does
Goobig will host various ways for users to trade NFTs having a dominant focus on rewards with our ParticipateToEarn model and keeping our community at the heart of every decision. We are obsessed with ensuring positive experiences for every user, to support this, one of our key platform features is a feedback forum to allow our community to create and govern our roadmap. A platform for the community, built by the community :) so they only get what they want. We will have the more traditional Fixed Price Sale, Auctions, Lending for NFTs and more but our starting point is our 'Raffle Sale' feature which is what we are building in this Hackathon.
Let's go back to Ben and Natasha to see how this will function.
After 2 months of listing on OpenSea with no sale Ben decides to raffle his mid-ranked NFT on Goobig.com. He imagines it will be a lot easier to leverage the mass desire to own a BAYC in this space rather than finding that one person who wants his one. He sets his price at 150ETH and has the choice of issuing 10, 100 or 1000 tickets. He has quite a large following on Twitter and has some influence in the NFT space so he decides on 1000, to make each ticket more affordable. He sets a duration of 7 days which gives him confidence he will reach his 1000 ticket sale milestone. He successfully lists and shares it with his followers. Ticket sales start coming in :)
Natasha sees a tweet referencing Bens raffle listing and is super intrigued. She heads to Goobig.com and sees that she has the chance to own this BAYC for 0.15 ETH. This is exciting considering she's already lost more the 10x that with the gamble of new projects, so she decides to buy 3 tickets. She's in! 3 days left and she'll find out if she's won.
It's day 7 and Ben has sold 968 tickets he has three options: Extend the raffle, cancel and refund all ticket holders or execute the draw anyway. He decides on the latter as that's still 145ETH minus Goobigs fee of 1.75% and any creator fees he's still made more than he needed and in 7days. He executes the draw and one lucky ticket holder wins.
Unfortunately Natasha didn't win but her participation has earned he activity points which contributes to increasing her Goobig Level, on top of that she receives our native token which she decides to stake, this also contributes to increasing her Goobig Level. She's now level 3 so she has access to get a whitelist spot for this new upcoming project she's had her eyes on. She submits her request and gets the whitelist spot, hours saved from grinding in Discord! She can't wait for the next BAYC raffle it seems her luck is on the up!
How we built it
We put our focus on building the Raffle Hosting Service Logic for the Hackathon, and built a smart contract for it.
The smart contract has the following functionalities:
- Any user with an NFT should be able to host a raffle and set the price, number of tickets and raffle duration.
- All the users should be able to purchase the raffle tickets.
- Once all the tickets are sold out, the draw is executed and the winner of the raffle is automatically selected. The winner then receives the NFT into their wallet and the host receives ETH for tickets sold, minus commission and creator (if any) fees.
- If the raffle duration is due but not all the tickets are sold out, the status of the raffle changes to pending and the host is given three options: extend the duration, cancel the raffle or execute the draw.
- If the host doesn't take any action during the pending period, the draw will automatically execute with the current purchases and close.
- The raffle has the following statuses: "Open", "Pending", "Closed", "Cancelled"
- The smart contract will be deployed to Rinkeby Testnet.
We have built a UX/UI design based on the above logic and developed a FrontEnd based on the design using React.js/Redux.
The project comprises of different features including User Registration via Metamask, User Profile, Raffle Listing, Fetch and Display the NFTs from Metamask, number of tickets sold, NFT metadata, Calculation of NFT's rarity.
The backend used nest.js and MongoDB, and the project is hosted on AWS.
Challenges we ran into
- Selecting the winner of the raffle fairly
- Automatic update and execution of different statuses
- Fetching a list of NFT assets from user's wallet
- Fetching NFT metadata
- Calculation of Rarity
- Getting Creator's info for the NFT
Accomplishments that we're proud of
- Integrated Chainlink VRF for the selection of winner for fair play and randomness.
- Integrated Chainlink Keeper for the automation of raffle execution and status update. The smart contract can't run itself: it should be called by an external service. We have used Chainlink Keeper to handle this.
- Integrated Alchemy API to get a list of NFT assets from a user's wallet: Getting a list of assets from user's wallet is somewhat challenging because huge amount of calculation would be needed to get all the transactions for a specific wallet. We have used Alchemy API to solve this.
- Integrated Alchemy API to get NFT metadata: We can get a well-structured NFT metadata by just calling the Alchemy API once.
- Integrated Moralis API for the calculation of NFT's rarity: We can get all the metadata for a given collection using Moralis quick and easy. Alchemy also supports a similar functionality but it's in beta mode, and doesn't support Rinkeby Testnet. So we have used Moralis.
- Integrated Moralis API to get NFT creator info. Alchemy API doesn't provide owner/creator's info whereas Moralis API does.
What we learned
- We've been using Truffle a lot in smart contract development but during the hackathon, we learned that Hardhat is easier to use.
- We encountered an issue using the Chainlink Keeper. The number of raffles being hosted will keep increasing but since it doesn't make sense to let the users register on keeper manually for each raffle by themselves, we should handle it from the smart contract. This would mean that as the number of raffles increases, the gas for calling the Keeper function would increase as well. We reached out to the Chainlink Discord Server for support, and one of the support team members kindly helped us in saving the gas(by shifting from performUpkeep to checkUpkeep). It was really helpful, and we could implement our requirements.
- We used Moralis API to get the metadata for the NFT collection but there was a slight difference from what we get and the actual metadata. We reached out to the Moralis support team in Chainlink Hackathon Discord Server, and they responded kindly and quickly to fix this.
- We have attended all the live coding sessions during the hackathon, and it was really helpful in widening our knowledge especially on Chainlink VRF and Keeper.
What's next for Goobig
We are continuing to build at pace to include rewards on the platform and some additional features to reach MVP status. We are creating our token as we speak and ahead of launch we will complete our token raise. We're excited to share the journey of Goobig with our community! Please join us :)
Built With
- alchemyapi
- amazon-web-services
- chainlink-keeper
- chainlink-vrf
- ethereum/rinkeby
- hardhat
- javascript
- mongodb
- moralis
- nest.js
- openzepplin
- react.js/redux
- solidity
- web3.js

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