イーサリアムの ERC20 と比較しながら、 EOSIO
公式の token
コントラクトを解説します。
eosio.token
の俯瞰
- イーサリアムの1つのコントラクトは1つのトークンであるのと違って、
eosio.token
の1つのコントラクトでは、複数のトークンを保持できます - 下記の情報をマルチインデックステーブルに保持しています
- トークン情報(symbol、発行量、最大発行量)を
stat
テーブルに保持する - アカウント毎の残高情報を
accounts
テーブルに保持する
- トークン情報(symbol、発行量、最大発行量)を
- 送金履歴は、コントラクトと関連する
EOS
ブロックチェーンのアクションに相当するので、マルチインデックステーブルに保持しない
eosio.token
のアクション
アクション | 内容 |
---|---|
create | 新しいトークンを作成する コントラクトの権限が必要 |
issue | トークンをアカウントに発行する トークンのオーナーだけ実行できる |
retire | トークンの総量を減少する トークンのオーナーだけ実行できる |
transfer | トークンを送金する |
open | 指定アカウントの残高0のデータを作成する |
close | 指定アカウントの残高0のデータを削除する |
get_supply | トークンの総量を取得する |
get_balance | 残高を取得する |
アクション詳細説明
create
下記の情報を stat
テーブルに登録する
- トークンのオーナーアカウント
- トークンの最大発行量
- トークンのカレント発行量
issue
トークン最初作成された時点では、どのアカウントも残高を持っていません。
オーナーアカウントがトークンを発行することで、誰かに付与することが出来ます。
このアクションは、トークンのオーナーだけ実行できる
retire
オーナーの残高を減少することで、トークンの総量を減少する。
イーサリアムの ERC20 のオプション関数 burn
と相当する処理です。
このアクションは、トークンのオーナーだけ実行できる
transfer
from
から to
に送金する
open
指定したアカウントに対して、accounts
テーブルに残高ゼロのデータを作成する。
推測ですが、多分サービス側またはウォレットアプリなどで表示する時に、残高ゼロでも表示したケースの為です。
close
open
の逆操作です。
指定したアカウントの残高がゼロの場合、accounts
テーブルからそのレコードを削除する。
open
と同じく推測になりますが、もうそのトークンが要らない場合、こうすれば表示側が楽になります。
補足
- イーサリアム ERC20 のような
approve
系の機能がありません- これは
EOS
の権限管理仕組みを活用できればできるじゃないかと思いましたが、権限の制御はコントラクトの詳細までを見てくれないので、おそらくできないので、やりたい場合は、やはり自分で実装するしかない
- これは
アカウント毎の保存料金
- 送信履歴は
EOS
ブロックチェーンのアクションデータになるので、特に保存コストがかかりません - アカウントが初回トークンをもらって(または上記の
open
アクションで)残高テーブルにレコードを追加する時、RAM
を消費する為、料金がかかります- 2018 年 12 月の時点では、このコストは 2 円程度です
eosio.token
スマートコントラクトと eosio.token
アカウントの関係
-
eosio.token
スマートコントラクトは、EOSIO
公式で提供されているトークンのテンプレートです -
eosio.token
アカウントは、メインネットの場合は、eosio.token
スマートコントラクトがデプロイされているアカウントになります
補足
- 自分のトークンを発行したい場合は、
eosio.token
スマートコントラクトをメインネットにデプロイして、トークンを作成すれば良いです - 自分で発行したトークンをウォレットアプリに追加したい場合は、イーサリアムの ERC20 と同じく、所属しているアカウント名を指定する必要があります
まとめ
イーサリアムの ERC20 と比べると機能面はまだ足りてないところがありますが、
エンドユーザー側の送金処理が無料でできるのは大きいですね。