ERC20トークンとは
ERCとはRequest for Commentsの略であり、Ethereumのプラットフォームで使用されることを目的とした規格のことであり、その規格に基づいて作られたトークンをERC20トークンと言う。
ERC20の他に、ERC223やERC721などの規格が存在し、ERC223は、ERC20を改良されたものであり、ERC721は、ERC20やERC223のように価値の指標を「量」とせず、「質」を価値の指標とし、Dappsゲームなどで使用される。
ERC20規格が作られた理由
ERC20が生まれる前は、ICO(Initial Coin Offeringの略で、と呼ばれる仮想通貨を使った資金調達)の参加者は特に決められたルールがないトークを作成していたので、きちんと売買可能なのか判別するのが困難であり、またそれぞれのトークンに対してウォレットや取引所が対応しているので多くのウォレットを管理、運用するのはあまり実用的ではない。それを改善するために作られたのがERC20トークンである。
ERC20トークンの特徴
上記のような理由からERC20トークンが作られ、以下のような特徴が挙げられる。
- トークンを発行する際の基準を統一化することで開発コストや手間を省く
- 複数のトークンを一つのウォレットで管理、運用を可能にし、参加者の利便性を高める
- ERC20で統一することによりプロトコルで発生する問題点に多くのエンジニアが対応できるため、セキュリティー面の安全性が保証される
上記に挙げた通り、大きな特徴はERC20トークンを一元管理できることで、取引所への上場や利便性の向上が期待でき、基準統一化により参加者は容易にトークンの発行が可能で、安全に売買取引が可能であることである。
ERC20トークンの関数とイベント
ERC20トークンは6つのメソッドとイベントにより作成できる。openZeppelinライブラリを使用することでERC20トークンの実装が簡単にできる。スマートコントラクトの開発にはsolidityという言語が使われており上記はその言語で書かれたメソッドであるため今回は簡単にメソッドの説明をする。今度実装も含め具体的な解説を行います。参考はgithubより。
メソッドの説明
関数名 | 説明 |
---|---|
totalSupply() | トークンの合計供給量を返す |
balanceOf(address _owner) | _ownerアカウントの残高を返す |
transfer(address _to, uint256 _value) | 指定されたaddressに指定された量のトークンを転送する |
transferFrom(address _from, address _to, uint256 _value) | address _formから_toへ指定されたトークンを転送する |
approve(address _spender, uint256 _value) | _spenderから_value分引き出すことを許可する |
allowance(address _owner, address _spender) | _spenderが_ownerから引き出せる量を返す |
イベントの説明
イベント | 説明 |
---|---|
Transfer | トークンが転送されたときに発生するイベント。どのアドレスからどのアドレスに送られたかを通知 |
Approval | 承認がされた時に発生するイベント。承認情報を通知 |
ERC20トークンの問題点
ERC20規格は上記のようなメリットだけでなくデメリットもあるようです。その問題となっているデメリットは誤送信による通貨消失問題である。これは誤って送金先のEOA(送金アドレス)ではなく、コントラクトアドレスに送金してしまい、結果的にトークンの消失となることです。イーサリアムには2つの「送金「送金アドレス」と「コントラクトアドレス」が存在します。送金アドレスと言うのは銀行口座のようなもので送金する際に用いられるアドレスである
。一方コントラクトアドレスは、直訳すると「契約アドレス」であり、イーサリアム上で、スマートコントラクトを実行する際に用いられるアドレスである。
コントラクトアドレスそのものには送金できないようになっており、そのアドレスに送金してしまうと、送金されたトークンは失われてしまいます。(スマートコントラクトとは自動的に契約をイーサリアム仮想マシン(EVM)の上で実行されるプログラムのこと。)一度誤ってコントラクトアドレスに送金してしまうと、トークンの返還が不可能なので、これによる数百万ドルのトークンが引き出し不可能となっているようです。一部の取引所では「コントラクトアドレスにETHを送らないでください」という警告メッセージも出るようになっているようです。ICOへ投資する際にはコントラクトアドレスに送金するので、この時は取引所からではなく、自分のウォレットからでないと、上記のような誤送金が発生します。
まとめ
ERC20規格は、利便性や安全性において大きなメリットがあるのですが、誤送金によるトークンの消失問題も抱えていて、損失額が400万ドル近くあることもあり、利用者にとって初めは困惑するんじゃないかと思いました。
また次回、ERC20の問題点を改善して作られた新しい規格がERC223についてまとめてみたいと思います。