Создание смарт-контракта аренды NFT с поддержкой EIP-4907 для игр и DeFi

Разработка NFT-аренды (ERC-4907) Игровая гильдия с 5000 NFT-героев на Polygon сталкивается с проблемой: как сдавать их новичкам без передачи права собственности? До появления [EIP-4907](https://eips.ethereum.org/EIPS/eip-4907) аренда реализовывалась через костыли — передача токена в escrow, довер

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

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

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

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

Разработка NFT-аренды (ERC-4907)

Игровая гильдия с 5000 NFT-героев на Polygon сталкивается с проблемой: как сдавать их новичкам без передачи права собственности? До появления EIP-4907 аренда реализовывалась через костыли — передача токена в escrow, доверительные off-chain договорённости или кастомные role-маппинги без единого стандарта. Любой протокол, желавший использовать чужой NFT (игра, метавселенная, lending), писал интеграцию под каждый проект отдельно. Наша команда — 5+ лет опыта в блокчейн-разработке, более 30 успешных проектов — уже реализовала десятки rental-решений на базе ERC-4907: от простых контрактов до полноценных маркетплейсов с офчейн ордерами.

EIP-4907 решает эту задачу чисто: добавляет второй адрес — user — с временными правами использования, не трогая владельца. Экономия времени на интеграцию — до 70% по сравнению с кастомными решениями. Гарантируем безопасность и совместимость со всеми популярными сетями (Ethereum, Polygon, Arbitrum, Base). Интеграция с ERC-4907 в 3 раза быстрее, чем написание собственного контракта аренды, а escrow-free подход экономит до 30% газа на каждую операцию.

Как работает ERC-4907?

Стандарт расширяет ERC-721 двумя функциями и одним событием:

interface IERC4907 { event UpdateUser(uint256 indexed tokenId, address indexed user, uint64 expires); function setUser(uint256 tokenId, address user, uint64 expires) external; function userOf(uint256 tokenId) external view returns (address); function userExpires(uint256 tokenId) external view returns (uint256); } 

Ключевой момент: user автоматически сбрасывается в address(0) после expires. Никакого cron-job, никакого keeper — просто проверка в userOf():

function userOf(uint256 tokenId) public view virtual returns (address) { if (uint256(_users[tokenId].expires) >= block.timestamp) { return _users[tokenId].user; } return address(0); } 

owner сохраняет полный контроль: может передавать токен, получать royalty, устанавливать нового user. При трансфере токена user и expires автоматически сбрасываются — это защита от ситуации, когда арендатор остаётся с правами после смены владельца.

Какую архитектуру выбрать: escrow-free или escrow?

Сам ERC-4907 — это только стандарт на уровне токена. Полноценная система аренды требует rental-контракта поверх него.

Сравнение подходов

Характеристика Escrow-free Escrow
Местонахождение токена Кошелёк владельца Заблокирован в контракте
Риск потери токена Низкий (custodial risk отсутствует) Высокий при ошибке контракта
Gas per листинг 0 (офчейн подпись) ~50k gas (transfer)
Use case Игры, метавселенные, lending Collateral-займы, аукционы

Escrow-free (рекомендуемый): владелец одобряет rental-контракт через approve(), арендатор оплачивает, контракт вызывает setUser() от имени владельца. Токен остаётся у владельца всё время аренды. Escrow-free подход даёт экономию газа до 30% на одну аренду за счёт отсутствия лишних трансферов.

Сравнение газовых затрат

Операция Gas (escrow-free) Gas (escrow)
Листинг 0 (офчейн) ~50,000
Аренда (1 день) ~100,000 ~150,000
Продление ~40,000 ~70,000
Возврат 0 ~30,000

Экономия на газе при escrow-free составляет до 0,0005 ETH на одну аренду (в сети Ethereum).

Структура rental-ордера

struct RentalOrder { address tokenContract; uint256 tokenId; address lender; uint256 pricePerDay; // в wei uint64 minDuration; // в секундах uint64 maxDuration; uint64 deadline; // до когда ордер валиден bytes signature; // EIP-712 подпись лендера } 

Офчейн книга ордеров (как в 0x protocol) + ончейн settlement. Лендер подписывает ордер офчейн — нет газовых затрат на листинг. Арендатор вызывает rent(order, duration) — одна транзакция, оплата + setUser().

Автоматическое продление и досрочное завершение

ERC-4907 не предусматривает досрочного завершения аренды арендодателем — expires неизменяем после setUser(). Для collateral-based аренды (защита от повреждения активов в игре) нужна дополнительная логика: депозит арендатора + возможность для арендодателя вызвать slash с on-chain доказательством нарушения условий.

Интеграция в игры и протоколы

Протоколы должны заменить проверку ownerOf() на userOf():

// Было: require(IERC721(nft).ownerOf(tokenId) == msg.sender, "Not owner"); // Стало: address user = IERC4907(nft).userOf(tokenId); require(user == msg.sender, "Not authorized user"); 

Для обратной совместимости с контрактами, не поддерживающими ERC-4907: wrapper-контракт, который оборачивает обычный ERC-721 в ERC-4907. Владелец депозирует оригинальный токен, получает wrapped-версию с rental-функциональностью.

Типичные ошибки при интеграции:

  • Забыли проверить expires при userOf() — используйте встроенную проверку стандарта.
  • Не сбросили user при трансфере — стандарт делает это автоматически.
  • Используете ownerOf() вместо userOf() в логике использования — теряете арендаторов.
  • Не подписали ордер с EIP-712 — листинг будет требовать газа.
  • Не защитили функцию setUser() от прямого вызова злоумышленником — используйте модификатор onlyOwner.

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

  • ERC-4907 контракт (если коллекция создаётся с нуля) или wrapper для существующей
  • Rental-маркетплейс контракт: офчейн ордера с EIP-712 подписями, ончейн settlement
  • Логика pricing: фиксированная цена/день, Dutch auction для снижения цены со временем
  • Frontend: листинг, поиск доступных токенов, one-click аренда
  • Интеграция с протоколом-потребителем: замена ownerOf на userOf

Как мы разрабатываем NFT-аренду

  1. Аналитика: определяем требования к rental-логике, срокам, ценообразованию.
  2. Проектирование: архитектура smart-контрактов, выбор между escrow-free и escrow.
  3. Реализация: код на Solidity с использованием Foundry, тестирование (unit + fuzzing Echidna).
  4. Аудит: проверка на reentrancy, gas оптимизация, формальная верификация ключевых функций.
  5. Деплой: настройка контрактов под выбранную сеть (Ethereum, Polygon, Arbitrum), верификация кода на Etherscan.
  6. Интеграция: подключение фронтенда, написание документации для разработчиков.

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

Только ERC-4907 контракт + базовый rental — от 2 дней. С офчейн ордербуком, фронтендом и интеграцией в игровой контракт — 4-5 дней. Стоимость рассчитывается индивидуально в зависимости от сложности и объёма работ. Экономия газа до 30% снижает операционные издержки — при типичной нагрузке это около $0.05 за транзакцию. Свяжитесь с нами для консультации по вашему проекту. Закажите разработку договора аренды NFT уже сегодня.