NFTマーケットプレースのスマートコントラクト:リスティング、オファー、オークション、ロイヤリティ
重要ポイント
- •NFTコントラクトとマーケットプレースコントラクトは異なる機能を持ち、前者は資産の所有権を定義し、後者は売買、手数料ルーティング、決済を調整します。
- •ERC-721のリスティングは通常単一のユニークトークンを販売しますが、ERC-1155のリスティングは複数のコピーを提供でき、決済時の部分決済処理と数量追跡が必要です。
- •エスクローマーケットプレースはリスティング時にNFTをコントラクトにロックしますが、レイジーリスティングはオフチェーン署名を通じて出品者の保管権を維持しつつ、オンチェーンの無効化パスを必要とします。
- •EIP-2981はロイヤリティ情報を読み取り可能にしますが、支払いを普遍的に執行するものではなく、実際のクリエイター収益は各マーケットプレースのポリシーと決済ロジックに依存します。
- •セキュリティテストは、再入攻撃、リプレイ攻撃、期限切れ注文、誤ったチェーンの署名、部分決済をカバーし、安全でない条件下でコントラクトがフェイルクローズすることを検証すべきです。

NFTマーケットプレースのスマートコントラクトは、リスティング、オファー、オークション、決済、キャンセル、手数料ルーティング、ロイヤリティ、および管理コントロールを統括します。ERC-721またはERC-1155標準は資産自体を記述するものですが、トークン標準に準拠していることだけでは安全なマーケットプレースが自動的に完成するわけではありません。
開発者は、マーケットプレースコントラクトをOpenSeaマーケットプレースレビューの手数料および注文動作、NFTマーケットプレースインフラガイドの運用レイヤー、およびNFTパッシブインカムモデルの支払いトリガーと比較すべきです。コントラクトイベントは決済およびサポートワークフローのソースデータとして機能するからです。
NFTスマートコントラクトの解説
NFTスマートコントラクトは、ブロックチェーン上にデプロイされたコードであり、トークンを作成し、所有権の記録と移転を管理します。ミント時、コントラクトはトークンIDを所有者アドレスに割り当てます。トークンが売却または移転される際、コントラクトは送信者の権限と該当する移転ルールを検証した後にのみ、所有権記録を更新します。
コントラクトは通常、トークンの所有者、供給量、承認、移転履歴、およびメタデータ参照を記録します。必ずしもアートワーク自体を保存するわけではありません。HederaによるNFTスマートコントラクトの解説にあるように、トークンIDとメタデータが資産を識別し、スマートコントラクトのロジックがミントと所有権変更を処理します。重要な点として、スマートコントラクトは実行可能なコンピュータコードであり、著作権、返金、または商業的権利に関する法的合意が自動的に成立するわけではありません。
NFTコントラクトとマーケットプレースコントラクト
NFTコントラクトとマーケットプレースコントラクトは異なる目的を果たします。NFTコントラクトは資産を定義し、トークンIDを作成し、所有権を記録し、承認と移転を強制します。マーケットプレースコントラクトは売買を調整します。リスティングまたはオファーを検証し、支払いを回収し、NFTを移転し、手数料をルーティングし、注文を締結またはキャンセルします。
この分離は重要です。有効なNFTを所有していることと、それがアクティブにリスティングされていることは別問題であり、マーケットプレースの注文に署名しても、決済が完了するまで所有権は変更されません。購入者は両方のアドレスを確認すべきです。コレクションコントラクトはNFTを識別し、マーケットプレースコントラクトまたはスペンダーは移転権限を受領するソフトウェアを識別します。ウォレット、サポートツール、インデクサーを統合するチームにとって、この区別はアイテムの可用性、返金、履行の信頼できる情報源としてどのイベントを扱うかも決定します。
ERC-721とERC-1155がマーケットプレース設計に与える影響
ERC-721は、各トークンIDが単一の独立して所有されるアイテムを表す場合に一般的に使用されます。単一のアート、ユニークなゲームアセット、土地パーセル、所有権がトークンごとに確認されるコレクティブルに適しています。ERC-1155は、同じトークンIDの複数のコピーを表すことができ、ゲームの消耗品、チケット、エディション、数量発行されるアイテムに有用です。
トークン標準は注文に含めるべき内容を変更します。ERC-721のリスティングは通常、1つのトークンIDを販売します。ERC-1155のリスティングでは、20個のコピーを提供しながら購入者が3個だけ購入するケースがあるため、マーケットプレースは注文全体を閉じずに残数量を更新する必要があります。キャンセル時は残数量を無効化し、決済イベントでは何ユニットが移動したかを示す必要があります。
承認メカニズムも異なります。トークン固有のERC-721承認は単一のNFTを許可しますが、オペレーター承認はそのコレクションのすべてのトークンをカバーする場合があります。ERC-1155は通常、コントラクト下のウォレットの全残高に対してオペレーター承認を使用します。マーケットプレースは利便性のために幅広い権限を要求できますが、ウォレットのプロンプトでその範囲を可視化し、ユーザーが取り消し方法を理解しているべきです。
エスクローおよびレイジーリスティングの設計
エスクローマーケットプレースは、出品者がリスティングする際にNFTをマーケットプレースコントラクトに移転します。このアプローチは可用性の確認を簡単にしますが、出品者はより多くのガスを支払い、リスティング中はアセットを使用できなくなります。レイジーリスティングはNFTを出品者のウォレットに保持し、トークン、価格、チェーン、有効期限、ナンス、マーケットプレースアドレスを含むオフチェーン署名を記録します。これによりリスティングコストが削減され、保管権が維持されますが、コントラクトは署名を検証する必要があり、出品者はそれを無効化するためのオンチェーンパスも必要です。
ゲームマーケットプレースの場合、この選択はガスコスト以上の影響を及ぼします。エスクロー方式では、リスティング中にアイテムを装備できない場合があります。レイジーリスティング方式ではプレイヤーのアセットは維持されますが、所有権が変更されたときに履行不可能になるリスティングをゲームとマーケットプレースが処理する必要があります。この運用上の違いは、リスティングモデルが自動的に対応すると想定するのではなく、ウォレット移転、コレクションのアップグレード、リスティングの無効化などのエッジケースをローンチ前にテストすべき理由でもあります。
リスティングとオファーのライフサイクル
固定価格リスティングは、作成、検証、購入、決済、キャンセルの各状態を経るべきです。オファーには有効期限、ナンス、チェーンID、スペンダーチェック、キャンセルが必要です。各状態はインデクサーが照合できるイベントを発行すべきです。
オファーにはコントラクトが確実に実行できる支払いモデルも必要です。ネイティブコインのオファーは、後から新しい署名済みトランザクションなしでは購入者のウォレットから引き出せないのが通常ですが、WETHやUSDCのような承認されたERC-20トークンはエスクローで保持するか、出品者が承諾した時に移転できます。したがって、注文記録には通貨、金額、有効期限、ナンス、購入者、出品者、トークンID、キャンセルステータスを含めるべきであり、見出しの価格だけを保存すべきではありません。
オークション決済には独自のステートマシンが必要です。イングリッシュオークションは、より高い入札、返金、終了時刻、最終決済の呼び出し元を処理する必要があります。ダッチオークションは経過時間から現在価格を計算し、古い購入を拒否する必要があります。プルベースの返金残高は、すべての落札できなかった入札者に即座に資金を送金するよりも安全です。返金コールバックの失敗がオークション全体を凍結すべきではないからです。短い終了時刻の延長は、最後の瞬間のスナイピング入札を減らすのにも役立ちます。
署名から決済までの0.5 ETH NFT売却の例
署名済み注文を通じて0.5 ETHでリスティングされたERC-721 NFTを考えます。出品者はNFTをウォレットに保持したまま、マーケットプレースコントラクトに移転を承認します。署名済みリスティングは、コレクションコントラクト、トークンID、出品者、価格、有効期限、ナンス、チェーンID、マーケットプレースアドレスを識別します。この署名が作成された時点では所有権の変更は発生しません。
購入者が購入を送信すると、マーケットプレースコントラクトは注文が期限切れまたはキャンセルされていないこと、署名が出品者のものであること、出品者が引き続きNFTを所有していること、移転の承認が有効であることを検証します。その後、コントラクトは注文を成立済みとしてマークし、支払いを処理し、NFTを購入者にルーティングし、マーケットプレースがアイテムページの更新に使用できるイベントを発行します。
上記の手数料分配は説明目的であり、特定のマーケットプレースの実際の手数料を示すものではありません。
NFTの移転が失敗した場合、所有権が変更されていない状態で支払いが完了したままにすべきではありません。支払い先がETHを受信できない場合、最も安全な対応はコントラクトの設計に依存します。トランザクションをリバートするか、金額を引き出し可能残高としてクレジットできます。したがって、支払いルーティング、移転順序、状態更新、再入保護は、個別の機能チェックボックスとしてではなく、まとめてテストする必要があります。
ロイヤリティと手数料ルーティング
ロイヤリティ情報はEIP-2981に従うことができます。OpenZeppelin ERC-721やOpenZeppelin ERC-1155などのコントラクトライブラリは標準的な資産動作の実装に役立ちます。ただし、マーケットプレースでの執行には意図的なプロダクトポリシーが依然として必要です。
EIP-2981はロイヤリティ情報を読み取り可能にするものであり、普遍的に執行可能にするものではありません。マーケットプレースはクリエイターアドレスとロイヤリティ金額を照会できますが、別の場所は異なるポリシーを選択したり、結果を完全に無視したりする可能性があります。クリエイター収益が不可欠な場合、開発者はロイヤリティフィールドを保証された支払いとして扱うのではなく、実際の移転パス、選択されたマーケットプレース、アグリゲーターの動作、コレクションの執行ロジックをテストすべきです。
セキュリティテスト
重要なテストには、再入攻撃、リプレイ攻撃、期限切れ注文、誤ったチェーンの署名、管理者キーの侵害、一時停止動作、部分決済が含まれます。目的は長い監査チェックリストを作成することではなく、注文が安全でない場合にマーケットプレースがフェイルクローズすることを証明することです。
最も価値の高いテストは、購入者や出品者が実際に経験する可能性のある障害をモデル化すべきです。購入は、変更された価格を拒否すべきであり、ベイトアンドスイッチを実行すべきではありません。署名済み注文はチェーンIDとマーケットプレースアドレスにバインドされるべきです。キャンセルまたは消費されたナンスは再実行されるべきではありません。決済コードでは、外部呼び出しの前に注文状態を更新し、支払いおよび移転パスの周囲に再入ガードを適用します。
PolygonのユーザーがRaribleをレビューした際、2026年8月11日に収集されたネットワーク固有のコントラクトレビューにおいて、ネットワーク体験にカスタムコントラクトのサポートとメタデータの凍結が欠けていると報告しました。これはマーケットプレースコントラクトが安全でないという証拠ではなく、ネットワークとプロダクトバージョンに依存する可能性があります。それでも、これは有用な実装上の境界を浮き彫りにします。ローンチに選択した正確なチェーンで、コントラクトカバレッジ、メタデータの不変性、アップグレード動作をテストすべきです。
結論
マーケットプレースコントラクトは、その注文ライフサイクルと障害時の挙動で評価されるべきです。安全なコントラクトパスは、作成、有効期限、キャンセル、決済、ロイヤリティ、インデクシング、一時停止動作を前提に頼らずに処理します。次のエンジニアリングステップは注文ライフサイクルテストです。
よくある質問
NFTスマートコントラクトにはどのような情報が保存されますか?
コントラクトは通常、トークンID、所有権、残高、承認、移転ルール、供給量、メタデータURIを記録します。画像や動画は多くの場合別途保存され、メタデータを通じて参照されます。
NFTコントラクトはマーケットプレースのリスティングも処理しますか?
必ずしもそうではありません。NFTコントラクトはトークンを管理し、別個のマーケットプレースコントラクトがリスティング、オファー、オークション、支払い、手数料、決済を一般的に管理します。
マーケットプレースは許可なくNFTを移転できますか?
所有権、トークン固有の承認、またはNFTコントラクトが認識するオペレーター承認を通じて権限が必要です。購入者と出品者は署名前に承認されたスペンダーを確認すべきです。
NFTのロイヤリティフィールドは支払いを保証しますか?
いいえ。ロイヤリティ標準は受領者と金額を伝達できますが、実際の支払いはマーケットプレースのポリシーと決済パスに依存します。
免責事項:本記事は研究および編集比較の目的のみです。金融、投資、法律、税務の助言を構成するものではありません。NFTツール、マーケットプレース、手数料、チェーンサポート、および実際の可用性は急速に変化する可能性があるため、資金、資産、または秘密鍵に関わる決定を行う前に、公式プラットフォームで現在の状況を確認してください。