为何发送ERC20 Token 需要两次交易?

释放双眼,带上耳机,听听看~!

许多人可能对此感到疑问,透过本篇文章相信能充分为您解惑。上一节我们带大家一窥以太坊的架构全貌并为迄今为止七篇文章做了小结。我们将在这基础之上阐明发送ERC20 Token背后的技术解析。

发送以太币

发送以太币时其实蛮符合我们的直觉,就是把钱发给别人,别人收到这样。然而发送ERC20 代币却仿佛不是这么单纯,为什么呢?

ERC-20 代币的本质

首先回顾一下上一节提到的,ERC20代币只是用ERC20之智能合约底下的记忆体来储存记录各个地址持有数量的帐本。既然对象是个智能合约,就要再回顾一下第二节提到的,个人帐户(Externally Owned Account, EOA)与合约帐户(Contract Account)的不同,由于智能合约没有主观意识,动作皆需要由EOA发交易来触发。因此当合约地址收到ETH外的其它代币时,它并不会知道。因为更动的是「另一个智能合约底下的记忆体」!

我们实际来看一个范例:假设我想要透过去中心化交易所Uniswap 将我持有的82 颗cDAI 兑换成0.0092 颗ETH,在技术上是如何做到的呢?

先备知识: cDAI是我将DAI存入Compound放贷后,Compound发回给我的ERC20 Token。所以cDAI是由Compound管理的cDAI智能合约底下之记忆体(帐本)来记录追踪的。

我的Token Swap需求在常规逻辑上是:我把我的cDAI token发送给Uniswap,Uniswap把ETH发送给我。

不过事情并非这么单纯。由于Uniswap是去中心化,由智能合约来运作的。因此当Uniswap收到了cDAI token时,它不像人一样可以点开Metamask去查看是否有收到,确认有收到后再把ETH发送给我,因此需要用特殊的做法来实现这样的流程。

我们就直接开门见山讲答案

用比喻来说明的话,做法是:

1. 我先到银行(ERC20 Token的智能合约)开启授权,允许对方(第三方智能合约)能够到我的户头,提取钱(ERC20 Token),并设定「能够提取的额度」。

2. 接着我开给对方一张「写上金额的支票」,让对方拿着支票到银行中提领我帐户中的钱。

因为对象(智能合约)是一段程式码,如此做法方能让智能合约确认提取到Token并执行后续的合约逻辑操作。

因此,回到区块链的世界,必须透过以下两个交易步骤来进行:

Tx1: Approve(授权)

我必须先发一笔交易到「Compound cDAI Token智能合约」(银行),
授权「Uniswap的cDAI to ETH交易对智能合约」(对方)
可以到「Compound的cDAI Token智能合约」(银行)
提取我的「 cDAI Token」(钱)。

Tx2: Swap Token(兑换)

随后,我再发送一笔「将cDAI兑换为ETH」的交易(支票)
到「Uniswap的cDAI to ETH交易对智能合约」(对方)触发,
让「Uniswap的cDAI to ETH交易对智能合约」(对方)
至「Compound的cDAI Token智能合约」(银行)
提领我的82颗「cDAI Token」(钱)。
「Uniswap的cDAI to ETH交易对智能合约」(对方)提领到Token(钱)后再将0.0092颗ETH发送给我。

如下方示意图所示:

接着我们带大家实际走一次操作流程以搞懂背后技术逻辑。

Tx1: Approve(授权)

首先,当我们来到Uniswap交易所,选好Input与Output的加密货币种类并在Input输入欲兑换的数量,便可以在我欲兑换成ETH的cDAI Token旁边看到「Unlock」的按钮。这就是要求我进行「Tx1:授权」的操作。

点选「Unlock」按钮后,便会跳出「批准」的交易来让我签署。一但签署后,我便批准了Uniswap能够到Compound提领我的cDAI的权限。

这笔交易被确认后,我们便可以凭Txn Hash到Etherscan上找到这笔交易。可以发现这笔交易是发给「Compound的cDAI ERC20 Token智能合约」。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

人已赞赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新消息 消息中心
有新私信 私信列表
搜索