<p>In the Bitcoin Core PR review club <a href="https://bitcoincore.reviews/26403" rel="nofollow noreferrer">notes</a>:</p>
<blockquote>
<p>Ephemeral anchors are a special type of output that are watermarked (by policy only) via a short static output script. These, along with a few policy ground rules, enable a new, more general “CPFP Carveout” which can sidestep package limit pinning. It also allows relaxation of output script requirements, increasing smart contract composability.</p>
</blockquote>
<p>In the <a href="https://github.com/instagibbs/bips/blob/ephemeral_anchor/bip-ephemeralanchors.mediawiki" rel="nofollow noreferrer">draft BIP</a>:</p>
<blockquote>
<p>Ephemeral Anchors are a mempool policy carve-out that allows any value utxos, even 0-value dust, to be created, provided it is also consumed within the same mempool package. This ephemeral anchor is a &quot;mutex lock&quot; for the transaction, allowing for robust fee bumping by wallets, not requiring any special key material to do so, and avoiding all known transaction pinning vectors.</p>
</blockquote>
<p>Greg Sanders elaborated on the Stephan Livera <a href="https://youtu.be/JiEKYbXZ4zQ?t=2012" rel="nofollow noreferrer">podcast</a>:</p>
<blockquote>
<p>It is this idea that you can attach an output that doesn't require any signatures or anything. In this case it could be a bare OP_TRUE output that can be zero value, that is essentially a hook, a lock on the transaction, where to get this transaction in the mempool you have to spend that output. Let's say you have two outputs and this anchor then a counterparty can only spend the other outputs if they also spend this special output. Because you have to spend it it will be spent. In this V3 regime there is only one child so they must be spent together. That makes it a lock on the parent transaction that says you have to spend this. Anyone can double spend these child spends. This unlocks the package limit pinning scenario where in the original commitment transaction it has two anchors. You can't get pinned because the outputs have to spent together along with this ephemeral anchor.</p>
<p>If we want to do splicing or make a channel all of the smart contract scripts have this thing that is a one block relative timelock, a one block CHECKSEQUENCEVERIFY. All of these outputs have them except for the anchors and this is because we are trying to stop package limit pinning. Ironically this sometimes can be incompatible with Miniscript and it also means you can't do smart things like &quot;I want to splice into a new channel funding output but also not pin the other person&quot;.</p>
<p>You are adding on these extra adhoc measures to stop pinning but that breaks composability with other smart contracts. You'd love to splice directly to your Coinbase account or whatever but you might have to prove to your counterparty that I can't pin you in the package limit sense. But how do you prove that? It is Coinbase, it is not even your address. Maybe they have committed to a Taproot script, we don't know what that is. It breaks composability when you have to introspect all the outputs and look at them and say &quot;Does it have a timelock on it?&quot; That breaks a lot of things.</p>
</blockquote>

CC BY-SA 4.0
2023-03-29T12:23:56.990Z
2023-03-29T13:00:05.347Z
2023-03-29T13:00:05.347Z
Michael Folkson
<p>What is an ephemeral anchor and what problem(s) would their introduction address? What is their relation to <a href="https://bitcoinops.org/en/topics/anchor-outputs/" rel="nofollow noreferrer">anchor outputs</a> in Lightning? Are ephemeral anchors a prerequisite for eltoo?</p>
<p>V3 and package RBF are discussed <a href="https://bitcoin.stackexchange.com/questions/117315/what-and-where-are-the-current-status-of-the-bip-125-replacement-the-v3-policy">here</a>.</p>
<p>Mailing list post introducing ephemeral anchors: <a href="https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-October/021036.html" rel="nofollow noreferrer">https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-October/021036.html</a></p>
<p>Ephemeral anchors draft BIP: <a href="https://github.com/instagibbs/bips/blob/ephemeral_anchor/bip-ephemeralanchors.mediawiki" rel="nofollow noreferrer">https://github.com/instagibbs/bips/blob/ephemeral_anchor/bip-ephemeralanchors.mediawiki</a></p>
<p>Bitcoin Optech covering ephemeral anchors: <a href="https://bitcoinops.org/en/newsletters/2022/12/07/" rel="nofollow noreferrer">https://bitcoinops.org/en/newsletters/2022/12/07/</a></p>
<p>Ephemeral anchors discussed in an eltoo BOLT draft: <a href="https://github.com/instagibbs/bolts/blob/eltoo_draft/XX-eltoo-transactions.md#ephemeral-anchor-output" rel="nofollow noreferrer">https://github.com/instagibbs/bolts/blob/eltoo_draft/XX-eltoo-transactions.md#ephemeral-anchor-output</a></p>
<p>There will be a Bitcoin Core PR review club <a href="https://bitcoincore.reviews/26403" rel="nofollow noreferrer">session</a> on this on March 29th.</p>

<p2p><replace-by-fee><eltoo><package-relay><pinning-attack>
What is an ephemeral anchor and what problems do they address?
Michael Folkson
# What is an ephemeral anchor and what problems do they address?

(Asked by: username_0 on 2023-02-23)

What is an ephemeral anchor and what problem(s) would their introduction address? What is their relation to [anchor outputs](https://bitcoinops.org/en/topics/anchor-outputs/) in Lightning? Are ephemeral anchors a prerequisite for eltoo?

V3 and package RBF are discussed [here](https://bitcoin.stackexchange.com/questions/117315/what-and-where-are-the-current-status-of-the-bip-125-replacement-the-v3-policy).

Mailing list post introducing ephemeral anchors: <https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-October/021036.html>

Ephemeral anchors draft BIP: <https://github.com/instagibbs/bips/blob/ephemeral_anchor/bip-ephemeralanchors.mediawiki>

Bitcoin Optech covering ephemeral anchors: <https://bitcoinops.org/en/newsletters/2022/12/07/>

Ephemeral anchors discussed in an eltoo BOLT draft: <https://github.com/instagibbs/bolts/blob/eltoo_draft/XX-eltoo-transactions.md#ephemeral-anchor-output>

There will be a Bitcoin Core PR review club [session](https://bitcoincore.reviews/26403) on this on March 29th.

**Tags:** p2p, replace-by-fee, eltoo, package-relay, pinning-attack


---

## 1 answers

### Answer by username_0 on 2023-03-29. Score: 0 | Accepted answer

In the Bitcoin Core PR review club [notes](https://bitcoincore.reviews/26403):

> Ephemeral anchors are a special type of output that are watermarked (by policy only) via a short static output script. These, along with a few policy ground rules, enable a new, more general “CPFP Carveout” which can sidestep package limit pinning. It also allows relaxation of output script requirements, increasing smart contract composability.

In the [draft BIP](https://github.com/instagibbs/bips/blob/ephemeral_anchor/bip-ephemeralanchors.mediawiki):

> Ephemeral Anchors are a mempool policy carve-out that allows any value utxos, even 0-value dust, to be created, provided it is also consumed within the same mempool package. This ephemeral anchor is a "mutex lock" for the transaction, allowing for robust fee bumping by wallets, not requiring any special key material to do so, and avoiding all known transaction pinning vectors.

Greg Sanders elaborated on the Stephan Livera [podcast](https://youtu.be/JiEKYbXZ4zQ?t=2012):

> It is this idea that you can attach an output that doesn't require any signatures or anything. In this case it could be a bare OP\_TRUE output that can be zero value, that is essentially a hook, a lock on the transaction, where to get this transaction in the mempool you have to spend that output. Let's say you have two outputs and this anchor then a counterparty can only spend the other outputs if they also spend this special output. Because you have to spend it it will be spent. In this V3 regime there is only one child so they must be spent together. That makes it a lock on the parent transaction that says you have to spend this. Anyone can double spend these child spends. This unlocks the package limit pinning scenario where in the original commitment transaction it has two anchors. You can't get pinned because the outputs have to spent together along with this ephemeral anchor.
>
> If we want to do splicing or make a channel all of the smart contract scripts have this thing that is a one block relative timelock, a one block CHECKSEQUENCEVERIFY. All of these outputs have them except for the anchors and this is because we are trying to stop package limit pinning. Ironically this sometimes can be incompatible with Miniscript and it also means you can't do smart things like "I want to splice into a new channel funding output but also not pin the other person".
>
> You are adding on these extra adhoc measures to stop pinning but that breaks composability with other smart contracts. You'd love to splice directly to your Coinbase account or whatever but you might have to prove to your counterparty that I can't pin you in the package limit sense. But how do you prove that? It is Coinbase, it is not even your address. Maybe they have committed to a Taproot script, we don't know what that is. It breaks composability when you have to introspect all the outputs and look at them and say "Does it have a timelock on it?" That breaks a lot of things.


---

