The Songbirdz project is bringing bird watching onchain to Base.
In order to onboard 1 billion users onchain, then we need to provide them with games and experiences that can be enjoyed be a broad range of users, not just our fellow degens and crypto natives.
About 100 million people in the U.S. alone could be self described as bird watchers, or at least "bird curious", which is more than 35% of the population aged 16 and over!
Songbirdz is a simple onchain game where each item in the NFT collection represents a species of bird, and in order to "mint" the NFT you must correctly identify the species name, which is hidden, of the bird based on its image and a song recording.
The first 1,000 birds are out in the wild, ready for identification, and feature 200 different species of birds commonly found in North America (and elsewhere too... hooray for yearly migration), with 5 of each species.
In birder lingo, a Big Year is a competition among birders to identify as many species of birds as possible by sight/sound, within a single calendar year and specific geographic area. The North American Big Year record is 840 species, set by John Weigel in 2019!
Now, we all know onchain has no geographic limits, so we'll recreate this competition onchain (from now until the end of August) using the Songbirdz NFT collection.
NOTE: The 2 new features developed during June for the buildathon are the Leaderboard page and the Life List Modal, see the 2 PRs below for the full commit history.
The biggest challenge I ran into when building this project is in deciding which APIs to use in order listen to events on Base based on actions that should result in users earning points.
In addition to a script that I can manually run to calculate and award points, I wanted the leaderboard to be able to update in real-time, so I started out using the OpenSea Stream API which uses websockets to publish events in real-time as they occur on the blockchain.
I quickly discovered that the OpenSea Stream API (and their node JS SDK) in general, were not as reliable when running in my manual script for past events, and found that it was missing events that occured > 30 days in the past.
Since I was using Alchemy for my RPC hosting, I decided to try out the alchemy-sdk in the manual script and found that was much more reliable when it came to fetching historical records of ERC-721 transfer events.
In the end, I had to settle on an approach that used all three of the Alchemy SDK, OpenSea SDK, and OpenSea Stream API.
A bit more work on my end, but wanted to make sure that no users would be missing points that they had rightfully earned!
Tracks Applied (3)
GAMING with thirdweb
Cheering for a project means supporting a project you like with as little as 0.0025 ETH. Right now, you can Cheer using ETH on Arbitrum, Optimism and Base.
Discussion