去中心化交易所:签名前检查代币兑换
去中心化交易所(DEX)通过区块链合约完成交易,无需先将资金存入传统交易所账户。自己保管密钥会改变风险,但不会消除风险。本课以同一网络内的简单代币兑换为例,从核验资产讲到读取交易回执。
你的任务:批准兑换前,说清授权内容、最低到账数量和总成本。
沿着三个层级理解交易
钱包:你的授权
连接钱包会向应用显示公开地址。代币授权或permit签名可能允许合约花费代币;兑换操作才执行交易。这些是不同的动作。无需gas的签名也可能授予重要权限。不要在交易网站输入助记词或恢复短语。
路由器:建议的交易路径
自动做市商与流动性池储备进行交易;订单簿DEX撮合订单。聚合器可能将一笔交易拆分至多个池或其他执行系统。阅读路径及其条件。熟悉的界面不代表每个代币或合约都可靠。
区块链:结算
提交后的交易在被纳入区块前仍处于待处理状态。成功回执证明执行成功,不证明资产可信。合约漏洞、恶意代币、被入侵的网站和交易排序仍有风险。同一网络内的兑换不会把资产转移到另一条区块链。
操作步骤:先看报价,再看钱包请求
核验网络和资产
从核实过的官方来源打开协议。确保应用与钱包使用相同网络。将完整代币合约地址与项目官方文档和区块浏览器对照;简称或标志不能唯一识别代币。保留足够的网络原生gas资产,用于授权、兑换和后续转账。
阅读完整报价
检查输入、预计输出、价格影响、最低到账数量及所有费用。价格影响来自你自己的交易;滑点是报价与执行之间的变化。提高滑点容忍度不能改善糟糕的报价。过期报价应刷新,结果不可接受时重新考虑金额或路径。
授权后验证
逐项检查每个钱包请求中的花费合约、代币、授权额度和可能的到期时间。将权限限制在你理解的范围。提交后,在正确的浏览器检查交易哈希:状态、代币合约、数量和接收方。断开应用连接不会撤销代币授权;应单独检查不用的权限。
计算示例:最低值是边界,不是承诺
假设普通固定输入的池兑换报价为100 USDC换200枚代币。1%的容忍度对应示例最低值198枚。此假设报价已包含池手续费,gas另计。如果执行只能得到197枚,正确执行的最低限制会使兑换回滚。已上链但失败的交易仍可能消耗gas。容忍度提高到5%后,最低值变为190枚:这是允许更差的结果,而非降低价格影响。执行系统可能不同,因此应读取钱包或订单中的实际最低值。
签名前发现三个常见错误
把代币简称当作证明
两个合约可以使用相同名称。独立核验完整地址和网络。小额买入成功不证明以后能够卖出,也不证明合约限制无法修改。
随手授予无限额度
授权可能暴露的不只是本次交易金额。检查花费合约可访问的范围,包括签署的permit。安全审计或硬件钱包不能让危险授权变得无害。
把gas余额全部兑换掉
一个网络上的代币不会仅因简称相同,就能支付另一网络的费用。保留需要的gas资产。再次提交前检查待处理交易,避免无意重复交易。
练习:找出不安全的决定
报价显示500枚代币、2%容忍度以及单独的gas。你算出最低值为490枚。钱包却要求向未知合约授予无限花费权限。最低值正确就应该签名吗?如果交易上链后回滚会怎样?
查看分析
不应该。计算只检查输出边界,没有验证花费权限或代币可信度。暂停并核验花费合约及权限范围。已上链交易回滚时,兑换的状态变化会撤销,但已使用的gas仍可能收费。490枚的边界无法防范所有其他风险。



