<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Arnold Tsing</title>
    <description>The latest articles on DEV Community by Arnold Tsing (@arnold_tsing_a825ab9106cb).</description>
    <link>https://dev.to/arnold_tsing_a825ab9106cb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4230881%2F5a1a0ec9-5c2a-424e-9e1b-b3db6e231db6.png</url>
      <title>DEV Community: Arnold Tsing</title>
      <link>https://dev.to/arnold_tsing_a825ab9106cb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arnold_tsing_a825ab9106cb"/>
    <language>en</language>
    <item>
      <title>Deposit-address swaps, explained: how a cross-chain swap works without connecting a wallet</title>
      <dc:creator>Arnold Tsing</dc:creator>
      <pubDate>Fri, 06 Nov 2026 17:22:56 +0000</pubDate>
      <link>https://dev.to/arnold_tsing_a825ab9106cb/deposit-address-swaps-explained-how-a-cross-chain-swap-works-without-connecting-a-wallet-1dm5</link>
      <guid>https://dev.to/arnold_tsing_a825ab9106cb/deposit-address-swaps-explained-how-a-cross-chain-swap-works-without-connecting-a-wallet-1dm5</guid>
      <description>&lt;p&gt;Most people meet cross-chain swaps through a "connect wallet" button. You approve a token allowance, sign a transaction, and hope the contract on the other side does what the UI promised. There is a second execution model that predates most of DeFi and is still how a large share of retail swaps actually settle: the &lt;strong&gt;deposit-address swap&lt;/strong&gt;. This post explains how it works under the hood, where its risk surface is genuinely smaller, and where it is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two execution models
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Wallet-connected swaps&lt;/strong&gt; keep your keys in the loop the whole time. Your wallet signs an approval and a swap transaction against a contract (or an aggregator that routes through contracts). You never "send money to a website", but you do grant contracts spending rights over your tokens, and the swap executes inside your transaction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deposit-address swaps&lt;/strong&gt; split the exchange into two ordinary transfers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The service quotes you a rate and generates a &lt;strong&gt;single-use deposit address&lt;/strong&gt; on the source chain, bound to your order.&lt;/li&gt;
&lt;li&gt;You send the source asset to that address from any wallet or exchange account — no connection, no approval, no signature beyond the transfer itself.&lt;/li&gt;
&lt;li&gt;Once the deposit confirms, the service executes the trade on its side (typically by letting market makers bid on the route) and pays the destination asset to the payout address &lt;strong&gt;you&lt;/strong&gt; specified.&lt;/li&gt;
&lt;li&gt;If anything in the order cannot execute — wrong asset, expired quote conditions, a failed leg — the deposit is refunded to your refund address automatically.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the entire protocol. The "smart" part is not a contract; it is order state management: matching an inbound transfer to an order, executing against liquidity, and paying out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the risk surface is different (not just "smaller")
&lt;/h2&gt;

&lt;p&gt;With wallet-connected swaps, the dominant risks are &lt;strong&gt;approval risk&lt;/strong&gt; (a malicious or later-exploited contract draining an unlimited allowance) and &lt;strong&gt;signing risk&lt;/strong&gt; (blind-signing a payload you did not fully parse). Both have produced nine-figure losses, and both disappear in the deposit model: there is no allowance to exploit, and the only signature you ever produce is a plain transfer you initiate yourself.&lt;/p&gt;

&lt;p&gt;The deposit model has its own, different risks, and it is worth being precise about them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Counterparty/custody window.&lt;/strong&gt; Between your deposit confirming and the payout landing, the service holds your funds. The window is minutes, not days, but it is real. You are trusting the operator's solvency and honesty for that window — the same trust model as an instant-exchange, because that is what this is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Address errors are on you.&lt;/strong&gt; Send the wrong asset, or the right asset on the wrong chain, and recovery depends on the operator's tooling (many publish a &lt;a href="https://allswap.io/help" rel="noopener noreferrer"&gt;wrong-address recovery policy&lt;/a&gt;). A contract swap would simply have reverted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quote risk.&lt;/strong&gt; A good implementation shows you a &lt;em&gt;minimum received&lt;/em&gt; amount in the all-in quote before you send — fees and expected slippage included — and refunds rather than re-quotes you silently if the market moves beyond it. If a service only shows an "estimated" rate with no floor, that is where your risk concentrates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A fair summary: wallet-connected swaps minimize counterparty trust and maximize signing/approval risk; deposit-address swaps do the opposite. Which trade-off is right depends on the user, the amount, and whether the source funds even live in a self-custody wallet (funds sitting on a centralized exchange cannot "connect" to anything — a deposit transfer is the only option).&lt;/p&gt;

&lt;h2&gt;
  
  
  What a good quote should show you
&lt;/h2&gt;

&lt;p&gt;Before sending anything, you should be able to see, in one place:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The exact input amount and the &lt;strong&gt;minimum&lt;/strong&gt; output amount (not just an estimate)&lt;/li&gt;
&lt;li&gt;The service fee as a number, not buried in the rate (a transparent example: &lt;a href="https://allswap.io/fees" rel="noopener noreferrer"&gt;a flat 0.25% fee schedule&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The deposit deadline and what happens on expiry&lt;/li&gt;
&lt;li&gt;The refund address the funds return to if execution fails&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If any of those are missing, you are not looking at a quote — you are looking at an advertisement.&lt;/p&gt;

&lt;h2&gt;
  
  
  When each model wins
&lt;/h2&gt;

&lt;p&gt;Deposit-address swaps are the pragmatic choice when funds start on an exchange, when the destination chain has no mature DEX liquidity, when you want zero approvals touching a cold wallet, or when you are integrating programmatically — the model maps cleanly onto a REST API (create order → get deposit address → watch status), which is how aggregators embed it; see a &lt;a href="https://allswap.io/docs/quickstart" rel="noopener noreferrer"&gt;typical API quickstart&lt;/a&gt; for the shape of that flow.&lt;/p&gt;

&lt;p&gt;Wallet-connected swaps win when you want settlement atomicity, when amounts are large enough that even a minutes-long custody window matters, and when deep on-chain liquidity exists on both sides.&lt;/p&gt;

&lt;p&gt;Neither model is "the future" to the exclusion of the other. But if your mental model of swapping starts and ends with a connect button, it is worth knowing the older machine is still running a lot of volume — and exactly which risks it trades away, and which it keeps.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I work with &lt;a href="https://allswap.io" rel="noopener noreferrer"&gt;AllSwap&lt;/a&gt;, a non-custodial cross-chain swap service built on the deposit-address model described above (46 chains, no account, no KYC). Longer comparison of swaps vs. bridges: &lt;a href="https://allswap.io/learn/cross-chain-swap-vs-bridge" rel="noopener noreferrer"&gt;Cross-Chain Swap vs Bridge&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>web3</category>
      <category>cryptocurrency</category>
      <category>defi</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
