Menu

  • Home
  • Trending
  • Recommended
  • Latest

分類

  • #2021 新年特輯
  • 100天區塊鏈挑戰
  • 2019 台灣區塊鏈產業指南
  • 2020 台灣區塊鏈產業年鑑
  • 2022 台灣年度最影響力人物榜
  • 2023 台灣年度影響力人物榜
  • 2023 新春特輯
  • 2024 TON Hacker House
  • 2024新春特輯
  • ABS 2018 專題報導
  • AI
  • CBDC是什麼?為何全球都在積極研究、有什麼優點與隱憂
  • Cefi
  • dao
  • dApps
  • defi
  • DePIN 如何開啟去中心化物理網路革命?
  • Entertainment
  • EOS
  • EOS insights
  • Gaming
  • Howto & Style
  • ICO
  • JiaJia
  • Layer 2
  • Libra
  • Movie
  • Music
  • News
  • nft
  • Plurality 多元宇宙
  • Starknet 空投落地,後續帶來什麼影響?
  • TON的崛起之路》背靠 Telegram 如何實現 Web3 大規模應用?
  • Uncategorized
  • Web3.0
  • 中國
  • 亞太
  • 交易所
  • 人物專訪
  • 以太坊
  • 以太坊
  • 以太坊 Dencun 坎昆升級將臨,你需要知道的所有事
  • 以太坊再質押協議為何成為最熱門賽道?
  • 供應鏈
  • 保險
  • 債券
  • 元宇宙
  • 全台最大詐騙案!Ace交易所涉垃圾幣詐騙
  • 全球加密貨幣監管最新動態統整
  • 其他國家
  • 其他幣別
  • 分散式帳本技術
  • 創投
  • 加密貨幣「詐騙手法」整理,學習如何保護你的資產
  • 加密貨幣市場
  • 區塊鏈平台
  • 區塊鏈新手全攻略,你需要知道的加密貨幣基礎
  • 區塊鏈新手教學
  • 區塊鏈活動
  • 區鍵禧
  • 即時新聞
  • 台灣
  • 哈希派
  • 國際組織報告
  • 多元宇宙Plurality有多重要?未來20年人類躍進關鍵
  • 央行
  • 娛樂平台
  • 安全
  • 專欄作者
  • 巴拉區塊事
  • 市場分析
  • 幣安與美國司法部達成 43 億美元和解,CZ認罪
  • 影片測試的分類
  • 快訊
  • 技術
  • 抓住空投爆擊!值得埋伏的項目、互動教學總整理
  • 投資分析
  • 挖礦
  • 推薦閱讀
  • 搶先看
  • 支付
  • 政府報告
  • 數位產權
  • 數據報告
  • 概念
  • 歐洲
  • 比特幣
  • 比特幣現貨ETF上市,真帶來了增量資金?
  • 比特幣第四次減半將臨,行情怎麼走?
  • 比特幣銘文大爆發,Oridinal 如何改變 BTC 生態?
  • 比特彭
  • 汪彪
  • 法規
  • 測試網
  • 灰度
  • 物聯網
  • 犯罪
  • 獨立觀點
  • 瑞波
  • 環境永續
  • 社交
  • 私人機構報告
  • 稅務
  • 穩定幣
  • 管制
  • 美國
  • 肺炎
  • 能源
  • 訴訟
  • 評級報告
  • 財金哥 & 區塊妹
  • 身份驗證
  • 遊戲
  • 鄧庶杭
  • 金融市場
  • 銀行
  • 錢包

Subscriptions

  • 零壹財經 01 binary
    01 Binary
  • 0xdt
  • 0xJigglypuff
  • aaaaYYYY
  • ABCDELabs

Recent News

  • 圖解多元宇宙》V神、Glen力推的Plurality是什麼?為何協作技術是人類社會進步關鍵
  • 精選文章搶先看!動區登入Access質押訂閱服務,解鎖寶貴資訊快人一步
  • ABS獨家專訪》Gitcoin共同創辦人Scott:台灣是現實與Web3治理的重要交匯點
動區動趨-最具影響力的區塊鏈新聞媒體
  • Home
    • Home Layout 1
    • Home Layout 2
    • Home Layout 3
  • Browse
    • News
    • Movie
    • Music
    • Technology
    • Howto & Style
    • Entertainment
    • Gaming
  • Features
    • Youtube Video
    • Vimeo Video
    • Dailymotion Video
    • Self-hosted Video
    • User Profile
    • Playlists
    • User-created Playlist
    • Favorite Playlist (Private)
    • Watch Later Playlist (Private)
    • All JNews Features
No Result
View All Result
  • Login
  • Register
UPLOAD
動區動趨-最具影響力的區塊鏈新聞媒體
No Result
View All Result
Home defi

教你看Uniswap程式碼,找出各種DeFi 協議裡的套利機會

深潮 by 深潮
2023-05-26
in defi
797 16
0
教你看Uniswap程式碼,找出各種DeFi 協議裡的套利機會
1.1k
SHARES
5.1k
VIEWS
Share on FacebookShare on Twitter

本文簡單介紹了部分去中心化交易所以及聚合器,並探討了其中利用程式碼可能存在的套利,從合約程式碼層面分析了套利的原理,但在實際中能否成功還和諸多因素相關,如 GAS,節點速度等。
(前情提要:鎖定北韓駭客?美國制裁幣安用戶錢包,含200萬美元BTC、ETH、USDT..)
(背景補充:Tornado Cash 駭客發起「歸還治理權」提案,社群氣憤又無奈:被耍著玩)

本文目錄

  • RelatedPosts
  • Uniswap回擊SEC證券指控:UNI 代幣是「文件格式」而非投資契約
  • 回顧dYdX如何逐步走上永續合約DEX龍頭:離開以太坊到發dYdX Chain,證明Rollup並非唯一解
  • MakerDAO新穩定幣PureDai是什麼?不保證與美元掛鉤、引入浮動價格、擁有新治理代幣..
    • 本文將分析部分去中心化交易所以及聚合器在合約程式碼上可能存在的套利機會。
  • 概述
  • 分析
    • Uniswap
    • Uniswap V2 Router
    • Uniswap V2 Pair
    • Uniswap V3 SwapRouter
    • SushiSwap
    • SushiXSwap
    • 如何提取 SushiXSwap 合約中的代幣呢?
    • Sushi BentoBox
    • DODO
    • DODO V2 Proxy 02
    • 1inch
    • AggregationRouterV 5
    • AggregationRouterV 4
  • 總結

 

RelatedPosts

Uniswap回擊SEC證券指控:UNI 代幣是「文件格式」而非投資契約

回顧dYdX如何逐步走上永續合約DEX龍頭:離開以太坊到發dYdX Chain,證明Rollup並非唯一解

MakerDAO新穩定幣PureDai是什麼?不保證與美元掛鉤、引入浮動價格、擁有新治理代幣..

本文將分析部分去中心化交易所以及聚合器在合約程式碼上可能存在的套利機會。

概述

去中心化金融(英語:Decentralized finance,俗稱 DeFi)是一種創建於區塊鏈上的金融,它不依賴券商、交易所或銀行等金融機構提供金融工具,而是利用區塊鏈上的智能合約進行金融活動。在 DeFi 中存在了大量的套利機會,包括但不限於清算、差價套利。本文將分析部分去中心化交易所(DEX)以及聚合器(Aggregator)在合約程式碼上可能存在的套利機會。

分析

Uniswap

Uniswap 是一個採用了自動做市商(AMM)模型的去中心化的加密貨幣交易平臺,目前有兩個流行的版本,分別是 Uniswap V2 和 Uniswap V3,我們將分別分析其中可能存在的套利機會。

Uniswap V2 Router

在 Uniswap V2 中,使用者一般是通過 Router 合約與 Pair 合約以及 Factory 合約進行互動。通常來說 Router 只是會在交易中中轉代幣,而不會儲存代幣,但由於種種原因,如空投、轉帳失誤導致 Router 合約中儲存了某些代幣。那麼如何將這些代幣提取出來呢?

通過分析 Uniswap V2 Router 02 合約的程式碼,發現存在 removeLiquidityETHSupportingFeeOnTransferTokens 函式:

該函式用於移除其中一個代幣為 WETH 的流動性,其內部呼叫 removeLiquidity 函式時傳入的 to 的地址為 address (this),也就是會將兩種代幣先轉移到 Router 合約中,然後 Router 合約再將兩種代幣轉移到指定的地址。這裡雖然轉移的 WETH 的數量是 removeLiquidity 返回的,無法修改,但是轉移的另一種 Token 的數量是 balanceOf (address (this)),即 Router 合約中的該代幣的餘額。

因此根據上述分析,我們能得到一個套利的流程:

  • 監控到 Router 02 合約存在 ERC 20 代幣;
  • 監控到 Router 02 合約存在 ERC 20 代幣;
  • 呼叫 addLiquidityETH 新增該 ERC 20 代幣和 WETH 的流動性;
  • 呼叫 removeLiquidityETHSupportingFeeOnTransferTokens 移除流動性。

侷限性:

如果該代幣之前沒有和 WETH 組流動性,當第一次新增流動性時會損失一小部分流動性(MINIMUM_LIQUIDITY);

暫時未發現提取 Router 02 合約中的 WETH 和 ETH 的方法。

Uniswap V2 Pair

Uniswap V2 Pair 合約,即所謂的流動性池,儲存著提供流動性的 2 種代幣,因為 Pair 合約中使用的是 reserve 來記錄餘額而不是 balanceOf (address (this)),因此有人直接誤轉流動性代幣到合約中時會出現 balance 和 reserve 出現差值,而 Pair 合約中存在平衡函式 skim,我們可以呼叫該函式將這差值數量的代幣給提取出來:

可以看到該函式會將流動性池中兩種流動性代幣的 balance 和 reserve 差值數量的代幣轉移到 to 地址。

流動性池中除了這兩種代幣外,也會因為誤轉、空投等原因存在其他的 ERC 20 代幣,如何提取這一部分的代幣呢?

對 Pair 合約的程式碼分析後發現無法提取這一部分代幣,只有一種情況例外:當流動性池中存在該池的 LP 代幣時。

出現這種情況我們可以呼叫 Pair 合約的 burn 函式,移除流動性,取出相應的兩種流動性代幣:

Uniswap V3 SwapRouter

Uniswap V3 的 SwapRouter 合約中也會存在和 Uniswap V2 Router 一樣的情況,存在 ERC 20 代幣和 ETH,但是幸運的是 SwapRouter 合約提供了幾個函式可以方便提取其中的代幣。

提取 ERC 20 代幣我們可以使用 sweepToken 函式:

提取 ETH 我們可以使用 refundETH 函式:

也能夠直接呼叫 unwrapWETH 9 函式將 WETH 還原成 ETH 並提取出來:

以上是對 Uniswap V3 SwapRouter 合約的套利分析。

在對 Uniswap V3 Pool 合約的程式碼進行分析後,發現沒有辦法提取其合約中的其他代幣,也不存在如 Uniswap V2 Pair 合約中 balance 和 reserve 有差值的情況。

SushiSwap

SushiSwap 最初是一個 Uniswap 的分叉專案,後來發展成為一個獨立的生態系統,提供了許多不同的金融服務和産品。因為 SushiSwap 和 Uniswap V2 一樣,因此上述的針對 Uniswap V2 的套利手段對與 SushiSwap 也同樣適用。

SushiXSwap

SushiXSwap 是 SushiSwap 推出的基於 LayerZero 的全鏈交易協議,支援的網路包括 Optimism、Arbitrum、Fantom、BNB Chain、Polygon 和 Avalanche。使用者可以在支援的網路以及資産之間進行跨鏈交易。

如何提取 SushiXSwap 合約中的代幣呢?

SushiXSwap 中主要的功能都通過 cook 函式實現,該函式提供了一系列的操作,支援操作列表如下:

其中有一個操作 ACTION_DST_WITHDRAW_TOKEN,其程式碼實現如下:

首先將傳入 cook 函式的 data 進行解碼,然後判斷 amount 是否等於 0 ,等於 0 則將 amount 的值設為該合約的 ERC 20 代幣的餘額或者 ETH 的餘額。最後呼叫 _transferTokens 將代幣轉移到指定的地址:

因此我們只需要構造傳入 cook 函式的 actions 和 datas,即將 actions 設定為 ACTION_DST_WITHDRAW_TOKEN ,在 data 中構造想要轉移的代幣、接收地址、數量,即可轉移出 SushiXSwap 合約中的代幣。

Sushi BentoBox

Sushi BentoBox 是 SushiSwap 生態系統中的一個模組。BentoBox 是一個高度靈活的去中心化金融(DeFi)利率優化産品。簡單來說,它是一個允許使用者儲存、借用和賺取利息的智能合約平臺。BentoBox 的主要目的是優化使用者在 DeFi 領域中的收益。

以太坊上的 BentoBox 合約中儲存了大量了代幣,那麼該合約是否存在套利的空間呢?

在 BentoBox 合約中使用者可以通過 deposit 函式進行存款操作,函式的實現如下:

可以看到使用者傳入指定的代幣地址,扣款地址,接收地址,數量,股份數量,函式首先做了一系列校驗,然後將 amount 或者 share 進行轉換,關鍵點在 195 – 198 行,這裡做了一個校驗 :amount <= _tokenBalanceOf (token).sub (total.elastic)。

在 BentoBox 合約中某種代幣的餘額使用的是 total.elastic 來記錄,類似 Uniswap Pair 合約中的 reserve,某些情況下會和 _tokenBalanceOf (token) 産生差值, 我們可以利用 deposit 函式這裡的特性,將差值部分真實轉換成自己在 BentoBox 合約中的餘額。

因此我們傳入引數時將 token 設定為存在差值的代幣地址,將 amount 的值設定為差值,然後將 from 設定為 BentoBox 合約的地址,將 to 設定為自己的地址,在 207 行時由於地址為 BentoBox 合約地址,因此不會進行轉帳,只是平衡了 total.elastic 和 _tokenBalanceOf (token) 的值,將其轉換為 to 地址在合約內的餘額。

DODO

DODO 是一個去中心化交易平臺,使用獨創的主動做市商(PMM)演算法為 Web3 資産提供高效的鏈上流動性。DODO 既自己提供流動性,也聚合其它交易所的流動性。

DODO 有一系列合約,其中使用者會通過 DODO V2 Proxy 02 合約進行代幣的兌換。和 Uniswap Router 合約類似,該合約也會因為各種原因存在一些代幣,我們應當如何提取這些代幣?

DODO V2 Proxy 02

在 DODO V2 Proxy 02 合約中存在 externalSwap 函式,用來呼叫 DODO 聚合的外部平臺進行兌換,如 0x , 1inch,程式碼實現如下:

1719-1721 行在對傳入的引數做校驗,然後 1724 行校驗 fromToken 是否為 ETH,不是的話則會將呼叫者的代幣轉移到合約中,然後進行授權,在分析了 DODOAPPROVE 合約的程式碼後發現只需要將 fromTokenAmount 設定為 0 即可繞過:

然後會對呼叫的外部合約做校驗,是白名單內的才能夠呼叫,這裡的 swapTarget,calldataConcat 都是由使用者可控的,因此可以將 swapTarget 設定為 0x 或者 1inch 的合約地址,然後 calldataConcat 設定為其合約的 view 函式的編碼,從而讓返回的值為 true,也能通過後面的 require 校驗:

接下來會將合約中的 toToken,全部轉移給呼叫者,這裡的 toToken 可以是 ERC 20 代幣,也可以是 ETH,傳送完後會進行最小的預期數量校驗,我們將 minReturnAmount 的值設定為非常小的值即可通過。最後兩個函式呼叫無關緊要。

通過以上的步驟我們就能夠提取出 DODO V2 Proxy 02 合約中的 ERC 20 代幣以及 ETH。

1inch

1inch 是一個去中心化交易所(DEX)聚合器,它從多個 DEX 中彙集流動性,以便為使用者提供最佳的代幣兌換價格。通過整合來自不同來源的流動性,1inch 幫助使用者優化交易並在各個平臺之間找到最優惠的價格。1inch 的智能合約自動在各個去中心化交易所之間進行交易,使使用者能夠輕鬆地在不同交易所之間獲取最佳價格和最低滑點。此外,1inch 還提供了其他功能,如流動性挖礦和治理代幣。

1inch 的主要合約是 AggregationRouter,現在使用較多的是 V 4 和 V 5 版本,這兩個合約也會因為各種原因存在一些代幣,我們可以通過構造的傳入函式中的引數,提取合約中的代幣。

AggregationRouterV 5

AggregationRouterV 5 合約存在 swap 函式,其實現如下:

校驗了 desc 中的 minReturnAmount 後,從 desc 中獲取 srcToken 和 dstToken,接下來 986-997 行可以通過構造 desc 結構體中的 flags 和 srcToken 進行繞過:

然後執行函式 _execute, 這裡會進行 call 呼叫,並會校驗執行狀態,由於 executor 由使用者傳入,因此這裡我們可以使用 0 地址進行繞過:

然後獲取合約中 dstToken 的餘額。1007-1018 行我們可以構造 desc 中 flags 以及 minReturnAmount 進行繞過:

最後會將合約中的 dstToken 餘額都轉到 dstReceiver 地址中,該地址也由使用者控制:

通過以上的步驟,我們能構造傳入 swap 函式的引數從而將 AggregationRouterV 5 合約中的代幣提走。

AggregationRouterV 4

AggregationRouterV 4 與 AggregationRouterV 5 差別不大,AggregationRouterV 4 中也存在 swap 函式,實現如下:

可以發現跟 AggregationRouterV 5 的 swap 函式的實現是一樣的,只是 AggregationRouterV 5 對 call 進行了優化,因此使用和 AggregationRouterV 5 一樣的方法即可提取出存在 AggregationRouterV 4 合約中的代幣。

總結

本文簡單介紹了部分去中心化交易所以及聚合器,並探討了其中可能存在的套利,從合約程式碼層面分析了套利的原理,但在實際中能否成功還和諸多因素相關,如 GAS,節點速度等。

📍相關報導📍

傳奇駭客開嗆Kucoin!懸賞「100萬美元」找出27萬筆個資外洩,獎金僅5千

駭客談判指南》加密資產被盜時該如何處理?

里程碑!歐盟批准加密監管法《MiCA》,幣安CZ:世界最大市場擁抱Web3

Tags: DODOsushiswapUniswap

Recommended videos

23:25

Get Ready for Apple’s New 8K VR/AR Headset in 2020

2.5k Views
2024-07-24
    4:21

    Didi Kempot – Cidro for Sobat Ambyar (Official Music Video)

    2.5k Views
    2024-07-29
      7:28

      Kendall Jenner’s Birkenstocks Have Gone International

      2.5k Views
      2024-06-14
        13:20

        How Would You Dress If You Weren’t Online?

        2.5k Views
        2024-06-21
          Show More
          Copyright (c) 2019 by Jegtheme.
          • About
          • Buy JNews
          • Request A Demo
          • Contact
          No Result
          View All Result
          • Account
          • BlockTempo Beginner – 動區新手村
          • Change Password
          • Forgot Password?
          • Home 1
          • Home 2
          • Home 3
          • Jin-homepage
          • Latest
          • Login
          • Profile
          • Register
          • Reset Password
          • Trending
          • Users
          • Users List Item
          • 不只加密貨幣,談談那些你不知道的區塊鏈應用|動區新手村
          • 所有文章
          • 關於 BlockTempo

          © 2025 JNews - Premium WordPress news & magazine theme by Jegtheme.

          Welcome Back!

          Login to your account below

          Forgotten Password? Sign Up

          Create New Account!

          Fill the forms below to register

          All fields are required. Log In

          Retrieve your password

          Please enter your username or email address to reset your password.

          Log In

          Add New Playlist