僅供教育用途;不構成投資建議或投資推薦。投資可能導致損失。
直接回答
簽署 DEX 兌換前,應核對鏈、目標合約、解碼後的函式、代幣地址、輸入或輸出邊界、路徑、收款人以及任何截止時間。前端顯示的「滑價」百分比本身並不是鏈上指令。它通常用來計算保護邊界,例如 exact-input 兌換的 amountOutMin 或 amountOutMinimum,以及 exact-output 兌換的 amountInMax 或 amountInMaximum。
截止時間是時間保護條件,不是價格保證。如果路由器檢查截止時間,而交易在其後執行,呼叫應當回滾。交易仍可在截止時間前按金額邊界允許的任何價格執行。較長的截止時間會讓該授權保持可用更久;過短則增加交易在納入區塊前過期的機率。
Calldata 不會自行描述。應使用所選鏈上確切合約的已驗證 ABI 解碼,並展開任何巢狀 multicall 或 Universal Router 命令。如果錢包無法可信地顯示解碼欄位,不要只憑位元組位置或函式名稱資料庫推測其含義。
運作原理
解碼實際呼叫
依照 Solidity ABI,calldata 的前 4 bytes 是函式選擇器,編碼參數從第五個位元組開始。選擇器可能碰撞或被錯誤標註,因此必須與已驗證目標合約的 ABI 匹配。代理、聚合器或路由器可能把兌換封裝在 multicall、execute 或其他函式中;應解碼所有可能轉移代幣或改變最終收款人的巢狀載荷。
在 exact-input 兌換中,輸入金額固定,保護欄位規定可接受的最低輸出;在 exact-output 兌換中,目標輸出固定,保護欄位限制最高輸入。邊界為零或異常寬鬆,可能等同於沒有有效的價格保護。代幣小數位很重要:必須先把各代幣地址對應到正確的小數位與符號,再比較原始整數金額。
核對路徑、收款人與 value
確認路徑始於要支出的代幣,並終於預期收到的代幣。檢查中間代幣、池費率,以及任何包裝、解包、歸集或轉移餘額的命令。收款人應是預期錢包,或行為已經理解的合約。也要核對交易的原生 value;它可能獨立於 calldata 中編碼的 ERC-20 金額。
找到截止時間
截止時間的位置取決於路由器版本。Uniswap V2 風格的路由函式含有 deadline 參數,原始 Uniswap V3 ISwapRouter 結構也包含該參數。Universal Router 同時提供 execute(commands, inputs, deadline) 和不帶截止時間的多載。因此,不要假設每筆兌換都有截止時間,也不要假設它總位於相同的巢狀兌換參數內。
截止時間通常與執行時使用的區塊時間戳記比較。它不會取消待處理交易、保證迅速納入區塊,或阻止金額邊界以內的不利價格。如需取消,傳送者必須使用對應鏈與錢包的交易替換機制;原交易一旦納入區塊,替換便無法保證成功。
完整範例
某筆 exact-input 兌換的報價預計得到 10,000 USDC,使用者選擇 1% 滑價。暫不考慮報價中已包含的費用,預期最低輸出為 9,900 USDC。USDC 使用 6 decimals,因此該邊界的原始整數是 9900000000。
解碼後的呼叫卻包含 amountOutMinimum = 9000000000,即 9,000 USDC。這允許結果比報價少最多 10%,而不是 1%。收款人還是陌生地址,截止時間也在數小時後。任一處不一致都足以拒絕該請求,並透過可信介面重新建構。重建後,應針對近期狀態模擬完全相同的未簽名交易,並在簽名前再次核對解碼載荷。
核對清單與風險
- 對照協定官方部署紀錄,核對所選鏈以及路由器或代理地址。
- 使用已驗證合約 ABI 解碼;展開巢狀呼叫與路由命令,而不是只檢查外層函式。
- 核對代幣地址、方向、小數位、固定金額、保護金額邊界、路徑、費率層級、收款人與原生
value。 - 將截止時間轉換為絕對時間,確認剩餘視窗是否符合預期。若沒有截止時間,應將其視為需要單獨審查的設計選擇。
- 使用簽名地址,針對近期狀態模擬完全相同的交易。模擬成功只是該狀態下的證據,不保證納入區塊或最終執行。
- 單獨審查授權或 Permit2 權限。良好的兌換邊界並不能讓無限額或惡意的代幣授權變得安全。
- 邊界過緊可能因正常價格變動而回滾;邊界過鬆則增加成交價與三明治攻擊風險。鏈上交易即使回滾也可能消耗 gas。
常見誤解
誤解:簽名內容包含介面顯示的滑價百分比
通常,簽名載荷包含的是依該設定計算的金額邊界。應核對實際整數與代幣小數位;介面標籤看似正確,並不能證明 calldata 使用了相同容忍度。
誤解:每筆兌換都使用 amountOutMin 與 deadline
欄位名稱和位置隨路由器與函式而異。Exact-output 兌換保護輸入端,有些入口則省略截止時間或把它放在外層呼叫中。
誤解:截止時間能防止不利價格
只有被呼叫程式碼實際執行檢查時,它才能限制允許執行的時間。價格保護來自金額邊界,而邊界以內的所有成交結果仍然被允許。
誤解:解碼外層函式就足夠
聚合器與通用路由器可能包含多次呼叫、代幣許可、轉帳與清理命令。影響安全的收款人或金額可能位於巢狀載荷內。
相關主題
來源
- Contract ABI Specification - Solidity Documentation(存取於:2026-08-21)
- IUniswapV2Router01.sol - Uniswap(存取於:2026-08-21)
- ISwapRouter.sol - Uniswap(存取於:2026-08-21)
- Universal Router Commands - Uniswap(存取於:2026-08-21)