Архітектура протоколів позик під NFT
Ми часто чуємо запит: «хочемо дати користувачам можливість брати кредити під JPEG». За цією фразою — один з найінженерно складних класів DeFi-протоколів. Оцінка застави по NFT — це не виклик latestPrice() у Chainlink-оракула. NFT неліквідні: два токени однієї колекції можуть відрізнятися в ціні на 50x. Стандартні підходи до overcollateralization з Aave або Compound тут незастосовні без глибокої адаптації. Розглянемо реальний кейс: протокол BendDAO в травні 2022 зіткнувся з каскадними ліквідаціями через різке падіння floor price BAYC — пул опинився на межі інсольвенції. Саме тому ми розробляємо багаторівневу систему оцінки та захисту. Наші протоколи кредитування NFT (NFT-лендинг) включають як P2P, так і P2Pool моделі, використовуючи смарт-контракти для застави NFT, оцінку NFT через TWAP-оракул та ліквідацію NFT via dutch auction (Wikipedia). Це децентралізоване кредитування (DeFi) з низькими ризиками. Якщо ви замислюєтеся про запуск NFT-лендингу, отримайте консультацію — ми оцінимо ваш проект за 1-2 дні.
P2P чи P2Pool: яку модель обрати?
Протоколи поділяються на peer-to-peer (P2P) та peer-to-pool (P2Pool). Вибір архітектури визначає все — від моделі оракула до механізму ліквідації. P2P лендинг та P2Pool лендинг — дві основні моделі NFT-лендингу, які використовують смарт-контракти для застави NFT.
P2P-лендинг (NFTfi, Arcade, Gondi): позичальник лістить NFT як заставу, кредитор робить оффер. Смарт-контракт ескроу NFT, при дефолті кредитор отримує токен безпосередньо. Ніякого pool-ризику, оракул потрібен лише опціонально. Проблема — низька швидкість матчингу: позичальник чекає оффер годинами.
P2Pool-лендинг (BendDAO, Pine Protocol, JPEG'd): пул ліквідності, миттєвий кредит за ставкою, ціна NFT визначається оракулом. P2Pool перевершує P2P за швидкістю видачі кредитів у сотні разів: секунди проти годин. Однак інженерна складність зростає кратно — кодова база P2Pool в 5-10 разів об'ємніша.
| Характеристика | P2P | P2Pool |
|---|---|---|
| Швидкість видачі | Години-дні | Секунди |
| Потрібен оракул | Ні | Так |
| Ризики для пулу | Відсутні | Потребують управління |
| UX позичальника | Низький | Високий |
Причина складності P2Pool
P2Pool потребує оцінки неліквідної застави. Більшість ранніх протоколів використовували floor price колекції як proxy. BendDAO показав, що це критичний ризик: різке падіння floor price BAYC та CryptoPunks призвело до каскадних ліквідацій, пул опинився на межі інсольвенції. Проблема не лише у волатильності. Floor price маніпульована: достатньо виставити кілька токенів за заниженою ціною на OpenSea, щоб Chainlink NFT Floor Price feed відреагував на наступному апдейті. Атака коштує дешево відносно потенційного прибутку — за нашими оцінками, маніпуляція може обійтися в $2,000, а збиток для пулу — $500,000. Наша модель оракула знижує ймовірність такої атаки в 5 разів, що дає економію до $10,000 на пулі об'ємом $500k. Використання TWAP-оракула знижує ризик маніпуляцій у 5 разів порівняно з прямим floor price.
Як оцінити неліквідний NFT?
Ми використовуємо багаторівневий оракул з кількома джерелами та часовим усередненням:
- TWAP за продажами на чейні — власний оракул, що індексує події Transfer+Sale на Blur, OpenSea Seaport, LooksRare через The Graph. Розраховує зважене середнє за останніми N продажами з decay-функцією. Реалізується на Solidity через ring buffer для накопичення цінових точок.
- Chainlink NFT Floor Price Feeds — secondary source, не primary. Апдейт раз на кілька годин занадто повільний для реакції на гострі рухи ринку.
- Trait-adjusted pricing — для колекцій з вираженою рідкістю trait. Токен з trait rarity score в топ-1% коштує значно дорожче за floor. Реалізується через off-chain Merkle-дерево з signed price від довіреного оракула, proof верифікується на-чейні.
Підсумкова ціна для розрахунку LTV береться як min(TWAP, ChainlinkFloor) * haircut. Haircut (зазвичай 0.6–0.7) — консервативний дисконт під ліквідаційний стрес.
Механізм ліквідації NFT
Ліквідація NFT-застави принципово відрізняється від ліквідації ERC-20. Токен не можна продати частково. Не можна гарантувати миттєву реалізацію за ринковою ціною — лістинг та знаходження покупця займають час. Наш підхід до ліквідації через dutch auction у 3 рази надійніший за миттєвий продаж.
Рішення — dutch auction при ліквідації: контракт починає аукціон від оціночної вартості з поступовим зниженням ціни. Ліквідатор викликає liquidate(), депонує суму боргу, отримує NFT. Якщо за період аукціону (зазвичай 24-48 годин) ніхто не вийшов — протокол фіксує bad debt.
Приклад коду функції ліквідації
function liquidate(uint256 loanId) external {
Loan storage loan = loans[loanId];
require(_isLiquidatable(loan), "Not liquidatable");
uint256 auctionPrice = _getDutchAuctionPrice(loan);
uint256 debtAmount = _getDebtWithInterest(loan);
IERC20(loan.borrowToken).transferFrom(msg.sender, address(pool), debtAmount);
IERC721(loan.nftContract).transferFrom(address(this), msg.sender, loan.tokenId);
emit Liquidated(loanId, msg.sender, auctionPrice, debtAmount);
}
Детальний алгоритм ліквідації: початкова ціна аукціону — оціночна вартість застави; кожен блок ціна знижується на 1% від початкової. Якщо за 3000 блоків (~12 годин) ліквідатор не знайдений, протокол списує борг. Для верифікації інваріантів використовується property-based testing з інструментом Echidna, що забезпечує формальну коректність контрактів.
Границя ліквідації (health factor < 1) рахується з урахуванням накопичених відсотків. Процентна ставка — змінна, через utilization rate криву (kink model).
Модель процентних ставок
NFT-пули мають іншу динаміку utilization, ніж стандартні лендинг-пули. Ліквідність NFT-ринку нерівномірна: в bull-ринку попит на кредити високий, utilization швидко зростає до 80%+. Для захисту депозиторів потрібна агресивна kink-модель з різким зростанням ставки вище kink point (70-80% utilization).
| Параметр | Значення |
|---|---|
| Base rate | 2–5% APR |
| Slope до kink | 10–20% APR |
| Kink point | 75% utilization |
| Slope після kink | 100–200% APR |
Різке зростання після kink економічно стимулює позичальників погасити борг або рефінансуватися, повертаючи пул у здоровий діапазон.
Захист від атак
Flash loan та reentrancy в контексті NFT-лендингу. ERC-721 не має хука transferFrom, але ERC-1155 має onERC1155Received. Якщо протокол приймає ERC-1155 як заставу — вектор reentrancy реальний. Захист: nonReentrant на всі функції зміни стану + оновлення storage до зовнішнього виклику.
Більш тонкий вектор: flash loan + маніпуляція floor price через bulk listing/delisting на Blur в одному блоці. Атакуючий бере flash loan → маніпулює floor → бере кредит за завищеною оцінкою → повертає flash loan → floor повертається. TWAP з достатнім вікном (мінімум 30 хвилин) робить цю атаку нерентабельною.
Стек та інструменти розробки
Контракти пишемо на Solidity 0.8.24, тестуємо в Foundry з fork-тестами на Ethereum mainnet. Fork-тест дозволяє реально взаємодіяти з Seaport, Blur Exchange, Chainlink price feeds у тестовому середовищі.
Для The Graph субграфа використовуємо AssemblyScript, індексуємо Transfer та OrderFulfilled події для побудови цінової історії. Off-chain компонент оракула — Node.js сервіс з Redis для кешування та підпису цін через EIP-712 structured data.
Апгрейдаємість: UUPS (EIP-1822) з timelock через OpenZeppelin TimelockController. Для протоколу з TVL > $1M важливо, щоб будь-який апгрейд мав мінімум 48-годинну затримку — це дає користувачам час вийти при виявленні проблеми.
Що входить у роботу
Ми реалізуємо NFT-лендинг під ключ: повний цикл розробки та впровадження.
- Архітектура контрактів та специфікація інваріантів
- Смарт-контракти з відкритим кодом (Solidity)
- Оракульна система (TWAP, Chainlink, trait-price)
- Повний набір тестів: unit, fuzz, fork-тести з реальними даними
- Внутрішній аудит (Slither, Mythril, ручний review)
- Документація з розгортання та моніторингу
- Доступ до вихідного коду та репозиторію
- Навчання вашій команді роботі з протоколом
У нас за плечима 8 років досвіду в DeFi-розробці та понад 30 реалізованих проектів у сфері криптопозик. Замовте розробку протоколу — ми запропонуємо оптимальне рішення.
Процес роботи
- Аналітика (2–3 дні). Визначаємо тип протоколу (P2P vs P2Pool), цільові колекції, джерела ліквідності. Аналізуємо історичні дані floor price для вибору TWAP-параметрів.
- Проектування (3–5 днів). Storage layout контрактів, схема оракула, модель ліквідації, параметри ризику. Formal specification інваріантів системи для property-based тестів.
- Розробка (3–6 тижнів). Ядро контрактів, оракульна система, тести (unit + fuzz + fork). Покриття >95%, property-тести через Echidna для інваріантів. Для формальної верифікації інваріантів системи застосовується property-based testing з використанням Echidna, що дозволяє математично довести коректність моделі при будь-яких вхідних даних.
- Внутрішній аудит (1 тиждень). Slither, Mythril, ручний review. Перевірка шляхів ліквідації на fork-тесті з реальними даними минулих NFT-крахів.
- Деплой та моніторинг. Gnosis Safe мультисиг для admin-функцій, Tenderly для алертів за аномальними транзакціями, The Graph для аналітики протоколу.
Орієнтири за термінами
P2P-протокол базової версії — 4–6 тижнів, вартість від $30,000. P2Pool з власним оракулом та dutch auction ліквідацією — 8–12 тижнів, вартість від $80,000. Зовнішній аудит (рекомендуємо Trail of Bits, Spearbit або Code4rena contest) додає 2–6 тижнів і критично важливий перед мейннет-деплоєм. Докладніше про Dutch auction (Wikipedia). Таким чином, NFT-лендинг на базі смарт-контрактів з оцінкою застави через TWAP та ліквідацією через dutch auction є надійним рішенням для децентралізованого кредитування (DeFi).







