Введение

На момент написания статьи я работаю Frontend-разработчиком в VK (Delivery Club) на Vue и плавно перехожу на iOS-разработку. Уже около 4 лет считаю себя поверхностно приближенным к сфере крипты: участвовал в разработке P2P-платформы (BTC-обменника), изучал основы и идеологию, инвестировал, терял деньги на фьючерсах — все, как надо.

Однажды, по интернету стала расходиться новость о том, что 12-летний мальчик заработал ~$350,000 на коллекции программно-сгенерированных китов, состоящей из 3350 уникальных айтемов.

https://opensea.io/collection/weirdwhales
https://opensea.io/collection/weirdwhales

Так мне пришла мысль внести свою лепту. К тому же, как показывает практика, это потенциальный способ заработка в наше время :)
Сразу хочу заметить, что я не специалист и точно не дилетант, так что не судите строго. Приятного чтения!

Необходимые ссылки будут указаны по ходу статьи, а в конце приложен репозиторий с кодом для полноценного минтинга своих NFT.

Подготовка

Я являюсь большим фанатом фентези-средневековья (Толкин, Сапковский), поэтому первое, что пришло мне в голову — гоблины. Гоблины, которые могут быть вооружены мечами и копьями, а облачены в одежду по типу туник, доспехов и т.п. Я набросал на бумагу свое приблизительное видение персонажа и пришел к своей девушке — графическому дизайнеру. Горящий идеей и с кривым рисунком в руках, я попытался объяснить, что прямо сейчас нам необходимо нарисовать коллекцию гоблинов в стиле пиксель-арт.

Предложение увенчалось успехом, и мы приняли решение нарисовать по слоям 5 разных гоблинов, 5 элементов вооружения, 5 элементов одежды и 5 однотонных фонов. Итого 5^4 = 625 уникальных айтемов.

Работа пошла: моя девушка и, по совместительству, единственный партнер по проекту, начала отрисовывать в PS первого персонажа — голенького и пока еще хрупкого, зеленого гоблина.

Я в свою очередь стал изучать массу разнообразных источников, дабы выяснить, что из себя фундаментально представляет NFT, как это сделать и где публиковать.

Стоит отметить, что я не нашел ровным счетом ничего на русскоязычных источниках, кроме самой базовой информации. Поэтому все, что помогло мне в разработке, пришлось брать с множества разных ресурсов: американские тематические форумы, американский ютуб, итальянский ютуб, китайский ютуб и много-много чего еще.

Процесс разработки

Итак, первое, что я выяснил — есть несколько площадок для продажи своих NFT. Самыми популярными являются OpenSea и Rarible. Как понял, OpenSea более доступна, т.к. комиссия за продажу айтемов платится непосредственно в момент продажи, т.е. площадка просто забирает часть суммы с продажи себе. А Rarible — это площадка, которая направлена больше в сторону настоящего искусства, нежели простых сгенерированных пиксель-арт картинок. Исходя из этого, выбор пал на OpenSea.

На OpenSea можно сделать NFT двумя способами:

  1. Нажать на сайте кнопку "Create" и вручную выбрать медиафайл, добавить название, описание и другую информацию описывающую айтем.

  2. Написать собственный смарт-контракт и заминтить айтем(ы).

Вручную выкладывать 625 айтемов было бы ужасно, так что я, не раздумывая, решил писать свой смарт-контракт.

OpenSea на данный момент поддерживает два блокчейна — Ethereum и Polygon. Но Ethereum — это дорого, и чтобы сделать 625 айтемов, по моим рассчетам нужно было заплатить около $16,000 за "газ", а также некоторую сумму, как первоначальный взнос перед листингом первого айтема. С Polygon такой проблемы нет: создание и листинг NFT происходит бесплатно, первоначального взноса нет, но айтемы на Polygon'е нельзя выставлять на аукцион, только фиксированная цена. Это мне подходит :)

Я нашел на ютубе парня — Patrick Collins, который рассказывал о том, как написать смарт-контракт и "за копейки" заминтить свои NFT, используя блокчейн Chainlink (LINK). У него было несколько разных гайдов, например, как сделать NFT с изображением в IPFS в качестве "обложки" или как сделать NFT с base64 SVG в качестве обложки. Позже выяснилось, что парень является основателем Chainlink — топ 20 токен в мире по мнению Coinmarcetcap.

Благодаря Патрику и некоторым другим видео, я выяснил, что смарт-контракт можно написать на языке программирования Solidity, а для его деплоя необходима некая среда. Передо мной встал выбор, с помощью чего деплоить смарт-контракт:

  • Brownie — такой фреймворк для деплоя смарт-контрактов, с написанием кода на Python.

  • Hardhat — тоже фреймворк, но код пишется на JavaScript.

  • Remix — онлайн IDE для написания и деплоя смарт-контрактов.

Как упоминал в начале статьи, я являюсь Frontend-разработчиком, а значит ближе всех мне подходит Hardhat с возможностью написания кода на JavaScript.

Тем временем первый гоблин был отрисован, и более того, к нему был отрисован фон (изначально планировалось рисовать полноценные фоны, но из-за небольшого разрешения 100x100 пикселей, гоблины попросту терялись в деталях фонов).

Первый комплект (зеленый скин, одежда "тряпье", оружие "копье" и фон "таинственный лес")
Первый комплект (зеленый скин, одежда "тряпье", оружие "копье" и фон "таинственный лес")

Прежде, чем писать смарт-контракт, мне нужен был генератор моих "NFT", то есть программа, которая возьмет все отрисованные слои и сгенерирует из них 625 уникальных изображений, а также соберет все в отдельные json'ы. Так выглядит json моих NFT:

{
  "name": "Freaky Goblin #0",
  "description": "blue heavy goblin with spear on pink bg",
  "attributes": [
    {
      "trait_type": "Bg",
      "value": "pink"
    },
    {
      "trait_type": "Goblin",
      "value": "blue"
    },
    {
      "trait_type": "Cloth",
      "value": "heavy"
    },
    {
      "trait_type": "Weapon",
      "value": "spear"
    }
  ],
  "image": "ipfs://QmcNAyfyFC8G9PMMWXNBB1t3RxVp9YscWzLfwCa218CbUR"
}

Это документ, который описывает объект NFT: его имя, описание, атрибуты и изображение.

За основу генератора я взял скрипт на Python, написанный тем самым создателем китов и сильно переписал его под свои нужды: помимо генерации картинок и json'ов, мне также нужно было, чтоб скрипт загружал все эти картинки в Pinata. Pinata — это такой сервис, который загружает ваши данные в IPFS и возвращает хеш, по которому в дальнейшем можно эти данные получить. IPFS — это, очень простым языком, большой и безотказный файлообменник в интернете. Картинки могут храниться в Pinata как угодно, потому что у них будет хеш, который будет указываться в json'е (как видно в листинге выше). А с самими json'ами посложнее: для смарт-контракта нужно указать базовую точку, откуда для каждого токена будет взят json, то есть нужна такая "директория", в которой по номеру будут лежать все json'ы. Что то-вроде goblins/0.json , goblins/1.json и т.д. Поэтому, после генерации гоблинов я складываю все json'ы в отдельную директорию и затем загружаю на Pinata саму директорию, благо сервис позволяет так делать. Теперь получается так, что в файловой системе IPFS лежит директория со всеми json'ами, к которой я могу обратиться, как ipfs_hash/0.json. Отлично!

Когда генератор сделан, все изображения и данные для NFT сгенерированы и загружены — можно писать смарт-контракт. С этой частью я мучался больше всего, пытаясь писать его с помощью всех выше упомянутых вариантов: Brownie, Hardhat и Remix. Но из всего процесса опишу только успешный с помощью Hardhat, дабы избавить вас от ненужных подробностей.

OpenSea предоставляет для разработчиков тестовую среду. Ровно также, как Matic и Ethereum предоставляют тестовые сети. То есть для деплоя нужно просто переключить сеть в кошельке Metamask. Так как я собираюсь деплоить в сети Polygon, мне нужна тестовая сеть Polygon — Mumbai. Добавить ее в кошелек можно здесь. Просто ввести в поиске "Mumbai" и подключить Metamask, все просто. Когда сеть добавлена — можно пополнить баланс кошелька. Также необходимо описать конфиг для Hardhat, чтоб деплоить в нужной сети.

В качестве базы для NFT можно взять уже написанный смарт-контракт OpenSea Creatures. В репозитории можно на выбор найти несколько разных смарт-контрактов (Single, Bundle и т.д.) и по их примеру пробовать писать свои. Но главное — это ERC721Tradable.sol и его зависимости. То есть основной функционал, такой как владение или трансфер уже будет реализован в нем, а нам остается только написать функционал минтинга.

Спустя долгое время изучения Solidity и тестирования смарт-контракта, у меня наконец получилось заминтить полноценную коллекцию в тестовой сети. Я принялся минтить это все в продакшн. Кстати, на минтинг 625 токенов ушло около $60.
И вот, коллекция готова, все 625 токенов отображаются корректно, функционал работает. Последний штрих, чтоб было совсем красиво — верифицировать смарт-контракт. Это делается с помощью того же Hardhat.

К сожалению, на данный момент, OpenSea предоставляет API для листинга токенов только в сети Ethereum, поэтому я написал AppleScript, который автоматизировал работу моего Mac и за ночь залистил все 625 токенов. Также добавил скрипт для обновления метаданных моих NFT — бывает, что метаданные подтягиваются не сразу, и для этого есть кнопка "Refresh Metadata", но можно сделать это и с помощью скрипта.

Завершение

Прошло 4 месяца с момента релиза нашей коллекции и, сказать честно, ни один айтем не продался. За это время я пробовал сбивать цену, всячески продвигать своих гоблинов, даже заказал дискорд сервер у фрилансера. Но кажется, что коллекция попросту оказалась слишком проста и не несла за собой "вау" эффекта.

Я благодарен источникам, которые предоставили любую информацию, тем, кто отвечал на мои вопросы на форумах и, конечно, моей прекрасной девушке, которая решила потратить свое время и силы на такую внезапную сомнительную идею.

Это было интересно. Наша коллекция — это хоть и безуспешный, но совместный проект, который мы полюбили и довели до конца. Получили хороший экспириенс и собственные NFT.

Репозиторий на GitHub
Сайт коллекции
Коллекция

Я буду только рад, если кто-то, воспользовавшись этим проектом, упростит себе задачу и сделает свою крутую коллекцию, которая выстрелит :)

От вас прошу комментариев, критика тоже приветствуется, я знаю, что ей здесь есть место.

Комментарии (41)


  1. Color
    27.01.2022 16:01
    +1

    Интересное чтиво, спасибо


  1. sinneren
    27.01.2022 16:08
    +3

    попробуйте поступить от обратного, изучите рынок и выставьте некую максималку


  1. urvanov
    27.01.2022 17:17
    +9

    Прошло 4 месяца с момента релиза нашей коллекции и, сказать честно, ни один айтем не продался.

    А сами бы купили?


    1. bodasooqa Автор
      27.01.2022 17:58
      -2

      Я — скорее, нет
      Может разве что в спекулятивных целях

      Но к китам или криптопанкам у меня такое же отношение :)
      Не хочу ставить свою коллекцию на уровне с топами продаж, но тем не менее
      Если посмотреть смарт-контракты этих коллекций и на сами изображения, то моя работа выполнена не хуже, как считаю


      1. Krasnopolskiy
        27.01.2022 19:00
        +1

        Чтобы коллекцию покупали, даже в спекулятивных целях, нужна какая-то идея или интерес, который представляют токены. Например, cryptopunks - одна из первых NFT коллекций, которая представляет коллекционный (тавтология, да) интерес.

        Не знаю, чем киты заинтересовали общественность, возможно, возрастом разработчика, потому что после запуска коллекция активно пиарилась в The New York Times и Business Insider.

        Так что к вашему контракту и картинкам добавить бы идею, зачем людям покупать токены - тогда коллекция могла бы взлететь


        1. bodasooqa Автор
          27.01.2022 19:02

          Да, согласен полностью
          Заголовок "12-летний школьник продал NFT на $350,000" достаточно кричащий

          Это имеет смысл


          1. d1zz3l
            28.01.2022 12:30

            Но этот заголовок создался уже пост фактум, написано "продал".А ведь к этому надо как-то прийти...


            1. 3aBulon
              30.01.2022 08:48

              Уже ниже написали, не актуально )


  1. Serjikson
    27.01.2022 17:55
    +2

    Спасибо, отличная командная работа и статья хороша)


  1. kurujikutokifu
    27.01.2022 17:55

    Вот бы скрипт автоматизации увидеть


    1. bodasooqa Автор
      27.01.2022 17:56

      Он есть в репозитории)
      https://github.com/bodasooqa/freaky-goblins-nft/blob/master/utils/opensea-polygon-sell-order.scpt

      Но открывается только на маке в appleScript Editor'е


      1. kurujikutokifu
        27.01.2022 18:21

        Так маком и буду открыть)


        1. bodasooqa Автор
          27.01.2022 18:25

          Я имею в виду, что скрипт не читается на гитхабе и не открывается VS Code, например)


      1. kurujikutokifu
        27.01.2022 19:30

        Да,там что записан контракт, или номер кошелька?


        1. bodasooqa Автор
          27.01.2022 20:01

          Где именно?


          1. kurujikutokifu
            27.01.2022 21:36

            Уже разобрался. То записан контракт в скрипте


      1. kurujikutokifu
        27.01.2022 21:35

        Чета не работает. Complete listing нажимает а дальне что-то не отробатывает


        1. bodasooqa Автор
          27.01.2022 23:19

          Воможно, стоит посмотреть на классы, которые прописаны в скрипте
          У вас они могут быть уникальные)


          1. kurujikutokifu
            28.01.2022 15:13

            Я посмотрел но в этом не понимаю в принципе. Так, по ходу понял смысл. Строка blockreact.... Я посмотрел в коде страницы с первой кнопкой получилось. Остальные не отрабатывают. Хз кароч


  1. Mox
    27.01.2022 20:35
    +6

    Мне кажется что был упущен простой "маркетинг" - нужно было найти кого-то, кто купит (за ваши деньги, просто аккаунт другой), потом следующего - создать видимость ликвидности этой коллекции.

    Потому что ну понятно что сами по себе права собственности на эту пиксельную хрень без возможности перепродать никому не уперлись, хоть криптопанки хоть что - никакой ценности в них нет.


    1. 0x4eadac43
      29.01.2022 10:44

      wash trading - покупка-продажа самому себе (по факту) - считается нелегальной практикой. Чтобы схема работала, необходимо, пока вы выставляете на продажу, не нашелся покупатель со стороны. (Хотя, если цель - нагнать цену, то, наоборот, ждем, пока клюнет.) На обычных биржах маловероятно, т.к. большое количество участников. Отслеживается и карается. Пока крипта не особо зарегулирована, можно пользоваться. В прочем, многие так и делают.


  1. vladislav12345
    27.01.2022 22:06
    +1

    Благодарю, за интересную статью! Здорово, что попробовали


  1. GeorgeNZ
    27.01.2022 23:16
    +1

    Расскажу вам о ваших ошибках.

    1. Ваша цель была заработать $, но вы выбрали неподходящую стратегию. Немножко истории местной кухни, первым делом необходимо продвигать коллекцию:

      - открыть дискорд канал(закрытые платные каналы, постоянно новости добавлять),

      - вести твиттер, перед тем как купить нфт, инвестор смотрят кто подписан на ваш твитер, кто репостит вашу коллекцию. Если там нет известных личностей, вам придется расчитывать что у вас ну очень крутой дизайн, и то он не выстрелит как даже пустышка но раскрученная. Тут совсем другое комьюнити, идеи взгляды.

    2. Контракт ваш не мог 16к$ стоить, я не знаю как нужно было его написать чтобы выйти на эту цену, максимальная стоимость контракта в сети эфириум была 1к$ долларов, и то это при том что в это время была очень высокая цена на газ так как большие игроки пампились. Я тоже думал в сети полигон запустить, но это риски, не знаю как бы инвестора с опенсиа отреагировали на это.

    У меня друг в штатах, пару коллекций запущено, неплохие цифры.

    Как итог,

    1. Надо разогревать публику для минтинга.

    2. Красота сайта для минтинга значения не имеет, ибо инвестор который приходит на сайт уже знает купить он или нет.

    Спасибо за статью, у нас очень мало матерала на эту тему. Я думал создать свой сайт и помогать нашим дизайнерам, мне задеплоить контракт сгенерировать нфт 5-10 минут времени. Но в последнее время не знаю стоит ли этим заниматься, как-то безтолковое занятие но денег там конечно очень много.


    1. GeorgKDeft
      28.01.2022 20:07
      +3

      Но в последнее время не знаю стоит ли этим заниматься, как-то безтолковое занятие но денег там конечно очень много.

      Знаете как выглядело NFT 2000-х?


  1. Dren0r
    27.01.2022 23:16
    +3

    Ваша проблема в том, что рынок работает совсем по другому, вы просто закинули картинки на сайт, а вот как проходят популярные проекты:

    1- Сперва нужно максимально разлекламировать коллекцию до выпуска (за 2-3 месяца минимум), создав такую атмосферу, что каждый поверил бы в то, что в день запуска она непременно разлетится как горячие пирожки

    2 - Сделать минт не самому, а кнопку на вебсайте. Чтобы в день Х любой желающий мог нажав ее, получить картинку на своей кошелек, тогда и цена минта вместе с газом оплачивается покупателем (минты на полигоне считаются для нищебродов и ими никто не пользуется)

    3 - И это не считая всяких White List'ов, розыгрышей и прочего прочего

    4 - Коллекция должна быть постороена по примеру рпг - от "зеленых" до "легендарных" вещей, есть сервисы, которые оценивают изображение по трейтам и строит рейтинг

    Вся суть проекта сводится к аналогу открывания луктбоксов из игр, когда за минимальный прайс 0.05-0.1 ETH человек может себе выбить через минт как шерпотреб, так и легендарку, после перепродав ее.
    А так же никто не знает, насколько успешно вы продадитесь, тем самым, возвращаясь к 1 пункту, каждый будет думать, что если он не нажмет минт, то точно будет sold out и потом не успеет, таким образом коллекции и продаются


    1. bodasooqa Автор
      27.01.2022 23:18
      +1

      @GeorgeNZ, @Dren0r спасибо за информацию, думаю, это обязательно к прочтению для тех, кто планирует разобраться и запускать свои коллекции


    1. GeorgeNZ
      28.01.2022 22:51
      +2

      Не могу поставить лайк, наверное из-за того что новый пользователь.

      Удивляюсь как наши комменты с 0 лайками несут самую полезную информацию)

      Спасибо за Ваш опыт и его публичность.


  1. swelf
    28.01.2022 00:52
    +3

    Уже пару тредов за последние дни об NFT было, но сторонники(но не пользователи NFT, кстати), так и не смогли донести ценность, может вы донесете, ну кроме спекулятивной? Что получает покупатель? Почему он может верить в то что написано в NFT?


    1. ogost
      28.01.2022 10:48
      +1

      На мой ламерский взгляд, проблема не в доверии написанного в NFT, а в ценности того, что там написано. Где-то здесь на хабре в комментах видел отличную аналогию, приблизительная цитата:

      Допустим, у вас есть жена и ей пользуются все, кто хотят. Но у вас есть свидетельство о бракосочетании, там написано, что она - именно ваша жена, и ничъя больше! Так вот NFT - это и есть свидетельство о бракосочетании.


      1. swelf
        28.01.2022 10:51
        +6

        только это же не полная цитата, а вырванный кусок, не хватает.

        Женой в это время пользуется кто захочет. Свидетельство выдано пацанами в гаражах и жена вообще о нем не знает


        1. ogost
          28.01.2022 11:24

          Верно, забыл самую важную часть, спасибо за поправку.


  1. LishtvanP
    28.01.2022 04:10

    @bodasooqa@GeorgeNZогромное вам спосибо одному за опыт, а второму за конструктивную критику, ито и другое полезно для новичков


    1. GeorgeNZ
      28.01.2022 22:59

      пожалуйста, на то и нужно комьюнити) если что подсказать итд всегда открыт


    1. GeorgeNZ
      28.01.2022 23:06

      Пожалуйста, внизу раскрыл коммерческие расчеты проекта который в плюсе


  1. Endovask
    28.01.2022 11:11

    А зачем все эти сложности с кодингом, написанием смарт контрактов. Кто мешает просто залистить нфт на Opensea, в сети poligon это стоило бы копейки. Для чего весь этот кодинг?ради кодинга? Автоматизации листинга?


    1. bodasooqa Автор
      28.01.2022 11:12

      Как я и написал в посте: вручную листить 650 айтемов было бы муторно)


    1. GeorgeNZ
      28.01.2022 22:56

      @Dren0r ответил довольно таки исчерпывающе

      - минты на полигоне считаются для нищебродов и ими никто не пользуется

      - вся суть проекта сводится к аналогу открывания луктбоксов из игр, когда за минимальный прайс 0.05-0.1 ETH человек может себе выбить через минт как шерпотреб, так и легендарку, после перепродав ее.


  1. GeorgKDeft
    28.01.2022 19:13
    +1

    Единственный NFT который стоил того чтоб его купили, потому что о нем рассказали в новостях (картинка изменена и добавлен текст для наглядности). Возможно вам стоило все же нарисовать картинки а потом их сжечь, чтоб у NFT была бы хоть какая то предистория?

    P.S. - Жаль непонял в статье сколько стоило создать и продвигать NFT.


    1. GeorgeNZ
      28.01.2022 22:23

      Жаль непонял в статье сколько стоило создать и продвигать NFT.

      Все очень условно и относительно( см. дальше).

      Как я вижу этот проэкт ушел в 0-100$ (максимум).

      • создать трейты(свойства для нфт) - до 100$, но если договорились о %% то 0$(так как он не распродался);

      • деплой контракта на Полигоне(он также будет виден платформой Opensea) +- копейки;

      • продвижение 0$ (не было продвижения NFT)

      Как сделали мы, принцып раздать всем по 25%(4 человека):

      • были разработаны более сложные NFT (без свойств, каждый уникальный) - 25% уходит создателю/ям картинок

      • 25% разработчику(сайт + деплой контракт в сети ефириум)

      • 800$ деплой контракта в сети эфириум

      • продвижение делали сами(но можно нанять людей)

        В итоге занималось 4 человека всем по 25%, на данный момент каждый заработал по 5к$(в этом и прелесть минтинга, а не загружать все на опенсеа)

      Стратагия продвижения: создателем коллекции выступил стажировщик очень известного бренда(Прадо, Гуччи, Луи Витон, Ив Сен Лоран, - один из этих брендов)


  1. Variag01
    29.01.2022 12:11
    +3

    такое ощущение что все эти истории о том как маленький мальчик продал картинки за сотни тысяч или студент из Индонезии стал нфт- миллионером придумывают сами владельцы нфт-бирж


  1. sanslar
    30.01.2022 10:43

    Лучше бы на xrpl запускался