唉,是说也太多人被骗了吧,我都觉我应该开个顾问公司帮你们这些好野人审核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
了,颗颗。