Ethereumベースのトークンの標準として、ERC20が広く使われており数多くのトークンが発行されています。しかしERC20については誤送付によって資金が失われてしまう問題が指摘されています。本記事ではこの問題を改善する新しいトークンの標準「ERC223」について説明します。
ERC20とERC223
現在もっとも利用されているERC20は、Ethereumベースのトークンの標準として2017年9月に正式に採択されました。
Ethereumベースのトークンの標準ERC20 – Gaiax Blockchain Biz
「標準」というと聞きなれないかもしれませんが、ERC20はトークンの動作をきめるスマートコントラクトの共通の仕様を定めたもので、個々のトークン発行者がこの仕様に基づいてトークンを実装できます。
ERC20については問題も指摘されていて、スマートコントラクトに対して所定の手続きを踏まずにトークンを送付すると、スマートコントラクトがトランザクションを認識できずにトークンが失われてしまいます。この問題を解決する新たなトークンの標準として、2017年3月にERC20に対して後方互換性がある「ERC223」が提案されました。ERC223は正式な標準として採択されていませんが、GitHubでERC223の仕様や議論が公開されています。
ERC223 token standard · Issue #223 · ethereum/EIPs · GitHub
ERC223提案の動機について書かれたMotivationの部分では、失われたERC20トークンのデータが示されています。提案者によると、2017年12月時点でQTUMが$1,204,273相当、EOSが$1,015,131相当失われているといい、どちらも1億円以上にのぼります。これは氷山の一角でERC20トークン全体ではより大きな額になるでしょう。
ERC223はどのようにERC20を拡張して誤送付の問題をしようとしているのでしょうか。仕様をもとにERC223での拡張を具体的に見てみましょう。
ERC20の問題
前項で、ERC20トークンの場合「スマートコントラクトに対して所定の手続きを踏まずにトークンを送付すると、スマートコントラクトがトランザクションを認識できずにトークンが失われてしまう」と説明しました。スマートコントラクトは常にブロックチェーン上でトランザクションを監視しているわけでなく、外部から叩かれることでトランザクションが発生します。そこで、ERC20では所定の手続きとしてapprove関数とtransferFrom関数が用意されています。
この問題を説明する際によく引き合いに出される例として、分散型の取引所があります。分散型取引所でユーザーがERC20トークンをデポジットしたいとしましょう。この時、分散型取引所のスマートコントラクトに対してERC20トークンを単純に送付してしまうと、分散型取引所のコントラクトはこのトランザクションを認識できず、トークンが消失してしまいます。そこで、ユーザーはまず分散型取引所が自分のアドレスからデポジット金額分を引き出すことを承認(approve)して、分散型取引所でユーザーを送付元として指定したトランザクションを発生させなければなりません(transferFrom)。
このような手続きは直観的でない上ステップ数も多く煩雑です。ERC223ではこのapprove、transferFromの手続きをtransferに一本化し、誤送付でトークンが失われてしまう問題も解決しようとしています。
ERC223での拡張
ERC223にはふたつのtransfer関数が定義されています。ひとつはERC20との互換性を担保するためのもので、もうひとつはERC223で新しく定義されたものです。新しいtransfer関数のインターフェイスは以下の通りです。
function transfer(address _to, uint _value, bytes _data) returns (bool)
挙動については、1番目の引数の_toで指定される送付先のアドレスがスマートコントラクトのアドレスの場合は、送付先のスマートコントラクトで定義されるtokenFallback関数を呼び出すこととしています。これによってスマートコントラクト側でトランザクションが認識されるようになるわけです。
tokenFallback関数には誤送付されたトークンの返却処理、先の分散型取引所の例であればデポジットするといった処理を記述します。送付先のコントラクトでtokenFallback関数が実装されていない場合は、トランザクションは失敗し、トークンの移転が起きてはいけないとされています。
このようにERC223では対コントラクトのトランザクションで、処理がtransferに一本化され、ステップ数が少なくなります。Ethereumはプログラムを実行したステップ数に応じて手数料であるGasが発生するのため、コントラクトに対するトランザクションで手数料を低く抑えられることが期待されています。
ERC20の抱える問題点については以下の文書の解説が参考になります。
ERC20 token standard – Google Docs
ERC223の今後
ERC223については現在議論が行われているところで、正式に採択されたわけではありません。誤送付したトークンが返却されたり、副次的に手数料が低く抑えられたり、ERC20を改良するとてもよい仕様ではありますが、トークン発行側だけでなく、受け取るコントラクト側での実装も必要になり、鶏が先か卵が先かといった状況のようでもあります。
ERC20は正式採択の前から草案に基づくトークンが発行され、正式採択をきっかけに標準として大きく普及しました。今後ERC223に基づくトークンやサービスが出てくることもこの新しい標準の普及と正式採択の鍵となるでしょう。はたまたERC223も包含した新しい提案がなされることによって、取り込まれる可能性もあります。今後も不便を解決していくトークンの標準は注目の技術動向であることは間違いありません。