← index

A philosophical take on "expiry"

An archive of delvingbitcoin.org · view original topic →

· josh · #1 ·

TLDR: Expiry is a contradictory state of being. It belongs to no one, for no one can be in a state of expiry. Expiry is defined in terms of a state of not-being, so it belongs outside being, and therefore outside “state.”

Motivation

This post is motivated by (absolute) input-triggered expiry, my solution to the free relay problem in “expiring” transactions. The basic idea of the proposal is to use nSequence and nLockTime to condition the transaction on the input having N confirmations by time t. This has one of three effects:

Notice that I avoided the use of the word “expiry” in the description, even though it enables a similar capability. I believe this suggests that the proposal is more akin to a “state-contingent input” proposal, rather than an “expiry” proposal. This warrants a dedicated post to explain why.

State requires Being

The protocol this forum is dedicated to is built on history, state, and being. History is the collection of prior states, which remain that way. Being is the act of being in the present, what I call the state-of-now.

If we want to describe the actors in the protocol, we need to start from a place of being and stay exclusively there. The Miner is a being. The Relayer is a being. The Block Explorer is a being. And of course, the User is a being.

Other beings exist in the protocol, but describing them all is beyond the scope of this post. The point is that we must describe the protocol in terms of being, and states of being.

Key idea: We must describe the protocol in terms of being, and states of being.

Expiry is a State of Not-Being

The problem with typical “expiry” proposals is that they require the transaction to explicitly claim a state of not-being. Presently, every state the transaction claims is a state of being:

With a traditional expiry proposal, like Peter Todd’s OP_EXPIRE, we introduce a claim to a state we cannot physically see:

Comparably, with expiry, we define ourselves, or in this case our claim, in terms of something we are not:

Reframing our prior statements in terms of “We” for sake of comparison:

As you can see, describing a transaction as something we cannot see is a fundamental violation of the rule of being. That is the problem with traditional “expiry.”

By comparison, with (absolute) input-triggered expiry, or what I will now call a state-contingent input, we have a clean claim to what we see:

Key idea:

Why should I care?

The traditional rationale for avoiding “expiry” is the “free relay” problem, defined as the possibility that nodes relay transaction that subsequently self-invalidate, never to be confirmed. If an attacker has a reasonable expectation of free relay, the attacker could spam the network, at little expected cost.

This post aims to provide a philosophical basis for the same conclusion.

When we think about the types of capabilities that are “safe” to enable, we must always think in terms of the state we can see:

If the answer is universally yes, then the state may be a part of history.

History, we say, has eyes. When we speak of History, we speak in reverse chronology, seeing what is written in the final version. So when we write history, we write what we think is part of history, in that final state.

Our goal is to write history that we know we can all see and that we also know will remain part of History. That is how we build consensus.

Therefore, it is always more desirable to reward miners for writing on top of recent history we know, rather than on top of history we lack (all else being equal).

In this context, there are three philosophical problems with “expiry”:

The problems of “expiry” flow from there.