※ 本文轉寄自 ptt.cc 更新時間: 2022-05-23 16:15:11
看板 DigiCurrency
作者 標題 [閒聊] 關於Defi上簡單的合約判斷
時間 Sun May 22 18:55:09 2022
唉,是說也太多人被騙了吧,我都覺我應該開個顧問公司幫你們這些好野人審核approve
就賺翻了,不過人在貪的時候應該都聽不進去。
這禮拜我很衰的中鏢了,自己一個人在房間有夠無聊,來寫個簡單合約判斷積點福報,希
我可以順利康復。
首先,大家要理解為什麼SWAP、添加流動性、質押都需要approve這個動作,我一個一個慢
慢講,反正我現在有的是時間。
SWAP:就是把token X 給流動池然後流動池根據xy=k換算要給你多少Y,所以要完成這件事
需要兩個步驟:傳token X 給流動池、流動池傳token Y 給你。如果一般使用者用
metamask 的token transfer功能只能完成第一步,第二步流動池不會自動幫你執行,你們
必須要知道鏈上所有活動都是要有人來發起付gas fee的,所以這時候就需要智慧合約來幫
忙在使用發起一次tx內完成兩個步驟的SWAP。
必須要知道鏈上所有活動都是要有人來發起付gas fee的,所以這時候就需要智慧合約來幫
忙在使用發起一次tx內完成兩個步驟的SWAP。
追根究柢,其實所謂的流動池就是包有一堆function的智慧合約。那當你對流動池發起一
個tx,跟流動池說我要把1000個token X換成997個token Y的時候,代表流動池的合約要
有權限從你的帳戶拿走1000個token X轉到流動池內(也就是transferFrom,這一步需要有
token approve 額度),然後再從流動池轉997個token Y給你(transfer,這一步不用授權)
說到這裡,大家可以理解為什麼SWAP需要先授權合約可以動你的幣了吧,不然合約就無法
一個tx內完成兩步的SWAP
個tx,跟流動池說我要把1000個token X換成997個token Y的時候,代表流動池的合約要
有權限從你的帳戶拿走1000個token X轉到流動池內(也就是transferFrom,這一步需要有
token approve 額度),然後再從流動池轉997個token Y給你(transfer,這一步不用授權)
說到這裡,大家可以理解為什麼SWAP需要先授權合約可以動你的幣了吧,不然合約就無法
一個tx內完成兩步的SWAP
實際上的SWAP會再複雜一點,會透過一個router的合約,這個合約其實就是幫大家省
gas fee,因為你SWAP X to Y是一個流動池,SWAP X to Z又是另一個流動池,總不可能
X to 100種幣就要approve 100次吧,所以才會有router這個合約,這個合約已經跟他下面
的流動池都授權好了,所以如果來源是token X,只要允許router可以動你的token X他就
可以幫你換成他下面流動池內有對應的幣,連X->A->B->C都可以,只要頭是X就可以。
如果SWAP可以理解,接下來講添加流動性,添加流動性其實也是透過router,原因跟上面
一樣,現在你要添加一個X+Y的流動性進去XY池,需要三步,把同價值的X跟Y傳給流動池
然後流動池按比例產生一定數量的LP token,再把LP傳給你。所以添加流動性跟SWAP其實
是差不多的步驟,就是你用X+Y去SWAP成LP,所以需要授權router可以動你的X跟Y。同理
如果你要用LP贖回你的X跟Y,就是反向SWAP而已,這時候就需要授權router可以動你的LP
最後是質押,有分質押單幣跟質押LP,其實都一樣,質押單幣其實跟添加流動性一樣,
一樣,現在你要添加一個X+Y的流動性進去XY池,需要三步,把同價值的X跟Y傳給流動池
然後流動池按比例產生一定數量的LP token,再把LP傳給你。所以添加流動性跟SWAP其實
是差不多的步驟,就是你用X+Y去SWAP成LP,所以需要授權router可以動你的X跟Y。同理
如果你要用LP贖回你的X跟Y,就是反向SWAP而已,這時候就需要授權router可以動你的LP
最後是質押,有分質押單幣跟質押LP,其實都一樣,質押單幣其實跟添加流動性一樣,
你把X給質押池,質押池給你憑證,例如AAVE,polygon上你質押USDC給AAVE,會拿到
amUSDC的token當憑證,所以amUSDC其實可以在聚合器直接SWAP成USDC。有另一種做法是
不給憑證的,直接記在質押合約裡,某地址質押多少單幣或LP。所以這一步會要求授權
可以動單幣或是LP。
不給憑證的,直接記在質押合約裡,某地址質押多少單幣或LP。所以這一步會要求授權
可以動單幣或是LP。
講了這麼多,相信應該很清楚為什麼要approve了,那你們在進行approve的動作的時候,
第一步請確定你approve的對象是合約,要怎麼確定呢,請看我的前文
#1Y3aODE0
Re: [挖礦] MetaMask上AMM詐騙 - 看板 DigiCurrency - 批踢踢實業坊
我看過你的帳號了,不是metamask連結的問題。 是你approve 這個帳號 0xEdce3a41202B9f49D847eB02116Fe90e0754452C 可以動用你的USDT 證據就是這個交易
我看過你的帳號了,不是metamask連結的問題。 是你approve 這個帳號 0xEdce3a41202B9f49D847eB02116Fe90e0754452C 可以動用你的USDT 證據就是這個交易
裡面可以查approve的對象,然後去etherscan查那個地址,如果是合約會有一個contract
分頁,然後切到那個分頁看有沒有code read write可以看,如果有那就是有驗證code。
到這裡有9成左右是正規的,如果不能看到原始碼,只能看到一堆byte code,那我勸你換
一個SWAP,很高的機率是詐騙。
分頁,然後切到那個分頁看有沒有code read write可以看,如果有那就是有驗證code。
到這裡有9成左右是正規的,如果不能看到原始碼,只能看到一堆byte code,那我勸你換
一個SWAP,很高的機率是詐騙。
最後,剩下的1成要怎麼判斷呢,這就需要看裡面的code怎麼寫了,這部分其實很難講,
不過最初步的方法就是搜尋transferFrom這個函數,看用在什麼地方跟怎麼用,上面有提
到你approve老半天其實都是在為transferFrom鋪路,這個函數是可以動你幣的主要函數,
所以上面被莫名其妙轉幣的也都是透過這個函數,會顯示在tx內的inputData裡。不過這只
是最最最初級的判斷方法,真的騙錢合約其實還有很多種玩法,像是proxy,callback之類
的,這些我自己也還在學,所以大家還是盡量找正規有名的DEX玩吧,別去貪心搞一些來路
不明的。
不過最初步的方法就是搜尋transferFrom這個函數,看用在什麼地方跟怎麼用,上面有提
到你approve老半天其實都是在為transferFrom鋪路,這個函數是可以動你幣的主要函數,
所以上面被莫名其妙轉幣的也都是透過這個函數,會顯示在tx內的inputData裡。不過這只
是最最最初級的判斷方法,真的騙錢合約其實還有很多種玩法,像是proxy,callback之類
的,這些我自己也還在學,所以大家還是盡量找正規有名的DEX玩吧,別去貪心搞一些來路
不明的。
不過我也有玩過來路不明的,也就是土狗礦,只玩10U,賺了10U就跑了,然後就hard rug
了,顆顆。
--
一樣斗內專線
macd-taiwan.near
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.127.53.93 (臺灣)
※ 文章代碼(AID): #1YYXQF6x (DigiCurrency)
※ 文章網址: https://www.ptt.cc/bbs/DigiCurrency/M.1653216911.A.1BB.html
推 : MACD!!1F 05/22 18:56
推 : 好人一生平安2F 05/22 19:02
推 : MACD!!!3F 05/22 19:09
推 : 大佬帶我飛4F 05/22 19:10
推 : 謝謝分享5F 05/22 19:11
推 : 推6F 05/22 19:33
推 : 實在太複雜了...感謝詳細解說7F 05/22 19:59
推 : 推8F 05/22 20:26
推 : 你是好人 但是會被騙的人 SWAP第一段讀完就已經看不懂9F 05/22 20:31
推 : 感謝說明10F 05/22 20:42
→ : 至少看不懂的人會知道裡面水很深被勸退也不錯11F 05/22 20:45
→ : 簡單說就是使用者授權給 router contract12F 05/22 21:56
→ : 再由 router 經過pair contract
→ : function swap 計算完 安全轉移給用戶
→ : 不過最麻煩的 router function 選擇器
→ : 已由 uni 網頁前後端幫用戶處理好了
→ : 最難理解的 還是 aggregator項目的代碼
→ : 再由 router 經過pair contract
→ : function swap 計算完 安全轉移給用戶
→ : 不過最麻煩的 router function 選擇器
→ : 已由 uni 網頁前後端幫用戶處理好了
→ : 最難理解的 還是 aggregator項目的代碼
→ : 聚合器就是要串每個dex的介面,本來就會很複雜18F 05/22 22:11
→ : 不過為了套利我倒是大部分的dex swap介面都會接了
→ : 不過為了套利我倒是大部分的dex swap介面都會接了
推 : 解說推。20F 05/22 22:46
推 : 佛心推 大大真是太好心21F 05/22 23:07
推 : 祝福早日康復22F 05/22 23:14
推 : 詳細解說給推23F 05/22 23:50
推 : push push24F 05/22 23:59
推 : 推 祝早日康復25F 05/23 00:47
推 : 謝大大,祝康復後沒有副作用26F 05/23 01:14
推 : 祝 挑片只需五分鐘27F 05/23 02:35
推 : 佛心祝早日康復,但會被騙的人大概不會點這篇來看XD28F 05/23 02:36
推 : 推,長知識29F 05/23 07:23
推 : 推30F 05/23 11:58
推 : 想請問大大如果流動池的合約改成收到一定數量的A token31F 05/23 13:28
→ : + 就自動在扣掉gas fee後,轉對應數量的 B token回去,
→ : 是不是就能在不approve流動池使用自己錢包中的 A token
→ : 的情況下完成swap呢? 應該是我的假設有問題但又不確定
→ : 錯在哪
→ : + 就自動在扣掉gas fee後,轉對應數量的 B token回去,
→ : 是不是就能在不approve流動池使用自己錢包中的 A token
→ : 的情況下完成swap呢? 應該是我的假設有問題但又不確定
→ : 錯在哪
推 : 確實是看不懂,不過我之前定期會清授權,沒想到被鑽空子QQ36F 05/23 14:47
→ : to傑利蛋 你這樣就授權要交易數量的A就好37F 05/23 14:58
→ : 例如授權1000A,合約拿走1000A後就不能再動你的A
→ : 另外合約只是鏈上的資料,不會自己發起交易,你的作法第二
→ : 步需要再發起一次交易,這樣中間的時間差如果有其他交易插
→ : 進來那價格要怎麼算給你呢?
→ : 這就是為什麼要在一個tx內完成兩步的原因
→ : 例如授權1000A,合約拿走1000A後就不能再動你的A
→ : 另外合約只是鏈上的資料,不會自己發起交易,你的作法第二
→ : 步需要再發起一次交易,這樣中間的時間差如果有其他交易插
→ : 進來那價格要怎麼算給你呢?
→ : 這就是為什麼要在一個tx內完成兩步的原因
推 : 這個好!43F 05/23 15:04
--
※ 看板: DigiCurrency 文章推薦值: 0 目前人氣: 0 累積人氣: 18
回列表(←)
分享