How a non-custodial exchange actually works

What happens between 'send your coins to this address' and 'funds arrived' — and why no one can freeze them in the middle.

A non-custodial exchange never takes possession of your funds. There is no balance, no account and no withdrawal step: you send one on-chain transaction, a settlement protocol executes the trade, and the output lands in a wallet you control. "Your keys, your coins" isn't a slogan here — it's the actual data flow.

The phrase is abused enough that it's worth pinning down mechanically. Below is what happens between "send your coins to this address" and "funds arrived", using the deposit-address model Moss runs on.

  • A deposit address is a one-time settlement contract, not somebody's wallet: it encodes your pair, your payout address and your refund address.
  • Custody never transfers to a company. Funds move from protocol control to your address by validator consensus or atomic market-maker settlement.
  • Failure has a defined path: if the swap can't execute at your protected price, the deposit returns to your refund address automatically.
  • Everything is checkable: deposit, settlement and payout are all ordinary on-chain transactions you can follow in an explorer.

What is a deposit address, really?

When you commit a swap, the protocol issues a fresh address on the source chain that exists for exactly one job. On Chainflip it's a deposit channel opened by validators, valid for 24 hours. On NEAR Intents it's an address tied to a signed quote with a deadline. Either way, the address is derived from your swap's parameters — destination and refund included — before you send anything.

That ordering is the security model. By the time coins move, their destination is already fixed on-chain or in a signed commitment. There is no support ticket that can redirect them, and no operator who can "hold them for review". This is also why a swap interface like Moss never needs your funds to pass through it — it only arranges the swap.

Where do funds go when a swap fails?

Answer first: back to your refund address, minus network fees, automatically. Swaps fail for two honest reasons — the price moved beyond the protected tolerance before execution, or liquidity dried up mid-flight. Both trigger the refund path that was fixed when the deposit address was created.

This is why serious interfaces require a refund address before showing you where to send: the failure path must exist before the money does. Treat any service that takes deposits without asking where refunds go as a red flag — someone is improvising with your funds.

The custodial difference, in one table

Custodial exchangeNon-custodial swap
Who holds funds mid-tradeThe company (omnibus wallets)Protocol vaults / atomic settlement
AccountRequired, freezableNone
KYC basisAttached to custodyNo custody — nothing to attach to
Failure outcomeSupport ticket, discretionAutomatic on-chain refund
Proof of what happenedTheir internal databasePublic transactions on two chains
Attack surfaceHot wallets, insiders, databasesProtocol code and validator set

Note the last row: non-custodial doesn't mean risk-free — it swaps company risk for protocol risk. The difference is that protocol risk is inspectable (open code, on-chain history, public post-mortems) and doesn't depend on anyone's solvency. We compared how the three big rails handle it in THORChain vs Chainflip vs NEAR Intents.

Don't trust the interface — verify the swap

A real non-custodial flow gives you everything needed to audit it: the deposit address (watch your coins arrive), the tracker keyed by that address (watch settlement), and the payout transaction on the destination chain. Moss exposes all three in the explorer, and the same data is available through the public API — so you can verify a swap without trusting the website that arranged it.

If it's non-custodial, what does the interface actually do?

It compares quotes across rails, validates addresses, requests the deposit address from the protocol, and tracks settlement. Convenience and routing — never possession. Moss's fee (0.3%, included in the quote) is paid by the protocols' affiliate mechanisms, not from held funds.

Can Moss or the protocol change my payout address after I send?

No. The payout address is baked into the deposit channel or signed quote before the deposit address exists. Changing it would require rewriting an on-chain commitment that validators enforce.

What should I check before sending?

Three things: the output is the native coin on the chain you expect, a refund address is set, and the quoted delivered amount is acceptable. After that, the transaction you send is a plain transfer — no approvals, no contract interactions from your wallet.

All guides