On-chain роялти в NFT: разработка токена по стандарту ERC-2981

До появления **ERC-2981** каждый маркетплейс реализовывал роялти по-своему: OpenSea хранил список оффчейн, Rarible использовал собственный контракт, LooksRare — свою схему. В результате создатель NFT терял до 30% доходов от вторичных продаж из-за ручной регистрации. Мы разрабатываем смарт-контракты

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1267
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1003

До появления ERC-2981 каждый маркетплейс реализовывал роялти по-своему: OpenSea хранил список оффчейн, Rarible использовал собственный контракт, LooksRare — свою схему. В результате создатель NFT терял до 30% доходов от вторичных продаж из-за ручной регистрации. Мы разрабатываем смарт-контракты с встроенным стандартом ERC-2981, что гарантирует автоматические отчисления на всех популярных площадках — OpenSea, Rarible, LooksRare, Blur и X2Y2. Работаем под ключ: от прототипа смарт-контракта до аудита безопасности и развёртывания в выбранной сети. ERC-2981 стал отраслевым стандартом для on-chain роялти, и мы помогаем внедрить его с минимальными газовыми затратами и максимальной прозрачностью. Экономия на маркетплейсовых комиссиях достигает 30%. Наша команда имеет 5+ лет опыта в Web3 и выполнила 15+ аудитов, что позволяет быстро находить оптимальное решение для каждого проекта. В среднем создатель экономит $2,000–5,000 в месяц на ручном администрировании.

Подробнее о стандарте: EIP-2981

Почему ERC-2981 стал стандартом для on-chain роялти?

До стандарта создателю приходилось регистрироваться в каждом маркетплейсе отдельно. ERC-2981 делает роялти переносимыми: развернули контракт — и все площадки, поддерживающие интерфейс, автоматически применяют ваши условия. Это экономит сотни часов ручного администрирования. On-chain роялти с ERC-2981 в 5 раз ускоряет интеграцию с новыми маркетплейсами по сравнению с off-chain подходом.

Сравнение: on-chain vs off-chain роялти

Характеристика On-chain (ERC-2981) Off-chain (реестр маркетплейса)
Единый источник правды Да, в блокчейне Нет, зависит от площадки
Переносимость между маркетплейсами Автоматическая Требует ручной регистрации
Прозрачность и неизменность Полная Может быть изменён в любой момент
Дополнительные затраты газа Минимальные (только чтение) Нет (вне сети)

Off-chain подход был популярен, но создатель терял контроль. On-chain с ERC-2981 — отраслевой стандарт, который мы рекомендуем всем клиентам.

Как работает ERC-2981

Стандарт добавляет одну функцию в контракт:

function royaltyInfo( uint256 tokenId, uint256 salePrice ) external view returns (address receiver, uint256 royaltyAmount); 

Маркетплейс при продаже вызывает royaltyInfo(tokenId, salePrice), получает адрес получателя и сумму роялти. Всё. Стандарт намеренно минималистичен — он не принуждает к выплате (enforcement off-chain), только предоставляет данные.

Базовая реализация через OpenZeppelin:

import "@openzeppelin/contracts/token/common/ERC2981.sol"; contract MyNFT is ERC721, ERC2981 { constructor() ERC721("MyNFT", "MNFT") { _setDefaultRoyalty(msg.sender, 500); // 500 basis points = 5% } function setTokenRoyalty(uint256 tokenId, address receiver, uint96 feeNumerator) external onlyOwner { _setTokenRoyalty(tokenId, receiver, feeNumerator); } } 

feeNumerator — числитель от знаменателя _feeDenominator() (по умолчанию 10000). Значит, 500 = 5%, 250 = 2.5%, максимум 10000 = 100% (не используйте). Мы оптимизируем контракт для минимального расхода газа при вызове royaltyInfo.

Расширенные паттерны роялти

Splitter роялти для нескольких получателей

Стандарт поддерживает только одного receiver. Для сплита между создателем, командой, фондом — нужен дополнительный контракт. Два подхода:

  • PaymentSplitter: receiver в ERC-2981 указывает на PaymentSplitter контракт (OpenZeppelin). Маркетплейс переводит всю сумму на сплиттер, сплиттер распределяет по shares. Простой, проверенный, но дополнительный газ на release.
  • Push royalty splitter: встроенный в NFT контракт механизм, который при каждом поступлении автоматически распределяет по адресам. Экономит один вызов, но усложняет контракт.

Динамические роялти

ERC-2981 позволяет royaltyInfo возвращать разные значения для разных tokenId. Это открывает возможности:

  • Снижение роялти с ростом цены продажи (прогрессивная шкала)
  • Разные ставки для разных категорий токенов (tier system)
  • Нулевые роялти для primary sale, 5% для secondary

Пример реализации динамических роялти с прогрессивной шкалой:

function royaltyInfo(uint256 tokenId, uint256 salePrice) public view override returns (address, uint256) { uint96 rate; if (salePrice <= 1 ether) rate = 500; // 5% до 1 ETH else if (salePrice <= 10 ether) rate = 300; // 3% до 10 ETH else rate = 100; // 1% выше 10 ETH return (_royaltyReceiver, (salePrice * rate) / _feeDenominator()); } 

Как реализовать динамические роялти с гибкими ставками?

Выбор между базовой реализацией, сплиттером и динамическими ставками зависит от вашей бизнес-модели. Если у вас один автор и фиксированная комиссия — достаточно базового ERC-2981. Для команд с несколькими получателями используйте PaymentSplitter. Если хотите стимулировать торговлю — внедрите динамические ставки. Мы поможем проанализировать ваш кейс и выбрать оптимальное решение. Получите бесплатную оценку вашего проекта за 24 часа — напишите нам.

Процесс работы

  1. Аналитика: разбираем требования к роялти, сценарии торгов, целевую аудиторию.
  2. Проектирование: выбираем архитектуру (базовый, splitter, динамический), готовим спецификацию.
  3. Разработка: пишем контракт на Solidity 0.8.x, используем Foundry для тестов и верификации.
  4. Тестирование: coverage >95%, фаззинг на Echidna, проверка реентерабельности и gas-оптимизация.
  5. Аудит: внутренний и внешний аудит безопасности (слайзеры, формальная верификация).
  6. Деплой: развёртывание на Ethereum/Polygon, верификация в Etherscan, настройка supportsInterface.
  7. Поддержка: мониторинг, обновления при форках сети, консультации по интеграции.

Что входит в разработку?

  • Исходный код контракта с тестами (репозиторий GitHub)
  • Документация по развёртыванию и настройке
  • Развёртывание в выбранной сети (Ethereum, Polygon, Arbitrum, BNB Chain)
  • Верификация контракта на блокчейн-эксплорере
  • Интеграция с маркетплейсами (OpenSea, Rarible, LooksRare)
  • Аудит безопасности (отчёт об уязвимостях)
  • Доступ к приватному репозиторию для дальнейших доработок
  • Поддержка в течение месяца после деплоя

Ориентиры по срокам

Тип реализации Срок
Базовая (один получатель, фиксированная ставка) 1 день
Со сплиттером (PaymentSplitter) 2-3 дня
С динамическими ставками и кастомной логикой 3-5 дней
Полный цикл (включая аудит и деплой) 5-7 дней

Стоимость рассчитывается индивидуально исходя из сложности. Получите оценку за 1 день — напишите нам, и мы подготовим предложение. Наша команда имеет 5+ лет опыта в Web3, выполнила 15+ аудитов смарт-контрактов и развернула десятки ERC-2981 токенов для клиентов из США, Европы и Азии. Свяжитесь с нами для обсуждения архитектуры.