# OpenSeaにて独自ContractでRoyaltyを設定した場合のToken移行処理 **Published by:** [Y's note](https://paragraph.com/@y-s-note/) **Published on:** 2022-08-10 **URL:** https://paragraph.com/@y-s-note/opensea-contract-royalty-token ## Content はじめに@yutakikuchi_です。 https://mirror.xyz/0x5C40d264716c12755b1C1ea3395518fFe4bc76ed/vlRRlI7jqswPXmrsYR6zByOcnFCx1s2dDOnOEDGo6So 上で書いた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機能と呼びます。CreatorのPublic Addressに対して販売手数料として10%まで送金設定することができるCreatorのPublic Addressとして、自身でも他者でも設定可能item一個ずつに対してはRoyaltyを設定できないため、Collectionで設定するRoyalty機能はデフォルトではOffになっているため、CollectionのOwner自身で設定する必要がある購買トランザクションの流れおおよそ下記の図のようになっています。(少し曖昧に書いている部分もあります。)NFTを売買する中での独自Contractの呼び出しとTokenの移行処理③のSet Approval for allについてはPolygonで独自Contractを実装している場合において、下記の実装を加えることでステップとして省略可能ではありますが、おおよそ売り手がNFTを出品し、買い手が購入するまでのお金とNFTの権限移譲は図のとおりになります。 https://docs.opensea.io/docs/polygon-basic-integration#code-example-for-erc721 処理の中心を担っているのはOpenSeaのContractであり、買い手が「Buy」をするとOpenSeaのContractからお金のやり取りが始まり、主に下記の流れを作る役割を担っています。購買価格の送金を買い手から売り手に対して行う売り手から販売手数料とRoyaltyをセットで受け取る販売手数料をOpenSeaのPublic Addressへ送金するRoyaltyとして設定したCreatorのPublic Addressへ送金下記は僕がPolygon mumbaiでRoyaltyを10%で設定した上で走らせた購買プロセスですが、具体的なToken(暗号通貨)の動きは下記のようになります。NFTを0.001ETHとして売り買い手から売り手に0.001ETH移行売り手から0.000125ETH(売買価格の12.5%)をOpenSeaのContractへ送金OpenSeaのContractから0.000025ETH(売買価格の2.5%)をOpenSeaのPublic Addressへ送金OpenSeaのContractからCreatorのPublic Addressへ0.0001ETH(売買価格の10%)を送金 ## Publication Information - [Y's note](https://paragraph.com/@y-s-note/): Publication homepage - [All Posts](https://paragraph.com/@y-s-note/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@y-s-note): Subscribe to updates