[闲聊] 关于Defi上简单的合约判断

楼主: MACD (MACD)   2022-05-22 18:55:09
唉,是说也太多人被骗了吧,我都觉我应该开个顾问公司帮你们这些好野人审核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
了,颗颗。
作者: slayptter ((^_^))   2022-05-22 18:56:00
MACD!!
作者: a11103nise (路人甲)   2022-05-22 19:02:00
好人一生平安
作者: kayak5566 (56不能亡)   2022-05-22 19:09:00
MACD!!!
作者: greg7575 (顾家)   2022-05-22 19:10:00
大佬带我飞
作者: ken123   2022-05-22 19:11:00
谢谢分享
作者: pericles (吼~)   2022-05-22 19:33:00
作者: sazabijiang (笔落惊风雨诗成泣鬼神)   2022-05-22 19:59:00
实在太复杂了...感谢详细解说
作者: worldfallsin (德蕾莎)   2022-05-22 20:26:00
作者: brucetu (sec)   2022-05-22 20:31:00
你是好人 但是会被骗的人 SWAP第一段读完就已经看不懂
作者: x246libra (楓)   2022-05-22 20:42:00
感谢说明
楼主: MACD (MACD)   2022-05-22 20:45:00
至少看不懂的人会知道里面水很深被劝退也不错
作者: JapaZPa4867 (落叶学系权威)   2022-05-22 21:56:00
简单说就是使用者授权给 router contract再由 router 经过pair contractfunction swap 计算完 安全转移给用户不过最麻烦的 router function 选择器已由 uni 网页前后端帮用户处理好了最难理解的 还是 aggregator项目的代码
楼主: MACD (MACD)   2022-05-22 22:11:00
聚合器就是要串每个dex的接口,本来就会很复杂不过为了套利我倒是大部分的dex swap接口都会接了
作者: john371911 (醬廖)   2022-05-22 22:46:00
解说推。
作者: creepy (左招财 右纳福)   2022-05-22 23:07:00
佛心推 大大真是太好心
作者: soulknight (冷风轻拂花残缺)   2022-05-22 23:14:00
祝福早日康复
作者: AlexLeeW (W.L.L)   2022-05-22 23:50:00
详细解说给推
作者: kobe143 (kobe143)   2022-05-22 23:59:00
push push
作者: cheng31507 (ShiKiRz)   2022-05-23 00:47:00
推 祝早日康复
作者: shengachris (Chris)   2022-05-23 01:14:00
谢大大,祝康复后没有副作用
作者: visualcookie   2022-05-23 02:35:00
祝 挑片只需五分钟
作者: gamafish (嘎玛鱼)   2022-05-23 02:36:00
佛心祝早日康复,但会被骗的人大概不会点这篇来看XD
作者: starorion (星)   2022-05-23 07:23:00
推,长知识
作者: clubee (柏拉)   2022-05-23 11:58:00
作者: Jerryegg (boiled egg)   2022-05-23 13:28:00
想请问大大如果流动池的合约改成收到一定数量的A token+ 就自动在扣掉gas fee后,转对应数量的 B token回去,是不是就能在不approve流动池使用自己钱包中的 A token的情况下完成swap呢? 应该是我的假设有问题但又不确定错在哪
作者: envogue (台北贵州-地无3里平)   2022-05-23 14:47:00
确实是看不懂,不过我之前定期会清授权,没想到被钻空子QQ
楼主: MACD (MACD)   2022-05-23 14:58:00
to杰利蛋 你这样就授权要交易数量的A就好例如授权1000A,合约拿走1000A后就不能再动你的A另外合约只是链上的资料,不会自己发起交易,你的作法第二步需要再发起一次交易,这样中间的时间差如果有其他交易插进来那价格要怎么算给你呢?这就是为什么要在一个tx内完成两步的原因
作者: DeliciousWei (美味之道)   2022-05-23 15:04:00
这个好!

Links booklink

Contact Us: admin [ a t ] ucptt.com