figure out what precisely to do in a reorg when ephemeral transactions are trying to enter the mempool(and write a test)
restrict ephemeral anchor value to 0 (future relaxation possible with more work/motivation)
rebased on top of master, add in trim ephemeral anchor tx functionality when they are at 0-fee package feerate
[mempool] evict everything paying 0 fees in TrimToSize()
At this point it's not expected that there are any such transactions,
except from reorgs.
bb979f4c76
[refactor] change Workspace::m_conflicts and adjacent funcs/structs to use Txid
It's preferable to use type-safe transaction identifiers to avoid
confusing txid and wtxid. The next commit will add a reference to this
set; we use this opportunity to change it to Txid ahead of time instead
of adding new uses of uint256.
d72ba3d535
[policy] policy rules for nVersion=3b39cdfbd4c
[validation] allow V3 transactions under certain conditions4557e54c90
[policy] allow individual v3 txns to be below min relay feerate
As long as they are otherwise paid for, i.e. through package CPFP.
If a v3 transaction loses its sponsor, we can evict them with no trouble
because it will not have other descendants or ancestors to make the
feerate assessment more complicated.
95a99fea6d
[test framework] parameterize version in create_self_transfer104b3d39f4
The behavior is not new, but this rule exits earlier than before.
Previously, a carve out could have been granted in PreChecks() but then
nullified in PackageMempoolChecks() when CheckPackageLimits() is called
with the default limits.
3824508d59
[refactor] make some members MemPoolAccept-wide
No change in behavior.
For single transaction acceptance, this is a simple refactor:
Workspace::m_all_conflicting -> MemPoolAccept::m_all_conflicts
Workspace::m_conflicting_fees -> MemPoolAccept::m_conflicting_fees
Workspace::m_conflicting_size -> MemPoolAccept::m_conflicting_size
Workspace::m_replaced_transactions -> MemPoolAccept::m_replaced_transactions
And local variables m_total_vsize and m_total_modified_fees are now
MemPoolAccept members so they can be accessed from PackageMempoolChecks.
We want these to be package-wide variables because
- Transactions could conflict with the same tx (just not the same
prevout), or their conflicts could share descendants.
- We want to compare conflicts with the package fee rather than
individual transaction fee.
We reset these MemPoolAccept-wide fields for each subpackage
evaluation to not cause state leaking, similar to temporary
coins.
2eb1cb681e
[policy] attempt to check whether replacement is more incentive compatible
Avoid accepting replacements that are not more incentive compatible to
mine. For now, as a somewhat conservative estimate, require that the minimum
between the transaction's individual feerate and ancestor feerate is
higher than the individual feerates of directly conflicting transactions
and the ancestor feerates of all original transactions.
Note that a package/transaction's ancestor feerate is not perfectly
representative of its incentive compatibility; it may overestimate (some
subset of the ancestors could be included by itself if it has other
high-feerate descendants or are themselves higher feerate than this
package/transaction).
Co-authored-by: Suhas Daftuar <sdaftuar@chaincode.com>
a625e2fbce
[refactor] rename entries to be more descriptive0f1ef3d2f4
[unit test] for CheckAncestorScores1447ee0ec2
[packages/policy] implement package RBF for replacement clusters of size two9aa975e5f6
[test util] CreateValidMempoolTransaction version parameter, always signal bip125f1e1df0643
[test] package rbfc15ae6d1e6
DrahtBot
commented at 4:30 pm on December 5, 2023:
contributor
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.
#28972 (test: Add and use option for tx-version in MiniWallet methods by maflcko)
#28960 (kernel: Remove dependency on CScheduler by TheCharlatan)
#28950 (RPC: Add maxfeerate and maxburnamount args to submitpackage by instagibbs)
#28948 (v3 transaction policy for anti-pinning by glozow)
#28886 (refactor: Replace sets of txiter with CTxMemPoolEntryRefs by TheCharlatan)
#28676 ([WIP] Cluster mempool implementation by sdaftuar)
#27432 (contrib: add tool to convert compact-serialized UTXO set to SQLite database by theStack)
#26840 (refactor: importpubkey, importprivkey, importaddress, importmulti, and importdescriptors rpc by KolbyML)
#26593 (tracing: Only prepare tracepoint arguments when actually tracing by 0xB10C)
If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.
instagibbs force-pushed
on Dec 5, 2023
DrahtBot added the label
CI failed
on Dec 5, 2023
instagibbs force-pushed
on Dec 5, 2023
Add OP_TRUE <0x4e73> as a standard output type
This will be used in following commits
as the flag for ephemeral anchors, allowing
dust values, but also requiring
the output to be spend in the same relay package.
4f484d6ac1
make ephemeral anchor spend standardc24a51c015
Disallow 3rd party wtxid malleability of anchor spend7d87c6692a
Allow dust anchor outputs
Anchor outputs are not yet required
to be spent in same mempool package.
053d56edb6
Allow one ephemeral anchor per transaction19c54fab51
Enforce constraints for ephemeral anchor transactions68271cfd3b
Require ephemeral anchors to be spent in mempool atomically
Either in the same relay package, or by transactions RBFing
the CPFP.
6fc1b650df
Add EPHEMERAL_ANCHOR_SCRIPT to test utils2f2f08f9e8
Add anchor argument to transaction creation rpcsf5274434d6
Add functional tests for ephemeral anchorsf1caa7ab8f
notes about CheckEphemeralSpends via in mempool ancestors4890cf7e67
Allow bypassing CheckValidEphemeralTx during reorg50347d3fb5
instagibbs force-pushed
on Dec 5, 2023
DrahtBot removed the label
CI failed
on Dec 5, 2023
fuzz: Add ephemeral anchor coverage to tx_package_eval target9cba1a95f8
ariard
commented at 7:02 pm on December 10, 2023:
member
This is uncertain to me how this rule works with trimmed HTLCs on LN commitment transactions making their fees non-zero, even assuming anchor outputs where second-stage txn are signed with 0-feerate.
Beyond, I think it should add an information section at destination of use-cases developers discouraging the usage of anyone-can-spend ephemeral anchor. Otherwise a time-sensitive package can be tampered by third-parties entering into replacement cycling games, without being a direct off-chain counterparty to the target transaction traffic.
instagibbs
commented at 8:01 pm on December 10, 2023:
member
Node policy is not a subject matter for standardization in itself. It’s the transaction format that the BIP (if there is one) should focus on, not speculative behaviour of individual nodes.
glozow added the label
TX fees and policy
on Dec 18, 2023
ariard
commented at 0:44 am on December 21, 2023:
member
Node policy is not a subject matter for standardization in itself. It’s the transaction format that the BIP (if there is one) should focus on, not speculative behaviour of individual nodes.
This Proposed BIP brings a set of concepts that allows the community to communicate using a coherent language regarding what “Ephemeral Anchors” are. By defining this term in context of how it could work, the community can reason about them in a clear and coherent manner, (no matter if they individuality choose to use them in their node policy or not).
It is my opinion that such a BIP proposal is perfectly applicable and beneficial toward the community communication goals:
An Informational BIP describes a Bitcoin design issue, or provides general guidelines or information to the Bitcoin community, but does not propose a new feature. […]
instagibbs
commented at 6:14 pm on March 28, 2024:
member
With v3 + sibling eviction, it makes sense to me to first open up the feature with current supported scriptpubkeys for when the output is considered dust.
This allows people to pick anyone can spend or shared keyed anchors. It also means any outputs can be dust, as long as they get spent.
Future updates can include:
OP_1 <0xfees> style scripts as in the current PR.
relaxation from V3: I suspect the cluster mempool interface will make the logic much simpler to extending it to be arbitrary tx topologies. This could allow batched CPFP and more.
instagibbs
commented at 5:35 pm on June 6, 2024:
member
This is a metadata mirror of the GitHub repository
bitcoin/bitcoin.
This site is not affiliated with GitHub.
Content is generated from a GitHub metadata backup.
generated: 2024-12-21 18:12 UTC
This site is hosted by @0xB10C More mirrored repositories can be found on mirror.b10c.me