クリプト

[日本語訳] ERC-20 トークン標準規格

Sota Ishii's icon'
  • Sota Ishii
  • 2018/06/17 02:01

この記事はEIP20の日本語訳です(CC0)。誤訳や認識の齟齬があればご指摘ください。



Content image


シンプルなサマリ


トークンのためのインターフェイス標準規格。


概要


トークンコントラクトに標準化されたAPIを実装するための規格を以下に記載します。

この規格にはトークンを送信するための基本的な機能を持たせており、また自分のトークンの第三者による利用を承認する機能が含まれるため、サードパーティ製のスマートコントラクトに自分のトークンを委託することができます。


目的


このインターフェイス規格は、Ethereum上のすべてのトークンがウォレットからDEXまであらゆるアプリケーション上で共通して利用可能とすることを目的としています。


仕様



トークン



メソッド


注: コントラクト利用者は returns (bool success)にて返される false必ずハンドリングしなければなりませんfalseは返らないだろう、と想定しないでください


name

トークンの名前を返します。(例: "MyToken")

必須ではありません。このメソッドはユーザビリティを向上するために利用できますが、コントラクト利用者はこのメソッドが必ず提供されると想定すべきではありません

function name() view returns (string name)


symbol

トークンのシンボルを返します。(例: "HIX")

必須ではありません。このメソッドはユーザビリティを向上するために利用できますが、コントラクト利用者はこのメソッドが必ず提供されると想定すべきではありません

function symbol() view returns (string symbol)


decimals

トークンが利用する小数点以下の桁数を返します。(例:このメソッドが 8 を返す場合、コントラクト利用者は1トークンが100000000として表現されると理解できます)

必須ではありません。このメソッドはユーザビリティを向上するために利用できますが、コントラクト利用者はこのメソッドが必ず提供されると想定すべきではありません

function decimals() view returns (uint8 decimals)


totalSupply

トークンの総供給量を返します。

function totalSupply() view returns (uint256 totalSupply)


balanceOf

引数の _owner アカウントが保持するトークン量を返します。

function balanceOf(address _owner) view returns (uint256 balance)


transfer

引数 _value の量のトークンを _to アカウントに送信します。Transferイベントを発火しなければなりません。このメソッドは _from アカウントに充分なトークン量が存在しなかった場合に例外を throw すべきです

注: トークン量0を送信する場合、通常通り送信を行いTransferイベントを発火しなければなりません。

function transfer(address _to, uint256 _value) returns (bool success)


transferFrom

引数 _value の量のトークンを _from アカウントから _to アカウントに送信します。Transferイベントを発火しなければなりません

transferFromメソッドは、ユーザのアカウントからトークンを引き出す操作で利用され、コントラクトがユーザのトークンを代理で送信できるようにします。これはたとえば、コントラクトがユーザの代わりにトークンを送信したりEtherではなくトークンで手数料を徴収したりする時に利用できます。

このメソッドは _from アカウントが何らかの方法でトランザクション発行者(sender of the message)に自分のトークンの利用を承認していなかった場合に例外を throw すべきです。

注: トークン量0を送信する場合、通常通り送信を行いTransferイベントを発火しなければなりません

function transferFrom(address _from, address _to, uint256 _value) returns (bool success)


approve

引数 _spender に対して、 _value の量に達するまで複数回のトークン引き出しを許可します。このメソッドが複数回呼ばれた場合、allowance の量が _value で上書きされます。

日本語への翻訳における補足:以下の注釈はユーザのapproveメソッド実行に気づいた_spenderが素早くトークン引き出しを行った場合、_spenderのトランザクションが先に実行されユーザは想定以上の量のトークンをapproveしてしまう可能性がある問題(ERC20 API: An Attack Vector on Approve/TransferFrom Methods)について言及しています。

注:こちらこちらで示されたクラッカーの攻撃手法(attack vectors)を防止するために、クライアントはこのメソッドが同じ _spender に対して複数回呼ばれた場合、まず allowance に0を設定するような方法でインターフェイスを作成すべきです。とはいえ、下位互換性を保つためにコントラクト自体がそれを強制すべきではありません。

function approve(address _spender, uint256 _value) returns (bool success)


allowance

引数 _spender が、 _owner から許可されているトークン引き出し残量を返します。

function allowance(address _owner, address _spender) view returns (uint256 remaining)


イベント


Transfer

トークンが送信された時に必ず呼び出されなければなりません。送信トークン量が0の場合も同様です。

新しいトークンを生成するトークンコントラクトは、引数の _from アドレスに 0x0 を指定してTransferイベントを発火すべきです。

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


Approval

approve(address _spender, uint256 _value) メソッドが成功したときは必ず呼び出されなければなりません。

event Approval(address indexed _owner, address indexed _spender, uint256 _value)


実装


すでに多くのERC20準拠トークンがEthereumネットワークにデプロイされています。また複数のチームから、異なるトレード・オフ(gas節約〜セキュリティ向上)を有するERC20の実装が公開されています。


公開されている実装の例:

https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC20/StandardToken.sol

https://github.com/ConsenSys/Tokens/blob/master/contracts/eip20/EIP20.sol


"approve" を複数回実行する前に必ずallowanceに0を設定する実装:

https://github.com/Giveth/minime/blob/master/contracts/MiniMeToken.sol


History


この規格に関する経緯についてのリンク。

ヴィタリク・ブテリンによる元の改善提案: 

https://github.com/ethereum/wiki/wiki/Standardized_Contract_APIs/499c882f3ec123537fc2fccd57eaa29e6032fe4a

Redditディスカッション: 

https://www.reddit.com/r/ethereum/comments/3n8fkn/lets_talk_about_the_coin_standard/

GitHub issue #20: 

https://github.com/ethereum/EIPs/issues/20


Copyright


Copyright and related rights waived via CC0.

公開日:2018/06/17
獲得ALIS:0.00
Sota Ishii's icon'
  • Sota Ishii
  • @sot528
Twitter: https://twitter.com/sot528
コメントする
コメントする
こちらもおすすめ!
Eye catch
クリプト

Bitcoin史 〜0.00076ドルから6万ドルへの歩み〜

Like token Tip token
947.13 ALIS
Eye catch
クリプト

【初心者向け】$MCHCの基本情報と獲得方法

Like token Tip token
32.32 ALIS
Eye catch
クリプト

Polygon(Matic)で、よく使うサイト(DeFi,Dapps)をまとめてみた

Like token Tip token
236.30 ALIS
Eye catch
クリプト

クリプトスペルズで入手したMCHCを引き出す方法

Like token Tip token
196.20 ALIS
Eye catch
クリプト

バイナンスの信用取引(マージン取引)を徹底解説~アカウントの開設方法から証拠金計算例まで~

Like token Tip token
3.50 ALIS
Eye catch
クリプト

Uniswap(ユニスワップ)で$ALISのイールドファーミング(流動性提供)してみた

Like token Tip token
59.99 ALIS
Eye catch
クリプト

17万円のPCでTwitterやってるのはもったいないのでETHマイニングを始めた話

Like token Tip token
46.60 ALIS
Eye catch
クリプト

Uniswap v3を完全に理解した

Like token Tip token
18.92 ALIS
Eye catch
クリプト

ジョークコインとして出発したDogecoin(ドージコイン)の誕生から現在まで。注目される非証券性🐶

Like token Tip token
38.31 ALIS
Eye catch
クリプト

【第8回】あの仮想通貨はいま「テレグラム-TON/Gram」

Like token Tip token
69.90 ALIS
Eye catch
クリプト

コインチェックに上場が決まったEnjin Coin(エンジンコイン)コインを解説

Like token Tip token
21.49 ALIS
Eye catch
クリプト

【初心者向け】JPYCを購入して使ってみました!

Like token Tip token
30.03 ALIS