I spent most of last week in Denver attending EthDenver 2023, one of the biggest Ethereum-centric conferences in North America. This was my first EthDenver event (first of many I hope) and I wasn’t sure what to expect given the roller coaster that almost seems a constant in this domain. That said, the five days I spent there were a great way to get a glimpse into various projects and themes in play in that ecosystem. This post covers some of the projects and ideas I saw there.
A multi-chain future
I attended Axelar’s mini-summit on interoperability which was very interesting. The tl;dr of various panel discussions was that while we might have our L1 or L2 chains of choice, we are living in a multi-chain world, and interesting applications will appear in a lot of different chains. That said, at least so far, Ethereum remains the main chain of choice acting as a hub with spokes out to various other chains. There were also some interesting discussions on the safety of bridges that connect various chains and which have been in the news a number of times for getting hacked. I am not sure knowledgable about a lot of the chains that were mentioned but found the discussions fascinating and would like some time to explore Axelar, Polkadot and Cosmos.
The Social Web3
I ended up attending various sessions on Web3 based social platforms, and there were a lot of those around. The ones I did find most interesting included Huddle01 (Web3 based Zoom), Sending.me (Web3 based Discord), and Dispatch, a company building NFT based shopping tools as well as “engagement NFTs” that encode interactive experiences like polls etc. More interesting though was learning about a number of emerging protocols for Web3 based communication like DMTP, XMTP and Lens. I am really curious about Lens as it comes from the company behind the successful Aave protocol and has some very interesting primitives, like using NFTs to define user connections which I do think is kinda interesting.
Incentive Design and Economics
Thanks to my friend Mike Mccoy at the CryptoEconLab, I was able to attend their day long mini-summit on cryptoeconomics. I’d say I understood maybe 40% of the ideas shared here, but the talks were very good. I specially enjoyed the session on Protocol Gas Dynamics and MEV, Quadratic Funding by GitCoin and on NFT Auction Design by Tarun Chitra. You can find all the talks at the event on their YouTube channel
There were a lot of sessions on privacy and zero-knowledge proofs. Not surprising since privacy is a big deal these days and ZK technology seems a promising space.
There were more new wallet startups I saw at the event than I was expecting. MetaMask remains the big name there and their announcement about Snaps, their extension framework, was awesome, but it was interesting to see a number of wallet providers focusing on user experience.
Unity’s announcement about their partnerships with a number of major Web3 platforms happened around EthDenver. Hopefully this results in some compelling Web3 games and not just standard games with Web3 bolted on
One of my most memorable/educational meetups was one by Philly.rb on audit logging. Audit logs record the occurrence of an event, the time at which it occurred, and any other useful data. The insight I remember from that talk was that audit logs are generated by creating a record for every change event in a new table. For example, your project may have a model User and a model ChangeOperation (usually generated by some library) and every time any data on the user model is changed, a new ChangeOperation instance is created and persisted in the database. You can later view all the ChangeOperation s the User model has gone through.
I am at EthDenver this week and it’s been great. There are some really interesting new projects using NFTs in a number of new ways. A typical NFT is such a simple idea that it is very amenable to representing different properties of a product. The Lens Protocol is one such interesting project that wants to represent social graphs on the blockchain. Like a few other social-network-on-the-chain projects, Lens uses NFTs to represent user identities.
Where Lens does something interesting though is representing verbs like “following” as an NFT. From their documentation:
Profile NFTs contain a FollowModule. This module contains the logic that allows different accounts to be issued Follow NFTs to record their relationship to the main profile on-chain.
Extracting the follow action to its own smart contract is an interesting move and allows you to create all sorts of various kinds of follows like “create a follow NFT only if the user has this other NFT” or “create a follow NFT if they pay a certain amount” (basically premium follows).
Definitely an interesting idea and something I need to dive into a bit more.
I remember thinking of myself as a relative latecomer into the Bitcoin space, having really gotten into it in 2012 after first being introduced to it in 2009. My initial impression of Bitcoin in 2009 was “who cares, this is a nerdy demo” and it wasn’t till I saw a project at a hackathon of Bitcoin being passed around in an API call to get access to some data that I truly saw the potential. This was around the time Twitter was killing third-party clients left, right, and center with the justification being that there was no way to monetize the API and it was hurting their ad business (I was till very recently, a devoted Twitter user). The demo really made me rethink Bitcoin. If “value” could be manipulated like software and moved around the internet with minimal friction, the impact could be huge!
For the last 4 years, I have managed a small community of Blockchain/Web3 enthusiasts within Comcast. And while markets do their thing, my focus has remained on the underlying tech, with my initial interest in Bitcoin being replaced by Ethereum which I could actually use to build cool applications. And while I have worked on a few prototypes, some of which I have even shared on this blog, it has generally remained my “20% time” project.
Up until 2022. This year I spent a lot of time in the Web3 space, specifically around NFTs in general. And while I hope to share some details in the future, I wanted to take some time to talk about my own perspective on the space, especially since there seem to only be extreme statements in the space: NFTs are either a complete scam or the biggest opportunity since the internet. My own perspective is fairly moderate, but I do feel NFTs present a huge opportunity to build the next generation of communities and applications. Lately, I keep getting pulled into the same conversations again and again, and this post is an attempt to share my opinions on the topic.
We have had NFTs for a long time
In a purely technical sense, every web app that allows you to log in issues you an NFT, a non-fungible (i.e, unique) token which is some kind of authorization or access token. The difference between these tokens and Web3 NFTs is that
Traditional access tokens are stored in proprietary databases and NFT tokens are stored on blockchains which are usually shared infrastructure (which is why I don’t understand the point of single-company blockchains, though there is value in consortium blockchains)
Unlike traditional access tokens, you “own” the NFT which means you can give/sell your NFT to anyone on the same blockchain
IP vs Access Tokens
Though there are a lot of variations here, broadly I classify NFTs into 2 categories
Intellectual property NFTs which give you some kind of ownership of the underlying asset. This may be read-only (ie. you can’t actually do anything besides own or sell the asset) or may give you broader rights to use the IP, as long as you hold the NFT.
Access token NFTs which give you access to some content or community. The associated image/media here is a nice-to-have but not really the point since it’s more about the access gateway being able to validate your ownership at the entrance to the experience (similar to traditional access tokens)
“I can just copy the image”
Probably the biggest criticism of NFTs is that since the tokens just point to a piece of media on the internet, there is no value to them. Analyzing them in the context of the 2 previous categories of NFTs is kind of insightful:
In the case of IP NFTs, this is akin to IP theft which, on a small scale, is no big deal (like downloading a YouTube video or whatever). But no one is going to create a business on IP they don’t have rights to (like the Bored Apes restaurant). Also, IP laws are territory bound. For example, it’s easy to enforce American IP law in the US but not in China. The same goes for NFTs: Web3 apps can easily verify your ownership if they need to but its harder to do that in off-chain products (at least for now, and since there isn’t that much money being lost there, no one cares), so yes, you can copy and use a Web3 artist’s work if you are ok with minor IP theft with no repercussions
For access NFTs, since the media is not the point, it’s like copying the cool artwork from a Foo Fighters concert ticket. It’s cool that you now have it but since the point of it is to get into the concert, grabbing the image is pointless
Another criticism is that NFTs are just tokenized hype, and a lot of purchases are FOMO-driven. There is some truth to this but it’s a natural culmination of where we have been going as a society. As we move from fundamentals-based economy to Information Economy to Attention Economy, the Hype Economy seems to be a logical next step. And this is being played out not just in the crypto world but in the non-crypto sector as well, with things like Meme-stocks and companies like Tesla being examples of companies trading way over their fundamentals would justify mostly because they have garnered huge fanbases around them.
I do think there should be some guard rails to prevent people from getting burnt and some amount of regulation is desperately needed in the Defi space.
Copper over Gold
I am not as excited about “crypto-as-a-gold”, something valuable but barely used. I’d rather Web3 technologies be more like copper: cheap so that everyone can use it, and actually useful.
Can’t have it both ways
I also find it fascinating that the same folks who are concerned about the centralization of power and control across the internet among a handful of companies also demonize the most impactful decentralization effort in the last decade. For the first time, we actually have projects essentially kickstarted by communities, and unlike, say, Kickstarter projects, have a voice and role in the growth of the projects. I am fascinated by the ideas of things like governance tokens and DAOs as coordination mechanisms. We have decoupled identity and financial systems allowing us to work with anyone on the planet with a shared vision and be truly inclusive since real-world biases based on identities don’t have to come into play at all.
Where Web3 needs to get better
That said, I acknowledge that Web3 systems need to improve to avoid the constant dings against it.
Reduce complexity to reduce de-facto centralization: Too many parts of Web3 are still too technical or nerve-wracking (like creating your own wallet to hold thousands of dollars). And while various companies are bringing solutions to market to help here, their centralized+unregulated nature makes the situation even worse.
Create more forgiving systems: I understand finality is a feature but we need to create systems to be more forgiving to users and developers. We have rolled back the chain when we had major events like the DAO hack on Ethereum. Can there be similar mechanisms or design patterns to prevent accidents on much smaller scales?
Reduce the possibility of scams and rug pulls: We need more ideas like trustless refunds etc to reduce the possibility of people getting burnt on Web3 products. I like the idea of long-term distribution of crypto funds that prevent FOMO scams.
Make more things for regular users: There is so much we can do with the Web3 primitives we have today: games, learning apps, community platforms, etc. I hope more efforts go to those and less into recreating wall street on the blockchain
It was great to hear a lot of probing questions from both the audience and the moderator. I have been exploring this space since 2012 and it still feels like the early days with so much still left to figure out. Every year feels closer to the kind of ideas I hoped to see sprout from this space but we are not there yet, and the space feels ripe with opportunity.
I really enjoyed listening to the the rest of the panel offer so much insight into the current state of the Web3 ecosystem from their own individual points of view. Thanks, Mark Wheeler for moderating the panel expertly, as well as fellow panelists Karla Ballard, Kelly Gallagher, Mike Ghen and David Barrick, and of course everyone who attended.
Last week I was invited to give a talk at the PHLAI conference on the intersection of Blockchains and Machine Learning, 2 areas I have been working with a fair bit in the last couple of years. My hope with the talk was to get more AI practitioners interested in the Blockchain space, which I feel perfectly complements the AI space by providing a layer of trust on black-box AI systems.
Powerpoint presentations do not make good blog posts, so I’ll elaborate on some of the ideas in the future, but here is my deck from the presentation for now
NFTs have been a lot in the news lately, jolted into mainstream spotlight by Beeple’s $69M sale of his NFT art piece called the first The First 5000 Days. As with most things crypto, there are as many passionate believers as there are skeptics of this new model for digital collectables. Regardless, from a purely technical level, I have been fascinated by digital collectables for a while (ever since CryptoKitties broke the Ethereum Blockchain) and have been trying to learn more about the technical underpinnings for the last couple of weeks.
A16Z, the venture capital firm, has been a great source for information on the whole crypto space for a while and organized an online summit this afternoon bringing in some big names in the field to speak about the state of the NFT space. Below are some of my takeaways from the event
On NFTs in general
Dan Boneh from Stanford University and Chris Dixon from A16Z kicked off the event with a fireside discussion on the state of the NFT space in general. Some interesting points of discussion included:
How one of the big reasons that Decentralized Finance (DeFi) exploded was because of the composable nature of Blockchain finance primitives. NFTs could offer similar capabilities. For example, you could wrap non-fungible ERC-721 tokens in fungible ERC-20 wrappers.
How we are already starting to see NFTs be used as collateral just as other assets tend to be
Could Quantum Compute destroy Blockchains and therefore the NFT value (nope, we have quantum resistant algorithms which we can move to as QC attacks start becoming more probable)
On NFT Marketplaces
It was fascinating to hear Kayvon Tehranian from Foundation and Devin Finzer from OpenSea talk about their NFT marketplaces. I missed a big part of the latter’s talk but I have been really curious about how Foundation works and it was great to hear a bit about that.
Every action on Foundation (listings, bids, etc) are recorded on the Blockchain and the asset itself is stored in IPFS. The system only works with non-custodial wallets (sorry Coinbase)
While technically it is possible for someone to upload an asset that they don’t own, Foundation manages this a bit by a pretty exclusive invite process with only current artists being able to invite new artists (which does feel a bit centralized IMO)
Since everything is managed in a decentralized way, it is theoretically possible to buy an asset from Foundation and sell on a different marketplace
Dieter Shirley and the Flow Blockchain
This may have been my favorite session since I am already interested in Flow. Dieter Shirley is the CEO of Dapper Labs but really got famous when he and his team built CryptoKitties while still working at Axiom Zen. Flow is a new blockchain designed for applications, not financial instruments and is famous for running the NBA Top Shot NFT
Flow’s architecture is driven by 3 goals:
Enabling building tangible products
Simple on-boarding for non-crypto-nerds
Higher capacity to enable web-scale products
He also talked about the decision to build their own chain instead of using Ethereum (“wasn’t easy”), though he does feel that interop with other chains is going to happen among different chains anyway.
On his one regret with the ERC-721 specification that he drafted, he wishes they hadn’t punted on the metadata specification for ERC-721 tokens (“it was a classic bikeshedding moment and there were too many people with too many opinions”).
On the challenges he sees with NFTs in general, he feels legitimacy of the NFT, the challenge of balancing scarcity and abundance and the challenge of interacting with the traditional financial system will remain the big challenges for the near future.
DAOs and NFTs
The last talk of the evening was by digital artist pplpleasr who talked a little bit about her process for NFTs but then mostly talked about the birth of the PleasrDAO, a Decentralized Autonomous Organization that was formed organically to acquire her Uniswap NFT and now exists as a community that buys other NFTs and leverages their assets to power socially conscious projects on the Blockchain. Her talk ended with her revealing her new NFT titled “Apes Together Strong”, with all proceeds going towards charities supporting autism advocacy.
I love the idea of DAOs and the talk, as well as the sentiment on her slide below, was the perfect talk to end on
Last week’s Comcast Lab Week gave me another opportunity to dig deeper into Blockchains. In my previous writeup on CodeCoin, I had used Ethereum to create a bounty system for Github issues. However under the hood, we had cloud servers managing various wallets belonging to the different issues. Smart Contracts offer a better way to handle this.
What Are Smart Contracts?
Smart Contracts are pieces of code that execute on the Blockchain. Think of them as classes in an Object Oriented Programming model. Once deployed, you can invoke methods on the Contract from any wallet on the Blockchain. The method, when called, gets not only the parameters that you explicitly sent as part of the method call but also the caller’s wallet address and any value (Ether or its smaller fraction Wei) that the contract was sent. The contract can then keep part or all of the value sent in return for executing the code.
Note that the above contract is a “hello world” contract. Ours was a bit more complicated.
Tools and Setup
Similar to the last time, we used the TestRPC program, now rebranded as Ganache, or specifically it’s CLI version, the Ganache-CLI) to develop and test the application. The app itself was pretty simple: It allowed users to rent an asset in our store by sending a particular amount of ether to our smart contract.
In addition to Ganache, we also used the Truffle framework to build the application as well as MetaMask to run the transaction.
The Smart Contract itself was written in Solidity. Even though there are may editor plugins you can add to your favorite editor, I found using the the cloud hosted Remix IDE the best to get started. It’s already configured with linters and debug tools that make developing your contract much simpler.
The Truffle framework can be thought of as an equivalent to Ruby on Rails, just for Ethereum projects. When you start a new project, it creates a project structure with folders for contracts, migrations, tests and a truffle.js configuration file that lets you deploy your code to various dev/test/prod environments (think of truffle.js as a config.yml from Rails)
Once you place your contract in the contracts/ folder, running truffle compile compiles the Solidity code to the bytecode that can be deployed to the Ethereum Blockchain. Running truffle migrate deploys the contract to the chain. Truffle also provides a handy REPL console that you can use to interact with your contract from the command line. Very convenient to find your contract’s deployed address for example by calling
Running the Application
Our client application ran a small React app that would send a little bit of Ether to a deployed smart contract. If the transaction was successful, we’d send the successful Transaction ID to a middleware server that would validate it and authorize the user to a piece of content
The client code communicates with the Blockchain via the Web3 library injected into the browser by MetaMask. The code to use the contract looks something like this:
That’s pretty much it.
We had issues with MetaMask and Ganache seeing each other’s wallets. This might be by design but to get anything done, I had to write another small server script that funded Metamask accounts with Ether from Ganache accounts
All transactions are done in Wei (10^-18 Ether). During development we’d send small values like 10 Wei across and were perplexed that Metamask or other wallets didn’t change their displays till we realized that the number was too small for MetaMask to show in its UI
We assumed a successful transaction on the contract assumed successful payment. We did not wait on the transaction to be mined to declare payment success. We should be waiting on that using the Web3’s filter API but we just ran out of time on the project.
To connect with a contract using Web3, you need to point it to its address and the JSON interface of the contract. Truffle’s console has a `toJSON()` method but that is not the JSON you are looking for. The right JSON file is located in the `/build/contracts/` directory. Once you have that JSON file you can create the Contract object in Web3 by using
var myContract = new web3.eth.Contract(SimpleStorageABI, address)
We found an interesting project called OpenZeppelin that seems to be a public repo/tool for often used Contracts. I need to try that next.
This was a fun 5 day project that demystified a lot of things around Smart Contracts that I wasn’t sure about. And as always, it was great to work with a bunch of smart engineers I usually don’t get the opportunity to work with otherwise 🙂
If you know me, there is a good chance that you know how 👍 I am about Blockchain and Decentralized apps. I have given a few talks on it but till recently these were mostly either focused on Bitcoin or on the academics of Blockchain technology. At a recent Comcast Labweek, I was finally able to get my hands dirty with building a Blockchain based decentralized app (DApp) on Ethereum.
Labweek is a week long hackathon at the T&P org in Comcast that lets people work on pretty much anything. I was pretty fortunate to end up working with a bunch of really smart engineers here. The problem we decided to look into was the challenge of funding open source projects. I am pretty passionate about open source technologies but I have seen great ideas die on Github because supporting a project when you aren’t getting paid for it is really hard. Our solution to this problem was a bounty system for Github issues that we called CodeCoin.
The way CodeCoin worked was as follows:
A project using CodeCoin would sign up on our site and download some Git hooks.
When anyone creates an issue on Github, we create an Ethereum wallet for the issue and post the wallet address back to Github so its the first comment on the issue.
We use a Chrome extension that adds a “Fund this issue” button on the Github page that starts the Ethereum payment flow.
Ether is held in the wallet till the issue is marked resolved and merged into master. At this time another Git hook fires that tells our server to release the Ether into the wallets of all the developers who worked on the issue.
Note that while we held the Ether on our side in wallets, the right way to do this would have been to use a Smart Contract. We started down that route but since most of the code was done in like 2 days (while juggling other real projects), wallets seemed like the easier route.
Releasing money into developer accounts was also a hack. Since developers don’t sign up to Github with any digital wallet address, we need the wallet addresses as part of the final commit message. This could be done with a lookup on a service like Keybase.IO maybe and with more time we would have tried integrating it to our prototype. In fact it was the next week that I heard about their own Git offering. I haven’t read enough about that yet though.
For local development, we used the TestRPC library to run a Ethereum chain simulation on our machine.
Web3js was injected into the browser by the MetaMask extension. There were some challenges getting Metamask to talk to the TestRPC. Basically, you had to make sure that you initialized MetaMask with the same seed words as you used for your account on TestRPC (which makes sense) but there isn’t a way afaik to change that information in MetaMask. Early on, we were restarting TestRPC without configuring the initial accounts so we’d have to reinstall MetaMask to configure it with the new account. Chalk that to our own unfamiliarity with the whole setup.
We did try to use Solidity to run a smart contract on TestRPC which worked for the demo apps, but canned that effort in the last moment as we were running out of time
All in all, it was a fun couple of days of intense coding and I feel I learnt a lot. Most of all I enjoyed working with a group of really smart peers, most of whom I didn’t know before the project at all. Hopefully we get to do more of that in the future 🙂
Every couple of months I meet a few friends over lunch to geek out over the latest in the world of Bitcoin, Blockchains and Crypocurrencies in general. Just so that I dont forget them, here is a list of things we discussed today 🙂