Налаштування роялті NFT на OpenSea
З кінця 2022 року роялті NFT перестали бути гарантованими. Blur запустив агресивну політику нульових роялті для привлечення трейдерів, OpenSea був вимушений відповісти — до 2023 року обидва маркетплейси зробили creator royalties опціональними на рівні платформи. Результат: більшість вторинних продаж проходить з нульовими роялті, якщо колекція не використовує on-chain enforcement механізми.
Два підходи до роялті та їх реальність
Off-chain роялті (стандарт маркетплейсів)
EIP-2981 — стандарт on-chain об'яви роялті. Контракт реалізує royaltyInfo(tokenId, salePrice), повертаючи (receiver, royaltyAmount). OpenSea, Blur та Rarible читають цю інформацію та відображають у UI.
Але виконання — на розсуді маркетплейсу. Технічно будь-який смарт-контракт для торгівлі може ігнорувати EIP-2981 та не переводити роялті. Що робить більшість агрегаторів.
On-chain enforcement через transfer обмеження
Єдиний спосіб технічно гарантувати роялті — обмежити трансфер NFT: дозволяти його лише через whitelist'ed контракти (маркетплейси), які чесно платять роялті. Це Operator Filter Registry, який Yuga Labs ввела для BAYC у 2022 році.
Проблема: рестрикції на трансфер конфліктують зі стандартом ERC-721. Агрегатори, не включені в whitelist, не можуть торгувати токенами. Деякі користувачі сприймають це як обмеження прав на власний актив. У результаті Yuga Labs та OpenSea до 2024 року відмовилися від Operator Filter як механізму.
На практиці: більшість нових колекцій реалізують EIP-2981 для коректного відображення у маркетплейсах, але не обмежують трансфери. Роялті — джентльменське соглашение з маркетплейсом.
Практична настройка
Контракт
OpenZeppelin надає розширення ERC2981:
import "@openzeppelin/contracts/token/common/ERC2981.sol";
contract MyNFT is ERC721, ERC2981 {
constructor() {
_setDefaultRoyalty(msg.sender, 500); // 5% = 500 basis points
}
}
_setDefaultRoyalty встановлює роялті для всієї колекції. _setTokenRoyalty(tokenId, receiver, feeNumerator) — для окремих токенів (актуально для 1/1 арту з різними авторами).
OpenSea Collection Settings
Крім on-chain ERC-2981, OpenSea дозволяє налаштувати роялті в Collection Settings:
- Відсоток (до 10%)
- Адреса одержувача
- Верифікація через підпис власника контракту
Якщо контракт не має EIC-2981 — OpenSea бере налаштування з панелі. Якщо є — on-chain дані мають пріоритет (в залежності від версії інтерфейсу).
Сплітування роялті між кількома одержувачами
Якщо роялті потрібно ділити між командою — не пишемо логіку спліту в NFT-контракті. Використовуємо 0xSplits або Splits Protocol: розгортаємо спліт-контракт з долями, його адрес вказуємо як receiver в EIP-2981. При надходженні ETH на адресу спліту будь-хто може викликати distribute() — кошти розділяються по налаштованих долях автоматично.
Оцінка часу
Настройка EIP-2981 у існуючому контракті (якщо немає) та верифікація на OpenSea — 2-3 години. Включає: перевірку поточного контракту, додавання EIP-2981 якщо відсутній (або розгортання нового), настройку в OpenSea Collection Settings, перевірку відображення роялті.







