G... account, a muxed M... destination or a Soroban C... contract. G accounts can optionally include an ID, text or hash memo. M and C destinations use memo: { type: "none" }.
Keep the complete instruction when building a payment. Your wallet or transfer flow must support both the address type and its routing requirements.
These examples use Lookup SDK 0.11.0 and Holder SDK 0.10.0 on the current testnet deployment. The same payment instructions are available through the contract methods, HTTP API and app. See release status for addresses and versions.
Support at a glance
none means the record publishes no separate memo. Check any memo requirement imposed by the recipient account too. Soran does not support return-hash memos or arbitrary contract routing arguments.
Soroban transfers cannot use the classic transaction memo field. A contract-account sender may be able to carry a numeric ID through muxed transfer support if the receiver supports that route. It cannot silently drop or convert text and hash memos. Stop when the selected flow cannot carry the instruction. See Stellar’s contract-account payment guide.
Example destinations
For names you can resolve now, use the live testnet examples. They include all six destination forms and a hello-world contract you can call through its name. The values below are illustrative, validly encoded examples. The names are not promised to exist, and the contract address is synthetic. Do not send funds to them.Classic account without a memo
An ordinaryalice.nova payment could resolve to:
Classic account with an ID memo
An exchange deposit name such ascustomer420.nova could resolve to:
"420" is a different instruction. IDs range from 0 to 18446744073709551615; preserve them as decimal strings, with no leading zeroes except "0".
Use the account and customer memo supplied by the exchange. Soran keeps them together so your wallet can include both in the payment.
Classic account with a text memo
none to remove a memo explicitly.
Classic account with a hash memo
Contract address
Muxed accounts: what is and is not supported
A muxedM... address packages a base G account with a 64-bit identifier. For example:
none means no separate transaction memo. The embedded muxed ID 420 is still required and remains part of the M address. Send to that complete address using a compatible payment flow. Do not substitute the base G address or Memo ID 420.
Soran rejects an M address with a separate memo, an invalid encoding or an out-of-range ID. Muxed IDs range from 0 to 18446744073709551615; preserve them as exact decimal strings or bigint values.
You can inspect an M address with Stellar SDK 17 without submitting a transaction:
muxed_identity_version() == 1.
The base G account authorizes an M election. For an exchange-controlled account, the exchange signs. A customer M address does not give its user signing authority or separate name ownership. Changing a name’s destination can invalidate an earlier election.
Publish and read the whole instruction
With a configured Holder SDK, the name’s holder can publish the recipient-approved destination:set_muxed. The native Resolver stores the address and routing information atomically. Universal Lookup reads that on-chain instruction.
For payments, use resolve_destination on chain, resolvePayment in the SDK, or HTTP /v1/payment/{namespace}/{label}. These return the complete instruction.
Older contract resolve_payment and address-only methods, plus HTTP /v1/resolve, reject muxed records. Updated SDK resolve/record/verify helpers preserve full M addresses, but address-only lookup fails when a separate memo is required. An unavailable read or unknown legacy memo capability must never become a memo-free result.
A classic transaction has one memo, so payments with different required memos need separate transactions. Recheck the complete instruction before confirmation. See payment integration for the next step.