ERC-721やERC-1155などの非代替な特性を持ち合わせたトークン規格が誕生してからもう5年以上が経とうとしています。しかし当初の想定されていたユースケースとは異なる発展を遂げている部分もありいくつかの改善案が出されています。
今年に入ってからもいくつかのERC-721,1155を改良したトークン規格が出てきているので、自分の復習がてらまとめてみました。
ERC-5216
ERC-5216とはERC-1155の欠点を解決するために提案されたトークン規格。
まず前提の部分から話すと、ERC-1155はERC-20とERC-721のハイブリッド的にトークンID毎に複数の量を指定できる規格ですが、DApps側で操作できるように権限を付与する時のApprove周りの実装はERC-721を強く継承しています。
よってcontract毎にsetApproveForAllを実行する必要があるため、すべてのトークンIDのNFTも権限を与えてしまうということです。ERC-721だったらまだ許容できるとしても、ERC-1155の場合はもっと細かく設定できたほうがいいよねってこと。これは実際のコードを貼ったほうがわかりやすいので貼っておきます。
event ApprovalByAmount(address indexed account, address indexed operator, uint256 id, uint256 amount);
トークンIDと同時に任意の量を引数として渡すことで、権限を渡す量がコントロールできるようになるのでsetApproveForAllを使う必要がなくなります。
ERC-5496
ERC-5496とはERC-721に共有可能な特典を管理できるようするトークン規格。
提案者: Jeremy Z
大枠としてはERC-721にオンチェーンもしくはオフチェーンでの特典を付与することができて、ホルダーはその特典を検証可能な状態でオンチェーンで移転可能。特典の共有(移転)可否は設定可能で、有効期限も設定可能にするもの。おそらくオフチェーン情報で後付で管理していていた特典情報をすべてオンチェーンで、トークン規格の中に組み込んで管理しようと言うことではないかと。
この規格を通じてNFTに付帯する特典やそれらの権限をオンチェーンでリアルタイムに確認できるようにすることを目標としており、さまざまなユースケースで応用可能ですね。例えば飲食店のNFTを発行し、他のオンチェーン情報に基づいた特典をNFT自体に含んで保存してしまうみたいな。そして特典を切り離して売買も可能みたいなので、会員権的なNFTの場合は所有権を移転することなく二次流通を可能に。
この規格のメリットというかERC-721/1155の問題点は、仮にいまのホルダーに特典を付与した場合にどこかのタイミングでスナップショットを取ってその情報をオフチェーンもしくはオンチェーンで保存していて判定していたと思います。この場合、特典の存在を知って二次流通で購入した新規ホルダーは特典を受けることができません。現状の仕組みだとなんとなくインセンティブ設計と価格の押し上げ施策のいずれにも逆行してるのでいいかもとか。
ちょっと上手く活用しないとユーザー体験上、混乱を招きそうみはありますが個人的に面白そうなのでなんかユースケースとして事例が出てきてほしいです。
ERC-5725
ERC-5725とは移転可能な権利を付与できるNFTのトークン規格。
提案者: Apeguru、Marco De Vries、Mario、DeFiFoFum、Elliott Green
この規格は「timelock contracts」の多様化している実装を規格化するために作られました。そしてNFTなどを用いたLiquid vestingはSAFTやEOAをベースにしたvestingと比較して譲渡可能性とmetadataの添付を可能にしました。
加えてERC-20にもtoken lockのトークン規格を提供するだけではなく、SAFTのセカンダリーマーケットの創出にも繋がります。またvestingのcurveについても柔軟に設計可能です。
linear vesting(線形的な権利確定スケジュール)
cliff vesting(クリフを設けた権利確定スケジュール)
exponential vesting(指数的な権利確定スケジュール)
custom deterministic vesting(カスタマイズした権利確定スケジュール)
実際のユースケースはいくつかのものが想定されますが、ApeSwapのBondとかで使われるような気がしますね。一応提案にあった使用例のうちのいくつかの気になったやつを要約して書いておきます。
任意の一定期間を経てトークンを放出するモデルにした債権などの金融商品をオンチェーンでNFTで表現可能に
半流動的な権利付きNFTを規格化してSAFTに応用(オフチェーンでの契約が一般的だが、オンチェーンで締結するとEOAベースであることが多いため、権利の移転やセカンダリーの売買が難しい現状からの脱却)
ERC-6909
ERC-6909とはERC-1155を根本的に改善した新しいSemi-Fungible Token(SFT)のトークン規格。ちなみにこの提案は上の3つと違ってまだdraftです。
提案者: Joshua Trujillo (@jtriley-eth)
まずERC-1155はSFTとしての地位を確立した規格でありながら、いくつかの技術的な問題が残されています。まずトークンの転送部分に「safeTransferFrom」と「safeBatchTransferFrom」という2つのtransfer関数しかないこと。
厳密には2つしかないという数の方が問題ではなく2つともが「safe」transferであること。なにを意味するかと言うと「safe」がついているとtransferの最後にcallbackをする必要があり、これがreentrancy攻撃に悪用される可能性があると。
また同様にERC-5216の欠点にも挙げられている「setApprovalForAll」しか無い問題にも触れられており、総じてせっかく量とか決めれていい感じなのに、蓋を開けたらボロボロなのどないかしやんかいってことですね。
ざっくり変わった点を言うと、Approveの柔軟性向上(ERC-5216とほぼ同じ)、batch系のtransfer関数を削除、callbackの非必須化(ガス代も削減可能に)、「safe」という単語を関数から削除。ってところですかね。いずれにせよ、ERC-721でも1155でも「setApprovalForAll問題」は解決されたほうがいいので、1155に置き換わるスタンダードは今後確実に登場すると予測しています。
まとめ
こんな感じでいろんな規格が日々提案されているわけですね。実際の話をすると一度スタンダードになってしまった古き良き規格は、移行コストの高さからよほど大きな問題が起きない限りは継続して使われている印象です。
ERC-6909の場合は置き換わったときのインパクトが大きそうなので良いと思いますが、今回紹介しなかった他のものに関してはピンポイント過ぎて逆にユースケースが見えないものもあったりします。
日本(日本語)では議論になる機会が少ないですが、基本的に一連の議論は文字ベースでForumで行われているので翻訳ツールを上手く使いこなしてぜひ見に行ったり議論に参加してみてもらえると嬉しいです。それではまた明日のニュースレターで。