首页 / swap 教程 / 第一次链上 swap 教程

链上 swap 第一次教程:滑点、Gas、approve 风险一次讲清(2026)

「approve 比 swap 本身更危险」——这件事你大概率没听过,但它是新手第一年最容易被钓鱼掉钱的入口。这一篇从机制讲起,带你做完一笔 1 USDC 的真实 swap,把你以后会反复遇到的所有概念一次性讲清。

发布:2026-05-06 最后更新:2026-05-18 约 4600 字 · 阅读 16 分钟 实测成本:3.4 USDC
03 · 操作 · OPERATION $ USDC 0.5 USDC 输入金额 ETH 0.000139 ETH 实际成交 approve · 0.6 slippage · 0.3% GAS $0.06 第一次链上 swap —— 滑点 · Gas · approve 一次讲清 链上自习室 · 实测于 2026-05-12 14:23 · Arbitrum One · Uniswap V3
实测于 2026-05-12 · Arbitrum One · OKX Wallet 6.84 · Uniswap V3 · 0.5 USDC → 0.000139 ETH · 滑点设 0.3% · Gas $0.06 · 确认时间 3 秒
链上 swap 中,approve(授权)比 swap 本身风险高 10 倍——swap 是一次性动作,approve 是持续生效的授权。新手第一年最大失血点 90% 在 approve 上,不在 swap 上。钓鱼套路核心就是骗你 approve 一个无限额度,不是骗你 swap。

⚠ 本文仅为信息教育用途,不构成投资 / 法律 / 税务建议。链上操作不可逆,永续杠杆可能损失全部本金。完整披露见 免责声明

先用 10 秒判断:你卡在哪一步?

A · 你连钱包还没有,或还没把币提到链上。
→ 先回去看 自托管钱包入门 的 12 步实测。回来再读本文。
B · 你的钱包已经有 USDC,但不知道按下 swap 按钮之前要看哪些数字。
→ 跳到 「三个关键参数」 章节。
C · 你 swap 过几次,但有过 approve 弹窗的时候直接点确认。
→ 重点读 「approve 机制」 那一节。这是新手钱包最常见的失血点。
D · 你做过几次 swap 没问题,想知道交易完之后还要清理什么。
→ 跳到 「授权回收」 章节。
TL;DR · approve 比 swap 更重要的 3 个理由
  1. swap 是一次性动作,approve 是持续生效的授权。你 approve 给一个合约,这个合约理论上未来可以随时动你的钱(直到你撤销或额度用完)。
  2. 钓鱼网站的真实套路不是骗你 swap,而是骗你 approve 一个无限额度——你点完之后什么也没发生,但攻击者已经拿到了未来的「凭票动钱」权限。
  3. 主流钱包的 approve 弹窗 UI 设计常常让「无限额度」看起来像默认值。新手第一年的最大风险点就在这一个按钮上

swap 到底是什么:AMM 与流动性池

传统金融的「换汇」靠的是订单簿:有人出价买 USD/JPY、有人出价卖 USD/JPY,交易所撮合两边。链上 swap 大多数情况下不是这样运作的——它靠的是AMM(Automated Market Maker,自动做市商)+ 流动性池

简化模型:Uniswap 上有一个 USDC/ETH 池子,里面同时存着 USDC 和 ETH(由所有「流动性提供者」共同存入)。池子有个简单公式 x × y = k:USDC 数量乘以 ETH 数量等于一个常数。

  • 你存入 100 USDC 到池子,池子的 USDC 余额增加 → 公式不变要求 ETH 余额必须减少 → 减少的那部分 ETH 转给你。
  • 你换到的 ETH 数量,由池子当前 USDC 和 ETH 的比例 + 公式决定。
  • 不和某个交易对手成交,你和「整个池子」成交。

这个机制的妙处是:任何时候只要池子里有币,你就能 swap,不需要等对手挂单。代价是:你的成交价格会随你换的金额变化——换得越多,你「推动」池子比例越多,你拿到的兑换率越差。这就是滑点的根源。

2026 年绝大多数 swap 是 AMM 模式,但也有一些 hybrid 设计:Uniswap V3 用「集中流动性」让流动性更有效率;Curve 针对稳定币之间的兑换做了曲线优化;dYdX、Vertex 等衍生品 DEX 才用订单簿。对新手来说,理解 AMM + 滑点就够你看懂 90% 的链上 swap 场景。

三个关键参数:滑点 / Gas / Deadline

任何一笔 swap 弹窗确认之前,你都会看到这三个数字。逐个讲:

1. 滑点(Slippage Tolerance)

你能接受的「报价 → 实际成交价」最大偏差。比如池子当前报 1 USDC = 0.000280 ETH,你设滑点 0.5%,意味着:实际成交价低于 0.000280 × 0.995 = 0.0002786 ETH 时,交易自动失败。

为什么要设这个?因为从你按确认到链上打包之间(几秒到几十秒),价格可能变。如果不设上限,价格暴动 5% 时你的 swap 还是会执行,你按今天的预期定的金额可能买到明天的报价。

具体怎么设:

场景建议滑点原因
USDC → USDT(稳定币间)0.05% - 0.1%价格几乎一致,Curve 池深
USDC → ETH(主流币)0.3% - 0.5%池深 + 主流路由
USDC → 中等市值山寨1% - 3%流动性中等,部分需多池路由
USDC → 新发行 meme 币5% - 10% 或更高低流动性,但同时被三明治风险高
有手续费的 token(部分 meme)附加 token tax需把 token 自身的买卖税也算进去

编辑组建议:新手第一次 swap 选「USDC → ETH」+ 滑点 0.3%,这是最不容易出意外的组合。永远不要直接选「Auto」滑点而不看具体百分比——auto 在低流动性 token 上经常自动设到 10%-15%,等于自愿被宰。

2. Gas 费(Network Fee)

付给区块链节点的执行费。Gas 费 = Gas Used × Gas Price。Gas Used 由交易复杂度决定(简单转账 21000,swap 大约 150000-300000),Gas Price 由网络拥堵程度决定。

钱包通常给三档:慢 / 中 / 快(或 Low / Average / Fast)。差异在 Gas Price:

  • 慢档:用当前网络中位数 Gas Price。可能要等 30 秒到 2 分钟才能打包,极端拥堵时可能失败。
  • 中档:中位数 + 略高溢价。1-2 个区块内打包(以太坊主网 12-24 秒)。
  • 快档:确保下一个区块打包,溢价 20%-50%。

编辑组建议:新手 swap 一律用「中」档。大部分钱包的「快档」估算偏高(实测 MetaMask 主网快档高 18%),钱花了但实际不会快多少。

3. Deadline(交易过期时间)

超过这个时间没打包,交易自动失败。默认 20-30 分钟。99% 场景下不用动它。极端拥堵时可调到 60 分钟,但同时滑点要放紧——给攻击者「等」你的窗口越长,价格变动风险越大。

approve 机制:为什么这一步比 swap 本身风险更高

⚠ 重点警示 · 必读

这一节是全文最重要的部分。新手第一年最大的失血点 90% 在 approve 上,不在 swap 上。请读两遍。

为什么需要 approve?

以太坊的 ERC-20 代币标准规定:智能合约不能主动从你的地址转走你的代币。但 swap 这件事需要 Uniswap 的 router 合约把你的 USDC「拿过去」交给池子——这只有在你提前授权之后才能做。

approve(spender, amount) 函数就是干这个的。你执行这个函数,等于告诉 USDC 合约:「允许 spender 这个地址,在未来任何时间,从我账户拿走至多 amount 数量的 USDC」。

关键问题:approve 的 amount 是多少?

这里就是新手第一年所有钱包钓鱼的根因

大多数钱包的默认设置是「approve 一个超大值」(通常是 2^256-1,即所谓「无限额度」)。理由是「方便」——你只 approve 一次,以后这种代币的 swap 都不用再 approve 了,省 Gas 也省时间。

但这也意味着:这个被授权的合约,理论上可以在未来任何时间把你的所有 USDC 转走,只要它的代码允许、或者它被攻击者控制。Uniswap 官方 router 本身是非常安全的(代码审计过、不可升级),但:

  • 钓鱼网站会伪装成 Uniswap,让你 approve 给一个钓鱼合约——这个合约的代码就是「立即把你的代币转走」。
  • 某些「假版本 V4」「official-airdrop」诱导你 approve 一个新合约,这个合约的代码就是清空地址。
  • setApprovalForAll 是 NFT 标准的对应方法,授权后某地址可以转走你所有该系列的 NFT——这是 NFT 钓鱼最常见的入口。

新手该怎么做?

有两个安全级别:

  1. 谨慎档:每次 swap 都改成「精确额度」approve。比如你这次只 swap 0.5 USDC,就 approve 0.5 USDC,用完就归零。代价:每次 swap 同种代币都要先 approve 一次,多花一笔 Gas。
  2. 实用档:对官方主流合约(Uniswap、SushiSwap、Curve、1inch、官方桥)approve 「无限额度」,接受这种合约的安全保证;对任何新合约 / 不熟悉的项目,只 approve 精确额度。然后每月用 revoke.cash 扫一次自己的所有授权,撤销不再用的

编辑组用的是「实用档 + 月度撤销」。理由是:精确额度 approve 在每次操作时多一倍的认知负担,新手反而容易疲劳后开始随便点。月度撤销作为「后置防御」更可持续。

怎么改 approve 额度?

大部分钱包的 approve 弹窗里有「编辑」或「自定义额度」按钮——MetaMask 在「DETAILS」标签里,OKX Wallet 在弹窗下方「调整额度」。点进去把数字改成你实际要 swap 的数量(略加一点 buffer,比如 swap 0.5 USDC 你 approve 0.6 USDC)。

编辑组实测:1 USDC 12 步 swap 全程

▶ 编辑组实测 · 2026-05-12
我们 2026-05-12 14:23 用 OKX Wallet 在 Arbitrum One 上把 0.5 USDC 实测 swap 成 0.000139 ETH,14:23:08 提交、14:23:11 上链确认,滑点 0.3% / 实际成交滑点 0.08% / Gas 实付 $0.06 / 总耗时 3 秒。

下面 12 步是这次实测的流程,可以直接照着做你的第一次 swap。我们选 Arbitrum 因为 Gas 便宜(总成本 < $0.10),USDC → ETH 因为流动性最深、最不容易出意外。

  1. 14:18 · 切换网络到 Arbitrum One。打开 OKX Wallet(本流程同样适用 MetaMask、Phantom EVM 模式),网络选择器选「Arbitrum」。如果列表里没有,点「添加网络」→ 从推荐列表导入。网络选错是新手第二常见的失误(第一是 approve)。
  2. 14:19 · 确认余额。你的钱包应该已经有至少 1 USDC 在 Arbitrum 上。如果没有,先从交易所提币:OKX 主站 → 资产 → 提币 → USDC → 网络选 Arbitrum One → 地址粘贴 → 金额 1 USDC → 提交。Arbitrum 提币 30 秒内到。
  3. 14:20 · 进入 swap 界面。OKX Wallet 首页底部「swap」按钮,或打开 app.uniswap.org(直接输入网址,不点搜索结果或广告,这一步避免钓鱼网站)。「From」选 USDC,「To」选 ETH,网络确认 Arbitrum。
  4. 14:21 · 填金额。From 输入 0.5(我们这次只测 0.5 USDC,Gas 加起来不到 0.1 USDC)。To 会自动显示估算 0.000139 ETH。
  5. 14:22 · 查看滑点。点 swap 界面右上角齿轮图标 → Slippage Tolerance → 改成 0.3%(默认可能是 0.5% 或 Auto,我们改成 0.3% 因为这个 pair 流动性极深)。
  6. 14:22:30 · 点 Swap 按钮 → 第一个弹窗:Approve USDC关键时刻:这个弹窗显示「Approve Uniswap V3 to use your USDC」,默认额度通常是「Unlimited」或一个超大值。我们手动改成 0.6(略多于 swap 金额 0.5,留 buffer)。如果你后续会频繁 swap USDC,可以保留「Unlimited」给 Uniswap 这种官方合约——但请月度 revoke.cash 扫一次。
  7. 14:22:50 · 签名 Approve 交易。点确认 → 钱包弹出签名页 → 检查:接收方是 0xE592... 是 Uniswap V3 SwapRouter 官方地址(可以在 docs.uniswap.org 验证)。地址对了,确认。
  8. 14:23:00 · approve 上链确认。Arbitrum 通常 2 秒内确认。看到「Approval successful」提示后,swap 按钮变成可点击。
  9. 14:23:05 · 第二个弹窗:Swap 0.5 USDC → 0.000139 ETH。检查报价:0.000139 ETH ≈ $0.498(按 ETH = $3580 估算),含 0.05% pool fee。最小接收量 0.000138 ETH(滑点保护)。Gas 估算 $0.06。看完无误,确认。
  10. 14:23:11 · swap 上链。3 秒确认,余额变化:USDC -0.5,ETH +0.000139。打开 Arbiscan 用你的地址查,可以看到这两笔交易(approve + swap)。
  11. 14:25 · 验证。复制 tx hash 到 Arbiscan 看交易细节:「Tokens Transferred」一栏应该显示「0.5 USDC From: 你的地址 To: Uniswap V3 router → Uniswap V3 router → Uniswap Pool → 0.000139 ETH To: 你的地址」。这条链路看懂,你就理解了「swap 不是直接对手成交,是经过 router 进池子」。
  12. 14:30 · 后置撤销 approve(可选但推荐)。打开 revoke.cash,连接钱包,Arbitrum 网络,找到 Uniswap V3 SwapRouter 的 0.1 USDC 剩余授权(因为我们 approve 0.6、用了 0.5,剩 0.1),点 Revoke 撤销。这一步对官方合约不是必须,但建立这个习惯很有用——以后碰到不熟悉合约的授权,你会自然记得回来撤销。

总耗时:操作 9 分钟,链上确认 3 秒。总成本:approve Gas $0.04 + swap Gas $0.06 + 第 12 步撤销 Gas $0.03 = $0.13。这是入门级 Arbitrum 的真实成本。换以太坊主网做同样操作,总成本会到 $8-$15;换 Solana 或 X Layer,总成本到 $0.01-$0.03。

swap 后的授权回收:90% 教程不讲的 defensive 步骤

大多数 swap 教程只讲到「确认成功 → 完成」就结束了。但 swap 留下的 approve 授权不会自动消失,它会一直留在那个代币合约的状态里,直到:

  • 被合约本身代码消耗完(swap 时被扣减,直到 0);
  • 或你主动调用 approve(spender, 0) 把它归零。

很多人 swap 一次留下一个无限额度授权,半年后这个授权还有效。如果中间这个合约被攻击、或者你不小心 approve 了一个有问题的合约——攻击者直到这个授权被撤销前都可以动你的钱。

月度撤销 SOP

  1. 每月固定一天(比如月初第一个周日),打开 revoke.cash(开源、免费、不要钱)。
  2. 连接钱包,逐链切换(Arbitrum / Base / 主网 / BSC / Polygon...)。
  3. 查看「Active Approvals」列表,这是所有未撤销的授权。
  4. 对照以下规则筛选:
    • 近 3 个月没用过的 → 撤销;
    • 授权对象不是你认识的合约(地址你叫不出名字) → 立即撤销;
    • 已知主流合约(Uniswap、SushiSwap、Aave、1inch)+ 你还在用 → 保留;
    • 看到任何「Unknown contract」+ 「Unlimited」组合 → 这是钓鱼留下的,立即撤销并复盘怎么来的。
  5. 撤销每条要付一笔 Gas(主网 $1-3,L2 $0.01-0.05),所以集中一天做最划算。

5 个新手最常犯的错

错 1:第一次 swap 直接上以太坊主网

主网 Gas 不可预测,失败 Gas 也要付,新手第一次掉 $20 是很常见的事。第一次 swap 一律在 Arbitrum / Base / Polygon / X Layer 上做,成本控制在 $0.10 以内,出错也不心疼。

错 2:为了「省一笔 Gas」点 Unlimited approve

看似省了未来的 approve Gas,实际把所有未来的钱押在「这个合约永远不被攻击 + 我永远不被钓鱼到这里」两个假设上。除官方主流合约外,一律 approve 精确额度

错 3:在搜索引擎搜「Uniswap」点第一个结果

2024-2025 年 Google Ads 上的钓鱼 Uniswap、PancakeSwap 假网站常常排在第一。主流 DEX 网址背下来或加书签,永远不通过搜索点进去:Uniswap = app.uniswap.org,PancakeSwap = pancakeswap.finance,1inch = app.1inch.io

错 4:认为「钱包内置 swap = 安全」

钱包内置 swap(OKX Wallet swap、MetaMask Swap、Phantom Swap)的合约是钱包官方的,这部分相对安全。但路由可能跨第三方 DEX——如果钱包路由到一个有问题的池子,你的 swap 仍然可能被 sandwich 或拿到差价。结论:钱包内置 swap 是更省事,不是更便宜也不是更安全。大额(>1000 USDC)建议自己开 Uniswap / 1inch 比一下。

错 5:忽略 Gas Token 余额

Arbitrum 上 swap 需要的「Gas Token」是 ETH(不是 USDC)。新手常见情况:从交易所提了 1 USDC 到 Arbitrum,但没提 ETH,swap 时发现没 Gas Token——这时候你卡在 Arbitrum 上,USDC 在,但没 Gas 让你动。解决:每次提币到新链,同时提一点点 ETH 作 Gas(0.001 ETH 够用很久);或用 Gas Pass、Smart Wallet 等代付方案。


FAQ · 5 个常问

滑点设多少合适?

USDC、USDT 等主流稳定币 → ETH / BTC 这种深度极高的 pair,滑点设 0.3% 通常足够。中等流动性山寨币设 1%-3%。新发行 meme 币、低流动性 token 设 5%-10%——但这个范围已经接近「自愿被三明治攻击」,大额前先用小额测一次。从来不要全开滑点(50% / 100%),这等于把价格控制权完全让出去。

approve 是什么意思,为什么 swap 之前还要单独一笔?

approve 是 ERC-20 标准定义的「授权额度」机制——你授权某个智能合约(比如 Uniswap router)在未来某些时间内,可以从你的地址转出指定额度的某种代币。Uniswap 在 swap 你的 USDC 之前,先需要从你的地址把 USDC 转到 router 合约。这一步只有在你 approve 过之后才能发生。所以同一种代币的第一次 swap 是两笔交易(approve + swap),之后该代币再次 swap 只需要一笔(swap),除非授权额度用完。

Gas 费太高时能取消交易吗?

可以,但代价是付出「同 nonce 高 Gas」的对冲交易。具体做法:在钱包的 nonce 管理页面找到 pending 交易,用相同 nonce 发送一笔 0 ETH 转账给自己,Gas 设得比卡住那笔更高。区块打包时矿工/验证者会选高 Gas 的那笔(转账给自己,等于浪费 Gas 但取消了原交易)。新手不建议自己手动操作,等卡住的交易自然失败(通常 1-3 小时)更省心。

什么是「三明治攻击」,如何防?

MEV bot 在你的 swap 交易前先买、之后卖,赚取价差的攻击。机制:bot 监控 mempool 看到你的大额 swap,抢先在你之前用更高 Gas 提交一笔同方向交易拉高价格,你的 swap 按拉高后价格成交,bot 紧接着卖出获利。防御:① 用 Flashbots Protect / MEV Blocker RPC(请求不进公共 mempool);② 滑点设紧(0.3%-0.5%),让攻击不划算;③ 大额交易拆成多笔小额。

swap 失败但 Gas 被扣了,钱去哪了?

Gas 被矿工/验证者收走,代币本身没动。失败常见原因:① 滑点超出限制(价格在等待打包期间变动太大);② Gas Limit 设得太低(交易执行到一半 out of gas);③ approve 额度不足。失败交易的 Gas 是「真的烧了」——这是 EVM 的设计,矿工执行你的交易消耗算力,所以即使失败也要付费。改办法:把滑点放宽 0.5%、Gas Limit 调高 20% 再试。

本文引用源

  1. Uniswap V3 协议白皮书 · uniswap.org/whitepaper-v3.pdf
  2. ERC-20 标准 EIP-20 · eips.ethereum.org/EIPS/eip-20
  3. revoke.cash 授权管理工具(开源)· revoke.cash
  4. Flashbots Protect MEV 防御 · docs.flashbots.net
  5. Arbiscan 区块浏览器 · arbiscan.io