Пошаговая инструкция как создать nft коллекцию на golang ethereum

Содержание
  1. Глава 1. Подготовка
  2. Глава 2. Маркетинг и продвижение
  3. Шаг 1. Создание NFT-коллекции
  4. Укажите адрес кошелька
  5. Модерация контента Binance NFT
  6. Чтобы узнать больше о создании NFT и NFT-коллекций на Binance NFT, ознакомьтесь с разделом FAQ.
  7. Комиссия за создание
  8. Плата за развертывание смарт-контракта
  9. [recovery mode] Пошаговая инструкция как создать NFT коллекцию на Golang + Ethereum (часть 3)17. 2021 23
  10. Технические моменты
  11. Каждый может стать создателем
  12. Загрузить репозиторий и установить необходимые пакеты
  13. Добавить свои пользовательские изображения
  14. Настроить файл config.py
  15. Настройка веса редкости
  16. None
  17. ‘random’
  18. Python list
  19. Как создать 16 тысяч NFT за 10 дней
  20. Продвижение
  21. Проверка готовых psd-файлов
  22. Глава 4. Маркетинг после солдаута
  23. [recovery mode] Пошаговая инструкция как создать NFT коллекцию на Golang + Ethereum (часть 3)17. 2021 23
  24. Предварительные условия для создании коллекции
  25. Python и pip установлены на вашем компьютере
  26. Художник (желательно, но не обязательно)
  27. Коллекция белок Скрэппи
  28. Популярные NFT
  29. Глава 3. Создание и листинг коллекции
  30. [recovery mode] Пошаговая инструкция как создать NFT коллекцию на Golang + Ethereum (часть 3)17. 2021 23
  31. Шаг 2. Создание NFT
  32. Где находятся коллекции
  33. Глава 5. Завершение.
  34. Создание коллекции
  35. Процесс генерации

Глава 1. Подготовка

Итак, на старте вам изложу самые важные моментики. Самое главное — попасть в мету. Наверняка многие из вас слышали, как летом, когда была мета на казики, всякие школьники запускали с 0$ в кармане сол-казино и собирали по 10-20-30к баксов. Или сейчас, совсем недавно, начался жесткий хайп на коллекцию ABC с 0% рояли. Так вот прошаренные ребятки, опять же, почти без вложений начали запускать вторичные коллекции с похожими артами и 0% роялти. На некоторые флор доходил аж до 15 солан, объемы по продажам также были немаленькие. Еще один пример, как попасть в мету и собрать за пару дней несколько десятков тысяч долларов, практически ничего в это не вкладывая. Итак, первое, что важно — мета. Едем дальше.

Арты. Существует много мнений насчет того, какими должны быть картинки. Но, очевидно, однозначного решения не существует. Главное, чтобы не было откровенного говна. Хотя и на такое мета была.. Арты вообще могут быть одинаковыми, но, если, у коллекции крутое утилити и сильный хайп, то она вне зависимости от артов даст иксы. В общем, тут шара, следите за метой или делайте то, что самим по душе. Где найти дизайнера? KWORK, fl.ru и прочие фриланс биржи. Там куча крутых ребят, которые за дешево отрисуют целую коллекцию. Они просят реально немного, по меркам крипты, поэтому с артами проблем быть не должно же точно.

Заказывайте оформление для соцсетей. Опять же, если дизайнер входит в состав команды, то можно это все делать и походу продвижения. Но по хорошему, у вас уже на старте должен быть контент план для твиттера, различные обложки для постов, баннеры и тд. Определяетесь со стилем, с артами, заказываете сразу все оформление у дизайнера и дальше не забиваете этим голову. На арты + вообще весь дизайн выделяйте немного денег. 100-200 баксов максимум.

Делать ли сайт? Тут уже зависит от коллекции. Сделать лендинг и закинуть его на домен можно самостоятельно, на конструкторе, практически бесплатно. Если бюджет позволяет, то заплатите 100-200 долларов, вам сделают красивый лендос. Сайт идет в дополнение ко всему. Если не хватает бюджета там на продвижение, то конечно же не стоит лезть и делать еще дополнительно крутой сайт. Сайт это самое последнее, во что мы вкладываемся по разработке. На крайний случай, опять же, всегда можно потратить пол дня и самостоятельно слепить что-то более менее нормальное на Тильде или Виксе.

Накрутка. На самом деле на старте, в любом случае стоит подкрутить себе хотяб 200-500 подписчиков в соцсети. Иначе по началу оочень тяжело будут люди подписываться на вас в твитере, тем более, если вы не станете заказывать подписки и рекламу от инфлов на старте. Можно подыскать накруточку реакций на МЕ. Расценки примерно 100 лайков = $25-35. Крутить твиттер и дискорд нужно исключительно нфт-профилями. Знаю, что многие пользуются SMMlaba либо же находят исполнителей на фриланс биржах.

Ну вроде все готово к запуску. Едем дальше.

Глава 2. Маркетинг и продвижение

Можно постепенно открывать соцсети и привлекать аудиторию. Делать это можно по разному. Одна из возможных схем — запустить твиттер, вести его недельку-две, параллельно вкладывая в рекламу у инфлов, коллаборируясь с другими проектами в твиттере и тд. А только через 2 недели, когда в твиттере прогретая аудитория, которая хочет вайтилистиы, открывать дискорд. Можно наоборот, дискорд открывать сразу вместе с твитттером. В общем, схем много. Каждая одинаково эффективная при грамотном подходе.

Инфлюенсеры, на которых всегда всю жизнь все смотрели, начинают уходить на второй план. Оооченьь много накрученнных инфлов в твиттере, за которыми почему-то все пристально следят и считают, что если инфлюенсер подписан на проект — значит проект гем. По крайне мере, раньше так было. Сейчас все по другому. Стоимость репоста у самых самых топовых инфлов всего 4 соланы. И то, можно спокойно сторговать.

Они подписываются и репостят вообще все, что угодно. И торгуются также очень охотно, поэтому цену всегда сбивайте. Им не сложно нажать две кнопки и получить за это хоть что-то. В общем, если бюджет позволяет, можно для виду набить себе самых популярных инфлов, заказать по репостику и это булет крутой старт для коллекции. Уже на этом дальше можно вывозить. Тут, как повезет. Если комьюнити заметит ваш проект и люди начнут его везде шиллить, в разных ДАО, каналах и тд, то круто. А для того, чтобы нас заметили, вот этих базовых инфлов и репостов предостаточно.

Дальше нам обязательно нужно нанять в команду 2-4 коллаб менеджеров. Типы, которые будут целыми днями сидеть и договариваться на проведение розыгрышей ВЛ-ов, на взаимную рекламу коллекций, фкфс и тд с всевозможными DAO, другими проектами, инфлюенсерами и тд. Оптимальная ставка для коллаб менеджера — 3-5% от профита. Фиксированную цену советую не платить, тк мотивации работать у человека попросту не будет. Как только коллекция начнет хайпить, вам будут засорять личку в дискорде, твиттере и везде где можно. Будут предлагать в том числе и кандидатуры коллабов-менеджеров. 99% — шлак. Хорошие коллабы не будут сидеть и спамить всем подряд проектам.

После того, как мы запустили дискорд, не забываем регулярно забрасывать туда анонсы. Это очень важно, прогревает интерес ауитории к проекту. То, что вы будете анонсить зависит от роудмапа, от задумки проекта и еще от множества факторов. Для примера, чтобы понимать вообще, что стоит писать, а что не стоит, зайдите в дискорд успешных проектов, которые дали много иксов и понаблюдайте за их соцсетями до солдаута. Спустя 5-8 проеков (схожих по смыслу с вашим) у вас уже сложится примерная картинка голове, как правильно делать прогрев, что писать в анонсах и тд.

Вайтлисты на старте, когда проект только начинает развиваться, можно выдавать пачками. Как только пошел хайп, не давайте влы всем подряд. Хотя, тут зависит все опять же от ваших намерений. Хотите тупо солдануть проект — делайте фкфс минт с переизбытком вайтлистов. Хотите получить хороший флор после запуска, делайте крутой роудмап, выдавайте вайтлисты очень выборочно, дабы не порождать кучу флипперов и не получить 50% листингов в первый час. Ну и прогревайте интерес сразу после запуска, чтобы уменьшить кол-во листингов нфт.

Шаг 1. Создание NFT-коллекции

Пошаговая инструкция как создать nft коллекцию на golang ethereum

Начните с создания NFT-коллекции в своем профиле пользователя. Теперь вы можете выбрать один или несколько NFT. Вам также необходимо задать предпочтительную сеть блокчейна и размер роялти. Не забудьте проверить все данные. 

Затем прочитайте и согласитесь с Правилами создания NFT на BinanceУсловиями использования Binance и нажмите «Создать». Обратите внимание, что вы не сможете изменить название, тикер, категорию, сеть и размер роялти после создания NFT-коллекции.

Укажите адрес кошелька

Пошаговая инструкция как создать nft коллекцию на golang ethereum

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

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

Модерация контента Binance NFT

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

 Если вы столкнулись с потенциальным нарушением Правил создания NFT на Binance и Условий использования Binance, вы можете сообщить об этом команде Binance NFT. Наши модераторы тщательно проанализируют любое сообщение пользователя о мошенническом или вредоносном контенте, прежде чем принять необходимые меры. Если контент нарушает Правила Binance NFT и Условия использования Binance, мы заблокируем или удалим его. В более явных случаях нарушения мы будем рассматривать вопрос о полном бане пользователя. 

Чтобы подробнее узнать о том, как сообщить о нарушениях, ознакомьтесь с разделом FAQ. Правила создания NFT можно найти здесь

Чтобы узнать больше о создании NFT и NFT-коллекций на Binance NFT, ознакомьтесь с разделом FAQ.

Комиссия за создание

В BNB Smart Chain (BSC) стоимость создания NFT составляет 0,022 BNB, в Ethereum — 0,012 ETH. Актуальный размер платы за газ в BSC можно посмотреть здесь, в Ethereum — здесь

Плата за развертывание смарт-контракта

При создании новой NFT-коллекции Binance автоматически развертывает смарт-контракт на ETH или BSC. Этот процесс требует небольшой платы за газ. По состоянию на июнь 2022 года плата за развертывание смарт-контракта взимается в соответствии с приведенной ниже информацией и может меняться:

  • ETH = ~0,75 ETH

  • BSC = ~0,04 BNB

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

[recovery mode] Пошаговая инструкция как создать NFT коллекцию на Golang + Ethereum (часть 3)17. 2021 23

6a26f23c9a2912b35a3a0f0ecff59f4a.png

В прошлых статьях мы научились генерировать 10 000 изображений для нашей NFT коллекции с помощью Golang, а также загрузили все сгенерированные изображения в децентрализованное хранилище IPFS.

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

Мы создадим типовой смарт-контракт для нашей NFT коллекции, протестируем и загрузим созданный смарт-контракт в тестовую сеть Ethereum. Но прежде, чем мы приступим к кодингу, мне хотелось бы остановиться на ERC-721 стандарте, данный стандарт описывает спецификацию NFT токенов.

Давайте подробней рассмотрим, какие методы должны быть у нашего смарт-контракта:

 function balanceOf(address _owner) external view returns (uint256); function ownerOf(uint256 _tokenId) external view returns (address); function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable; function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; function transferFrom(address _from, address _to, uint256 _tokenId) external payable; function approve(address _approved, uint256 _tokenId) external payable; function setApprovalForAll(address _operator, bool _approved) external; function getApproved(uint256 _tokenId) external view returns (address); function isApprovedForAll(address _owner, address _operator) external view returns (bool);

Полную спецификацию по ERC-721 стандарту можно посмотреть тут.

Про NFT:  Nft mentor что это

Нам не обязательно реализовывать весь стандарт самим, более оптимальным подходом является переиспользовать готовые библиотеки: OpenZeppelin — это библиотека для разработки безопасных смарт-контрактов и именно с ней мы будем работать.

Плюсы такого решения очевидны:

  • Готовый код из под коробки, прошедший аудит безопасности

  • Аудит нашего смарт-контракта займет гораздо меньше денег и времени

Давайте создадим типовой смарт-контракт для нашей NFT коллекции, назовем её MonkeyNFT. Наш смарт-контракт наследует стандартные OpenZeppelin библиотеки, а именно:

  • ERC721 / ERC721Enumerable — контрактные модули, которые обеспечивают базовые функциии для нашего NFT токена

  • Ownable — контрактный модуль, который обеспечивает базовый механизм контроля доступа

Разрабатывать смарт-контракт, мы будем с помощью такого инструмента, как hardhat, очень крутой инструмент для разработки, тестирования и деплоя, особенно для тех, кто устал от Truffle и его бесконечного количества багов.

Запускаем команду npx hardhat init, для создания нового шаблона для нашего смарт-контракта, далее переходим в директорию contracts и пишем код:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
contract MonkeyNFT is ERC721, ERC721Enumerable, Ownable { using SafeMath for uint256; uint public constant maxPurchase = 10; uint256 public constant MAX_MONKEYS = 10000; uint256 private _monkeyPrice = 80000000000000000; //0.08 ETH string private baseURI; bool public saleIsActive = true; constructor() ERC721("The Monkey NFT", "MNK") { } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); }	function withdraw() public onlyOwner {	uint256 balance = address(this).balance;	payable(msg.sender).transfer(balance);	} function setPrice(uint256 _newPrice) public onlyOwner() { _monkeyPrice = _newPrice; } function getPrice() public view returns (uint256){ return _monkeyPrice; } function mintMonkeys(uint numberOfTokens) public payable { require(saleIsActive, "Sale must be active to mint Monkeys"); require(numberOfTokens <= maxPurchase, "Can only mint 10 tokens at a time"); require(totalSupply().add(numberOfTokens) <= MAX_MONKEYS, "Purchase would exceed max supply of Monkeys"); require(_monkeyPrice.mul(numberOfTokens) <= msg.value, "Ether value sent is not correct"); for(uint i = 0; i < numberOfTokens; i++) { uint mintIndex = totalSupply(); if (totalSupply() < MAX_MONKEYS) { _safeMint(msg.sender, mintIndex); } } } function _baseURI() internal view override returns (string memory) { return baseURI; } function setBaseURI(string memory newBaseURI) public onlyOwner { baseURI = newBaseURI; } function flipSaleState() public onlyOwner { saleIsActive = !saleIsActive; }
}
  • Флаг saleIsActive — говорит, о том, что наша коллекция либо готова к продаже, либо нет. Данная функция очень полезна на начальном этапе, когда по каким то причинам необходимо остановить продажи.

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

  • Функция mintMonkey — это основная функция, через которую пользователи могут купить наш NFT токен. Модификатор payable, как раз говорит о том, что вызов данной функции для пользователя платный.

Для того, чтобы скомпилировать наш смарт-контракт, запускаем команду npx hardhat compile, после чего создадутся abi-артифакты в директории artifacts.

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

const { expect } = require("chai");
describe("Token contract", () => { let contract; let owner; let addr1; let addr2; let addrs; let baseURI; beforeEach(async () => { const Token = await ethers.getContractFactory("MonkeyNFT"); [owner, addr1, addr2, ...addrs] = await ethers.getSigners(); contract = await Token.deploy(); baseURI = "https://hardhat.org/test/" await contract.setBaseURI(baseURI) }); it("Should initialize contract", async () => { expect(await contract.MAX_MONKEYS()).to.equal(10000); }); it("Should set the right owner", async () => { expect(await contract.owner()).to.equal(await owner.address); }); it("Should mint", async () => { const price = await contract.getPrice(); const tokenId = await contract.totalSupply(); expect( await contract.mintMonkeys(1, { value: price, }) ).to.emit(contract, "Transfer").withArgs(ethers.constants.AddressZero, owner.address, tokenId); expect(await contract.tokenURI(tokenId)).to.equal(baseURI+"0"); });
});

Запускаем тестирование смарт-контракта, командой npx hardhat test. Если все тесты пройдены, то мы увидем:

Compiling 1 file with 0.8.4
Compilation finished successfully Token contract ✓ Should initialize contract ✓ Should set the right owner ✓ Should mint (41ms) 3 passing (1s)

Только, что мы успешно протестировали:

  • Успешно установили владельца смарт-контракта

  • Успешно вызвали платную функцию mintMonkeys для продажи NFT токена

Деплоить мы будем в тестовую сеть Ethereum. Переходим в директорию scripts и удаляем дефолтные скрипты, они нам больше не понадобяться и пишем новый скрипт деплоя:

async function main() { const [deployer] = await ethers.getSigners(); console.log("Deploying contracts with the account:", deployer.address); console.log("Account balance:", (await deployer.getBalance()).toString()); const Token = await ethers.getContractFactory("MonkeyNFT"); console.log("Deploying contract..."); const token = await Token.deploy(); await token.deployed(); console.log("Token address:", token.address); } main() .then(() => process.exit(0)) .catch((error) => { console.error(error); process.exit(1); });

Так же нам необходимо изменить файл hardhat.config следующим образом:

require("@nomiclabs/hardhat-waffle");
require("@nomiclabs/hardhat-etherscan");
module.exports = { solidity: "0.8.4", networks: { rinkeby: { url: `https://eth-rinkeby.alchemyapi.io/v2/${YOUR_API_KEY}`, }, },
};

Отлично все готово для деплоя, запускаем скрипт: npx hardhat run scripts/deploy.js --network rinkeby

В следующей статье я расскажу как взаимодействовать с нашим созданным смарт-контрактом с помощью web3.js.

Технические моменты

Вот вам рецепт коллекции NFT:

1) берём идею на основе предпочтений ЦА;

2) добавляем смысловую начинку;

3) формируем привлекательный визуал;

4) подаём графику в едином стиле.

Чтобы сгенерированные картинки получались гармоничными, важно правильно подобрать:

✔ Переменные (их количество и расположение);

✔ детали (размер, ракурс);

✔ Определите расположение источника света для всех иллюстраций, если над коллекцией работает несколько человек.

А вообще, чтобы вкусно «приготовить» коллекцию NFT, наймите опытного «повара» – артдиректора с пулом иллюстраторов, которые рисуют в единой стилистике. Именно он профессионально оценивает качество графики, корректирует техническое исполнение и отвечает за результат.

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

1. Размер иллюстрации

2. Стиль графики

3. Шаблон по слоям, где каждая переменная имеет свой размер и расположение (их нельзя нарушать)

4. Сохранение всех слоев, переменных с определенным названием, это пригодится для генерации.

Чёткое ТЗ – это профилактика утечки времени из-за недопонимания задач.

Каждый может стать создателем

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

Теперь же создавать NFT могут все зарегистрированные пользователи, поэтому двери Binance NFT и масштабной экосистемы Web3 полностью открыты. Мы будем продолжать внедрять инновации на нашей платформе, делая ее более доступной для новых пользователей, чтобы они могли окунуться в мир NFT! 

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

Создайте собственную NFT-коллекцию уже сегодня!

Загрузить репозиторий и установить необходимые пакеты

После загрузки репозитория откройте терминал или командную строку и запустите следующую команду:

pip install Pillow pandas progressbar2

Запуск этой команды позволит установить три важных пакета Python, от которых зависит наша библиотека:

  • Pillow: Библиотека обработки изображений, которая поможет нам складывать образы признаков.
  • Pandas: Библиотека анализа данных, которая поможет нам в создании и сохранении наших метаданных изображений.
  • Progressbar: библиотека, которая расскажет нам о прогрессе, когда произойдёт генерация изображения.

Добавить свои пользовательские изображения

В загруженном вами хранилище генеративного арт-нфт вы увидите папку изображений. Если у вас есть собственная художественная работа, вперёд, замените содержимое этой папки вашими активами. В нашем случае, наша папка активов имела 8 подпапок, представляющих категории, названные соответственно, и каждая подпапка имела характерные изображения этой конкретной категории.

Если у вас нет пользовательского оформления, оставьте папку с активами по умолчанию.

Настроить файл config.py

Это последний (и, возможно, самый важный шаг), прежде чем мы сможем создать нашу коллекцию аватаров. Откройте файл config.py и заполните его в соответствии с инструкциями ниже.

CONFIG : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 

Словарь категорий черт имеет 5 необходимых ключей. Это идентификатор, имя, каталог, необходимые и rarity_weights. При создании нового слоя (или замене существующего) убедитесь, что все эти ключи определены.

  • Id: номер слоя. Например, если тело является второй категорией черт (или слоем), который должен быть сложен, оно будет иметь идентификатор 2. Обратите внимание, что слои должны быть определены в правильном порядке.
  • Name: имя категории черт. Это может быть что угодно. Оно появится в метаданных.
  • Directory: имя папки внутри активов, которая содержит изображения данной категори черт.
  • Required: если эта категория требуется для каждого изображения. Некоторые категории черт (например, фон, тело и глаза) должны появляться в каждом аватаре, в то время как некоторые другие категории (например, головные уборы, браслеты или одежда) могут быть необязательными. Мы настоятельно рекомендуем вам установить значение первого слоя в значение true.
  • rarity_weights: эта категория определит, насколько распространенными (или редкими) будут ваши черты. Проверьте в следующем разделе для более подробной информации.

Настройка веса редкости

Ключ rarity_weights может принимать три значения: None, «случайный» или список Python. Давайте рассмотрим каждое значение по отдельности.

None

Если вы установите значение rarity_weights равным None, каждому признаку будет присвоен равный вес. Таким образом, если у вас есть 5 черт, каждая черта будет отображаться примерно в 20% аватаров.

В случае, если требуется False, то в равной степени вероятно, что он не будет иметь эту особенность вообще. В предыдущем случае, если требуемое свойство было установлено как ложное, то каждое свойство будет отображаться примерно в 16,6 % аватаров. Другие 16,6% аватар не имели бы такой особенности.

‘random’

Установка для rarity_weights значения ‘random’ (обратите внимание на круглые скобки) будет случайным образом присваивать веса каждой категории. Мы настоятельно рекомендуем вам не использовать эту функцию. Всегда прибегайте к равной или пользовательской редкости.

Python list

Вероятно, это самый распространенный способ присвоения веса редкости.

Первое, что нужно сделать, это перейти в папки категорий черт и отсортировать изображения черт по имени. Например, сортировка папки «Wristbands » даст нам следующее:

Пошаговая инструкция как создать nft коллекцию на golang ethereum

Если требуется установить True, то число весов должно быть равно числу черт для этой категории. Если требуется значение False, то число весов должно быть равно числу черт плюс один.

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

Давайте взглянем на раритеты, которые мы определили для браслетов.

 

Поскольку браслеты не требуются, мы установили десять весов (девять плюс один). Первый вес — это вес, связанный с отсутствием браслета. Второй вес связан с группой Cheetah, третий вес связан с группой Giraffe, и так далее. Обратите внимание на алфавитный порядок.

Про NFT:  Купите последнюю коллекцию кроссовок NFT прямо сейчас

Чем выше вес, тем более распространённым признаком является. Например, Гепард имеет вес 5, а без полосы вес 100. Это означает, что иметь группу Cheetah в 20 раз реже, чем вообще не иметь группы.

Как создать 16 тысяч NFT за 10 дней

NFT-проекты любят сжатые сроки – 10-15 дней достаточно, чтобы создать десятки тысяч изображений.

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

2. На основе первой иллюстрации подберите команду художников.

3. Нарисуйте необходимое количество иллюстраций с переменными (зависит от того, сколько необходимо сгенерить в итоге. Например, для 1500 иллюстраций достаточно 10 уникальных изображений, в каждой по 5-7 переменных + цветовые градации.)

4. Мы разработали свой генератор в Photoshop, который автоматически собирает все детали иллюстрации.

5. Сгенерируйте остальные NFT.

До двух дней на генерирование – и нужное количество артов готовы!

Чем больше переменных вы ввели в изображение, тем больше NFT получите и тем разнообразнее будет смотреться ваша коллекция

Продвижение

Коллекции NFT запускают на блокчейне Ethereum или другой – с этого момента они становятся активами и начинают приносить доход. Чтобы проект сработал лучше, воспользуйтесь такими маркетинговыми инструментами:

✔ красивый продуманный сайт;

✔ хороший копирайтинг;

✔ информативная дорожная карта проекта.

Остались вопросы? Мы с радостью на них ответим!

Проверка готовых psd-файлов

Проверка отрисованных иллюстраций – трудоёмкий процесс, на который уходит уйма времени. К счастью, в распоряжении современного художника есть профессиональное программное обеспечение.

Если вам необходимо проверить большое количество исходных иллюстраций в формате AI или PSD, вы можете прописать проверочный скрипт для Photoshop/Illustrator, опираясь на постоянные значения в проекте:

✔ размер изображения,

✔ количество слоёв,

✔ названия слоёв.

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

Глава 4. Маркетинг после солдаута

Итак, наверняка, прописывая роудмап, вы пообещали очень много того, на что придется тратить время и деньги после запуска. 99% новых коллекций, даже с самым крутым роудмапом затихают в течение 1-3 месяцев. Лишь одна из тысячи колллекций становится блючипом, соотвественно флор либо растет, либо держится на приемлемом уровне. Логично, что во втором случае, админы коллекции неплохо зарабатывают с роялти. Но, еще раз, шанс того, что хайп на вашу коллекцию продлится больше недели очень невелик. Поэтому зачастую овнеры особо не парятся с развитием проекта, почти не тратят деньги после солдаута и тд. Поэтому опять же, тут все зависит от вашей задумки. Может вообще начнется мета на софт (а такая уже была), и тут уже без создания и поддержания каких-либо сервисов, ботов итд не обойтись.

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

Слоу-раг, т.е когда проект скамится в течение 5-10 дней, закидывая всякие обещания и кучу пустых анонсов, дабы еще и заработать копеечку на роялти. Ну а через неделю, снова делит всех соцсетей. Тоже не рекомендую.

[recovery mode] Пошаговая инструкция как создать NFT коллекцию на Golang + Ethereum (часть 3)17. 2021 23

6a26f23c9a2912b35a3a0f0ecff59f4a.png

В прошлых статьях мы научились генерировать 10 000 изображений для нашей NFT коллекции с помощью Golang, а также загрузили все сгенерированные изображения в децентрализованное хранилище IPFS.

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

Мы создадим типовой смарт-контракт для нашей NFT коллекции, протестируем и загрузим созданный смарт-контракт в тестовую сеть Ethereum. Но прежде, чем мы приступим к кодингу, мне хотелось бы остановиться на ERC-721 стандарте, данный стандарт описывает спецификацию NFT токенов.

Давайте подробней рассмотрим, какие методы должны быть у нашего смарт-контракта:

 function balanceOf(address _owner) external view returns (uint256); function ownerOf(uint256 _tokenId) external view returns (address); function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable; function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; function transferFrom(address _from, address _to, uint256 _tokenId) external payable; function approve(address _approved, uint256 _tokenId) external payable; function setApprovalForAll(address _operator, bool _approved) external; function getApproved(uint256 _tokenId) external view returns (address); function isApprovedForAll(address _owner, address _operator) external view returns (bool);

Полную спецификацию по ERC-721 стандарту можно посмотреть тут.

Нам не обязательно реализовывать весь стандарт самим, более оптимальным подходом является переиспользовать готовые библиотеки: OpenZeppelin — это библиотека для разработки безопасных смарт-контрактов и именно с ней мы будем работать.

Плюсы такого решения очевидны:

  • Готовый код из под коробки, прошедший аудит безопасности

  • Аудит нашего смарт-контракта займет гораздо меньше денег и времени

Давайте создадим типовой смарт-контракт для нашей NFT коллекции, назовем её MonkeyNFT. Наш смарт-контракт наследует стандартные OpenZeppelin библиотеки, а именно:

  • ERC721 / ERC721Enumerable — контрактные модули, которые обеспечивают базовые функциии для нашего NFT токена

  • Ownable — контрактный модуль, который обеспечивает базовый механизм контроля доступа

Разрабатывать смарт-контракт, мы будем с помощью такого инструмента, как hardhat, очень крутой инструмент для разработки, тестирования и деплоя, особенно для тех, кто устал от Truffle и его бесконечного количества багов.

Запускаем команду npx hardhat init, для создания нового шаблона для нашего смарт-контракта, далее переходим в директорию contracts и пишем код:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
contract MonkeyNFT is ERC721, ERC721Enumerable, Ownable { using SafeMath for uint256; uint public constant maxPurchase = 10; uint256 public constant MAX_MONKEYS = 10000; uint256 private _monkeyPrice = 80000000000000000; //0.08 ETH string private baseURI; bool public saleIsActive = true; constructor() ERC721("The Monkey NFT", "MNK") { } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); }	function withdraw() public onlyOwner {	uint256 balance = address(this).balance;	payable(msg.sender).transfer(balance);	} function setPrice(uint256 _newPrice) public onlyOwner() { _monkeyPrice = _newPrice; } function getPrice() public view returns (uint256){ return _monkeyPrice; } function mintMonkeys(uint numberOfTokens) public payable { require(saleIsActive, "Sale must be active to mint Monkeys"); require(numberOfTokens <= maxPurchase, "Can only mint 10 tokens at a time"); require(totalSupply().add(numberOfTokens) <= MAX_MONKEYS, "Purchase would exceed max supply of Monkeys"); require(_monkeyPrice.mul(numberOfTokens) <= msg.value, "Ether value sent is not correct"); for(uint i = 0; i < numberOfTokens; i++) { uint mintIndex = totalSupply(); if (totalSupply() < MAX_MONKEYS) { _safeMint(msg.sender, mintIndex); } } } function _baseURI() internal view override returns (string memory) { return baseURI; } function setBaseURI(string memory newBaseURI) public onlyOwner { baseURI = newBaseURI; } function flipSaleState() public onlyOwner { saleIsActive = !saleIsActive; }
}
  • Флаг saleIsActive — говорит, о том, что наша коллекция либо готова к продаже, либо нет. Данная функция очень полезна на начальном этапе, когда по каким то причинам необходимо остановить продажи.

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

  • Функция mintMonkey — это основная функция, через которую пользователи могут купить наш NFT токен. Модификатор payable, как раз говорит о том, что вызов данной функции для пользователя платный.

Для того, чтобы скомпилировать наш смарт-контракт, запускаем команду npx hardhat compile, после чего создадутся abi-артифакты в директории artifacts.

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

const { expect } = require("chai");
describe("Token contract", () => { let contract; let owner; let addr1; let addr2; let addrs; let baseURI; beforeEach(async () => { const Token = await ethers.getContractFactory("MonkeyNFT"); [owner, addr1, addr2, ...addrs] = await ethers.getSigners(); contract = await Token.deploy(); baseURI = "https://hardhat.org/test/" await contract.setBaseURI(baseURI) }); it("Should initialize contract", async () => { expect(await contract.MAX_MONKEYS()).to.equal(10000); }); it("Should set the right owner", async () => { expect(await contract.owner()).to.equal(await owner.address); }); it("Should mint", async () => { const price = await contract.getPrice(); const tokenId = await contract.totalSupply(); expect( await contract.mintMonkeys(1, { value: price, }) ).to.emit(contract, "Transfer").withArgs(ethers.constants.AddressZero, owner.address, tokenId); expect(await contract.tokenURI(tokenId)).to.equal(baseURI+"0"); });
});

Запускаем тестирование смарт-контракта, командой npx hardhat test. Если все тесты пройдены, то мы увидем:

Compiling 1 file with 0.8.4
Compilation finished successfully Token contract ✓ Should initialize contract ✓ Should set the right owner ✓ Should mint (41ms) 3 passing (1s)

Только, что мы успешно протестировали:

  • Успешно установили владельца смарт-контракта

  • Успешно вызвали платную функцию mintMonkeys для продажи NFT токена

Деплоить мы будем в тестовую сеть Ethereum. Переходим в директорию scripts и удаляем дефолтные скрипты, они нам больше не понадобяться и пишем новый скрипт деплоя:

async function main() { const [deployer] = await ethers.getSigners(); console.log("Deploying contracts with the account:", deployer.address); console.log("Account balance:", (await deployer.getBalance()).toString()); const Token = await ethers.getContractFactory("MonkeyNFT"); console.log("Deploying contract..."); const token = await Token.deploy(); await token.deployed(); console.log("Token address:", token.address); } main() .then(() => process.exit(0)) .catch((error) => { console.error(error); process.exit(1); });

Так же нам необходимо изменить файл hardhat.config следующим образом:

require("@nomiclabs/hardhat-waffle");
require("@nomiclabs/hardhat-etherscan");
module.exports = { solidity: "0.8.4", networks: { rinkeby: { url: `https://eth-rinkeby.alchemyapi.io/v2/${YOUR_API_KEY}`, }, },
};

Отлично все готово для деплоя, запускаем скрипт: npx hardhat run scripts/deploy.js --network rinkeby

В следующей статье я расскажу как взаимодействовать с нашим созданным смарт-контрактом с помощью web3.js.

прочитано раза

Предварительные условия для создании коллекции

Python и pip установлены на вашем компьютере

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

Художник (желательно, но не обязательно)

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

Коллекция белок Скрэппи

В рамках этого руководства мы проведем вас через процесс создания NFT Scrappy Squirrels. Белки были созданы с использованием более 85 признаков. Вот несколько примеров

Пошаговая инструкция как создать nft коллекцию на golang ethereum

Популярные NFT

В формат NFT успешно переводят любые физические и виртуальные объекты, но самым большим спросом сейчас пользуются графические изображения. Для себя мы разделяем колекции на категории:

✔ игровые предметы и персонажи,

✔ сюжетные иллюстрации.

Глава 3. Создание и листинг коллекции

Метадату можно прописать и вручную к картинкам, а потом спокойненько их выгрузить на лмнфт. Как это сделать, расписано в данном видео.

Также нам нужно будет закинуть коллекцию на ME. Вряд ли тут у кого-то возникнут трудности. Регистрируетесь на ME for creators, затем нажимаете на кнопку «Create new collection», заполняете всю инфу и все..

Модерация занимает буквально 30 минут, потом наша коллекция появляется во вкладке Upcoming Drops. Если накрутить туда лайков (цена примерно 30 баксов за 100 шт), то с этого Drop календаря можно дополнительно привлечь немного аудитории в свой проект.

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

[recovery mode] Пошаговая инструкция как создать NFT коллекцию на Golang + Ethereum (часть 3)17. 2021 23

6a26f23c9a2912b35a3a0f0ecff59f4a.png

В прошлых статьях мы научились генерировать 10 000 изображений для нашей NFT коллекции с помощью Golang, а также загрузили все сгенерированные изображения в децентрализованное хранилище IPFS.

Про NFT:  Логотип foundation nft

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

Мы создадим типовой смарт-контракт для нашей NFT коллекции, протестируем и загрузим созданный смарт-контракт в тестовую сеть Ethereum. Но прежде, чем мы приступим к кодингу, мне хотелось бы остановиться на ERC-721 стандарте, данный стандарт описывает спецификацию NFT токенов.

Давайте подробней рассмотрим, какие методы должны быть у нашего смарт-контракта:

 function balanceOf(address _owner) external view returns (uint256); function ownerOf(uint256 _tokenId) external view returns (address); function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable; function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; function transferFrom(address _from, address _to, uint256 _tokenId) external payable; function approve(address _approved, uint256 _tokenId) external payable; function setApprovalForAll(address _operator, bool _approved) external; function getApproved(uint256 _tokenId) external view returns (address); function isApprovedForAll(address _owner, address _operator) external view returns (bool);

Полную спецификацию по ERC-721 стандарту можно посмотреть тут.

Нам не обязательно реализовывать весь стандарт самим, более оптимальным подходом является переиспользовать готовые библиотеки: OpenZeppelin — это библиотека для разработки безопасных смарт-контрактов и именно с ней мы будем работать.

Плюсы такого решения очевидны:

  • Готовый код из под коробки, прошедший аудит безопасности

  • Аудит нашего смарт-контракта займет гораздо меньше денег и времени

Давайте создадим типовой смарт-контракт для нашей NFT коллекции, назовем её MonkeyNFT. Наш смарт-контракт наследует стандартные OpenZeppelin библиотеки, а именно:

  • ERC721 / ERC721Enumerable — контрактные модули, которые обеспечивают базовые функциии для нашего NFT токена

  • Ownable — контрактный модуль, который обеспечивает базовый механизм контроля доступа

Разрабатывать смарт-контракт, мы будем с помощью такого инструмента, как hardhat, очень крутой инструмент для разработки, тестирования и деплоя, особенно для тех, кто устал от Truffle и его бесконечного количества багов.

Запускаем команду npx hardhat init, для создания нового шаблона для нашего смарт-контракта, далее переходим в директорию contracts и пишем код:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
contract MonkeyNFT is ERC721, ERC721Enumerable, Ownable { using SafeMath for uint256; uint public constant maxPurchase = 10; uint256 public constant MAX_MONKEYS = 10000; uint256 private _monkeyPrice = 80000000000000000; //0.08 ETH string private baseURI; bool public saleIsActive = true; constructor() ERC721("The Monkey NFT", "MNK") { } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); }	function withdraw() public onlyOwner {	uint256 balance = address(this).balance;	payable(msg.sender).transfer(balance);	} function setPrice(uint256 _newPrice) public onlyOwner() { _monkeyPrice = _newPrice; } function getPrice() public view returns (uint256){ return _monkeyPrice; } function mintMonkeys(uint numberOfTokens) public payable { require(saleIsActive, "Sale must be active to mint Monkeys"); require(numberOfTokens <= maxPurchase, "Can only mint 10 tokens at a time"); require(totalSupply().add(numberOfTokens) <= MAX_MONKEYS, "Purchase would exceed max supply of Monkeys"); require(_monkeyPrice.mul(numberOfTokens) <= msg.value, "Ether value sent is not correct"); for(uint i = 0; i < numberOfTokens; i++) { uint mintIndex = totalSupply(); if (totalSupply() < MAX_MONKEYS) { _safeMint(msg.sender, mintIndex); } } } function _baseURI() internal view override returns (string memory) { return baseURI; } function setBaseURI(string memory newBaseURI) public onlyOwner { baseURI = newBaseURI; } function flipSaleState() public onlyOwner { saleIsActive = !saleIsActive; }
}
  • Флаг saleIsActive — говорит, о том, что наша коллекция либо готова к продаже, либо нет. Данная функция очень полезна на начальном этапе, когда по каким то причинам необходимо остановить продажи.

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

  • Функция mintMonkey — это основная функция, через которую пользователи могут купить наш NFT токен. Модификатор payable, как раз говорит о том, что вызов данной функции для пользователя платный.

Для того, чтобы скомпилировать наш смарт-контракт, запускаем команду npx hardhat compile, после чего создадутся abi-артифакты в директории artifacts.

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

const { expect } = require("chai");
describe("Token contract", () => { let contract; let owner; let addr1; let addr2; let addrs; let baseURI; beforeEach(async () => { const Token = await ethers.getContractFactory("MonkeyNFT"); [owner, addr1, addr2, ...addrs] = await ethers.getSigners(); contract = await Token.deploy(); baseURI = "https://hardhat.org/test/" await contract.setBaseURI(baseURI) }); it("Should initialize contract", async () => { expect(await contract.MAX_MONKEYS()).to.equal(10000); }); it("Should set the right owner", async () => { expect(await contract.owner()).to.equal(await owner.address); }); it("Should mint", async () => { const price = await contract.getPrice(); const tokenId = await contract.totalSupply(); expect( await contract.mintMonkeys(1, { value: price, }) ).to.emit(contract, "Transfer").withArgs(ethers.constants.AddressZero, owner.address, tokenId); expect(await contract.tokenURI(tokenId)).to.equal(baseURI+"0"); });
});

Запускаем тестирование смарт-контракта, командой npx hardhat test. Если все тесты пройдены, то мы увидем:

Compiling 1 file with 0.8.4
Compilation finished successfully Token contract ✓ Should initialize contract ✓ Should set the right owner ✓ Should mint (41ms) 3 passing (1s)

Только, что мы успешно протестировали:

  • Успешно установили владельца смарт-контракта

  • Успешно вызвали платную функцию mintMonkeys для продажи NFT токена

Деплоить мы будем в тестовую сеть Ethereum. Переходим в директорию scripts и удаляем дефолтные скрипты, они нам больше не понадобяться и пишем новый скрипт деплоя:

async function main() { const [deployer] = await ethers.getSigners(); console.log("Deploying contracts with the account:", deployer.address); console.log("Account balance:", (await deployer.getBalance()).toString()); const Token = await ethers.getContractFactory("MonkeyNFT"); console.log("Deploying contract..."); const token = await Token.deploy(); await token.deployed(); console.log("Token address:", token.address); } main() .then(() => process.exit(0)) .catch((error) => { console.error(error); process.exit(1); });

Так же нам необходимо изменить файл hardhat.config следующим образом:

require("@nomiclabs/hardhat-waffle");
require("@nomiclabs/hardhat-etherscan");
module.exports = { solidity: "0.8.4", networks: { rinkeby: { url: `https://eth-rinkeby.alchemyapi.io/v2/${YOUR_API_KEY}`, }, },
};

Отлично все готово для деплоя, запускаем скрипт: npx hardhat run scripts/deploy.js --network rinkeby

В следующей статье я расскажу как взаимодействовать с нашим созданным смарт-контрактом с помощью web3.js.

Шаг 2. Создание NFT

Как только вы создадите коллекцию, вы сможете приступить к созданию NFT. Прежде чем начать, убедитесь, что на вашем спотовом кошельке достаточно BNB или ETH для оплаты комиссии за создание. Если вы создаете NFT впервые, вам необходимо прочитать и принять Условия и положения NFT-маркетплейса Binance.

Пошаговая инструкция как создать nft коллекцию на golang ethereum

аккаунты, нарушающие политику Binance по управлению рисками, не могут создавать NFT. Если вы получили уведомление о нарушении, пожалуйста, свяжитесь со Службой поддержки

При создании NFT нужно указать важные данные:

  • название вашего NFT.

  • краткое описание вашего NFT.

  • выберите сеть для вашего NFT. По умолчанию выбрана BNB Smart Chain (BSC), но вы можете изменить ее на Ethereum (ETH).

Пошаговая инструкция как создать nft коллекцию на golang ethereum

  • выберите, к какой коллекции будет относиться ваш NFT. Будут отображаться только коллекции в выбранной вами сети. Например, если вы указали BNB Smart Chain, вы увидите только NFT-коллекции на BNB Smart Chain. Вы можете выбрать только что созданную коллекцию или нажать «Добавить новую коллекцию», чтобы создать новую. 

Пошаговая инструкция как создать nft коллекцию на golang ethereum

  • выберите характеристики для вашего NFT. Нажав , вы сможете добавить до 100 характеристик.

Пошаговая инструкция как создать nft коллекцию на golang ethereum

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

Как только NFT будет создан, вы можете выставить его на продажу или оставить. Выставленные NFT будут представлены на маркетплейсе Binance NFT.

Где находятся коллекции

Глава 5. Завершение.

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

Создание коллекции

После настройки файла config.py пришло время генерировать коллекцию. Откройте Терминал (или Командную строку) и перейдите в папку с генерацией (используя команду cd).

Теперь запустите следующую команду:

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

Затем он спросит вас, сколько аватаров вы хотели бы создать. Мы предлагаем создать на 20% больше того, что вы хотите создать, так что у вас останется достаточно даже после удаления дубликатов. В нашем случае мы решили создать 12000 аватаров, хотя хотели 10000. Затем он попросит вас назвать коллекцию, а затем начнет процесс генерации.

Пошаговая инструкция как создать nft коллекцию на golang ethereum

Нам потребовалось около 30 минут, чтобы создать 11957 аватаров (после удаления дубликатов). Изображения и связанные с ними метаданные будут доступны в папке вывода.

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

Файл метаданных является файлом CSV, который вы можете импортировать в Excel и анализировать (например, какие свойства являются редчайшими, какая комбинация признаков является наиболее распространенной, рейтинг Avatar Rarity и т.д.)

Процесс генерации

Белки, которые вы видите выше, были сгенерированы путём наложения изображений PNG друг на друга. Хотя ни один из проектов NFT не описывает, как они создают свое искусство, мы уверены, что это то же самое. Почти каждый аватар NFT, который вы видите, является набором PNG изображений.

Пошаговая инструкция как создать nft коллекцию на golang ethereum

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

  • Каждое изображение (и последний аватар белки) имеет точно такой же размер.
  • Помимо изображения фона, все остальные изображения имеют прозрачный фон.
  • Изображения черт должны быть сложены, чтобы получить правильный аватар белки (то есть по часовой стрелке сверху справа).
  • Образы черт нарисованы таким образом, что их позиционирование имеет смысл по отношению ко всем другим чертам.
  • Мы можем поменять любую черту на другую той же категории (например, красная рубашка вместо голубой рубашки). Поэтому, в данном случае, если бы у нас было 10 черт для каждой категории, мы могли бы теоретически произвести 100 миллионов различных белок.

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

В проекте Scrappy Squirrels мы создали 8 категорий черт.

Пошаговая инструкция как создать nft коллекцию на golang ethereum

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

Пошаговая инструкция как создать nft коллекцию на golang ethereum

Теперь ваша очередь. Вам нужно выбрать категории черт, с которыми вы хотите работать, и создать образы черт для каждой категории. Убедитесь в том, что они удовлетворяют вышеупомянутым требованиям (должны иметь одинаковые размеры, должны быть правильно расположены и т.д.). Кроме того, убедитесь, что вы правильно называете образы свойств. То, что вы называете ваше изображение, появится в файле метаданных.

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

В настоящее время библиотека способна только обрабатывать изображения PNG. Вскоре мы добавим поддержку для других типов медиа.

Оцените статью
NFT Эксперт