はじめに

初めまして。 CryptoGamesというブロックチェーンゲーム企業でエンジニアをしている cardene(かるでね) です! スマートコントラクトを書いたり、フロントエンド・バックエンド・インフラと幅広く触れています。

代表的なゲームはクリプトスペルズというブロックチェーンゲームです。

今回の記事では、ERC721規格のNFTをSBT(Soul Binding Token)化するための企画である、ERC5192についてまとめていきます!

以下を参考にまとめていきます!

ERC721については以下の記事を参考にしてください!

要約

この規格はEEC721規格のNFTの拡張で、EIP165のチェック機能を用いてNFTをソウルバウンドにする提案しています。 SBT(ソウルバウンドトークン)は、1つのアドレスに紐づけられたNFTで、他のアドレスに送ることができなくなります。

この記事では、SBT ≒ 送付できないNFTとして用語を使用します。

動機

Ethereumコミュニティでは、非譲渡性(送れない)、非代替性(交換できない)、社会的価格設定のトークンに対するニーズがあると考えられています。 しかし、特定の規格がないため、多くの開発者がNFTの送付機能の呼び出しに対してエラーを発生させるだけになっています。 この問題は長期的に見ると、機能の断片化と組み合わせ可能性の低下をもたらします。

この提案では、EIP165を使用したウォレットの実装者が、コントラクトに対してSBT対応しているかを確認できるように、ERC721に最小限の追加提案します。

インターフェースの実装

uint256のtokenIdを持つトークンは、関数locked(...)がtrueを返す場合、受け取りアカウントに結びつけられることがあります。この場合、契約のすべてのEIP-721関数は、トークンを一つのアカウントから別のアカウントへ転送する機能がスローされなければなりません。

javascript
interface IERC5192 {
  event Locked(uint256 tokenId);

  event Unlocked(uint256 tokenId);

  function locked(uint256 tokenId) external view returns (bool);
}

Locked

Lockステータスが『Locted』に変更されたときにログに記録します。 NFTがMintされたあと、ステータスが『Locted』に変更されるときに発行されます。

Unlocked

Lockステータスが『UnLocted』(ロック解除)に変更されたときにログに記録します。 NFTがMintされたあと、ステータスが『UnLocted』(ロック解除)に変更されるときに発行されます。

locked

SBTのロックステータスを返す関数。 0アドレスが所有者となっているNFTは無効とみなされ、エラーなどを起こさせるようにする。

引数

  • tokenId
    • 確認したSBTのトークンID。

その他

ERC721内の関数supportsInterface(bytes4 interfaceID)がinterfaceID=0xb45a3c0eの時、ERC721トークンがSBT対応していることを認識するために、trueを返さなければならない。

最後に

今回はNFTをSBTにするERC5192についてまとめてきました。 実装については今後追記していきます! いかがだったでしょうか? 質問などがある方は以下のTwitterのDMなどからお気軽に質問してください!

採用強化中!

CryptoGamesでは一緒に働く仲間を大募集中です。

この記事で書いた自分の経験からもわかるように、裁量権を持って働くことができて一気に成長できる環境です。 「ブロックチェーンやWeb3、NFTに興味がある」、「スマートコントラクトの開発に携わりたい」など、少しでも興味を持っている方はまずはお話ししましょう!