Meditations on Block Builders

The initial Flashbots reference builder version started with a straightforward implementation. The implementation was a fork of geth and would behave the same way; the mempool was a ‘standard’ implementation. Additional RPC endpoints were added to allow private order flow. [Read More]

Post EIP-1559 Ethereum Transaction Basics

There always seems to be much confusion about transactions. The introduction of EIP 1559 has somewhat confounded this; even among people in this space, you still often hear people getting things muddled. It’s been almost three years, and people are still confused! This is my attempt to clarify the interplay between gas, fees, and account balance and what it means for transaction validity and likelihood of inclusion. [Read More]

Why aren't transactions landing on chain?

At MetaMask, we care about transactions getting on-chain. Historically, this hasn’t always been the case. The first version of MetaMask just signed transactions; you had to provide your own RPC provider. Once the transaction was submitted, it was up to the RPC to get it on-chain. We see RPC providers offering things like reinforced transactions from Alchamy and transaction assurance from Infura. And in MetaMask, transactions are resent to the RPC provider if the transaction isn’t getting included. The problem is that most users don’t care about how any of this stuff works. What they do care about is why their transaction isn’t getting on-chain. So we try and abstract some of that complexity away for them with things like gas parameter recommendations and basic simulations. But at the end of the day, if a transaction doesn’t land, it’s perceived as a problem with MetaMask. [Read More]

Measuring response times with Grafana, Loki and structured logs

I hit a problem calculating requests per minute from a log message. I couldn’t find any information on how to do this; most people favour open telemetry. I find a lot of the time; this is overkill for what is required. Especially given the amount you have to litter your codebase with open telemetry spans and traces. [Read More]