Втрата роялті на Blur – проблема, знайома власникам NFT-колекцій. Примусове застосування роялті NFT на Blur можливе лише через OperatorFilterRegistry. Без нього навіть стандарт ERC-2981 не гарантує виплат. Ми налаштуємо захист за годину під ключ, відновивши дохід від вторинних продажів. На основі досвіду з 50+ колекціями ми підготували покрокове керівництво.
Blur офіційно підтверджує примусове застосування роялті для контрактів, зареєстрованих у OperatorFilterRegistry. Проблема в тому, що більшість розробників обмежуються ERC-2981, сподіваючись на сумлінність маркетплейсів. Але Blur не перевіряє ERC-2981 без додаткового фільтра. OperatorFilterRegistry вирішує це: контракт із модифікатором onlyAllowedOperator блокує перекази через неавторизовані майданчики.
Як працює примусове роялті на Blur?
Примусове застосування будується на двох механізмах: впровадження стандарту ERC-2981 та реєстрація в OperatorFilterRegistry. Стандарт ERC-2981 задає on-chain роялті, а OperatorFilter примусово застосовує їх на Blur. Для вже задеплоєних контрактів без підтримки ERC-2981 використовуйте Manifold Royalty Registry — ретроактивне рішення без зміни коду.
ERC-2981: on-chain роялті
ERC-2981 — мінімальний стандарт: контракт реалізує функцію royaltyInfo(tokenId, salePrice), яка повертає отримувача та суму. Якщо контракт уже задеплоєний без ERC-2981, додати його в immutable контракт неможливо. Опції: задеплоїти новий контракт із міграцією або зареєструвати роялті через off-chain реєстри (Manifold).
Manifold Royalty Registry — універсальне рішення: owner старого контракту реєструє отримувача та відсоток без зміни коду. Підтримується Blur, OpenSea, Rarible. Для нових контрактів використовуйте ERC2981 з OpenZeppelin із _setDefaultRoyalty(receiver, feeNumerator) у constructor. feeNumerator із 10000: 500 = 5%.
Чому OperatorFilter гарантує виплати?
Blur вимагає реєстрації в OperatorFilterRegistry для примусових роялті. Контракт, який використовує OperatorFilterer від OpenZeppelin, перевизначає transfer-функції з модифікатором onlyAllowedOperator. Цей механізм блокує торгівлю неавторизованими маркетплейсами, які не дотримуються роялті. Для вже задеплоєних контрактів без апгрейду примусове застосування неможливе — лише ERC-2981 через Manifold як best effort.
| Метод | Примусовість | Складність впровадження | Ретроактивність |
|---|---|---|---|
| ERC-2981 | Ні (на Blur) | Низька (1-2 дні) | Ні |
| OperatorFilter | Так | Середня (2-4 години) | Ні |
| Manifold Registry | Часткова | Низька (1 година) | Так |
OperatorFilter у 3 рази ефективніший за захист роялті порівняно з ERC-2981 без фільтра. Втрата роялті може досягати $5000 на місяць для середньої колекції – налаштування захисту окупається за тиждень. Замовте налаштування сьогодні та захистіть доходи.
Приклад коду: інтеграція DefaultOperatorFilterer
import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/token/common/ERC2981.sol"; import "operator-filter-registry/src/DefaultOperatorFilterer.sol"; contract MyNFT is ERC721, ERC2981, DefaultOperatorFilterer, Ownable { constructor() ERC721("MyNFT", "MNFT") { _setDefaultRoyalty(msg.sender, 500); // 5% } function _beforeTokenTransfer( address from, address to, uint256 tokenId, uint256 batchSize ) internal override(ERC721, OperatorFilterer) { super._beforeTokenTransfer(from, to, tokenId, batchSize); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC2981) returns (bool) { return super.supportsInterface(bytes4 interfaceId); } } Технічні деталі для існуючих контрактів
Якщо контракт immutable і не підтримує ERC-2981, використовуйте Manifold Royalty Registry. Це off-chain реєстр: ви реєструєте отримувача та відсоток, а Blur та інші маркетплейси зчитують дані звідти. Процес займає 1-2 години і не вимагає повторного деплою. Однак це не дає 100% примусовості — деякі маркетплейси можуть ігнорувати реєстр.Процес налаштування під ключ
- Аналіз контракту (1-2 години). Перевіряємо наявність ERC-2981, OperatorFilter, можливість апгрейду.
- Вибір способу. Якщо контракт новий — інтеграція OperatorFilter + ERC-2981. Якщо існуючий — Manifold або міграція.
- Реалізація. Для нового — додавання
DefaultOperatorFiltererіERC2981. Для існуючого — викликsetRoyalties()через Manifold. - Тестування на testnet. Перевіряємо коректність роялті на Blur через тестовий продаж. Використовуємо Sepolia.
- Верифікація. Після деплою переконуємося, що колекція відображає відсоток роялті на сторінці маркетплейсу.
Перевірки на testnet: функція royaltyInfo для різних tokenId, перекази через неавторизовані адреси (мають бути відхилені з помилкою NotAllowedOperator), відображення роялті в інтерфейсі Blur testnet. Використовуємо Tenderly для симуляції транзакцій та Slither для статичного аналізу.
Порівняння підтримки роялті на маркетплейсах
| Маркетплейс | Примусові роялті через OperatorFilter | Повага ERC-2981 без фільтра |
|---|---|---|
| Blur | Так | Ні |
| OpenSea | Так | Так |
| X2Y2 | Так | Ні |
| LooksRare | Так | Так |
Що входить у роботу
- Аудит поточного смарт-контракту: перевірка стандартів, апгрейдабельності, коду.
- Рекомендації щодо оптимального способу впровадження роялті.
- Написання та інтеграція коду (OperatorFilter, ERC-2981, Manifold).
- Тестування на testnet (Sepolia, Goerli).
- Документація та навчання команди.
Ми працюємо з блокчейн-проєктами більше 5 років, реалізували понад 50 колекцій NFT на Ethereum, Polygon і BNB Chain. Усі інженери мають сертифікати з Solidity. Оцінимо ваш проект безкоштовно — запишіться на консультацію. Замовте налаштування сьогодні та захистіть доходи своєї колекції.







