До появления 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 часа — напишите нам.
Процесс работы
- Аналитика: разбираем требования к роялти, сценарии торгов, целевую аудиторию.
- Проектирование: выбираем архитектуру (базовый, splitter, динамический), готовим спецификацию.
- Разработка: пишем контракт на Solidity 0.8.x, используем Foundry для тестов и верификации.
- Тестирование: coverage >95%, фаззинг на Echidna, проверка реентерабельности и gas-оптимизация.
- Аудит: внутренний и внешний аудит безопасности (слайзеры, формальная верификация).
- Деплой: развёртывание на Ethereum/Polygon, верификация в Etherscan, настройка supportsInterface.
- Поддержка: мониторинг, обновления при форках сети, консультации по интеграции.
Что входит в разработку?
- Исходный код контракта с тестами (репозиторий GitHub)
- Документация по развёртыванию и настройке
- Развёртывание в выбранной сети (Ethereum, Polygon, Arbitrum, BNB Chain)
- Верификация контракта на блокчейн-эксплорере
- Интеграция с маркетплейсами (OpenSea, Rarible, LooksRare)
- Аудит безопасности (отчёт об уязвимостях)
- Доступ к приватному репозиторию для дальнейших доработок
- Поддержка в течение месяца после деплоя
Ориентиры по срокам
| Тип реализации | Срок |
|---|---|
| Базовая (один получатель, фиксированная ставка) | 1 день |
| Со сплиттером (PaymentSplitter) | 2-3 дня |
| С динамическими ставками и кастомной логикой | 3-5 дней |
| Полный цикл (включая аудит и деплой) | 5-7 дней |
Стоимость рассчитывается индивидуально исходя из сложности. Получите оценку за 1 день — напишите нам, и мы подготовим предложение. Наша команда имеет 5+ лет опыта в Web3, выполнила 15+ аудитов смарт-контрактов и развернула десятки ERC-2981 токенов для клиентов из США, Европы и Азии. Свяжитесь с нами для обсуждения архитектуры.







