黄金形态通APP下载

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

jayDeFi5年前 (2021-05-16)33
到底 approve 做了什么,以及如何在体验完了那些可能不安全的产品后撤销 approve。…以太坊,项目,观点,MakerDAO,DeFi,DAI,Uniswap...

approve 是 ERC20 代币才有的一种操作,在操作一些很不熟悉的 DeFi 产品的时候,我们需要了解下到底 approve 做了什么,以及如何在体验完了那些可能不安全的产品后撤销 approve。

作者:开放金融基金会(DeFi.org),专注于去中心化金融生态的非营利组织

到处都有的 approve

可能才看到 approve 这个词语,你会觉得和自己没有任何关系。但如果你是 Defi 产品的用户,那么你一定执行过很多次 approve 操作了。

比如在 MakerDao 里面, unlock Daiunlock MKR 的操作都是 approve :

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

比如在 Compound 里面的 enable 操作:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

比如在 Uniswap 里面的 unlock 操作 :

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

上面提到的这些都是 approve 操作,它们的共同点是,当你要进行这些操作的时候,在 MetaMask 弹出来的窗口里面,我们会看到写了一个 APPROVE

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

上面提到的这些 Defi 产品,都是比较可信的,也正因为如此,原本其实很危险的 approve 操作 也可以变得很无所谓了。

但在操作一些很不熟悉的 Defi 产品的时候,我们需要了解下到底 approve 做了什么,以及如何在体验完了那些可能不安全的产品后,撤销 approve

这篇教学会讲到的内容到底 approve 做了什么?如何撤销 approve到底 approve 做了什么?

approveERC20 Token 才有的一种操作。如果你已经玩过一些 Defi 产品了,那你用过最多的一款 ERC20 Token 很大概率可能是 Dai,我们下面就以 Dai 为例来说明。

眼睛男想从自己的账户,转一些 Dai 给胡子男:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

上面这个操作,眼镜男其实是和 Dai 这个 ERC20 的智能合约在交互,他向智能合约发起这样的请求: 请从 眼镜男 的账户里转一个 Dai 给 胡子男,如图:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

智能合约收到了眼镜男的请求,会做一些验证:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

这里我们写了其中的两个验证条件:

眼镜男的账户里,必须要有足够多的 Dai发起请求的,是眼镜男本人

这里我们要特别注意这里提到的第二个条件,因为这是 approve 产生的深层原因。

我们来看一下,眼镜男 如果尝试使用一个 Defi 产品,比如 uniswap: 眼镜男想要用 1 Daiuniswap 上换一点 ETH。这个过程其实是这样:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

眼镜男向 uniswap 的智能合约发起这样的请求,uniswap 的智能合约会做什么呢? 它当然首先要从 眼镜男 的账户里面拿到 1 Dai,所以 uniswap 会向 Dai 的智能合约 发起请求,要求 将眼镜男账户上的 1 Dai,转到 uniswap 的账户上

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

和上面一样, Dai 的智能合约需要验证两件事情:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

而这里的第二条就不成立了,因为这个请求并不是直接由 眼睛男 发起的,而是由 uniswap 发起的。

不过没有关系的是,Dai 的智能合约会尝试验证另一个条件,如果是成立的,也可以让这个操作成功:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

看到这里,你就明白 approve 的含义了。

approveERC20 Token 都有的一个功能:

允许另外一个帐号(可以是个人帐号,也可以是智能合约帐号)使用你的部分资产

看到这里,你大概能明白,为什么 approve 是件很危险的事情了,你是否会很担心,uniswap 能够随便操纵你的资产?

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

虽然你 approveuniswap 可以随便操纵你的 Dai,但是 uniswap 的代码是开源的,你可以阅读它的代码,发现它的代码里面,规定了在什么样的情况下可以操纵你的 Dai

那么,结合上面的内容,我们马上能够得到这样一些结论:

如果一个 Defi 产品的智能合约不是开源的,却又要求你 approve,你一定要非常慎重。即使一个 Defi 产品的智能合约是开源的,如果它没有经过较多的第三方审计,那么还是可能出现 bug,导致你的资产能够随意被操纵。所以,如果你长时间不会操纵,可以先 撤销你的 approve用例子来研究 approve 操作

在演示如何 撤销你的 approve 之前,我们先以 uniwap 为例子,看下 approve 操作背后发生的事情:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

uniswappool 的时候,需要首先 approve dai(也就是允许 uniwap 的智能合约操纵你的 Dai),也就是点击这里的 unlock,然后会看到弹出的 MetaMask 窗口:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

你应该已经注意到那个很大的数了,1.157920892373162e+59,对于不熟悉的朋友,我们简单地说名下,这个表示的是 1.157920892373162 乘以 10 的 59 次方。 当然,你的账户里面肯定没有那么多 Dai,这里只是告诉 Dai 的合约说: 我们最多允许 uniswap 的智能合约 操纵我们的 1.157920892373162 乘以 10 的 59 次方 个 Dai,由于我们的账户里面没有那么多 Dai,那么这个其实等价于说: 我们允许 uniswap 的智能合约操纵我们账户里面的所有的 Dai.

我们点击 confirm,确认这笔交易,然后,我们等待交易确认,在 uniswap 的右上角,我们点击我们的地址:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

在弹出的菜单里面,我们点击这里的交易链接,跳转到 etherscan 来仔细看下 approve 操作:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

我们首先注意到,这里的 approve 操作,我们是向 Dai 的智能合约发起的这个请求,所以你会看到 Dai 的智能合约地址出现在了 To 后面。

接着,我们点击这里的 Click to see More,可以看到这里面的更多的细节:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

我们来简单地说下 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 功能,比如 MakerCDP portal

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

其实,对于没有深入了解 approve 原理的用户来说, unlock 功能可能反而会造成困扰,从用户体验的角度来说,有些产品在设计的时候,不会给出 lock 这个功能,比如在 uniswap 上面,我们就没有看到 lock 这个功能:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

那我们应该怎么撤销这次 approve 操作呢?

让我们来简单地回顾下我们上面的 approve 操作做了什么:

首先,approve 操作是向 Dai 的智能合约发起的请求其次,approve 操作里面,我们允许 uniswap 的智能合约最多操纵我们 1.157920892373162 乘以 10 的 59 次方Dai

撤销 approve 操作就可以等价于是这样的:

首先,撤销 approve 依然是向 Dai 的 智能合约 发起的请求其次,approve 操作里面,我们允许 uniswap 的智能合约最多操纵我们 0Dai 好了,方案有了,让我们来试试吧。

我们回到刚刚的 etherscan 的页面,我们点击这里的 Dai 合约的地址,跳转到 Dai 智能合约的地址对应的 etherscan 的页面:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

我们点击上面的 Contract,跳转到合约的页面:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

注意到这里有个 write contract,可以理解为这个就是我们要和这个合约进行交互:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

接下来,就和使用其他 Dapp 一样,我们需要连接到我们的钱包,我们点击这里的 Connect to Web3

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

连接之后,我们在下面找到 approve

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

我们现在要 撤销之前对 uniswap 的 approve,我们输入上面拿到的 uniswap 智能合约 的地址 09cabec1ead1c0ba254b09efb3ee13841712be14,注意,输入的时候,要在地址前面加一个 0x,也就是 0x09cabec1ead1c0ba254b09efb3ee13841712be14; 然后还要输入 approve 的数量,这里我们输入 0, 同样,要在前面加一个 0x 就成了 0x0

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

然后我们点击 write,在弹出的 MetaMask 窗口里面,我们看到:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

主要到,这里 approve 下面的 0, 这正是我们想要的,我们点击 confirm 确认这笔交易:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

然后,我们会看到 write 旁边多出了一个 View Your Transaction 按钮,我们点击这个按钮,可以跳转到我们的这次 approve 操作的 etherscan 页面:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

现在,让我们回到 uniswap 的页面看下:

零基础入门 DeFi:手把手教你操作 approve 确保资产安全

unlock 按钮又回来了,说明我们 已经成功撤销了 对 uniswap 智能合约的 approve 操作

您暂未设置收款码

请在主题配置——文章设置里上传

扫描二维码手机访问