# 閃電貸三角套利實作 ## 閃電貸套利運作 #### Step1. 在 Goerli 建立2個 ERC20 Token - tokenA Address : 0x3b4457569ca35083d245d7608E6C9Ed7245B9E00 - tokenB Address : 0x039421C5232BdeDaffa06d7e387bf9564d8DC7cc  --- #### Step2. 在 Uniswap V2 上建立3個交易對 1. DAI <-> TokenB : ==1000:100000 (1:100)== 3. TokenB <-> TokenA : ==10000:10000 (1:1)== 4. DAI <-> TokenA : ==2500:40000 (1:16)== **透過以上設計產生套利空間** <br>  --- #### Step3. 部屬實作完成的閃電貸合約測試閃電貸部分有無BUG (未加入套利Operation) - Deplyed Address : 0x8561417a3612d49658f97d05Ff90901E5e7bB92A (https://goerli.etherscan.io/address/0x8561417a3612d49658f97d05ff90901e5e7bb92a) - Code 程式碼: https://gist.github.com/Charming0420/f480fc7fb5cae8d1a707b03fe6d7e87d --- #### Step4. 部屬實作完成的閃電貸合約測試套利部分有無BUG (加入套利Operation) - Deplyed Address : 0xDE94cc1801AE4cFd464E68B57764e5a9d2C5CFDf (https://goerli.etherscan.io/address/0xDE94cc1801AE4cFd464E68B57764e5a9d2C5CFDf) - Code 程式碼: https://gist.github.com/Charming0420/006a8cac9ba17d30e1bb57886ba5e47f --- #### Step5. 測試閃電貸三角套利成功 交易明細 - Txn Hash:0xd206fd994a72d129be31521aca40bb57e11217dc321918774cc483b972425969 (https://goerli.etherscan.io/tx/0xd206fd994a72d129be31521aca40bb57e11217dc321918774cc483b972425969)  --- <br> ## 閃電貸執行邏輯 1. 透過Aave提供的**flashLoanSimple**進行DAI借貸 2. 將拿到的**DAI**全部轉換為**TokenB** (1:100) 3. 將拿到的**TokenB**全部轉換為**TokenA** (1:1) 4. 將拿到的**TokenA**全部轉換回**DAI** (1:16) 5. 因為100/16=6.25,表示這結構存在6.25倍套利空間,故借**1個DAI**最終可換出**6.25個DAI**(理論值,未計算交易摩擦成本) 6. 以上皆在一個Block內完成,且由於是使用**flashLoanSimple**,故不須主動還款,僅需Approve相應資金,POOL將會自動收款(借款+手續費) <br> ## 心得 - **學到甚麼** 我認為這次的練習非常有價值和意義,由於過去最不想碰、最沒興趣的就是DeFi產品,所以第一次接觸發現還挺有趣的,也學到了非常多包含Aave閃電貸的玩法還有Uniswap各種介面的有趣使用,雖然一直都知道結構化套利的方式但是這是第一次親手實做出來,感覺還有很多可探索的玩法值得開發,包含更多層的結構套利。 - **遇到的困難** 其實Coding部分難度沒有到很誇張,雖然沒接觸過DeFi但看著Document邊查邊做大概兩小時內做得出來,不過至少花了5小時在Debug,做了無數次的Coding Review、部署無數個合約,都找不出問題到底出在哪邊,結果最後是被Uniswap建立交易對時的介面預設的Dai騙,此Dai非彼Dai,不是同一種代幣,重新建立流動池之後才結束鬧劇。 ###### tags: `進階創新科技技術作業`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up