零基础入门 DeFi:手把手教你操作 approve 确保资产安全
“approve 是 ERC20 代币才有的一种操作,在操作一些很不熟悉的 DeFi 产品的时候,我们需要了解下到底 approve 做了什么,以及如何在体验完了那些可能不安全的产品后撤销 approve。”
到处都有的 approve可能才看到 approve
这个词语,你会觉得和自己没有任何关系。但如果你是 Defi
产品的用户,那么你一定执行过很多次 approve
操作了。
比如在 MakerDao
里面, unlock Dai
和 unlock MKR
的操作都是 approve
:
比如在 Compound
里面的 enable
操作:
比如在 Uniswap
里面的 unlock
操作 :
上面提到的这些都是 approve
操作,它们的共同点是,当你要进行这些操作的时候,在MetaMask
弹出来的窗口里面,我们会看到写了一个 APPROVE
:
上面提到的这些 Defi
产品,都是比较可信的,也正因为如此,原本其实很危险的 approve 操作
也可以变得很无所谓了。
但在操作一些很不熟悉的 Defi
产品的时候,我们需要了解下到底 approve
做了什么,以及如何在体验完了那些可能不安全的产品后,撤销 approve
。
这篇教学会讲到的内容到底 approve
做了什么?
如何撤销 approve
到底 approve 做了什么?approve
是 ERC20 Token
才有的一种操作。如果你已经玩过一些 Defi
产品了,那你用过最多的一款 ERC20 Token
很大概率可能是 Dai
,我们下面就以 Dai
为例来说明。
眼睛男想从自己的账户,转一些 Dai 给胡子男:
上面这个操作,眼镜男其实是和 Dai
这个 ERC20
的智能合约在交互,他向智能合约发起这样的请求: 请从 眼镜男 的账户里转一个 Dai 给 胡子男
,如图:
智能合约收到了眼镜男的请求,会做一些验证:
这里我们写了其中的两个验证条件:
眼镜男的账户里,必须要有足够多的 Dai
发起请求的,是眼镜男本人
这里我们要特别注意这里提到的第二个条件,因为这是 approve
产生的深层原因。
我们来看一下,眼镜男 如果尝试使用一个 Defi
产品,比如 uniswap
:眼镜男想要用 1 Dai
在uniswap
上换一点 ETH
。这个过程其实是这样:
眼镜男向 uniswap
的智能合约发起这样的请求,uniswap
的智能合约会做什么呢?它当然首先要从 眼镜男 的账户里面拿到 1 Dai
,所以 uniswap
会向 Dai
的智能合约 发起请求,要求 将眼镜男账户上的 1 Dai,转到 uniswap 的账户上
:
和上面一样, Dai
的智能合约需要验证两件事情:
而这里的第二条就不成立了,因为这个请求并不是直接由 眼睛男 发起的,而是由 uniswap
发起的。
不过没有关系的是,Dai
的智能合约会尝试验证另一个条件,如果是成立的,也可以让这个操作成功:
看到这里,你就明白 approve
的含义了。approve
是 ERC20 Token
都有的一个功能:
允许另外一个帐号(可以是个人帐号,也可以是智能合约帐号)使用你的部分资产
看到这里,你大概能明白,为什么 approve 是件很危险的事情了
,你是否会很担心,uniswap
能够随便操纵你的资产?
虽然你 approve
了 uniswap
可以随便操纵你的 Dai
,但是 uniswap
的代码是开源的,你可以阅读它的代码,发现它的代码里面,规定了在什么样的情况下可以操纵你的 Dai
。
那么,结合上面的内容,我们马上能够得到这样一些结论:
如果一个 Defi
产品的智能合约不是开源的,却又要求你 approve
,你一定要非常慎重。
即使一个 Defi
产品的智能合约是开源的,如果它没有经过较多的第三方审计,那么还是可能出现 bug
,导致你的资产能够随意被操纵。所以,如果你长时间不会操纵,可以先 撤销你的 approve
用例子来研究 approve 操作在演示如何 撤销你的 approve
之前,我们先以 uniwap
为例子,看下 approve
操作背后发生的事情:
uniswap
在 pool
的时候,需要首先 approve dai
(也就是允许 uniwap
的智能合约操纵你的Dai
),也就是点击这里的 unlock
,然后会看到弹出的 MetaMask
窗口:
你应该已经注意到那个很大的数了,1.157920892373162e+59
,对于不熟悉的朋友,我们简单地说名下,这个表示的是 1.157920892373162 乘以 10 的 59 次方
。当然,你的账户里面肯定没有那么多 Dai
,这里只是告诉 Dai
的合约说: 我们最多允许 uniswap 的智能合约 操纵我们的 1.157920892373162 乘以 10 的 59 次方 个 Dai
,由于我们的账户里面没有那么多 Dai
,那么这个其实等价于说: 我们允许 uniswap 的智能合约操纵我们账户里面的所有的 Dai
.
我们点击 confirm
,确认这笔交易,然后,我们等待交易确认,在 uniswap
的右上角,我们点击我们的地址:
在弹出的菜单里面,我们点击这里的交易链接,跳转到 etherscan
来仔细看下 approve
操作:
我们首先注意到,这里的 approve
操作,我们是向 Dai
的智能合约发起的这个请求,所以你会看到 Dai
的智能合约地址出现在了 To
后面。
接着,我们点击这里的 Click to see More
,可以看到这里面的更多的细节:
我们来简单地说下 input data
的部分:Function: approve(address guy, uint256 wad)
:简单地说来,当我们向智能合约发起请求的时候,我们需要指明我们要做什么。这里表示的是,我们要进行 approve
操作(如果用更加准确地术语: 这笔以太坊交易调用了 Dai 智能合约的 approve 函数
)。这里的 [0]
后面的内容,也就是00000000000000000000000009cabec1ead1c0ba254b09efb3ee13841712be14
里面的 后 40 位
表示的是我们要 approve
的 个人 / 智能合约 地址。09cabec1ead1c0ba254b09efb3ee13841712be14
就是 uniswap 智能合约
的地址了这里的 [1]
后面的内容,也就是ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
是我们要允许uniswap
可以操纵我们的 Dai
的数量,其实这就是上面的 1.157920892373162 乘以 10 的 59 次方
的另一种写法(16 进制)
撤销你的 approve 操作那么要怎么 撤销 approve 操作
呢?
有的 Defi
产品,在它们的网站上提供了 lock
功能,比如 Maker
的 CDP portal
:
其实,对于没有深入了解 approve
原理的用户来说, unlock
功能可能反而会造成困扰,从用户体验的角度来说,有些产品在设计的时候,不会给出 lock
这个功能,比如在 uniswap
上面,我们就没有看到 lock
这个功能:
那我们应该怎么撤销这次 approve
操作呢?
让我们来简单地回顾下我们上面的 approve
操作做了什么:
首先,approve
操作是向 Dai
的智能合约发起的请求
其次,approve
操作里面,我们允许 uniswap
的智能合约最多操纵我们1.157920892373162 乘以 10 的 59 次方
个 Dai
那 撤销 approve
操作就可以等价于是这样的:
首先,撤销 approve
依然是向 Dai
的 智能合约 发起的请求
其次,approve
操作里面,我们允许 uniswap
的智能合约最多操纵我们 0
个 Dai
好了,方案有了,让我们来试试吧。
我们回到刚刚的 etherscan
的页面,我们点击这里的 Dai
合约的地址,跳转到 Dai
智能合约的地址对应的 etherscan
的页面:
我们点击上面的 Contract
,跳转到合约的页面:
注意到这里有个 write contract
,可以理解为这个就是我们要和这个合约进行交互:
接下来,就和使用其他 Dapp
一样,我们需要连接到我们的钱包,我们点击这里的 Connect to Web3
:
连接之后,我们在下面找到 approve
:
我们现在要 撤销之前对 uniswap 的 approve
,我们输入上面拿到的 uniswap 智能合约
的地址09cabec1ead1c0ba254b09efb3ee13841712be14
,注意,输入的时候,要在地址前面加一个 0x
,也就是 0x09cabec1ead1c0ba254b09efb3ee13841712be14
; 然后还要输入 approve
的数量,这里我们输入 0
, 同样,要在前面加一个 0x
就成了 0x0
:
然后我们点击 write
,在弹出的 MetaMask
窗口里面,我们看到:
主要到,这里 approve
下面的 0
, 这正是我们想要的,我们点击 confirm
确认这笔交易:
然后,我们会看到 write
旁边多出了一个 View Your Transaction
按钮,我们点击这个按钮,可以跳转到我们的这次 approve
操作的 etherscan
页面:
现在,让我们回到 uniswap
的页面看下:
unlock
按钮又回来了,说明我们 已经成功撤销了 对 uniswap 智能合约的 approve 操作
。
区块链叁点壹自媒体(ID:btc820)是知名原创区块链&科技&营销自媒体,全网总粉丝60万+,全网原创文章阅读总量2亿+,微博签约自媒体,抖音西瓜视频人气博主,火星财经、金色财经资深专栏作者,精选分析最新最热区块链&科技&营销案例,长期提供区块链&科技&营销领域深度独家观察。
免责声明区块链叁点壹推送文章仅供参考,不作为投资研究决策依据,投资者据此做出的任何投资决策与本公众号无关。
欢迎关注:
1、后台回复BTC,领取免费教材。
2、转发微信精选商品橱窗给好友有福利哦!
转发一周免费领取价值99元定制T恤,
转发两周免费领取价值199元BTC纪念版T恤,
转发一个月微信橱窗所有商品六折。
3、后台回复”十年走势“,查看BTC十年走势图。
4、更多福利,请扫下方小程序码前往微信精选商品橱窗。
部分图片来自网络
©本文版权归“区块链叁点壹”所有
———————————————————–
友情提示:转发公众号任意文章,联系客服领取精美礼品一份。
目前600000+人已关注加入我们
BSV商业世界提供比特币BSV应用,区块链应用,BSV交易,行情,平台,社区等区块链信息,所有信息均来自网络,不代表网站意见。特别提示,比特币及其他虚拟货币有超高风险,需谨慎对待,防范以“虚拟货币”“区块链”名义进行非法集资。如若转载,请注明出处:https://bitcoinwinds.com/666.html