It’s been a little over a month since ETHDenver (although it feels like a lifetime ago). For this years event, the Ethereum community came together to build a wild, ambitious Burner Wallet for all attendees to use.
Some parts worked, some had issues. Here’s the story of how it all went down. 🔥🔥
Interested in supporting the project? Check us out on Gitcoin Grants!
An ambitious goal
ETHDenver 2019 saw an incredibly successful use of the Burner Wallet for purchasing food & drinks throughout the event. As ETHDenver 2020 approached, me, Austin Griffith & the ETHDenver organizers began putting together an ambitious plan for its sequel.
For this year’s event, we would a build a wallet that would:
- Do everything that the previous wallet did (purchasing food & drinks with a BuffiDai token)
- Power an immersive game where users can earn XP points by completing challenges from sponsors
- Let users propose and vote DAO submissions using the XP they’ve earned
- Feature an interactive PegaBufficorn “retro-videogame” style UI
- Include plugins and integrations from event sponsors such as Fortmatic, Unstoppable Domains, etc
- Provide additional information for event attendees, such as a schedule of talks and other events
Due to the many roles the wallet had to play, we decided to build 5 different wallets:
- A wallet for hackers and other attendees to use
- A wallet for sponsors to use to distribute XP
- A wallet for food truck vendors to receive orders
- A “landing page” wallet to allow users to access their account before launching the full wallet
- An “admin wallet” for our team to manage the event and debug issues
These wallets would be built primarily by myself, with support from Austin Griffith and the DAO handled by DAOStack.
We had about 6 weeks to pull together a project that would have taken a full team months. There would be no time for significant testing, and bug fixing. Development of the wallet would go right up to (and during) the event itself…
The first day arrived, and excited hackers began to pour through the front door of Denver’s Sports Castle. As they arrived, they were greeted by a team of volunteers to help them get checked in and using the Burner Wallet. Unfortunately, getting them up & running on the wallet didn’t go quite as smoothly as the year before.
Unlike 2019, where attendees received a QR code to scan, users this year were told to use their Fortmatic account to log in to the wallet. This meant before the event, we had to find all users’ Fortmatic accounts, airdrop them BuffiDai and whitelist them to participate in the DAO.
Unfortunately, somewhere between Fortmatic, Devfolio and ourselves, some of these addresses got lost. A lot of them.
As attendees arrived at the Sports Castle and logged in, it became apparent that many of them didn’t have any BuffiDai in their accounts, and presumably wouldn’t be able to participate in the DAO either.
We needed a fallback plan, and quickly.
Our team rushed to print off over 1,000 paper wallets and modified the Burner Wallet to support scanning them. Attendees who were unable to successfully onboard with Fortmatic were instead given a paper wallet.
Crisis averted! Right…?
Whiteblock’s hardware saves the day
Lunch time rolled around, and attendees headed outside to purchase some lunch. Wallets in hand, they began scanning food trucks and trying to make purchases. While some purchases went through without any issue, many wallets were stuck and unable to send BuffiDai.
After some investigating, we determined that wallets were being slowed down by the massive amounts of calls we were making to the xDai RPC endpoint. Furthermore, these RPC calls were made over http (as opposed to websockets), so the requests were preventing other parts of the app from downloading as well.
Thankfully, the Whiteblock team stepped in to save the day!
Together with Splunk, Whiteblock was working to provide analytics for the event and run the dashboards displayed throughout the venue. To gather data, team had brought 2 beefy rack-mounted servers to Denver and set up as xDai nodes. We worked with the Whiteblock team to expose these nodes publicly, enable websocket connections and switch the Burner Wallets over to these nodes.
Almost immediately, wallets began loading faster and transactions were processed quickly!
Hungry hackers aren’t happy hackers 🍔
Even after we switched the wallets to our on-site xDai nodes, we kept hearing reports of food truck transactions failing. However, I was unable to reproduce these failing transactions on my own devices.
We needed to find this bug.
So we gathered about 10 people around a single computer in our tiny workspace. On the screen was a single QR code for a 0.1 BuffiDai transaction. All at once, we each pulled out our phones and began sending transactions as fast as we could, hoping to stress-test the system and discover whatever issue was occurring.
At first, all transactions were processing smoothly, we couldn’t seem to reproduce the error! 😩 Until eventually, Austin decided to reload his wallet, and found that his first transaction became stuck.
As it turns out, the Fortmatic plugin needs to download a number of assets before it can be initialized. If Fortmatic wasn’t initialized before users tried to make their purchase, the transaction would hang. To resolve this, we simply disabled the “send” button until Fortmatic was fully loaded.
With that fix in place, nearly all transactions were processing correctly! 🍕🍣
Gas Station Network worked flawlessly (with a little help) ⛽️
Whenever any bugs appeared, our first suspect was the Gas Station Network (GSN). The GSN is a protocol for meta-transaction relayers that we were using to provide gasless transactions for all users.
Using GSN would significantly improve user experience and avoid needing a vulnerable faucet for airdropping gas money. However, GSN added another layer of complexity, another system that could fail and break the wallet.
One potential issue with any meta-transaction relayer system is that if there is only one relayer, all transactions are funneled through that single account. This could potentially slow transaction times during high transaction volume.
We addressed this potential issue by spinning up about 10 GSN relayers, with Whiteblock hosting a few relayers as well. With these in place, the system performed remarkably well, and was able to easily relay user transactions.
All in all, the GSN protocol relayed over 4000 transactions on the xDai chain, as well as a few mainnet transactions as users claimed their free Unstoppable Domains. This is one of the highest-volume tests of the GSN system, and shows that it can be a powerful tool for enabling meta-transactions.
Sidenote: if you’re interested in running your own GSN relayer on xDai, I built a Docker image that makes it much easier to run.
Connecting the Burner Wallet to DAOStack
The other side of this year’s Burner Wallet was the BuffiDAO game. Users were able to earn XP points by either scanning QR codes throughout the venue, or by completing challenges run by the various sponsors.
Once users had accumulated XP points, we needed to let them use those points to vote on the DAOStack dapp. Of course, the Burner Wallet is designed to work in any browser without any add-ons, so we couldn’t rely on something like Metamask to share accounts between sites.
We had to build our own solution.
What we came up with was BurnerConnect: a system that would allow any site to connect to Burner Wallet accounts on that browser. BurnerConnect is supported by Web3Modal, so the DAOStack was able to easily add it to their Alchemy dapp. (Also, other sites like Curve Finance have since added support as well).
Generally, BurnerConnect worked most of the time (cross-site communication is really hard!). However, the user experience was not always straightforward, many users turned to their handy Metamask as soon as they reached the DAOStack site. As submission deadlines approached, we set up a help desk to provide assistance to anyone having trouble with the site.
Finally, it came time for the final presentations. While hackathon judges selected which teams would present on stage, it was the DAO members who ended up selecting the final winners of the ETHDenver hackathon. Over 450 participants voted in the final round, awarding $30,000 in prizes to the winning teams! This makes ETHDenver the first major hackathon where the winners were selected not by judges, but by participants voting in a DAO.
This version of BurnerConnect was an early prototype, but we’ll be working on it more in the coming weeks. Look out for more news about it. 🙂
And of course, the happy hour 🍻
Sunday evening rolled around and the ETHDenver hackathon began to wrap up. But the Burner Wallet wasn’t done yet! Hackers and other attendees went down the street to unwind at the MakerDAO Dappy Hour.
While anyone was allowed in to the party, people who had RSVP’d and staked through Kickback were given paper wallets upon entry. These would let them top up their Burner Wallet with xDai and purchase some free drinks. At the bar, users were able to purchase drinks off tablets running the Ching PoS system, thanks to a plugin developed by the Ching team.
In addition to buying drinks, attendees were also given the opportunity to donate any leftover BuffiDai to charities. By the end of night, 309 Buffidai had been donated to Giveth, 281 to Heifer International and 282 to Grace International!
Unfortunately, the after-party wasn’t without it’s own issues. MakerDAO hoped to use up old paper wallets that they made for previous events, so we included functionality for sweeping funds from these wallets. However, many attendees scanned the wallet with their phone camera, and were taken to last year’s version of the wallet (which wasn’t compatible).
Eventually, the experiment was called to an end and the bar was opened to all attendees.
And after 2 months of work, I could finally relax and have a beer 😵
Things weren’t perfect, but we made incredible progress
Events like ETHDenver are opportunities to push the boundaries of what’s possible in the world of blockchains. We can quickly build experimental technology and quickly push it out to thousands of users, without needing to worry about people losing real money.
Despite some bugs and UX pain points, our team still managed to build an impressive array of technology and put together a unique experience. Over 6 weeks of development, we managed to build:
- An incredibly cool game UI with parallax effects and a flying PegaBufficorn!
- A system for deterministic contract wallets that support meta-transactions, Gas Station Network, multi-sig transactions and more
- Bridging the DAOStack system to the xDai chain, allowing fast & cheap DAO interactions
- BurnerConnect, a Web3 provider that allows Burner Wallet accounts to be shared cross-site without sharing private keys
- Plugins & integrations with Fortmatic, Unstoppable Domains, 3Box and Ching
All in all, over 300 users participated in the DAO game, over 300 submissions were made to the DAO, and almost 3,000 BuffiDai transactions occurred!
This is only the beginning! Look out for these features and more being refined and added to more cool Burner Wallet & Burner Factory projects in the future!
Finally, I want to give a shout out to my amazing team members on this project:
- Austin Griffith: the OG creator of the Burner Wallet. Austin drew and implemented the incredibly cool wallet design, built all the backend-servers, and most importantly kept everybody excited about the whole experience!
- Eylon Aviv: Handled the entire DAO side of the project, such as deploying the DAO on xDai, setting up competitions, and making sure that all competitions would go smoothly.
- Polina Aladina: our amazing project manager that kept this crazy project organized and kept all of us sane!
If you’d like to support this project, please consider making a contribution on Gitcoin grants. Gitcoin CLR Matching starts on March 23rd, so every contribution can have a big impact!