こんにちは、あるいはこんばんは
新卒2年目(もうすぐ3年目...!!)の野地です。
ここ一年ちょっとランニングにハマっており、先日2回目のフルマラソンで大阪マラソンに出てきました。社内で(細々と)部活動もやっています。
あとFP2級に落ちました。
今さらERC20のインターフェースについて調べる機会があり、若干理解に詰まったtransferFrom() について紹介します。
※イーサリアムの話です。
ERCとは
Ethereum Request for Comments の略でイーサリアム上のトークンの共通規格です。
流行って久しいNFT(Non-Fungible Token)はERC721トークンの一般的な呼び方です。
替えが効かないNFTに対して、替えが効く普通のお金っぽいものはFungible Tokenと呼べますが、そのイーサリアムブロックチェーン上での共通規格がERC20です。
NFTの前にICOがいい意味でも悪い意味でも流行りましたが、その時に発行されてたものなど、世の中のいわゆる「仮想通貨」は大体ERC20トークンです。
共通規格をみんなが使うことで取引所(集権型:CEX、分散型:DEX)やウォレットを使って簡単にやり取りできるわけですね。
ERC20のインターフェース
ERC20は、以下の6つの関数を持つインターフェースで定義されています。
- balanceOf
指定されたアドレスの残高を返す関数 - totalSupply
トークンの合計供給量を返す関数 - transfer
指定されたアドレスにトークンを送信する関数 - transferFrom
指定されたアドレスから別のアドレスにトークンを送信する関数 - approve
別のアドレスが自分のアドレスに対して一定量のトークンを使用できるようにする関数 - allowance
別のアドレスが自分のアドレスに対して使用できるトークンの残高を返す関数
上から3つは分かりやすいです。
あるトークンをAさんからBさんに送って、各々が今いくら持ってるのか、全体で合計いくら発行されてるのか。
これだけで現実のお金の機能は果たせているんじゃないでしょうか。
よく分からないのはtransferFromです。説明はなんだか恐ろしい感じですね。
Cさんが勝手にAさんのトークンをBさんに送ってしまえるということでしょうか...?
transferFromの使われ方
B(イーサリアムブロックチェーン上に記録されたプログラム=コントラクト)がAさんのトークンを、Aさんの承認に基づいて引き出す、というような感じで使います。
さらにもう少し具体的に考えましょう。
Uniswapのような分散型取引所Bでxトークンとyトークンを交換したいとします。
イーサリアムではコントラクトもアドレスを持っており、ETHやその他トークンを送ることができますが(xトークンのtransfer機能)、送っただけでは、送っただけです。
Aさんはxトークンを送ってもyトークンは貰えません。
そこで分散型取引所Bのコントラクトの交換機能を使うことにありますが、その際Aさんのxトークンを引き出し、引き出せたらAさんにYトークンを送る、という風にしたいです。
その時に分散型取引所BがtransferFromを使ってAさんのxトークンを引きだせる、というわけですね。
現実世界の動きを絡めると
- Aさんが分散型取引所Bのアプリを操作
- xトークンをBにある量送ることを許可(xトークンのapprove機能)して
- Bの交換機能を実行
- Bの交換機能内でxトークンのtransferFrom機能が使われる
という流れになるのだと思います。
transferFromはミドルマンがいない非中央集権的な世界を成り立たせる重要な機能でした!!