Аннотация 2
ПЕРЕЧЕНЬ УСЛОВНЫХ ОБОЗНАЧЕНИЙ И ТЕРМИНОВ 3
ВВЕДЕНИЕ 4
1 Основные концепции блокчейна и спецификации токенов 6
1.1 Стандарт токенов валют (ERC-20) 7
1.2 Стандарт невзаимозаменяемых токенов (ERC-721) 7
1.3 Стандарт взаимозаменяемых токенов (ERC-1155) 7
1.4 Стандарт владения контрактом (ERC-173) 8
1.5 Метаданные токенов 8
1.6 Комиссия выполнения 8
1.7 Тестовые сети Ethereum 9
2 Анализ требований 10
2.1 Создание смарт-контрактов коллекций 10
2.2 Метаданные созданных токенов 11
2.3 Экономия комиссии на транзакции 11
2.4 Создание смарт-контрактов валют 11
2.5 Проверка владения (ERC-173) 12
2.6 Диаграмма вариантов использования 12
3 Технологии и инструменты разработки 12
3.1 Предварительные технические требования 12
3.2 Solidity - язык программирования смарт-контрактов 13
3.2.1 Выбор языка программирования 13
3.2.2 Модификаторы функций 14
3.2.3 Логи 14
3.2.4 Наследование 16
3.2.5 Создание контрактов внутри транзакции 16
3.2.6 Вызов одного контракта внутри другого 17
3.3 Среда разработки Hardhat 17
4 Проектирование и разработка приложения 19
4.1 Проектирование интерфейса взаимодействия с пользователем 19
4.3 Структура проекта 21
4.4 Фабрики контрактов 22
4.4.1 Фабрика коллекций ERC-721 22
4.4.2 Фабрика коллекций ERC-1155 24
4.4.3 Фабрика конденсированных коллекций 25
4.4.4 Репозиторий условно хороших метаданных токенов 26
4.4.5 Легковесная фабрика коллекций ERC-721 27
4.4.6 Фабрика валют ERC-20 30
4.4.7 Копирование метаданных токена из другого контракта 30
4.5 Реализация фасада над фабриками 31
4.6 Список развернутых контрактов 33
4.7 Копирование метаданных из основной сети в тестовую 36
4.8 Тестирование логики контрактов 37
4.9 Развертывание контрактов 38
ЗАКЛЮЧЕНИЕ 39
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ 40
Одна из задач, которая стоит при разработке программного обеспечения - создание и изменение контента. Наличие данных не только улучшает визуальную составляющую приложений, но и позволяет пользователю переходить к более сложным сценариям использования. Зачастую система сама предлагает пользователю способ создания данных. Однако, есть продукты, которые отображают и работают с данными из внешней системы. Способ развития или обогащения таких данных должен быть достаточно простым, так как это влияет на скорость разработки и проверки реализации задач.
Данная работа решает задачу наполнения данных в NFT-маркетплейсе. NFT-маркетплейс - это интернет-площадка, на которой можно просматривать, покупать и обмениваться токенами. Однако создание токенов выходит за рамки функциональных возможностей маркетплейса, поэтому необходимо наличие системы, которая позволит создавать токены для дальнейшего использования в маркетплейсе.
Каждый токен находится в группе (коллекции), а коллекция, в свою очередь, является смарт-контрактом (программным кодом) в блокчейне. Поэтому для создания токенов необходимо взаимодействовать с блокчейном. Здесь и далее под блокчейном понимается определенная сеть Ethereum-блокчейна. В открытом доступе есть несколько таких сетей. Одна из них является основной сетью, для которой существует много сторонних продуктов, позволяющих создавать токены. При этом эти токены обладают реальной стоимостью и могут быть достаточно дорогими. Однако есть несколько тестовых сетей, на которых разработчики могут экспериментировать со смарт-контрактами. Как следствие, в таких сетях есть много дешевых токенов, но нет открытых систем для создания таких токенов.
Целью данной работы является разработка системы, которая позволяет создавать токены в тестовой сети блокчейна.
Исходя из сценариев использования токенов в NFT-маркетплейсе, система предоставляет возможность простым и недорогим способом создать токены с различными параметрами.
Одним из таких параметров является коллекция, в рамках которой существует токен. Система позволяет создать коллекцию и добавлять в неё токены по мере необходимости.
Особое внимание было уделено простоте использования. Время, которое необходимо на создание токена или коллекции должно быть минимизировано, так как это влияет на скорость разработки.
Следующая метрика, на которую было необходимо обращать внимание, это гибкость функционала и возможность расширения. Учитывая, что код смарт-контрактов неизменяем, предоставляемые методы контрактов должны предусматривать широкий диапазон сценариев применения.
Исходя из представленных выше условий, для достижения цели работы, были сформированы задачи работы.
Задачи работы:
1. Изучить основные концепции в блокчейне и спецификаций токенов
2. Провести анализ требований к разрабатываемой системе
3. Спроектировать разрабатываемое решение
4. Определить используемые технологии для реализации
5. Реализовать систему обогащения контента
В результате выполнения выпускной квалификационной работы были разработаны смарт-контракты и клиент-серверное приложение. Система позволила не только обогатить контент маркетплейс, но и упростила ряд сценариев, которые ранее считались достаточно сложными в имитации. В ходе работы сформулированы требования к системе и определены наиболее полезные функции, которые помогают в разработке и тестировании маркетплейса. Расширяемость, заложенная в систему, благодаря разбиению требований на разные контракты, позволяет добавлять при необходимости новые функции.
Гибкость спроектированной системы позволила расширить функциональные возможности и сценарии использования. На момент написания этой работы пользователями было создано около 300 контрактов коллекций и валют. Токены, произведенные фабриками этой системы, продолжают передаваться из одних кошельков в другие, и система является одним из основных способов генерации контента для NFT-маркетплейса.
Таким образом, цель работы до стигнута, все поставленные задачи выполнены.