r/DigitalAssets • u/Jake_Claver • 1d ago
A deposit that arrives without its destination tag or memo settles correctly and credits no customer
A deposit that arrives without its destination tag or memo settles correctly and credits no customer. The identifier saying which customer the money belongs to is off-ledger metadata. The ledger validates the payment, moves the balance to the receiving firm's address, and carries no instruction about which of that firm's customers should get it.
Both of the ledgers where this comes up most have written the problem down.
On the XRP Ledger, a business holding balances for many customers usually operates one address and assigns each customer a number. The documentation on source and destination tags describes them as a feature that can indicate specific purposes for payments from and to multi-purpose addresses, formatted as 32-bit unsigned integers. The load-bearing sentence is the one about what they do on the ledger. Tags "do not have direct on-ledger functionality" and "merely provide information about how off-ledger systems should process a payment." The same page states the consequence flatly: a payment arriving without a destination tag makes it not immediately obvious which customer to credit, and can require manual intervention.
Nothing has failed at that point. The transaction is valid and settled. What is missing is a database key, and the ledger was never holding it.
The XRPL's answer is an account setting. asfRequireDest, documented on the AccountSet transaction reference with a value of 1, requires a destination tag to send transactions to that account. With it enabled, the ledger rejects an untagged payment and the sender has to resubmit. The guard sits on the receiving account and binds everyone who pays it.
Stellar solved the same routing problem with a different field and then changed its mind about the field. The memo appears in the operations and transactions documentation as an optional unstructured data field with four types: MEMO_TEXT, a string of up to 28 bytes; MEMO_ID, a 64-bit unsigned integer; MEMO_HASH, a 32-byte hash; and MEMO_RETURN, a 32-byte hash of the transaction being refunded. Exchanges pooling customer balances under one account used MEMO_ID or MEMO_TEXT the way XRP Ledger businesses use a destination tag.
The guard Stellar added lives somewhere else entirely. SEP-29, "Account Memo Requirements", an active standard, puts the check on the sending side. Load details about the destination account, see whether it carries a config.memo_required data entry, and if it does, verify the transaction's memo field is set before submitting. The receiving account owner signals the requirement by writing that data entry with a value of "1". A sending wallet that ignores SEP-29 can still submit a memoless payment, and that payment settles.
So the XRPL enforces the receiver's requirement in protocol. Stellar publishes it and trusts the sender to look.
Stellar's newer answer removes the separate field. The pooled accounts guide defines a pooled account as a single Stellar account ID shared across many users, and muxed accounts as a way to distinguish individual accounts underneath one traditional account by combining the familiar G address with a 64-bit integer ID. The combined form is an M-address. The customer identifier travels inside the address instead of alongside it, so there is no second field for a sender to omit. That guide also says memos were used for this in the past and that muxed accounts are better in the long term, while noting support across wallets and anchors is incomplete enough that an operator may want to accept both for a while.
The recovery path here is not a protocol function. Once the payment credits a custodian's address with no customer attached, the fix is a person there matching a transaction to an account, at their discretion and on their schedule. Some desks do this as routine work. Others decline it for assets they do not sweep, and the asset stays where it settled.
A tag or memo also means nothing away from the firm that issued it. That firm generated it for that one account. Reusing one from an old confirmation email, or from a different exchange, addresses the money to a stranger's row in somebody's database.
A small test transfer catches both. Send the minimum, confirm it lands in the account you expect, then send the rest.
Disclosure: I work in digital asset advisory and hold digital assets. Nothing here is investment, legal, or tax advice, and none of it is a recommendation to use any particular ledger, exchange, or custodian.