LoginSignup
1
0

More than 5 years have passed since last update.

eosio.token コントラクトを解読してみる

Last updated at Posted at 2018-12-08

イーサリアムの ERC20 と比較しながら、 EOSIO 公式の token コントラクトを解説します。

eosio.token の俯瞰

  • イーサリアムの1つのコントラクトは1つのトークンであるのと違って、eosio.token の1つのコントラクトでは、複数のトークンを保持できます
  • 下記の情報をマルチインデックステーブルに保持しています
    • トークン情報(symbol、発行量、最大発行量)を stat テーブルに保持する
    • アカウント毎の残高情報を accounts テーブルに保持する
  • 送金履歴は、コントラクトと関連する 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 と比べると機能面はまだ足りてないところがありますが、
エンドユーザー側の送金処理が無料でできるのは大きいですね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0