You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Ark transactions, for anchors and connector outputs
52
+
* Timeout Trees, for anchors and connector outputs
63
53
64
54
===Related Work===
65
55
66
56
[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.
67
57
68
58
[https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-September/018168.html Transaction Sponsors] is a softfork proposal to allow transactions to
69
59
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
71
61
purely in policy.
72
62
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:
74
64
75
65
* [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-May/015931.html LN-dev discussion on 0-value anchors]
76
66
77
67
The discussion lacked a solution to the issue of the dust entering into the UTXO set
78
68
causing negative externalities.
79
69
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
+
80
80
==Definitions==
81
81
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.
83
83
84
-
Ephemeral anchor transaction: A transaction that has an ephemeral anchor
84
+
Ephemeral dust transaction: A transaction that has an ephemeral dust output.
85
85
86
86
==Specification==
87
87
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:
89
101
90
102
* Be an otherwise valid [https://github.com/bitcoin/bips/blob/master/bip-0431.mediawiki TRUC] transaction adhering to the corresponding topological constraints
91
103
* Be 0-fee
92
104
* 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
94
106
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.
98
108
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.
100
114
101
-
To incentivize the mining of the spends of ephemeral anchors we require three things to be true:
115
+
==Rationale==
102
116
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.
106
118
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.
112
124
113
125
== Backward compatibility ==
114
126
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
116
128
with previous usage.
117
129
118
-
==Implementation==
119
-
120
-
https://github.com/bitcoin/bitcoin/pull/30239
121
-
122
130
==Acknowledgements==
123
131
124
132
Thank you to all those listed for foundational work
0 commit comments