- Ознакомится с Lesson 15: NextJS NFT Marketplace
- Написать смарт-контракт маркетплейса для nft
Маркетплейс выступает площадкой где торгуются NFT-коллекции или отдельные токены ERC-721(NFT). Маркетплейс имеет простой функционал - токены ERC-721(NFT) выставляются на продажу и покупаются за токены ERC-20.
- продавец может листить (размещать нфт на площадке)
- продавец может изменять параметры листинга
- продавец может отменять листинг
- продавец может принять оффер на покупку NFT по цене, которую предложил покупатель
- покупатель может купить NFT, которая листится по цене, которую установил продавец
- покупатель может предложить офер на покупку NFT по своей цене и установить срок окончания офера
- маркетплейс может установить комиссию площадки за каждую сделку
- по умолчанию комиссия должна быть 2% (прописывается в контракте либо задается через конструктор)
- должна быть возможность просматривать комиссию на смарт-контракте
- должна быть возможность изменять комиссию на смарт-контракте
- должна быть возможность установить минимальную комиссию 0.01% (смотри базисные пункты и как с ними работать в solidity для точных расчетов)
- маркетплейс может установить получателя комиссии
- получатель комиссии должен задаваться в конструкторе
- должна быть возможность изменить получателя комиссий площадки
- установить нового получателя комиссии может только владелец маркетплейса (либо адрес, у которого есть доступ к подобным операциям, например владелец контракта (owner))
- должна быть возможность посмотреть адрес получателя комиссии площадки
- листинг нфт
- отмена листинга нфт
- изменение параметров листинга (токен оплаты и цена)
- покупка нфт, которая листится
- создание офера
- отмена офера
- принятие офера продавцом
- запись комиссии платформы
- запись получателя комиссии платформы
- просмотр комиссии платформы
- просмотр получателя комиссии платформы
- Проверка интерфейса ERC-721 во время листинга нфт и создания офера (ERC-165)
- Списание роялти и отправка создателю NFT, если NFT поддерживает ERC-2981
- Аукцион
- В смарт-контракте должны быть модификаторы:
notListed
,isListed
,notOffered
,isOffered
- В смарт-контракте должны быть события:
ItemListed
,ItemUpdated
,ItemSold
,OfferCreated
,OfferCanceled
,UpdatePlatformFee
,UpdatePlatformFeeRecipient
- В смарт контракте должны быть все необходимые проверки. Например токен оплаты ERC-20 должен проверяться на нулевой адрес, а ERC-721 должен поддерживать интерфейс ERC-721, в функции должны передаваться корректные аргументы и т.д.
- Функции площадки должны быть с ограниченным доступом (использовать Ownable)
- Использовать ReentrancyGuard от OpenZeppelin для защиты функций смарт-контракта от повторных вызовов.
- Необходимо использовать свои токены. Токен ERC-20 из второго задания для покупки и продажи нфт(оплата должна проводиться в этом токене). Токен ERC-721 для реализации нфт.
- Покрытие unit тестами 100%. Для проверки покрытия тестами кода можно использовать плагин solidity-coverage