Крафтинг NFT
Описание
Крафтинг представляет собой древовидную систему прокачки NFT путем сжигания NFT более низких уровней и оплаты в UNIT (или других разрешенных токенах).
Модуль интегрирован с контрактом MagnetNftManager и обрабатывается backend сервисом через события.
Логика работы
Механика крафтинга
Для повышения уровня NFT пользователь должен:
- Иметь необходимое количество NFT предыдущего уровня
- Оплатить комиссию за крафтинг в UNIT (или другом токене)
Конфигурация устанавливается для каждого уровня отдельно:
- Количество NFT, необходимое для крафтинга
- Токен для оплаты
- Стоимость крафтинга
Два сценария крафтинга
Сценарий 1: Прокачка главного NFT
Условие: В списке сжигаемых NFT присутствует root NFT пользователя
Результат:
- Сжигаются все NFT кроме root
- Root NFT не минтится заново — обновляется уровень
minted = falseв событии- Backend обновляет уровень существующего root NFT
Пример:
Пользователь крафтит NFT lvl2:
- Имеет: root NFT lvl1 + 2 дополнительных NFT lvl1
- Указывает в списке: [rootId, nft1Id, nft2Id]
- Результат: root NFT → lvl2, nft1 и nft2 сожжены
Сценарий 2: Создание нового NFT
Условие: В списке сжигаемых NFT нет root NFT
Результат:
- Сжигаются все указанные NFT
- Минтится новый NFT следующего уровня
minted = trueв событии- Backend создает новую запись NFT
Пример:
Пользователь крафтит NFT lvl2:
- Имеет: root NFT lvl1 + 3 дополнительных NFT lvl1
- Указывает в списке: [nft1Id, nft2Id, nft3Id] (без root)
- Результат: новый NFT lvl2 сминчен, 3 NFT сожжены
Множественный крафтинг (quantity > 1)
Контракт поддерживает крафтинг нескольких NFT за одну транзакцию:
Пример:
craft(product, targetLevel=2, tokenIdsToBurn, paymentToken, quantity=3)
Результат при наличии root в списке:
- root NFT → lvl2
- Дополнительно сминчено 2 новых NFT lvl2
- Все указанные NFT (кроме root) сожжены
Расчет стоимости
Формула расчета цены
Цена для крафтинга уровня N рассчитывается итеративно:
price[N] = (requiredPrevCount × price[N-1]) + craftFee[N]
Где:
requiredPrevCount— количество NFT предыдущего уровняprice[N-1]— цена предыдущего уровняcraftFee[N]— комиссия за крафт уровня N
Пример расчета для lvl3 (при quantity=1):
Конфигурация:
- lvl1: price = 1.5 UNIT
- lvl2: requiredCount = 3, craftFee = 1 UNIT
- lvl3: requiredCount = 3, craftFee = 1 UNIT
Расчет:
price[2] = (3 × 1.5) + 1 = 5.5 UNIT
price[3] = (3 × 5.5) + 1 = 17.5 UNIT
При quantity > 1:
totalPrice = price[N] × quantity
Функция computePrice
apps/contracts-v2/contracts/MagnetNftManager.sol
function computePrice(
address product,
uint256 targetLevel,
address paymentToken,
uint256 quantity
) external view returns (uint256)
Использование на фронтенде:
const price = await nftManager.computePrice(
productAddress,
targetLevel,
unitCoinAddress,
quantity,
);