上で書いたNFT購買プロセスにおいての独自SmartContract(以下独自Contract)において、どれほど処理に関わっているかについて調査しましたが、独自Contractはほぼ関係しておらず、ほとんどがOpenSea側のContractに委ねられているという結論でした。
調査の目的が独自ContractでNFTを公開した際に、そのContractがNFT購買プロセスの中にどれほど外部からデータと通貨のやりとりを独自ロジックとして組み込めるかを見極めたかったのですが、OpenSea上での売買プロセスでは関わりは持てないという事になっています。継続して調査中なのが、売買プロセス完了後に別の独自Contractにトランザクションを飛ばすことで、データと通貨のやりとりに独自性をもたせることが可能かを見ており、そちらは状況が分かり次第別のEntryとして公開します。
このEntryではOpenSeaに対して独自ContractでNFTを公開していることを前提とし、CollectionにてRoyaltyを設定した際の購買トランザクションの挙動におけるTokenの移行処理について纏めます。
権限的な話として、独自SmartContractにてNFTを公開すると、SmartContractのOwner(作成者、Deployした人)が自動的にそのSmartContractに紐づく形でOpenSeaのCollectionのOwnerになります。
手数料の話として、購買プロセスの中でOpenSeaに対して売り手が払うものは売買価格の2.5%と決まっています。またOpenSeaのCollectionで毎回の売買の手数料の一部をCreator(自身や他者)送金する機能が備わっています。これをRoyalty機能と呼びます。
おおよそ下記の図のようになっています。(少し曖昧に書いている部分もあります。)
③のSet Approval for allについてはPolygonで独自Contractを実装している場合において、下記の実装を加えることでステップとして省略可能ではありますが、おおよそ売り手がNFTを出品し、買い手が購入するまでのお金とNFTの権限移譲は図のとおりになります。
処理の中心を担っているのはOpenSeaのContractであり、買い手が「Buy」をするとOpenSeaのContractからお金のやり取りが始まり、主に下記の流れを作る役割を担っています。
下記は僕がPolygon mumbaiでRoyaltyを10%で設定した上で走らせた購買プロセスですが、具体的なToken(暗号通貨)の動きは下記のようになります。