- Ознакомиться с Lesson 14: Hardhat ERC721
- Написать контракт стандарта ERC-1155
Каждый раз когда мы минтим(покупаем за эфир) новую нфт, мы будем вызывать Chainlink VRF для получения случайного числа. Используя это случайное число мы будем минтить пользователю токен в зависимости от его редкости.
Смарт-контракт должен иметь функционал:
setMintFee()
- функцию установки комиссии для минтинга;
requestNFT()
- функция которая должна принимать эфир и делать запрос на случайное число в chainlink VRF;
fulfillRandomWords()
- функция которая должна получать случайное число, определять какой токен нужно сминтить в зависимости от полученного числа и редкости токенов, и конечно минтить этот токен пользователю который заплатил соответствующее количество денег.
setTokenURI()
- возможность задавать uri для каждого токена;
withdraw()
- забор средств со смарт-контракта, должен уметь только owner контракта;
getMintFee()
- должен возвращать комиссию для минтинга токенов;
uri()
- должен возвращать uri конкретного токена;
Данные по редкости:
PUG = 0; // 10% chance
SHIBA_INU = 1; // 20% chance
ST_BERNARD = 2; // 70% chance
Критерии прохождения задания:
- Изучить стандарт ERC-1155, разобрать все основные методы.
- Написать ERC-1155 с использованием OpenZeppelin, chainlink.
- Для каждого из трех токенов должен быть свой uri.
- Загрузить картинки токенов и метаданные токенов в IPFS используя сервис на свое усмотрение.
- Деплой смарт-контрактов в тестовую сеть.
- Написать тесты для смарт-контрактов.
- Пройтись по литературе на которую приведены ссылки.
Дополнительно:
- Попробовать написать скрипты для программной загрузки файлов на ipfs.
- Попробовать использовать другие расширения ERC-1155 от OpenZeppelin.
- Понимание общего принципа работы стандарта NFT-1155 и его дополнений.
- Понимание что такое IPFS и как с ними работать.
- Умение писать скрипты для программной загрузки файлов на ipfs.
- Закрепить знания как получать рандомное число с chainlink.
- Какие главные отличия erc-1155 от erc-721?
- Что такое token URI и как можно его задавать в erc-1155?
- Как использовать Chainlink для получения рандомного числа?
- Какие методы должны быть в токене ERC-1155? Что они делают?
- Чем отличается safeTransferFrom от safeBatchTransferFrom?
- Чем отличается approve от setApprovalForAll? Как отозвать каждый из апрувов?
- Для чего нужен метод setURI?
- Какие расширения ERC-1155 есть у OpenZeppelin? Какой функционал добавляют следующие расширения:
- ERC1155Pausable
- ERC1155Burnable
- ERC1155Supply
- ERC1155URIStorage