search
クリプト

[日本語訳] 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
Article registration Article registration
Sota Ishii's icon'
  • Sota Ishii
  • @sot528
Twitter: https://twitter.com/sot528
コメントする
コメントする
こちらもおすすめ!
Eye catch
クリプト

NFT解体新書・デジタルデータをNFTで販売するときのすべて【実証実験・共有レポート】

otakucoin 2021/03/29
Like token Tip token
121.79 ALIS
Eye catch
クリプト

UNISWAPでALISをETHに交換してみた

Macky3216 2020/09/28
Like token Tip token
40.40 ALIS
Eye catch
クリプト

2021年1月以降バイナンスに上場した銘柄を140文字以内でざっくりレビュー(Twitter向け情報まとめ)

昆布森ちゃん 2021/03/16
Like token Tip token
38.10 ALIS
Eye catch
クリプト

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

ゆうき 2021/05/17
Like token Tip token
236.30 ALIS
Eye catch
クリプト

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

暗号資産ジョシ校生 蟻巣 2021/07/14
Like token Tip token
32.32 ALIS
Eye catch
クリプト

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

Taka 2021/07/24
Like token Tip token
69.90 ALIS
Eye catch
クリプト

Eth2.0のステークによるDeFiへの影響を考える。

CryptoChick 2020/03/05
Like token Tip token
44.10 ALIS
Eye catch
クリプト

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

大田コウキ 2021/04/06
Like token Tip token
947.13 ALIS
Eye catch
クリプト

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

暗号資産ジョシ校生 蟻巣 2021/06/30
Like token Tip token
30.03 ALIS
Eye catch
クリプト

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

昆布森ちゃん 2021/01/19
Like token Tip token
38.31 ALIS
Eye catch
クリプト

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

Taka 2021/02/25
Like token Tip token
59.99 ALIS
Eye catch
クリプト

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

nnppnpp(んぺー) 2021/09/08
Like token Tip token
46.60 ALIS