[閒聊] 關於Defi上簡單的合約判斷

看板DigiCurrency (數位貨幣)作者 (MACD)時間1年前 (2022/05/22 18:55), 編輯推噓24(24019)
留言43則, 26人參與, 1年前最新討論串1/1
唉,是說也太多人被騙了吧,我都覺我應該開個顧問公司幫你們這些好野人審核approve 就賺翻了,不過人在貪的時候應該都聽不進去。 這禮拜我很衰的中鏢了,自己一個人在房間有夠無聊,來寫個簡單合約判斷積點福報,希 我可以順利康復。 首先,大家要理解為什麼SWAP、添加流動性、質押都需要approve這個動作,我一個一個慢 慢講,反正我現在有的是時間。 SWAP:就是把token X 給流動池然後流動池根據xy=k換算要給你多少Y,所以要完成這件事 需要兩個步驟:傳token X 給流動池、流動池傳token Y 給你。如果一般使用者用 metamask 的token transfer功能只能完成第一步,第二步流動池不會自動幫你執行,你們 必須要知道鏈上所有活動都是要有人來發起付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 實際上的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給質押池,質押池給你憑證,例如AAVE,polygon上你質押USDC給AAVE,會拿到 amUSDC的token當憑證,所以amUSDC其實可以在聚合器直接SWAP成USDC。有另一種做法是 不給憑證的,直接記在質押合約裡,某地址質押多少單幣或LP。所以這一步會要求授權 可以動單幣或是LP。 講了這麼多,相信應該很清楚為什麼要approve了,那你們在進行approve的動作的時候, 第一步請確定你approve的對象是合約,要怎麼確定呢,請看我的前文 #1Y3aODE0 裡面可以查approve的對象,然後去etherscan查那個地址,如果是合約會有一個contract 分頁,然後切到那個分頁看有沒有code read write可以看,如果有那就是有驗證code。 到這裡有9成左右是正規的,如果不能看到原始碼,只能看到一堆byte code,那我勸你換 一個SWAP,很高的機率是詐騙。 最後,剩下的1成要怎麼判斷呢,這就需要看裡面的code怎麼寫了,這部分其實很難講, 不過最初步的方法就是搜尋transferFrom這個函數,看用在什麼地方跟怎麼用,上面有提 到你approve老半天其實都是在為transferFrom鋪路,這個函數是可以動你幣的主要函數, 所以上面被莫名其妙轉幣的也都是透過這個函數,會顯示在tx內的inputData裡。不過這只 是最最最初級的判斷方法,真的騙錢合約其實還有很多種玩法,像是proxy,callback之類 的,這些我自己也還在學,所以大家還是盡量找正規有名的DEX玩吧,別去貪心搞一些來路 不明的。 不過我也有玩過來路不明的,也就是土狗礦,只玩10U,賺了10U就跑了,然後就hard rug 了,顆顆。 -- 一樣斗內專線 macd-taiwan.near -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.127.53.93 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/DigiCurrency/M.1653216911.A.1BB.html

05/22 18:56, 1年前 , 1F
MACD!!
05/22 18:56, 1F

05/22 19:02, 1年前 , 2F
好人一生平安
05/22 19:02, 2F

05/22 19:09, 1年前 , 3F
MACD!!!
05/22 19:09, 3F

05/22 19:10, 1年前 , 4F
大佬帶我飛
05/22 19:10, 4F

05/22 19:11, 1年前 , 5F
謝謝分享
05/22 19:11, 5F

05/22 19:33, 1年前 , 6F
05/22 19:33, 6F

05/22 19:59, 1年前 , 7F
實在太複雜了...感謝詳細解說
05/22 19:59, 7F

05/22 20:26, 1年前 , 8F
05/22 20:26, 8F

05/22 20:31, 1年前 , 9F
你是好人 但是會被騙的人 SWAP第一段讀完就已經看不懂
05/22 20:31, 9F

05/22 20:42, 1年前 , 10F
感謝說明
05/22 20:42, 10F

05/22 20:45, 1年前 , 11F
至少看不懂的人會知道裡面水很深被勸退也不錯
05/22 20:45, 11F

05/22 21:56, 1年前 , 12F
簡單說就是使用者授權給 router contract
05/22 21:56, 12F

05/22 21:56, 1年前 , 13F
再由 router 經過pair contract
05/22 21:56, 13F

05/22 21:56, 1年前 , 14F
function swap 計算完 安全轉移給用戶
05/22 21:56, 14F

05/22 21:56, 1年前 , 15F
不過最麻煩的 router function 選擇器
05/22 21:56, 15F

05/22 21:56, 1年前 , 16F
已由 uni 網頁前後端幫用戶處理好了
05/22 21:56, 16F

05/22 21:56, 1年前 , 17F
最難理解的 還是 aggregator項目的代碼
05/22 21:56, 17F

05/22 22:11, 1年前 , 18F
聚合器就是要串每個dex的介面,本來就會很複雜
05/22 22:11, 18F

05/22 22:11, 1年前 , 19F
不過為了套利我倒是大部分的dex swap介面都會接了
05/22 22:11, 19F

05/22 22:46, 1年前 , 20F
解說推。
05/22 22:46, 20F

05/22 23:07, 1年前 , 21F
佛心推 大大真是太好心
05/22 23:07, 21F

05/22 23:14, 1年前 , 22F
祝福早日康復
05/22 23:14, 22F

05/22 23:50, 1年前 , 23F
詳細解說給推
05/22 23:50, 23F

05/22 23:59, 1年前 , 24F
push push
05/22 23:59, 24F

05/23 00:47, 1年前 , 25F
推 祝早日康復
05/23 00:47, 25F

05/23 01:14, 1年前 , 26F
謝大大,祝康復後沒有副作用
05/23 01:14, 26F

05/23 02:35, 1年前 , 27F
祝 挑片只需五分鐘
05/23 02:35, 27F

05/23 02:36, 1年前 , 28F
佛心祝早日康復,但會被騙的人大概不會點這篇來看XD
05/23 02:36, 28F

05/23 07:23, 1年前 , 29F
推,長知識
05/23 07:23, 29F

05/23 11:58, 1年前 , 30F
05/23 11:58, 30F

05/23 13:28, 1年前 , 31F
想請問大大如果流動池的合約改成收到一定數量的A token
05/23 13:28, 31F

05/23 13:28, 1年前 , 32F
+ 就自動在扣掉gas fee後,轉對應數量的 B token回去,
05/23 13:28, 32F

05/23 13:28, 1年前 , 33F
是不是就能在不approve流動池使用自己錢包中的 A token
05/23 13:28, 33F

05/23 13:28, 1年前 , 34F
的情況下完成swap呢? 應該是我的假設有問題但又不確定
05/23 13:28, 34F

05/23 13:28, 1年前 , 35F
錯在哪
05/23 13:28, 35F

05/23 14:47, 1年前 , 36F
確實是看不懂,不過我之前定期會清授權,沒想到被鑽空子QQ
05/23 14:47, 36F

05/23 14:58, 1年前 , 37F
to傑利蛋 你這樣就授權要交易數量的A就好
05/23 14:58, 37F

05/23 14:58, 1年前 , 38F
例如授權1000A,合約拿走1000A後就不能再動你的A
05/23 14:58, 38F

05/23 15:01, 1年前 , 39F
另外合約只是鏈上的資料,不會自己發起交易,你的作法第二
05/23 15:01, 39F

05/23 15:01, 1年前 , 40F
步需要再發起一次交易,這樣中間的時間差如果有其他交易插
05/23 15:01, 40F

05/23 15:01, 1年前 , 41F
進來那價格要怎麼算給你呢?
05/23 15:01, 41F

05/23 15:01, 1年前 , 42F
這就是為什麼要在一個tx內完成兩步的原因
05/23 15:01, 42F

05/23 15:04, 1年前 , 43F
這個好!
05/23 15:04, 43F
文章代碼(AID): #1YYXQF6x (DigiCurrency)
文章代碼(AID): #1YYXQF6x (DigiCurrency)