Skip to content
ARCHITECTURE / 04 — スマートコントラクト

スマートコントラクト

スマートコントラクトの構造と設計

T&Tのスマートコントラクトは、Solidityで記述されており、EVM互換のチェーンに展開することができます。現時点でPolygon(Mainnet, Amoy)、Astar(Astar, Shibuya)、Oasys(TCG Verse)にも展開されています。

T&Tにおけるスマートコントラクトの役割は、ワールドへの参加証であるNFTを実現すること、ワールドごとに存在するスマートコントラクトを管理することです。

スマートコントラクトの構造

BaseNFT

BaseNFTはERC-721Upgradeableの実装を元にしたERC-721を実現するNFTのスマートコントラクトです。以下の仕様を実装しています。

  • ERC-4906 メタデータの更新をブロックチェーン上に伝える
  • ERC-5192 他人に譲渡できないSBT(Soulbound Token)を実現する譲渡可能、不可能を切り替えることができます

WorldFactory

WorldFactoryは、文字通りワールドを生成する際に使用されます。WorldFactoryの役割はワールドで使うNFTなどのスマートコントラクトを生成することです。

MintManager

T&Tは、NFTのmintを様々な方法で制御することができますが、このような制御を担当するのがMintManagerです。期間や発行数を指定したMintページを作成する、特定のイーサリアムアカウントを指定してmintを行うなどの機能があります。

スマートコントラクトレベルでこの制御を行うことで、ブロックチェーンによるセキュリティの恩恵が受けられるようになっています。

アクセス制御

T&Tのスマートコントラクトは、NFTの所有者、ワールドの管理者、リレーサーバーなどからアクセスされます。これらの異なる存在からのアクセスを適切に管理するため、セキュリティと利便性のバランスを考慮しながら、各スマートコントラクトは次のルールに従って役割に応じてアクセス制御を実現しています。

  • World Owner: ワールドオーナーNFTのスマートコントラクトに対する権限を持つ
  • Administrator: T&Tの管理者およびリレーサーバーのイーサリアムアカウントWorldFactory, MintManagerに対する権限を持つ NFTのスマートコントラクトは、リレーサーバーで利用するイーサリアムアカウントからもアクセス可能です。これは、ガス代をT&Tが肩代わりするなど、ユーザーの利便性を確保するためです。

BeaconProxyパターンを用いたアップグレード可能なスマートコントラクト

スマートコントラクトは不変、つまり実装を変更することはできません。しかし、NFTの実装を拡張する場合、セキュリティに対応する場合など、実装をアップグレードしなくてはならないシーンはたびたび発生します。

そこで、T&TではBeaconProxyパターンを持ちいてアップグレード可能なスマートコントラクトを実現しています。これは、単一の実装を用いて、複数のコントラクトの動作を実現するパターンです。

T&Tには、多数のワールドが存在しており、アップグレードする際に個別のコントラクトの実装を更新しようとすると大変なコスト(ガス代と時間)が発生する可能性があります。BeaconProxyパターンであれば、単一の実装を更新することで、複数のコントラクトの動作を更新することが可能であるため、このコストを軽減することができます。