Skip to content

Commit faa298a

Browse files
committed
rename to ephemeral dust, move implementation sections around
1 parent 9e463fe commit faa298a

File tree

2 files changed

+55
-40
lines changed

2 files changed

+55
-40
lines changed

README.mediawiki

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1225,6 +1225,13 @@ Those proposing changes should consider that ultimately consent may rest with th
12251225
| Gloria Zhao
12261226
| Informational
12271227
| Draft
1228+
|-
1229+
| [[bip-0432.mediawiki|432]]
1230+
| Applications
1231+
| Ephemeral Dust
1232+
| Gregory Sanders
1233+
| Informational
1234+
| Draft
12281235
|}
12291236

12301237
<!-- IMPORTANT! See the instructions at the top of this page, do NOT JUST add BIPs here! -->

bip-ephemeralanchors.mediawiki renamed to bip-0432.mediawiki

Lines changed: 48 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
<pre>
2-
BIP: ?
2+
BIP: 432
33
Layer: Application
4-
Title: Ephemeral Anchors
4+
Title: Ephemeral Dust
55
Author: Gregory Sanders <gsanders87@gmail.com>
6-
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-?
6+
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-432
77
Status: Draft
88
Type: Informational
99
Created: 2023-01-11
1010
License: CC0 1.0 Universal
11-
Requires: 431
1211
</pre>
1312

1413
==Introduction==
1514

1615
===Abstract===
1716

18-
Ephemeral Anchors are a mempool policy carve-out that allows dust UTXOs,
17+
Ephemeral dust is a mempool policy carve-out that allows dust UTXOs,
1918
even 0-value, to be created, provided they are also spent in the mempool.
2019

2120
===Motivation===
@@ -42,83 +41,92 @@ spending the anchor is responsible for providing the funds.
4241
In this and similar abstractions it would be cleaner if the anchor itself could be 0-value
4342
instead of requiring anchors to exceed dust amounts.
4443

45-
===Typical Configurations===
46-
47-
For anchors using TRUC transactions, it's expected that they would take two output script forms:
48-
49-
1. Keyed anchor: A key, possibly shared by multiple privileged parties, is used to encumber the anchor. This could also be `tr()`, `p2wsh()` or any
50-
output type that allows key material.
51-
1. Un-keyed anchor: `P2SH(OP_TRUE)` or `P2WSH(OP_TRUE)`, depending on the user's need for lack of txid malleability. Further policy
52-
extensions could allow output templates such as the output script <code>OP_1 <0x4e73></code> or a bare `OP_TRUE`.
53-
5444
===Example Use Cases===
5545

5646
* Batched payments with segregated fee pools: Batched payments that can be fee bumped without access to customer deposit-related key material
5747
* Simplified watchtowers/accelerators: No requirement to equip watchtowers with privileged key material, and no value to steal by those watchtowers
5848
* Multiparty smart contracts: LN BOLTs can be revamped to remove value-sapping anchors.
5949
* LN-Symmetry: During the contest period, no anchor value can be sourced endogenously.
6050
* [https://bitcoin.stackexchange.com/questions/100537/what-is-spacechain Spacechains]
61-
* Ark transactions
62-
* Timeout Trees
51+
* Ark transactions, for anchors and connector outputs
52+
* Timeout Trees, for anchors and connector outputs
6353
6454
===Related Work===
6555

6656
[https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-January/021334.html SIGHASH_GROUP] style proposals are an alternative method of bringing funds to a transaction without involving CPFP by enacting a softfork. Making these pin-resistant may require follow-on policy work, or [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-May/020458.html more general covenants] to directly stop pins we want to avoid. The drawback of these are the necessity of a softfork.
6757

6858
[https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-September/018168.html Transaction Sponsors] is a softfork proposal to allow transactions to
6959
sponsor transactions with no explicit relationship in the classical UTXO
70-
model. Ephemeral Anchors can be viewed as a type of opt-in transaction sponsors implemented
60+
model. Ephemeral Dust with an un-keyed anchor can be viewed as a type of opt-in transaction sponsors implemented
7161
purely in policy.
7262

73-
Using a 0-value CPFP anchor is not a new idea, see:
63+
Using a 0-value CPFP anchors is not a new idea, see:
7464

7565
* [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-May/015931.html LN-dev discussion on 0-value anchors]
7666
7767
The discussion lacked a solution to the issue of the dust entering into the UTXO set
7868
causing negative externalities.
7969

70+
===Fee Efficiency===
71+
72+
As the common use-case of ephemeral dust will likely be anchors, it bears noting that anchors
73+
has vbyte overhead when directly compared to the endogenous fee cases(e.g., single transaction
74+
RBF), where no additional child transaction is required.
75+
When practical, endogenous fees should be strongly considered.
76+
77+
SIGHASH_GROUP style proposals would also be a moderate improvement on fee efficiencies of
78+
exogenous fees such as anchors, but requires a softfork.
79+
8080
==Definitions==
8181

82-
Ephemeral anchor: An output with dust value which is immediately spent by a child transaction.
82+
Ephemeral dust: An output with dust value which is immediately spent by a child transaction.
8383

84-
Ephemeral anchor transaction: A transaction that has an ephemeral anchor
84+
Ephemeral dust transaction: A transaction that has an ephemeral dust output.
8585

8686
==Specification==
8787

88-
When received by a peer for inclusion to the mempool an ephemeral anchor transaction MUST:
88+
As an exception to the dust rule, a transaction with dust outputs will be considered for acceptance to a node's mempool if:
89+
90+
* It has arrived as part of a package of two or more transactions
91+
* The resulting mempool would not cause dust to be left in the UTXO set if a block template is generated by the node.
92+
93+
Implementations, detailed further below, may place further restrictions for implementation reasons.
94+
95+
These constraints apply only to mempool policy. Blocks are not
96+
invalidated by breaking these policy-only rules as they have no bearing on consensus.
97+
98+
==Reference Implementation==
99+
100+
The [https://github.com/bitcoin/bitcoin/pull/30239 Bitcoin Core implementation] enforces these specific rules:
89101

90102
* Be an otherwise valid [https://github.com/bitcoin/bips/blob/master/bip-0431.mediawiki TRUC] transaction adhering to the corresponding topological constraints
91103
* Be 0-fee
92104
* Have only one dust value output (output values which would normally cause rejection)
93-
* Have its ephemeral anchor spent in the same TRUC cluster
105+
* Have its ephemeral dust spent in the same TRUC cluster
94106
95-
or will be rejected by policy. All other policy checks are left in place.
96-
These constraints apply only to mempool policy. Blocks are not
97-
invalidated by breaking these policy-only rules as they have no bearing on consensus.
107+
or will be rejected by policy.
98108

99-
==Rationale==
109+
TRUC transactions are allowed to be 0-fee, and the topological restrictions ensure
110+
that the parent transaction never ends up in a mining template without the ephemeral
111+
dust being spent.
112+
113+
Future implementations may relax some of these constraints.
100114

101-
To incentivize the mining of the spends of ephemeral anchors we require three things to be true:
115+
==Rationale==
102116

103-
1. The ephemeral anchor transaction should be 0-fee itself
104-
2. The transaction should only have a single child
105-
3. The ephemeral anchor must be spent
117+
This policy is a relaxation to dust policies that most node software enforces.
106118

107-
With these restrictions in place, the only endogenous incentives to mine the ephemeral
108-
anchor transaction is to mine the transaction along with the child transaction
109-
spending the anchor. TRUC transaction restrictions inherently follow the single
110-
child rule, though it's not strictly necessary. Further standards can relax
111-
the TRUC transaction requirement in favor of just the necessary requirements.
119+
If a dust output never ends up unspent in a mining template, then the marginal
120+
exposure of the network to dust is minimized. There are various ways to achieve
121+
this goal, which means precise rules are left to implementations.
122+
The implementation section details how these restrictions are enforced and under
123+
what circumstances for the known implementations to aid in interoperability.
112124

113125
== Backward compatibility ==
114126

115-
Ephemeral anchor spends were previously non-standard, so there are no known conflicts
127+
Ephemeral dust creation was previously non-standard, so there are no known conflicts
116128
with previous usage.
117129

118-
==Implementation==
119-
120-
https://github.com/bitcoin/bitcoin/pull/30239
121-
122130
==Acknowledgements==
123131

124132
Thank you to all those listed for foundational work

0 commit comments

Comments
 (0)