Fake It Till You Make It: Blockchain Apps Aren't Actually Decentralized
I've been deep in the crypto rabbit hole... between the massive IPOs, projects raising quarter-billion rounds, and an idea that's been keeping me up at night.
If you’ve never played around with crypto…. a lot of these terms will confuse you. I’ll do my best to provide links if you’re interested in diving in to any of the things I mention.
Lately I have been playing around with crypto again. Back in 2015 I started mining ethereum and gave up too early. I never got into building smart contracts and actual decentralized apps, but I may be making a small one soon, just to learn.
As I was catching up on many different things, I started to realize just how centralized all the big “DeFi” apps really are. I’m shocked there isn’t more being done here to make some of them truly on-chain completely, or at least more agnostic in letting users control off chain actions affecting these applications.
It’s just unfortunate many users think what they’re using is either untrackable, or fully decentralized.
Uniswap
Let’s start with uniswap.
It’s a great idea, a decentralized crypto exchange. The problem starts immediately though.
There has to be some way to know the current exchange rates offered by the platform and also other exchanges.
When you load the site, it makes graphql requests to their own *centralized* server in order to get information.
You also see many calls that track your every move:
Here’s one sending all of my device info with every action taking place.
Feels a lot like a normal website to me. And an invasive one at that…
At least they are hosting it on IPFS, which is a distributed website hosting spec. It’s acutally really neat too. The problem I see though is its oracle outreach from the interface for pricing.
I haven’t had enough time to config if their interface will still allow smart contract execution if one of their oracle systems is down.
Let’s take a look at another one!
Polymarket
Alright, neat. Inspecting the page, I see direct calls to the blockchain. Decentralized right?
Well… sort of. These calls are sent to alchemy, a blockchain services provider. What happens if they do a deployment and mess up their node, suddenly polymarket is down (most likely anyway)
I was wondering, why don’t these services attempt to direct connect to various validators?
P.S. I am not an expert AT ALL in this space, just someone interested in trying to make a fully, truly, decentralized app soon, and finding a lot of issues with current products.
Granted, they may not market themselves as fully decentralized, but I’m sure that’s how most people perceive them.
So I asked Claude, can’t I direct connect to a validator? Not always.
It makes sense, most don’t want to run the rpc endpoints, because it will use a lot more resources, and these validators already require a massive amount of compute.
There are just so many points of failure, but for something like polymarket, you must have off chain systems that confirm what the result of the different markets are.
This puts all the trust in a platform that has already had legal battles in the past. I’d be worried about betting on something many months away.
True Decentralization
Let’s start with just polymarket. It could be better if they offered a download link of their frontend application…. Oh wait, they’re using server side nextjs…. so they can’t. IPFS is perfect for client side websites that connect to the blockchain, because IPFS can only handle static files.
Validator Choices
I would expect these types of apps to have a settings toggle that lets you put in a different validator endpoint. If one is down, you can swap, this would be a great option to have. Otherwise you’re connecting to a single point that may proxy behind the scenes, or it could have an outage at any time with no way to use the application.
If they don’t want to go that far, at least an internal list of validators to loop through if there was a connection problem.
I’d rather be able to do this, vs having to store every smart contract address and know the exact arguments to call in case I need to withdraw or perform other actions during a site issue.
Downloadable
If their domain is seized, you’re already pretty screwed, unless you have saved network logs and know what rpc calls to make to see anything on the system.
This is step 1 of decentralizing these apps, at a bare minimum, I believe they should be html and js frontends, that are downloadable and run outside of their company’s domains.
AAVE, and Uniswap are good at this, although as I mentioned prior, still concerning how many 3rd party api endpoints are called from these frontends. Leaving me to wonder if they will work if certain things break.
Open Source Consensus
Imagine Polymarket showing who the market validator is. In this case, it’s always polymarket. Let the community pay in crypto to be listed as a validator, track if they’re grading outcomes correctly, and let members decide who gets to validate their bets.
This has a lot of possible problems, but ultimately you need to trust someone. I’m suggesting to let users choose who to trust and make it uncontrollable by a single entity.
Failsafes
If I chose to let polymarket grade my bet, and pick the outcome after the event happened, and polymarket gets shutdown. There should be a smart contract I can execute that will refund me after the end date of the market. This would provide relief if the platform is shut down.
When I use something on a blockchain, I want to know if everything goes bad (except for actual nodes all being taken offline) I want to know what I am interacting with is still safe.
Wallet functionality
Wallets need to be able to ingest smart contract calls. I should be able to add th contract above (refunding after market issues), to my wallet, letting me interact with contracts in case the domains are no longer available, or I forget about them later.
I shouldn’t have to review the code myself.
No tracking
Stop tracking usage, and build in your economics through transaction fees on the platform. Build everything you can into your smart contract, so you don’t need a graphql endpoint to do half the work…
Wrap up
Hope you enjoyed these ramblings, I believe decentralized apps can be made much better, but the truth is, these companies don’t want them to be. A lot of them are making millions a month under a false sense of decentralization.
Building apps fully on chain is incredibly hard, most aren’t going that far because they want to keep more control to themselves, giving us many single points of failure in the end.
I’m not sure how useful the technology will ultimately be many years from now. Currencies may take off more than the applications.
Only time will tell…