比特时代客服在哪里|零基础入门 DeFi:手把手教你操作 approve 确保资产安全
approve 是 ERC20 代币才有的一种操作,在操作一些很不熟悉的 DeFi 产品的时候,我们需要了解下到底 approve 做了什么,以及如何在体验完了那些可能不安全的产品后撤销 approve。
作者:开放金融基金会(DeFi.org),专注于去中心化金融生态的非营利组织
到处都有的 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 操作
。
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。