RSSAmplifier

Blog

Antony Denyer

This website is a virtual proof that I'm awesome

antonydenyer.co.ukRSS feed ↗20 posts

Latest posts

Losing My Religion

One of the things I’ve struggled with recently is getting back into a state of flow. For a while I assumed it was simply because I write less code than I used to. Like many engineering managers, my days are now split between product, people, planning, firefighting, and the occasional...

PropAMMs Revisited: Curves, Latency and the Strange Resilience of Passive Liquidity

In my previous post on PropAMMs, I framed them as the next step in Ethereum’s trading-primitive evolution: a move from passive liquidity curves to programmable market makers, where pricing intelligence sits closer to execution. After listening to a deeper discussion between aPriori and Haikane, a couple more things clicked. PropAMMs...

The Real Execution Layer Is Synchronous Composability

Ethereum has spent the better part of a decade optimizing for settlement infrastructure. Nearly every major breakthrough of the last few years has focused on increasing throughput, reducing transaction costs, improving verification systems, or modularizing the blockchain stack into increasingly specialized components. Rollups, shared sequencers, alternative virtual machines, modular execution...

PropAMMs: The Rise of Programmable Market Makers

This post is a lightly adapted cross-post of research and design work originally written while building baibai.cx at spire.dev. Some sections have been expanded, simplified or reframed for a broader audience, but much of the historical background and underlying thesis remains the same. If you want the original version with...

ETH needs a supply cap at 128 million

Ethereum’s monetary policy works well today, but it is still harder to explain than it needs to be. We currently rely on: variable PoS issuance fee burn via EIP-1559 and a dynamic equilibrium between the two This is elegant, but not simple. Proposal: introduce a hard cap at 128,000,000 ETH....

Gas Limit vs Gas Used

It feels like you should be able to deterministically run a transaction locally, count the gas, set that as the gasLimit, and end up with 100% gas utilisation every time. Unfortunately, that’s not how Ethereum works in practice. The gasLimit is a safety cap. It limits how much work your...

The Cost of Code Ownership

In my previous post, I argued that GenAI shifts the centre of gravity of testing. If large language models can quickly generate plausible implementations, then tests that merely restate the implementation in another form lose much of their value. The real question becomes: what are we actually specifying, and at...

TDD in the Age of GenAI: Behaviour Moves, It Doesn’t Disappear

There’s a growing assumption in software engineering circles that GenAI will make traditional testing practices, and perhaps development, less relevant. Test-Driven Development has been on the chopping block for a while now. If a model can generate working code, scaffolding, and tests on demand, why insist on writing tests first?...

Post-Fusaka Blob Pricing: Understanding the New Rules

Fusaka introduced the first meaningful evolution of Ethereum’s blob fee mechanics since Dencun. On the surface, nothing dramatic changed. Blobs still have their own fee market, with a base fee that adjusts based on supply and demand. But Fusaka added a second pricing constraint that alters how the effective blob...

Centralisation, Sequencers, and the Ethereum Mindset

Centralised solutions, and the belief in them, come from a specific type of mindset. It’s the mindset that says: efficiency first, trust later. This mindset is creeping into Ethereum, and nowhere is it more visible than in the world of Layer 2 rollups and their sequencers. The Problem with Centralised...

EIP-7702 and Inversion of Control for Ethereum Accounts

In software development, inversion of control (IoC) has been one of the most transformative architectural shifts for building loosely coupled, extensible software solutions. Instead of developers controlling the full execution flow, the framework orchestrates, and the developer plugs in local behaviour. This pattern shows up in dependency injection, event-driven programming,...

AI Slop and Brandolini's Law

Brandolini’s Law “the amount of energy needed to refute bullshit is an order of magnitude larger than to produce it” is about to hit our codebases with a vengeance. As the use of AI code generators becomes more widespread, the amount of AI-generated code will increase. On the surface, the...

I Hope We Don’t Know What We’re Doing: Ethereum at Ten

In the early days of Ethereum, everything was up for grabs. The idea that a global computer could run trustless applications in an adversarial environment was so radical that no one pretended to have it figured out. The very act of deploying a smart contract felt like something that could...

Keep It in Code: Rethinking What We Externalise

Most modern software projects are built with the assumption that configuration belongs outside of the code. If you’ve read The Twelve-Factor App, you’ve likely seen the principle stated clearly: store config in the environment. That guidance has stood the test of time - but like most well-intentioned principles, it often...

The Walking Skeleton: Breathing Life into Software

I can’t remember when I first learnt about walking skeletons, it was at least a decade ago, and it felt like common knowledge among the people I was working with. Growing Object-Oriented Software, Guided by Tests was the I think the first time I saw it formalised. Since then it...

Rollup Basics: Why Layer 2 Depends on Layer 1

Thanks to @miszke_eth for reviewing Over the past few years, Ethereum has adopted rollups as its primary path to scalability. It’s easy to get lost in all the jargon from zk-rollups, optimistic rollups, blobs, sequencers, based rollups, preconfs etc etc. A straightforward idea holds true. A rollup’s real state only...

MEV, Incentives, and the Engineering Tradeoffs of Order Flow Auction Design

TL;DR: Conditional auctions keep the auctioneer in control and reduce bidder risk at the cost of more complex spam checks. In contrast, unconditional auctions are simpler but expose users to the risk of execution failure, increased latency and lack of finality. Infinite designs, infinite tradeoffs. In today’s Ethereum ecosystem, most...

Understanding blob transactions (pre fusaka)

Note that blob pricing changed post Fusaka details here EIP-4844 introduced “blob transactions” almost over a year ago, specifically aimed at significantly enhancing scalability and efficiency for layer-2 solutions like rollups. Understanding how these transactions are priced is essential for developers, users, and anyone interacting with Ethereum’s economic system. Pricing...

Reaching Interplanetary Consensus: How DAOs Could Power the Age of Space Exploration

The challenge of space exploration isn’t just rocket science. It’s also a governance problem. And while this might sound like science fiction, it’s also a fun thought experiment about how decentralised governance could scale—literally—to the stars. Imagine a future where a consortium of investors builds a spacecraft to mine asteroids....

Asynchronous Trust in Ethereum

In traditional systems, trust often requires synchronous real-time interactions, centralized authorities, or constant availability. Ethereum, however, introduced a new model: asynchronous trust. Asynchronous trust means participants can interact with smart contracts and protocols without needing to be online at the same time or trust each other directly. Instead, they rely...