お疲れさまです。
次世代ビジネス推進部の荻原です。
NFTが「Non-Fungible Token」の略だということはもう耳タコかもしれません。
耳タコだという人はぜひこちらのガチャガチャを回しに行ってみてください。
その名前から分かる通りNFTはトークンの一種ですが、Ethereumにはこのトークンに関する標準規格がいくつかあります。
例えば、FTというトークンについてはERC20、NFTについてはERC721で定められています。
レコチョクが発行しているNFTもERC721に則っています。
しかし、OpenSeaでNFTを発行するとERC1155という規格になっていました。
少し検索してみると「FTとNFTを兼ね備えた」トークンの規格とのことです。
私は最初「FTとNFTを兼ね備える」ということの意味がわからなかったのですが、さらに調べてみると確かに兼ね備えていると言えるなと納得しました。
そこで今回はEthereumのトークンに関する主な規格であるERC20、ERC721、ERC1155について紹介します。
目次
- ERC20
- ERC721
- ERC1155
- さいごに
ERC20
FT(Fungible Token)の規格です。
Fungible Tokenとは、日本語で代替可能トークンです。
例えば自分のお財布に入っている100円玉と他人が持っている100円玉は同等の価値のものとして交換することができるように、代替できるトークンという意味です。
一般的に「仮想通貨」と呼ばれているのはこのトークンのことです。
ERC20の特徴的な機能としては
- アカウントからアカウントへの転送
- 特定のアカウントの保有量の取得(balanceOf)
- 特定の量のトークンについてトークン所有者以外が転送を行うことへの許可(approve)
- 最大供給量(例:Ethereum上ではMatic Tokenは最大10,000,000,000MATIC供給されます)の取得
などです。
ERC721
NFTの規格です。
レコチョクのNFTが則っているのはこの規格です。
ERC721のトークンは「contract address」と「token id」によって一意に決まります。
同じものは世界に1つしかないので、通貨のように「別個体だけど同じ価値のもの」がなく交換ができません。
ERC721で定められている主な機能は
- アカウントからアカウントへの転送
- 特定のアカウントの保有量の取得(balanceOf、あるcontractのtoken IDが1と2を持っている場合、2)
- 特定のtoken IDのトークンについて所有者以外が転送を行うことへの許可(approve)
- token IDで特定したトークンの保有者の取得(ownerOf)
などです。
ERC20と見比べていただくとわかるかと思いますが、同じ機能もあります。
ERC1155
FTとNFTの特徴を兼ね備えることのできるMulti Tokenというトークンの規格です。
FTとNFTを兼ね備えているとはどういうことかというと、NFTが個数を持つということです。つまり、特定のcontract addressの特定のtoken IDのトークンが複数個あるということです。
個数を1とすれば、contract addressとtoken IDで一意に決まるのでNFTということになります。
ERC1155が導入された理由の1つに、転送等の実行時のガス代の削減があります。
標準規格では、ERC20とERC721は1種類のトークンに対して1コントラクトを発行することになっています。
そのため、複数種類同時に転送したいときは複数トランザクションを発行する必要があるため、ガス代が高くなってしまうという問題がありました。
ERC1155では、前述の通りcontract addressとtoken IDによって決められるトークンを複数個発行することができ、複数種類のトークンを1コントラクトで扱えます。そのため、処理の実行時にトランザクション1つで複数種類のトークンを転送できます。
そのメリットが表れているERC1155の特徴的な機能としては以下のようなものがあります。
- 異なるのtoken IDのトークンを個数を指定してまとめて転送・発行・Burnできる
例:
// 0x00..1にtoken ID 1*3、token ID 5*10、token ID 10*2を発行 > mintBatch(0x00...1, [1, 5, 10], [3, 10, 2]); |
- 特定アカウントが保有する特定token IDのトークン量を複数組み合わせ同時に取得できる
例:
// 0x00...1のtoken ID 2の保有量と0x00...2のtoken ID 1の各保有量を一度に取得 > balanceOfBatch([0x00...1, 0x00...2],[2, 1]); [50, 100] |
ただし、複数のトークンに対して必ずしもまとめて処理を行えるというわけではありません。
approveは発行などとは違い、token IDごとに指定はできずすべてのトークンに対して一律でしか行えません。これは複雑さをなくすためのようです。
また、ERC1155はERC721と比較して次のような特徴もあります。
- name、symbolが必須ではない
ERC721ではコントラクト発行時にnameとsymbolが必須です。しかし、ERC1155ではそれぞれ一意であるとは限らず、有用性があまりないという理由で必須ではなくなったようです。
代わりにERC721では必須ではなかったメタデータのURIを指定することが必須になり、そこにnameやsymbol、その他必要なデータを含めることになっています。 - ownerOfがない
ERC721ではtoken ID指定で保有アカウントのアドレスを取得できましたが、ERC1155では特定のtoken IDのトークンの所有者が複数いる可能性があり、この機能がなくなりました。
さいごに
今回はEthereumのトークンに関する主な規格であるERC20、ERC721、ERC1155について紹介しました。
FTとNFT、さらにそれらを兼ね備えた機能を持つERC1155のトークンについて知っていただけましたら幸いです。
そして私は耳タコガチャを回しに行きたいと思います。
最後まで読んでいただきありがとうございました。
参考
- ERC-20 TOKEN STANDARD
- ERC-721 NON-FUNGIBLE TOKEN STANDARD
- ERC-1155 MULTI-TOKEN STANDARD
- GitHub openzeppelin-contracts/contracts/token/ERC1155/ERC1155.sol
- ERC-1155: Multi Token Standard
この記事を書いた人
最近書いた記事
- 2023.12.24気難しいBlockchainへの対処法
- 2023.09.22レコチョクチケット特有の機能について
- 2023.07.18【ERC4337 その2】NFTを転送してみる
- 2023.07.14【ERC4337 その1】ERC4337について