# [ERC5192] NFTを送付できなくする『SBT』について理解しよう！

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

- URL: https://cardene.dev/articles/01b2463cb87f391498a8
- 公開日: 2023-07-11
- 更新日: 2023-07-11
- トピック: Blockchain
- タグ: blockchain, solidity, ブロックチェーン, nft

## はじめに

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

https://cryptogames.co.jp/

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

https://cryptospells.jp/

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

:::message
以下を参考にまとめていきます！
:::

https://eips.ethereum.org/EIPS/eip-5192

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

https://chaldene.net/erc721

## 要約

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

:::message alert
この記事では、**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などからお気軽に質問してください！

[Twitter @cardene777](https://twitter.com/cardene777)

## 採用強化中！

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

https://www.wantedly.com/companies/cryptogames

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