ERC20の問題を解決するERC223とは?

Ethereum(イーサリアム)

以前、ERC20について紹介しましたが、最近そのERC20を拡張したERC223というものが出てきました。

こちらについて調べてみました。

Sponsored Link


ERC20の問題点

Ethereumではウォレットのアドレスの他に、スマートコントラクトを示すコントラクトアドレスというものがあります。
こちらに誤ってEthereumトークンを送っても処理されないため、送ったトークンが凍結されてしまい、その数2017年12月27時点で少なくとも3億5千万円以上とのことです。
現状のERC20では、このスマートコントラクトで受け付けてしまったトークンの処理の記載がないため問題になっています。
この問題を解決した決まりがERC223になります。

ERC223とは

スマートコントラクトに送金されてしまったトークンの内容を確認して、誤っていれば送信元に返却するという仕組みを定義しています。
具体的な関数名は、tokenFallback関数というものが定義されています。

ERC20との関数の違いを見てみると、、、

以下がERC20

function name() constant returns (string name)
function symbol() constant returns (string symbol)
function decimals() constant returns (uint8 decimals)
function totalSupply() constant returns (uint256 totalSupply)
function balanceOf(address _owner) constant returns (uint256 balance)
function transfer(address _to, uint256 _value) returns (bool success)
function transferFrom(address _from, address _to, uint256 _value) returns (bool success)
function approve(address _spender, uint256 _value) returns (bool success)
function allowance(address _owner, address _spender) constant returns (uint256 remaining)
event Transfer(address indexed _from, address indexed _to, uint256 _value)
event Approval(address indexed _owner, address indexed _spender, uint256 _value)

以下がERC223。

function name() constant returns (string name)
function symbol() constant returns (string symbol)
function decimals() constant returns (uint8 decimals)
function totalSupply() constant returns (uint256 totalSupply)
function balanceOf(address _owner) constant returns (uint256 balance)
function transfer(address _to, uint256 _value) returns (bool)
function transfer(address _to, uint _value, bytes _data) returns (bool)
function tokenFallback(address _from, uint _value, bytes _data)

event Transfer(address indexed _from, address indexed _to, uint256 indexed _value, bytes _data)

こうみると、ERC223ではERC20であった以下関数、イベントがなくなってます

– function transferFrom
– function approve
– function allowance
– event Transfer(address indexed _from, address indexed _to, uint256 _value)
– event Approval

そして追加されたのは以下関数、イベントです

– function transfer(address _to, uint _value, bytes _data) returns (bool)
– function tokenFallback(address _from, uint _value, bytes _data)
– event Transfer(address indexed _from, address indexed _to, uint256 indexed _value, bytes _data)

こちらの関数、イベントを見ていきます

function transfer(address _to, uint _value, bytes _data) returns (bool)

ERC20からあるtransfer関数もありますが、それは後方互換性でこちらのtransferがメインで使われることを意図しているようです。
トークンを移動させるときにこの関数を使います。
この関数はトークンを移動させ、_to がコントラクトアドレスの場合に必ず tokenFallback を呼び出すように実装が求められます。
また、受信するコントラクトにtokenFallbackが実装されていない場合は、必ず失敗におわらせ、トークンは移動させてはならないそうで、
_to がウォレットのアドレスである場合は、tokenFallbackを実装することなくトークンを必ず移動させる必要があります。

_data はこのトークントランザクションに添付することができ、永久にブロックチェーンに残すことができる値です。空にもできます。
こちらの関数で _to を組み立ててみてコードがあるかどうかチェックをすることにより、コントラクトアドレスか、ウォレットのアドレスかを判断することができます。

function tokenFallback(address _from, uint _value, bytes _data)

トークンが移動する際に呼び出される関数です。
_fromは送信者のアドレスで、_valueは送金される量、_dataはEthereumのトランザクションでいうmsg.dataと似たようなものです。
これはEthererumのfallback関数と同じような動きをするもので、何も値を返しません。
msg.senderは、tokenFallback関数内のトークンコントラクトになります。
トークン送信者(トークントランザクションを開始した人物)は、トークンフォールバック機能内で “_from”になります。

この関数の名前はtokenFallbackで、関数シグネチャ0xc0ee0b8aと一致するように引数address、uint256、bytesを取る必要があります。

event Transfer(address indexed _from, address indexed _to, uint256 indexed _value, bytes _data)

ERC20のTransferイベントより_dataが加わっていますが、これはtransferに _data変数が追加された影響です。

ERC223トークンの例

こちらにサンプルが記載されています。
機会があればこちら試してみようと思います。

まとめ

ERC223が一般的になることによって、間違ったトークンが発行されて使えなくなるような事はなくなってくると思います。
1つ1つEthereumが使いやすくなってきますね。
ERCは日々新しい企画が出ており、ERC721というものもでてきています。
「代替不可能なトークン」というものを作る時用の規格として定義されていますが、これはまた別の機会に紹介したいと思います。

CryptoKitties(クリプトキティーズ, 暗号猫)で使われているようです。

参考


Sponsored Link

ビットコイン(Bitcoin)、イーサリアム(Ethereum)、リップル(Ripple)、ネム(NEM)などの仮想通貨を買うならZaifがおすすめです。

特に国内でETHを購入するなら、アルトコインでも板取引に対応しているZaif(ザイフ)が割安なのでよいですよ。

コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


仮想通貨全般
難易度調整(Difficulty Adjustment)アルゴリズムとは?

最近、Monaが攻撃を受けて被害がでた件ですが 上記、大石さんの記事を引用しますが 攻撃を容易にした …

ICO
ICO Platformはどんなものがあるか?

ICO Platform にどんなものがあるか調べてみました。 ここで取り上げているICO Plat …

Dapps
Web3.0 dApps なるサービスの概要をまとめました

1つ1つ投稿するのが面倒になったのでWeb3.0 dAppsの特徴を簡単に1つの記事にまとめました。 …