文組也該知道的區塊鏈技術知識 為何發送 ERC20 Token 需要兩次交易? – Pelith
Blockchain Technical Overview <8> Transfer of ERC20 Token
收看本系列文章的讀者,應該都對於區塊鏈的基本原理和架構有些概念,如果沒有,推薦您先去 Google 搜尋 區塊鏈、比特幣、以太坊這些關鍵字了解一下。我們將在這些基礎概念之上,來談區塊鏈的技術知識。本系列文章並不會談到太深的技術鑽研,而是希望以深入淺出的方式讓每一個想要搞懂區塊鏈技術的人都能在讀完後說出:原來如此!
本系列文章由區塊鏈技術解決方案開發公司:Pelith 編撰。內容皆經過諸位區塊鏈資深研究員及開發者校對與驗證,盡可能確保內容正確無誤,讓讀者能安心吸收正確的區塊鏈技術知識。
為什麼發送 ERC20 Token 給別人需要兩次交易?
許多人可能對此感到疑問,透過本篇文章相信能充分為您解惑。上一節 我們帶大家一窺以太坊的架構全貌並為迄今為止七篇文章做了小結。我們將在這基礎之上闡明發送 ERC20 Token 背後的技術解析。
發送以太幣
發送以太幣時其實蠻符合我們的直覺,就是把錢發給別人,別人收到這樣。然而發送 ERC20 代幣卻彷彿不是這麼單純,為什麼呢?
ERC-20 代幣的本質
首先回顧一下 上一節 提到的,ERC20 代幣只是用 ERC20 之智慧合約底下的記憶體來儲存記錄各個地址持有數量的帳本。既然對象是個智慧合約,就要再回顧一下 第二節 提到的,個人帳戶(Externally Owned Account, EOA)與 合約帳戶(Contract Account)的不同,由於智慧合約沒有主觀意識,動作皆需要由 EOA 發交易來觸發。因此當合約地址收到 ETH 外的其它代幣時,它並不會知道。因為更動的是「另一個智慧合約底下的記憶體」!
我們實際來看一個範例:
假設我想要透過去中心化交易所 Uniswap 將我持有的 82 顆 cDAI 兌換成 0.092 顆 ETH,在技術上是如何做到的呢?
先備知識:cDAI 是我將 DAI 存入 Compound 放貸後,Compound 發回給我的 ERC20 Token。所以 cDAI 是由 Compound 管理的 cDAI 智慧合約底下之記憶體(帳本)來記錄追蹤的。
我的 Token Swap 需求在常規邏輯上是:
我把我的 cDAI token 發送給 Uniswap,Uniswap 把 ETH 發送給我。
不過事情並非這麼單純。由於 Uniswap 是去中心化,由智慧合約來運作的。因此當 Uniswap 收到了 cDAI token 時,它不像人一樣可以點開 Metamask 去查看是否有收到,確認有收到後再把 ETH 發送給我,因此需要用特殊的做法來實現這樣的流程。
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.092 顆 ETH 發送給我。
如下方示意圖所示:
Published at Wed, 27 Nov 2019 07:55:56 +0000
{flickr|100|campaign}
