Open1

NFTマーケットプレイスのアイテムイベントの設計について検討する

ロピタルロピタル

要件

  • Seaport経由で売買されたNFTはイベントログに売買イベントとして保存する
  • 単純な転送イベントは、転送イベントとして保存する

以下のようなイメージ

Event name Price From To Date
mint 0x00000 ropital 2022-01-28
transfer ropital taro 2022-01-29
sale 10ETH taro ropital 2022-01-30
accept offer 20ETH ropital alice 2022-02-01

難点

Seaport経由で売買された場合も、内部で転送イベントが発行されるため、contract.on("Transfer")で転送イベントを受け取ってしまう。そのため、contract.on("Trasnfer")で受け取ったイベントが売買イベント内で発生した転送イベントなのか、単純な転送イベントなのかを区別する必要があること。

大まかな方針

現在思いつく大まかな幾つかの方針

Seaport経由か解析するパターン

  • 受け取った転送イベントが属するトランザクションを解析してそれがSeaport経由でなければ転送イベントとして保存する。
  • Seaportのイベントは売買イベントとして保存する

EOAから呼び出されたか解析するパターン

  • 受け取った転送イベントが発行された関数がEOAから呼び出されていれば、転送イベントとして保存する
  • Seaportのイベントは売買イベントして保存する。