お疲れさまです。
次世代ビジネス推進部の荻原です。
今回は、OpenSeaでのNFTの購入の仕組みに関連して気になることを調べてみました。
OpenSeaでNFTを購入する際には、NFTの販売価格の2.5%がOpenSea側に手数料として支払われます。
その手数料が2023年3月16日12時(JST)現在、期間限定で条件付きで0%になっています。
(コレクションのクリエイター収益が0.5%未満に設定されている場合、またはコレクションのアイテム数やアクティビティが基準より低い場合は最大0.5%となります。)
NFTの購入は当然スマートコントラクトで制御されているので、NFTの購入に伴う手数料の支払いもスマートコントラクトが利用されているはずです。
ということは、スマートコントラクトのどこかで通常は2.5%が指定されている部分が0%(〜0.5%)に変更されているということになります。
それを探してみることにしました。
調査内容
今回は調査のためにOpenSeaのテストネット(Mumbai)でNFTの出品と購入を行いました。
恐らくテスト的に作成したNFTでアクティビティが少ないために、手数料は0.5%になっていました。
OpenSeaでNFTを購入する際には
0x00000000006c3852cbEf3e08E8dF289169EdE581のコントラクトが使われています。
(Polygonscan)
(Etherscan)
実行されている関数は以下です。
function fulfillBasicOrder(BasicOrderParameters calldata parameters) external payable returns (bool fulfilled); |
引数は BasicOrderParametersという構造体です。
struct BasicOrderParameters { // calldata offset address considerationToken; // 0x24 uint256 considerationIdentifier; // 0x44 uint256 considerationAmount; // 0x64 address payable offerer; // 0x84 address zone; // 0xa4 address offerToken; // 0xc4 uint256 offerIdentifier; // 0xe4 uint256 offerAmount; // 0x104 BasicOrderType basicOrderType; // 0x124 uint256 startTime; // 0x144 uint256 endTime; // 0x164 bytes32 zoneHash; // 0x184 uint256 salt; // 0x1a4 bytes32 offererConduitKey; // 0x1c4 bytes32 fulfillerConduitKey; // 0x1e4 uint256 totalOriginalAdditionalRecipients; // 0x204 AdditionalRecipient[] additionalRecipients; // 0x224 bytes signature; // 0x244 // Total length, excluding dynamic array data: 0x264 (580) } |
Polygonscanで引数に指定された値を見てみたところ、 additionalRecipientsに
50000000000,0x0000a26b00c1F0DF003000390027140000fAa719 |
という値が渡されていました。
今回NFTの販売価格は0.00001MATIC(10000000000000wei)にしたので、
50000000000は手数料と一致しました。
0x0000a26b00c1F0DF003000390027140000fAa719は手数料の支払先でした。
つまり、この部分で手数料として指定する値が今はNFTの販売価格の0%(〜0.5%)となっているみたいです。
参考
この記事を書いた人
最近書いた記事
- 2023.12.24気難しいBlockchainへの対処法
- 2023.09.22レコチョクチケット特有の機能について
- 2023.07.18【ERC4337 その2】NFTを転送してみる
- 2023.07.14【ERC4337 その1】ERC4337について