Введение
На момент написания статьи я работаю Frontend-разработчиком в VK (Delivery Club) на Vue и плавно перехожу на iOS-разработку. Уже около 4 лет считаю себя поверхностно приближенным к сфере крипты: участвовал в разработке P2P-платформы (BTC-обменника), изучал основы и идеологию, инвестировал, терял деньги на фьючерсах — все, как надо.
Однажды, по интернету стала расходиться новость о том, что 12-летний мальчик заработал ~$350,000 на коллекции программно-сгенерированных китов, состоящей из 3350 уникальных айтемов.
Так мне пришла мысль внести свою лепту. К тому же, как показывает практика, это потенциальный способ заработка в наше время :)
Сразу хочу заметить, что я не специалист и точно не дилетант, так что не судите строго. Приятного чтения!
Необходимые ссылки будут указаны по ходу статьи, а в конце приложен репозиторий с кодом для полноценного минтинга своих NFT.
Подготовка
Я являюсь большим фанатом фентези-средневековья (Толкин, Сапковский), поэтому первое, что пришло мне в голову — гоблины. Гоблины, которые могут быть вооружены мечами и копьями, а облачены в одежду по типу туник, доспехов и т.п. Я набросал на бумагу свое приблизительное видение персонажа и пришел к своей девушке — графическому дизайнеру. Горящий идеей и с кривым рисунком в руках, я попытался объяснить, что прямо сейчас нам необходимо нарисовать коллекцию гоблинов в стиле пиксель-арт.
Предложение увенчалось успехом, и мы приняли решение нарисовать по слоям 5 разных гоблинов, 5 элементов вооружения, 5 элементов одежды и 5 однотонных фонов. Итого уникальных айтемов.
Работа пошла: моя девушка и, по совместительству, единственный партнер по проекту, начала отрисовывать в PS первого персонажа — голенького и пока еще хрупкого, зеленого гоблина.
Я в свою очередь стал изучать массу разнообразных источников, дабы выяснить, что из себя фундаментально представляет NFT, как это сделать и где публиковать.
Стоит отметить, что я не нашел ровным счетом ничего на русскоязычных источниках, кроме самой базовой информации. Поэтому все, что помогло мне в разработке, пришлось брать с множества разных ресурсов: американские тематические форумы, американский ютуб, итальянский ютуб, китайский ютуб и много-много чего еще.
Процесс разработки
Итак, первое, что я выяснил — есть несколько площадок для продажи своих NFT. Самыми популярными являются OpenSea и Rarible. Как понял, OpenSea более доступна, т.к. комиссия за продажу айтемов платится непосредственно в момент продажи, т.е. площадка просто забирает часть суммы с продажи себе. А Rarible — это площадка, которая направлена больше в сторону настоящего искусства, нежели простых сгенерированных пиксель-арт картинок. Исходя из этого, выбор пал на OpenSea.
На OpenSea можно сделать NFT двумя способами:
Нажать на сайте кнопку "Create" и вручную выбрать медиафайл, добавить название, описание и другую информацию описывающую айтем.
Написать собственный смарт-контракт и заминтить айтем(ы).
Вручную выкладывать 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)
sinneren
27.01.2022 16:08+3попробуйте поступить от обратного, изучите рынок и выставьте некую максималку
urvanov
27.01.2022 17:17+9Прошло 4 месяца с момента релиза нашей коллекции и, сказать честно, ни один айтем не продался.
А сами бы купили?
bodasooqa Автор
27.01.2022 17:58-2Я — скорее, нет
Может разве что в спекулятивных целях
Но к китам или криптопанкам у меня такое же отношение :)
Не хочу ставить свою коллекцию на уровне с топами продаж, но тем не менее
Если посмотреть смарт-контракты этих коллекций и на сами изображения, то моя работа выполнена не хуже, как считаюKrasnopolskiy
27.01.2022 19:00+1Чтобы коллекцию покупали, даже в спекулятивных целях, нужна какая-то идея или интерес, который представляют токены. Например, cryptopunks - одна из первых NFT коллекций, которая представляет коллекционный (тавтология, да) интерес.
Не знаю, чем киты заинтересовали общественность, возможно, возрастом разработчика, потому что после запуска коллекция активно пиарилась в The New York Times и Business Insider.
Так что к вашему контракту и картинкам добавить бы идею, зачем людям покупать токены - тогда коллекция могла бы взлететь
bodasooqa Автор
27.01.2022 19:02Да, согласен полностью
Заголовок "12-летний школьник продал NFT на $350,000" достаточно кричащий
Это имеет смысл
kurujikutokifu
27.01.2022 17:55Вот бы скрипт автоматизации увидеть
bodasooqa Автор
27.01.2022 17:56Он есть в репозитории)
https://github.com/bodasooqa/freaky-goblins-nft/blob/master/utils/opensea-polygon-sell-order.scpt
Но открывается только на маке в appleScript Editor'еkurujikutokifu
27.01.2022 18:21Так маком и буду открыть)
bodasooqa Автор
27.01.2022 18:25Я имею в виду, что скрипт не читается на гитхабе и не открывается VS Code, например)
kurujikutokifu
27.01.2022 19:30Да,там что записан контракт, или номер кошелька?
kurujikutokifu
27.01.2022 21:35Чета не работает. Complete listing нажимает а дальне что-то не отробатывает
bodasooqa Автор
27.01.2022 23:19Воможно, стоит посмотреть на классы, которые прописаны в скрипте
У вас они могут быть уникальные)kurujikutokifu
28.01.2022 15:13Я посмотрел но в этом не понимаю в принципе. Так, по ходу понял смысл. Строка blockreact.... Я посмотрел в коде страницы с первой кнопкой получилось. Остальные не отрабатывают. Хз кароч
Mox
27.01.2022 20:35+6Мне кажется что был упущен простой "маркетинг" - нужно было найти кого-то, кто купит (за ваши деньги, просто аккаунт другой), потом следующего - создать видимость ликвидности этой коллекции.
Потому что ну понятно что сами по себе права собственности на эту пиксельную хрень без возможности перепродать никому не уперлись, хоть криптопанки хоть что - никакой ценности в них нет.0x4eadac43
29.01.2022 10:44wash trading - покупка-продажа самому себе (по факту) - считается нелегальной практикой. Чтобы схема работала, необходимо, пока вы выставляете на продажу, не нашелся покупатель со стороны. (Хотя, если цель - нагнать цену, то, наоборот, ждем, пока клюнет.) На обычных биржах маловероятно, т.к. большое количество участников. Отслеживается и карается. Пока крипта не особо зарегулирована, можно пользоваться. В прочем, многие так и делают.
GeorgeNZ
27.01.2022 23:16+1Расскажу вам о ваших ошибках.
-
Ваша цель была заработать $, но вы выбрали неподходящую стратегию. Немножко истории местной кухни, первым делом необходимо продвигать коллекцию:
- открыть дискорд канал(закрытые платные каналы, постоянно новости добавлять),
- вести твиттер, перед тем как купить нфт, инвестор смотрят кто подписан на ваш твитер, кто репостит вашу коллекцию. Если там нет известных личностей, вам придется расчитывать что у вас ну очень крутой дизайн, и то он не выстрелит как даже пустышка но раскрученная. Тут совсем другое комьюнити, идеи взгляды.
Контракт ваш не мог 16к$ стоить, я не знаю как нужно было его написать чтобы выйти на эту цену, максимальная стоимость контракта в сети эфириум была 1к$ долларов, и то это при том что в это время была очень высокая цена на газ так как большие игроки пампились. Я тоже думал в сети полигон запустить, но это риски, не знаю как бы инвестора с опенсиа отреагировали на это.
У меня друг в штатах, пару коллекций запущено, неплохие цифры.
Как итог,
Надо разогревать публику для минтинга.
Красота сайта для минтинга значения не имеет, ибо инвестор который приходит на сайт уже знает купить он или нет.
Спасибо за статью, у нас очень мало матерала на эту тему. Я думал создать свой сайт и помогать нашим дизайнерам, мне задеплоить контракт сгенерировать нфт 5-10 минут времени. Но в последнее время не знаю стоит ли этим заниматься, как-то безтолковое занятие но денег там конечно очень много.
GeorgKDeft
28.01.2022 20:07+3Но в последнее время не знаю стоит ли этим заниматься, как-то безтолковое занятие но денег там конечно очень много.
Знаете как выглядело NFT 2000-х?
-
Dren0r
27.01.2022 23:16+3Ваша проблема в том, что рынок работает совсем по другому, вы просто закинули картинки на сайт, а вот как проходят популярные проекты:
1- Сперва нужно максимально разлекламировать коллекцию до выпуска (за 2-3 месяца минимум), создав такую атмосферу, что каждый поверил бы в то, что в день запуска она непременно разлетится как горячие пирожки
2 - Сделать минт не самому, а кнопку на вебсайте. Чтобы в день Х любой желающий мог нажав ее, получить картинку на своей кошелек, тогда и цена минта вместе с газом оплачивается покупателем (минты на полигоне считаются для нищебродов и ими никто не пользуется)
3 - И это не считая всяких White List'ов, розыгрышей и прочего прочего
4 - Коллекция должна быть постороена по примеру рпг - от "зеленых" до "легендарных" вещей, есть сервисы, которые оценивают изображение по трейтам и строит рейтинг
Вся суть проекта сводится к аналогу открывания луктбоксов из игр, когда за минимальный прайс 0.05-0.1 ETH человек может себе выбить через минт как шерпотреб, так и легендарку, после перепродав ее.
А так же никто не знает, насколько успешно вы продадитесь, тем самым, возвращаясь к 1 пункту, каждый будет думать, что если он не нажмет минт, то точно будет sold out и потом не успеет, таким образом коллекции и продаютсяGeorgeNZ
28.01.2022 22:51+2Не могу поставить лайк, наверное из-за того что новый пользователь.
Удивляюсь как наши комменты с 0 лайками несут самую полезную информацию)
Спасибо за Ваш опыт и его публичность.
swelf
28.01.2022 00:52+3Уже пару тредов за последние дни об NFT было, но сторонники(но не пользователи NFT, кстати), так и не смогли донести ценность, может вы донесете, ну кроме спекулятивной? Что получает покупатель? Почему он может верить в то что написано в NFT?
ogost
28.01.2022 10:48+1На мой ламерский взгляд, проблема не в доверии написанного в NFT, а в ценности того, что там написано. Где-то здесь на хабре в комментах видел отличную аналогию, приблизительная цитата:
Допустим, у вас есть жена и ей пользуются все, кто хотят. Но у вас есть свидетельство о бракосочетании, там написано, что она - именно ваша жена, и ничъя больше! Так вот NFT - это и есть свидетельство о бракосочетании.
LishtvanP
28.01.2022 04:10@bodasooqa@GeorgeNZогромное вам спосибо одному за опыт, а второму за конструктивную критику, ито и другое полезно для новичков
Endovask
28.01.2022 11:11А зачем все эти сложности с кодингом, написанием смарт контрактов. Кто мешает просто залистить нфт на Opensea, в сети poligon это стоило бы копейки. Для чего весь этот кодинг?ради кодинга? Автоматизации листинга?
bodasooqa Автор
28.01.2022 11:12Как я и написал в посте: вручную листить 650 айтемов было бы муторно)
GeorgeNZ
28.01.2022 22:56@Dren0r ответил довольно таки исчерпывающе
- минты на полигоне считаются для нищебродов и ими никто не пользуется
- вся суть проекта сводится к аналогу открывания луктбоксов из игр, когда за минимальный прайс 0.05-0.1 ETH человек может себе выбить через минт как шерпотреб, так и легендарку, после перепродав ее.
GeorgKDeft
28.01.2022 19:13+1Единственный NFT который стоил того чтоб его купили, потому что о нем рассказали в новостях (картинка изменена и добавлен текст для наглядности). Возможно вам стоило все же нарисовать картинки а потом их сжечь, чтоб у NFT была бы хоть какая то предистория?
P.S. - Жаль непонял в статье сколько стоило создать и продвигать NFT.
GeorgeNZ
28.01.2022 22:23Жаль непонял в статье сколько стоило создать и продвигать NFT.
Все очень условно и относительно( см. дальше).
Как я вижу этот проэкт ушел в 0-100$ (максимум).
создать трейты(свойства для нфт) - до 100$, но если договорились о %% то 0$(так как он не распродался);
деплой контракта на Полигоне(он также будет виден платформой Opensea) +- копейки;
продвижение 0$ (не было продвижения NFT)
Как сделали мы, принцып раздать всем по 25%(4 человека):
были разработаны более сложные NFT (без свойств, каждый уникальный) - 25% уходит создателю/ям картинок
25% разработчику(сайт + деплой контракт в сети ефириум)
800$ деплой контракта в сети эфириум
-
продвижение делали сами(но можно нанять людей)
В итоге занималось 4 человека всем по 25%, на данный момент каждый заработал по 5к$(в этом и прелесть минтинга, а не загружать все на опенсеа)
Стратагия продвижения: создателем коллекции выступил стажировщик очень известного бренда(Прадо, Гуччи, Луи Витон, Ив Сен Лоран, - один из этих брендов)
Variag01
29.01.2022 12:11+3такое ощущение что все эти истории о том как маленький мальчик продал картинки за сотни тысяч или студент из Индонезии стал нфт- миллионером придумывают сами владельцы нфт-бирж
Color
Интересное чтиво, спасибо