Професійна розробка смарт-контракту оренди NFT на базі EIP-4907
Ми спеціалізуємося на розробці смарт-контракту оренди NFT за стандартом EIP-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 для оренди NFT?
Стандарт розширює 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-контракта поверх нього. Ми пропонуємо повноцінний NFT-рентинг та гнучке rental marketplace рішення.
Порівняння підходів
| Характеристика | Escrow-free | Escrow |
|---|---|---|
| Місцезнаходження токена | Гаманець власника | Заблокований в контракті |
| Ризик втрати токена | Низький (відсутній custodial risk) | Високий при помилці контракту |
| Gas per лістинг | 0 (офчейн підпис) | ~50k gas (transfer) |
| Use case | Ігри, метавсесвіти, lending | Collateral-позики, аукціони |
Escrow-free (рекомендований): власник схвалює rental-контракт через approve(), орендар оплачує, контракт викликає setUser() від імені власника. Токен залишається у власника весь час оренди. Наш підхід escrow-free в 2 рази дешевший за газ порівняно з escrow: економія до 30% на одну оренду за рахунок відсутності зайвих трансферів.
Порівняння газових витрат
| Операція | Gas (escrow-free) | Gas (escrow) |
|---|---|---|
| Лістинг | 0 (офчейн) | ~50,000 |
| Оренда (1 день) | ~100,000 | ~150,000 |
| Продовження | ~40,000 | ~70,000 |
| Повернення | 0 | ~30,000 |
Структура 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.
Що входить в розробку смарт-контракту оренди NFT?
- ERC-4907 контракт (якщо колекція створюється з нуля) або wrapper для існуючої
- Rental-маркетплейс контракт: офчейн ордера з EIP-712 підписами, ончейн settlement
- Логіка pricing: фіксована ціна/день, Dutch auction для зниження ціни з часом
- Frontend: лістинг, пошук доступних токенів, one-click оренда
- Інтеграція з протоколом-споживачем: заміна
ownerOfнаuserOf
Як ми розробляємо NFT-оренду під ключ
- Аналітика: визначаємо вимоги до rental-логіки, термінів, ціноутворення.
- Проектування: архітектура smart-контрактів, вибір між escrow-free та escrow.
- Реалізація: код на Solidity з використанням Foundry, тестування (unit + fuzzing Echidna).
- Аудит: перевірка на reentrancy, gas оптимізація, формальна верифікація ключових функцій.
- Деплой: налаштування контрактів під обрану мережу (Ethereum, Polygon, Arbitrum), верифікація коду на Etherscan.
- Інтеграція: підключення фронтенду, написання документації для розробників.
Орієнтири за термінами і вартістю
Тільки ERC-4907 контракт + базовий rental — від 2 днів. З офчейн ордербуком, фронтендом та інтеграцією в ігровий контракт — 4-5 днів. Вартість базового контракту — від 500 USD, повне рішення — від 2000 USD. Вартість розраховується індивідуально залежно від складності та обсягу робіт. Напишіть нам для консультації щодо вашого проекту — ми оцінимо вартість та терміни безкоштовно. Замовити розробку смарт-контракту оренди NFT під ключ можна вже сьогодні.







