Ephemeral Anchors are the concept where we can have a key-less output type that is allowed to have dusty values, provided they are atomically spent in the mempool.
Implementation and BIP text here for more background: policy: Ephemeral anchors by instagibbs · Pull Request #26403 · bitcoin/bitcoin · GitHub
One large drawback of this approach is that it relies on Bitcoin’s legacy script. This means that the transaction spending the anchor is txid-malleable by miners. This is due to legacy script’s lack of CLEANSTACK consensus rules. This means composition with other protocols like splicing can be problematic, where the pre-signed transaction chains can be broken unless a new signature type like ANYPREVOUT or similar is used.
At first blush, something like wsh(OP_TRUE) neatly solves this, at the expense of 33 more output vbytes, and a witness script of “OP_TRUE” being revealed. This seems pretty costly, and theoretically could also already be used in mainnet, both for output creation and redemption.
Instead, why not just utilize bip141’s softfork for witness programs, and use an otherwise undefined witness program? For example, replace the script “OP_TRUE” with “OP_TRUE 0xffff” which triggers the scriptSig rule in bip141:
The scriptSig must be exactly empty or validation fails.
But is otherwise undefined, allowing an empty witness to spend. This is 3 additional vbytes over the original proposal total, and is implemented here:
https://github.com/instagibbs/bitcoin/commits/ephemeral-anchors-segwit
Note that these (non-dust)outputs are already standard to create, but not to spend, which is the additional relay relaxation in the commit.
The branch will actually get smaller since I’m not messing with OP_TRUE outputs anymore which tests in master love to use.