當你送出一個 ERC20 代幣(token)的時候發生了什麼事?USDC 算是常見的 ERC-20 代幣。以 USDC 代幣來當例子。想像情境:你想發送一筆交易,把 1 塊錢的 USDC 給你的韓國人朋友。這背後是發生什麼事情呢?
首先,你在瀏覽器,打開狐狸錢包 MetaMask,敲一敲,按下發送。這個時候會出現一筆交易,交易會廣播(broadcast)到以太坊的 p2p 網路。這筆交易上面資料寫了什麼呢?交易(transactions)實際上是一筆有很多欄位的資料。
這些欄位包括:
這個 calldata 是 call 什麼呢?是呼叫 USDC 合約裡面的 transfer function 轉帳函式。這個 transfer function 吃幾個 argument 呢?argument 有 from、to,和 value。from 就是你的 USDC 的地址。to 是收款人韓國人朋友的 USDC 的地址。value 是 1 塊 USDC。
當你送出這筆交易之後,交易進了以太坊的 p2p 網路。進到區塊鏈驗證者(validator)的記憶池(memory pool)或稱交易池(transaction pool)。區塊鏈驗證者(validator)會把這筆交易拿出來打包成區塊,區塊再廣播(broadcast)到以太坊的 p2p 網路。其他節點會執行這筆交易。
這個時候,USDC 合約的 contract account 裡的 storage 有一個 balance 的映射(mapping),會記載哪一個 USDC 的地址有多少餘額。這邊運作的感覺,會比較類似「查表」。先查原來你的帳戶有多少錢,再把查表的表更新。比如說,你的 USDC 餘額減少一塊錢 USDC,韓國人朋友的 USDC 餘額增加一塊錢 USDC。