Most "web3" wallets still depend on 3 companies for RPCs and 1 company for the block explorer
Spent the last few months thinking about how thin the "decentralized" layer of normal web3 UX actually is. The chain is decentralized. The execution is decentralized. But the way almost every user sees the chain — block explorers, hosted RPC providers, some dashboard — is concentrated in maybe five vendors total. If one of them rotates an API key tier or IP-bans you, a meaningful chunk of "web3 tooling" stops working for you specifically, and nobody talks about it because it's the kind of dependency that's invisible until it breaks.
The part I keep coming back to is the public RPC commons. Endpoints like publicnode, mempool dot space, blockstream, and Solana's mainnet-beta are open and unauthenticated, and they're genuinely good enough for read-side workflows — balances, tx lookups, gas estimation, mempool fees. But they're also a small handful of providers, and Solana mainnet-beta already throttles anonymous traffic hard enough that you have to maintain a fallback chain just to stay functional. I don't know whether that commons is holding up or quietly degrading, and I'd be curious whether anyone on here has data either way.
The other thing that bothers me is the dominant tx decoder being a webapp owned by one company. Calldata decoding for Uniswap V2/V3/Universal Router, Governor, Timelock, Safe, Gnosis MultiSend, ERC-20 — it's a pure function of the ABI and the calldata bytes. It doesn't need a server. There's no architectural reason this has to live behind a domain you don't control, and yet that's where almost everyone reads their own transactions. I'm honestly not sure whether the moat there is real indexing infrastructure or just inertia from being the default link in every wallet UI.
To pressure-test whether keyless local-first tooling is actually viable I built it, which is the only way I know how to argue with myself honestly. The result is an MIT-licensed CLI called glnc (glnc .dev) that does balance lookups, transaction decoding, multi-chain gas, ENS resolution, Aave health factor, Uniswap V3 LP enumeration, and CSV history export across nine chains, using only public RPCs and the Uniswap default token list. No account, no API key, no telemetry, no hosted backend. Token discovery runs locally against a cached token list. Decoding runs locally against a selector registry. Prices come from CoinGecko's free tier with an in-memory cache so anonymous traffic doesn't get rate-limited out of existence.
What I actually learned from doing it is more interesting to me than the tool itself. Public RPCs turned out to be more reliable than I expected for read paths; the worst-case in practice is Solana throttling you and the fallback kicking in. Token discovery without an indexer is genuinely expensive to do correctly, and the Uniswap default list of around 1,400 tokens per chain is roughly the ceiling for what a keyless tool can credibly claim — full discovery requires an archive node you can't run on a laptop, which is a hard limit, not an engineering gap. Linea and zkSync have a real spoofing problem where ERC-20 metadata alone isn't enough to price tokens safely without an independent canonical-address feed, and I ended up fail-closing prices on those chains until tokens are independently verified, which is uncomfortable UX but the only answer I could defend. And the "no API key" promise breaks the moment you need historical data; one major block explorer is still the only viable cross-chain history source, and that single vendor is a real centralization point that no amount of public RPC infrastructure fixes.
That last one is what I'd most like to discuss. Is "keyless, local-first, public-RPC-only" a workable long-term position for web3 read tooling, or does the indexer and history problem make it inevitable that any serious app re-centralizes on a hosted RPC plus a hosted explorer in the end? Where's the right boundary between sovereign tooling and "actually shipping software that works"?