EIP20とERC20
EthereumにはEIP(Ethereum Improvement Proposal)と呼ばれるシステム改善提案の仕組みがあり、BitcoinのBIP(Bitcoin Improvement Proposal)と同様、システム改善の草案が提出され議論が行われます。Ethereumベースのトークンのインターフェースの標準「ERC20」を提案したEIP20はFabian Vogelsteller氏とVitalik Buterin氏によって2015年11月に提出され、2017年9月に採用が決定しました。EIP20についてはGitHubのEIPのリポジトリで公開されています。
EIPs/eip-20-token-standard.md at master · ethereum/EIPs · GitHub
ERC20というトークンの標準が公式に確立されたことで、トークンの転送やトークンの情報を取得するといった処理を共通のインターフェースで扱えるようになりました。
※ BIPについては詳しくは本ブログのビットコインシステムを議論するためのドキュメント「BIP」を参照してください。
なぜERC20が生まれたのか
Ethereumはビットコインコミュニティーの若きプログラマーVitalik Buterin氏が考案し、ブロックチェーン上でスマートコントラクトと呼ばれるプログラムを実行できるプラットフォームとして2015年7月にβ版がローンチされました。Ethereumプラットフォーム上には多くのアプリケーションがリリースされ、2017年9月にERC20が正式に採択される前から草案に基づくトークンが発行されてきました。背景には分散型取引所やウォレットの開発で統一されたインターフェースが求められたことや、利用者側のさまざまなトークンを一元管理したいといった事情がありました。
ERC20を使うメリット
少し技術的な内容になりますが、実際にERC20をコードとして見てみましょう。EthereumコミュニティーによるThe Ethereum WikiにERC20を満たすように書かれたインターフェースコントラクトが掲載されています。EIP20のGitHubのページにリストアップされているERC20トークンに必須のメソッドやイベントの名前、引数、戻り値などをコードに見ることができます。
// ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); }
ERC20 Token Standard – The Ethereum Wiki
ERC20トークンを提供する側は、このようなインターフェースの中身を実装することになります。ERC20トークンをプログラムで扱う側、たとえば分散型取引所やウォレットでは共通のインターフェースがあることでトークンごとに個別の処理を記述する必要がなく、どのERC20トークンに対しても転送であればtranferFromメソッドを使うといったように処理を共通化し、実装をシンプルにすることができます。トークンの保有者にはERC20に対応したウォレットでERC20トークンを一括して管理できるというメリットもあります。また、ICOではERC20トークンを発行することで、参加者のトークン管理の利便性を高め、ICOにおいてより多くの資金を調達することが期待できます。
ERC20トークンやそれを扱うスマートコントラクトを開発する場合、OpenZeppelinというSolidityで書かれた安全性を重視したスマートコントラクトのオープンフレームワークを使うとよいでしょう。実装の手間を省くというだけでなく、独自のコードに起因する事故を防ぐという点でも有用です。OpenZeppelinでは、StandardTokenというスマートコントラクトとしてERC20の実装を提供していて、EIP20のページでも名前が挙がっています。
OpenZeppelinは利用した組織が、これまでにトタールで450百万ドル以上を調達したというぐらい、広く使われいてます。
画像:OpenZeppelinの監査サービスを利用した組織(OpenZeppelinのウェブサイトより)
代表的なERC20トークン
ERC20に準拠したトークンにはどのようなものがあるのでしょうか。Ethereumブロックチェーンに関する情報を提供するEtherscanによるとEthereumプラットフォーム上にはERC20に準拠したトークンが20000以上存在するといいます。
画像:Ethereum上のトークン(Etherscan Token Tracker Pageより)
古くは2015年にクラウドセールを行った分散型予測市場のAugurのREPがERC20トークンを使用しています。2017年にICOで多額の資金を調達した分散型アプリケーションのインフラEOSや、スマートトークンと呼ばれる次世代仮想通貨のためのプロトコルを構築するBancorでもERC20トークンが発行されました。
ERC20の今後
日本の仮想通貨法には第一号仮想通貨、第二号仮想通貨の分類があり、前者は物品の購入などに際して不特定の者に使用できかつ不特定の者を相手として交換でき、後者は不特定の者を相手として第一号仮想通貨と交換できます。ひとつの解釈ですが、ERC20トークンは第一号仮想通貨であるイーサリアムのETHと交換可能な第二号仮想通貨に該当すると考えられます。仮想通貨は金融庁が登録した仮想通貨交換業者しか扱うことができず、ERC20は仕組みとして有用なものの日本のトークン発行者が使いこなすのはまだ難しいのが現状です。
ただ、ブロックチェーンベースのサービスや仮想通貨が生まれ、トークンエコノミーが拡大する中で、ERC20というトークンの標準が確立されたことは大きな一歩と見ることができます。インターネットが形成されていく中でhttpといったプロトコルが確立され、REST APIによってサービス同士がつながり、多くのウェブサービスが立ち上がっていった流れと似ている部分も多く、技術の進展という観点では大きな期待をよせてよいと言えるでしょう。
今後ERC20がどのように標準として浸透していくのか、また、日本国内ではどのように解釈が進み利用が広がるのか動向を注視していきたいところです。