Seaport プロトコルについて調べてみた

Seaport とは

OpenSea が新しくリリースしたNFTを安全かつ効率よくトレードすることができるプロトコル。 具体的にはNFTをERC20トークン(ETHなど)や必要購入金額に相当する別のNFTでトレードすることができる。 たとえば、100ETH相当のNFTを、購入者は暗号資産60ETHと「40ETH相当のNFT」を組み合わせて支払うといったイメージだ

もともと OpenSea は、 Wyvern というプロトコル上でNFTの売買ができるようになっていたが、今後は Seaport に寄せていく動き。

マイグレーションガイドによると、Seaport が正式ローンチされた後1ヶ月間は、移行期間として両方のプロトコルを運用していく。それまでに売買関係の機能を OpenSea SDK で利用している開発者は、移行作業を行う必要がある。

Seaport と 以前のプロトコル(Wyvern) の違い

前述したように、欲しいNFTと別のNFTとのトレードができる。 Orderが完了するまでに発生するガス代が、Seaport だと安くなるようにコントラクトのロジックが最適化されている

Seaport リリースに伴う OpenSea SDK v4, API V2 の変更点

  • スマートコントラクトの向き先が、 順次 wyvern → seaport に変わる
  • 徐々に wyvern プロトコル上での更新、参照が行われなくなる
  • マイグレーションの猶予期間は最大30日

SDK

  • wyvern プロトコルから取得・トランザクションを行う関数がリネームする
  • isOrderFulfillableLegacyWyvern
  • cancelOrderLegacyWyvern
  • fulfillOrderLegacyWyvern
  • createBuyOrderLegacyWyvern
  • createBundleBuyOrderLegacyWyvern
  • createSellOrderLegacyWyvern
  • createBundleSellOrderLegacyWyvern
  • getCurrentPriceLegacyWyvern
  • getOrderLegacyWyvern

API

  • GET /asset, GET /assetsの I/F 変更
  • もともとの仕様として、GET /asset, GET /assets で include_order のクエリパラメータを true にしてAPIフェッチした場合、Order の情報を配列で取得することができる。 今回のアップデートで、seaport プロトコルの Order が seaport_sell_orders としてレスポンスに追加される。既存の wyvern プロトコルのOrder は既存I/Fの sell_orders として扱われる。もし使っている場合、Orders を確認する field を seaport_sell_orders に変更する必要がある
    "asset": {
      ...
      "sell_orders": [],
      "seaport_sell_orders": [],
      ...
    }
  • Order を取得するAPI のエンドポイントが変わる
  • before: GET /wyvern/v1/orders
  • after: GET /v2/orders/rinkeby/seaport/listings or GET /v2/orders/rinkeby/seaport/offers
  • これまで buy / sell のフィルタリングは side パラメータを使用していたが、v2 移行はエンドポイント単位で分かれることになった。
  • buy = offers
  • sell = listings