Disallow Incoming Minimum #299
Replies: 1 comment
-
|
##Revision 2 - Disallow Incoming Minimum Renamed from Dynamic Minimum Amount to Disallow Incoming Minimum. The title and flag names have been changed to match naming convention's and provide more clarity of it's intended use case. The proposed flag is now asfDisallowIncomingMinimum matching asfDisallowIncomingNFTokenOffer, asfDisallowIncomingCheck asfDisallowIncomingPayChan and asfDisallowIncomingTrustline. Change to the minimum amount. Reduced the incoming minimum amount to equal the base fee. Although a multiplayer on the base fee would amplify the impact on rejecting small transactions, this could be deemed excessive in a number of years time. As the base fee can be voted on by validators on the UNL there remains an element of flexibility in the future without the need for an amendment. Sources Added. Incorporated up-to-date information provided by community members, with source links to daily monitoring and a community discussion. Removed XRPL Commons Affiliation and Boot camp participants. Advised to remove Affiliation to prevent any misconceptions, moved to acknowledgements. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Abstract
This proposal introduces a new flag,
lsfDisallowIncomingMinimum, to the XRP Ledger’sAccountRootobject, enabling accounts to enforce a dynamic minimum XRP amount for incoming payments, set to the current base fee (ctx.view.fees().base, in drops). Developed during the XRPL Commons Core Developer Bootcamp ( 2025/07/11 ), this amendment combats dusting attacks, with confirmed data showing 90,000 transactions in 24 hours from a single spam account. The implementation is complete, tested, and ready for community review, addressing privacy and compliance risks.Motivation
Spam transactions, particularly dusting attacks, are a critical issue on the XRP Ledger, with confirmed data highlighting:
With regulatory clarity on the horizon (e.g., global cryptoasset frameworks), spam poses compliance risks, including anti-money laundering (AML) challenges and data retention obligations. This proposal, inspired by XLS-76d Proposal, introduces a dynamic minimum tied to the base fee, requiring no user configuration, that has been developed during the bootcamp to deter spam effectively.
Specification
New Flag:
lsfDisallowIncomingMinimum, added to theAccountRootobject, toggleable via theAccountSettransaction.Behavior: When enabled, incoming XRP payments must exceed the current base fee. Payments below this threshold are rejected with a
tecNO_PERMISSIONerror. (Note: The original proposal suggested twice the base fee, but the implemented code uses the base fee for simplicity, with potential adjustment post-review.)Implementation: Modify the
preclaimfunction inPayment.cppto check forlsfDisallowIncomingMinimumand enforce the minimum:Transaction Example:
{"TransactionType": "AccountSet", "Account": "rExampleAccountID", "SetFlag": 18}(usingasfDisallowIncomingMinimum = 18fromTxFlags.h).{"TransactionType": "AccountSet", "Account": "rExampleAccountID", "ClearFlag": 18}.Error Code: Define
tecNO_PERMISSIONas the transaction error code to indicate rejection due to insufficient payment.Rationale
This proposal builds on XLS-76d Proposal, which allows user-defined minimums, by introducing a dynamic minimum tied to the base fee, ensuring adaptability to network conditions. The urgency is driven by the 90,000-transaction spam event and regulatory pressures, as spam complicates AML compliance and ledger integrity. Unlike XLS-76d,
lsfDisallowIncomingMinimumrequires no configuration, making it accessible. Developed during the XRPL Commons Core Developer Bootcamp, it leverages community expertise for implementation and testing.Backward Compatibility
The
lsfDisallowIncomingMinimumflag is optional and does not affect accounts without it set.Test Cases
lsfDisallowIncomingMinimumenabled receives 9 drops when base fee is 10 drops. Result: Payment rejected (tecNO_PERMISSION).lsfDisallowIncomingMinimumenabled receives 11 drops when base fee is 10 drops. Result: Payment accepted.lsfDisallowIncomingMinimumreceives 5 drops. Result: Payment accepted.SetRegularKeyandEscrowtransactions succeed despite the flag.Security and Compliance Considerations
preclaim, leveraging existing validation logic.Acknowledgments
This proposal is heavily inspired by XLS-76d Proposal by Chris Dangerfield, introducing the minimum incoming amount concept. The dynamic approach builds on its foundation, addressing partial payments, reserves, and misuse while offering adaptability. Implementation and testing are led by Andrew Spencer @Handy4ndy during the XRPL Commons Core Developer Bootcamp, with @dangell7.
Sources
Beta Was this translation helpful? Give feedback.
All reactions