Хранение данные в сети Greenfield + NFT
Сегодня напишу как хранить данные в сети Greenfield и сделать смарт контракт на NFT и неординарный способ проверить это все.
![](https://gavrilov.info/pictures/greenfield.png)
Про сеть Greenfield я узнал в прошлом году как только она напустилась. и тут же попробовал. Любопытная штука так как предоставляет возможность работать без почтового акаунта, а напрямую из кошелька в Metamask.
Немного теории тут. Сеть Greenfield – децентрализованная сеть хранения контента. Почти как s3, но в блокчейне. Технически он она может быть полезна в новых механиках взаимодействия. Например, срок хранения NFT зависит от его просмотра, чем большое смотрят контент, тем дольше оно хранится или например можно взымать плату в блокчене и автоматически выдавать дотупы тем кто оплатил. Удобно, то что это наверное можно запрограммировать в смарт контракте, но я пока не знаю как именно. Тут можно посмотреть код. Есть некоторые сомнения конечно, что все такие это такой же s3 но поверх него некая нашлепка в блокчейне с хранением метаданных и хочется чего то более солидного, какой то магии без центрального звена, но может это просто мечты. Кстати, изначально она меня привлекала запуском ноды, но недавно узнал, что надо 500 bnb застейкать, а это где-то 300к по текущему курсу. В общем, до тех пор пока я нищеброд, надо забыть о ноде и идти на завод.
Вот что пишет о сети чатгпт:
Binance Smart Chain (BSC) — это лишь одна из инициатив Binance в области блокчейн-технологий. Однако также была анонсирована сеть под названием Greenfield, которая является частью более широкой экосистемы Binance. Здесь я опишу, что такое Greenfield и для чего данная сеть может быть применима.
Что такое сеть Greenfield от Binance?
Greenfield — это децентрализованная вычислительная сеть, созданная и управляемая Binance, которая ориентирована на предоставление высокопроизводительных, масштабируемых и безопасных решений для различных децентрализованных приложений (dApps) и финансовых технологий.
Основные характеристики и возможности
- Масштабируемость:
- Greenfield обещает высокую пропускную способность для поддержки большого количества транзакций и пользователей.
- Использование различных методов оптимизации и распределенных вычислений помогает обеспечить необходимую масштабируемость.
- Безопасность:
- Уровень безопасности обеспечивается сочетанием симметричных и асимметричных криптографических методов.
- Включены программы безопасности и аудиты для систематического выявления уязвимостей.
- Совместимость:
- Greenfield поддерживает множество различных протоколов и стандартов, что делает её совместимой с существующими децентрализованными приложениями.
- Экономическая эффективность:
- Оптимизированное использование узлов и ресурсов позволяет значительно снизить операционные затраты.
Возможное применение сети Greenfield
- Децентрализованные приложения (dApps):
- Greenfield может использоваться для развертывания и управления децентрализованными приложениями, такими как DeFi-протоколы, платформы для обмена NFT и социальные сети.
- Финансовые технологии (FinTech):
- Подходит для создания децентрализованных финансовых продуктов, таких как кредитные платформы, системы инвестиций и страхования.
- IoT и умные города:
- Greenfield может применяться в Интернете вещей (IoT) для управления устройствами и сбора данных в реальном времени.
- В умных городах сеть может быть использована для управления инфраструктурой и службами.
- Цифровое управление данными:
- Может быть использована для создания безопасных и прозрачных систем управления данными и идентификацией.
- Игровая индустрия:
- Greenfield также может поддерживать разработку децентрализованных игровых платформ и игровых токенов.
Преимущества использования сети Greenfield
- Высокая производительность: Обеспечивает нужный уровень масштабируемости и быстрой обработки транзакций.
- Безопасность: Разработана с высокой степенью безопасности, что делает её надёжным выбором для критически важных приложений.
- Совместимость и интеграция: Позволяет легко интегрировать текущие системы и протоколы.
- Экономия затрат: Эффективное использование ресурсов способствует снижению издержек.
Заключение
Сеть Greenfield от Binance представляет собой мощную и многообещающую платформу для развития децентрализованных приложений и финансовых технологий. Её широкие возможности и особенности делают её подходящей для множества применений, от финансовых технологий до Интернета вещей и игровой индустрии.
Для работы с сетью я почему то сразу выбрал утилиту командной строки. Ее можно собрать из коду тут. Настроить ее было не очень очевидным, фактически ей нужно скормить ключ от кошелька, произвести пару настроек и закинуть в мост некоторое количество bnb на баланс, так как оплата в сети производится токенами bnb. Мне кстати это не очень нравится, но видимо другого пути нету пока.
Кстати есть еще хранилка в блокчейне storj, но сейчас рассказ не про нее, да и там нет такого многообразия управления контентом и. доступом как в Greenfield. Фактически там просто хранения и регистрация по почтовому ящику, но оплатить место можно токенами storj. Вот ее ноду я как раз и запустил, благо она не Токая требовательная к стейкингу.
Настраиваем cli Greenfield:
Тут есть подробная инструкция.
Либо можно так:
git clone https://github.com/bnb-chain/greenfield-cmd.git
cd greenfield-cmd
# Find the latest release here: https://github.com/bnb-chain/greenfield-cmd/releases
git checkout -b branch-name v1.0.2
make build
cd build
./gnfd-cmd -h
Потом так:
// import key and generate a keystore file
gnfd-cmd account import key.txt
Генерируем аккаунт:
// new account and generate keystore key.json
gnfd-cmd account account new
Посмотреть аккаунт можно так:
// list the account info and keystore path
gnfd-cmd account ls
// display the encrypted keystore or the private key
gnfd-cmd account export --unarmoredHex --unsafe
Ну вы далее знаете, что делать. все сохраняем, храним надежно и т.д.
Приступаем к работе и создаем бакет:
gnfd-cmd bucket create gnfd://testbucket
в моем случае я сделал бакет data и папку nft.
вот так:
(base) yuriygavrilov@MBP-Yuriy build % ./gnfd-cmd object put anton.json gnfd://data/nft/anton.json
Please enter the passphrase now:
object nft/anton.json created on chain
transaction hash: 068B3F225FED2AD74161D8ED370D809B10E58DC2B3F0EA5E809BAD19E43B5442
uploading progress: 100.00% [ 878B / 878B ], rate: 1000.28 Byte/s
sealing...
upload nft/anton.json to gnfd://data/nft/anton.json
Я не нашел как посмотреть публичную ссылку в командной строке, но это можно сделать в сервисе
dcellar.
Вот так это выглядит:
![](https://gavrilov.info/pictures/dcellar.png.jpg)
ну и еще загрузим на будущее саму фотку так:
./gnfd-cmd object put anton.jpg gnfd://data/nft/anton.jpg
и да, сам json я готовил по стандарту erc-721, тут можно почитать про него подробнее: https://eips.ethereum.org/EIPS/eip-721
Взял там ключевое, формат файла метаданных:
{"name": "Anton Gusev", "description": "Anton Gusev is the founder of the WEB 3.0 ecosystem CLC (mobile applications and blockchain projects), an NFT collector. He is an expert in launching startups and developing businesses (IT, e-commerce). He runs his own YouTube channel about management, investments, and technologies. Anton is a speaker and enthusiast in the field of cryptocurrencies, metaverses, neural networks, and modern technologies. He hosts YouTube and Telegram channels called - Duck Tales. He is also the author of articles in business publications, a consultant on launching new projects and market entry strategies. Anton is a writer (his novel is called - Fish Always Swim to the Right), a producer, a designer of stories and characters, and a fan of animation (especially Japanese).", "image": "https://greenfield-sp.defibit.io:443/view/data/nft/anton.jpg"}
Теперь идем дальше, нужно научится делать смарт контракт. Было не просто, кучу всего надставить локально, настраивать окружения и т.д. но в итоге я нашел отличный сервисы и справился проще и быстрее.
Нам понадобиться https://wizard.openzeppelin.com, https://remix.ethereum.org и еще, но не обязательно https://www.alchemy.com
openzeppelin – поможет составить контракт
remix – задеплоить контракт
alchemy – мне пригодилась для создания api ключей и написания js приложения для тестирования с помощью нейронки gpt4o. Кстати справилась хорошо, но были ошибки. с зависимостями в силу изменений и пришлось чуть чуть поправить код и импорты.
Заходим в визард для создания контракта:
![](https://gavrilov.info/pictures/Smart-contract.png.jpg)
Код получился примерно такой:
// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.0.0
pragma solidity ^0.8.20;
import "@openzeppelin/contracts@5.0.2/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts@5.0.2/token/ERC721/extensions/ERC721Burnable.sol";
import "@openzeppelin/contracts@5.0.2/access/Ownable.sol";
contract AntonGussev is ERC721, ERC721Burnable, Ownable {
constructor(address initialOwner)
ERC721("Anton Gussev", "NFT")
Ownable(initialOwner)
{}
function _baseURI() internal pure override returns (string memory) {
return "https://greenfield-sp.defibit.io/view/data/nft/anton.json";
}
function safeMint(address to, uint256 tokenId) public onlyOwner {
_safeMint(to, tokenId);
}
}
Далее переходим в remix и компилируем
![](https://gavrilov.info/pictures/remix-compile.png)
Далее переходим в деплой, указываем сеть Sepolia и первоначального владельца.
Теперь можно жать деплой.
![](https://gavrilov.info/pictures/remix-deploy.png)
Я подключался из метамаска и там надо будет подтвердить транзакцию из него.
После чего reemix выдаст лог и ссылку на транзакцию.
У меня уже есть контракт поэтому я не буду новый делать.
После успешного деплоя нужно вызвать функцию минта NFT из него.
Для этого находим функцию и делаем транзакцию
![](https://gavrilov.info/pictures/remix-mint.png)
Лог выглядит так:
![](https://gavrilov.info/pictures/remix-transact.png)
Можно переходить по ссылке и смотреть ее
![](https://gavrilov.info/pictures/ethersscan-nft-mint.png)
Далее можно заходить на OpenSea и смотреть, что вышло:
https://testnets.opensea.io/collection/anton-gusev
![](https://gavrilov.info/pictures/OpenSea-nft.png.jpg)
И вот тут у меня было сложности как видите. или точнее не видите.
Первый раз я что то накосячил и картинки были не видны как и тут четвертая:
![](https://gavrilov.info/pictures/empty-nft.png)
Я не знал, что делать и как проверить. В интернете писали, что тестовый opensea не поддерживает картинки, а чеканить без гарантии в основной сети я не хотел. Это стоило около 50 баксов без минта.
В общем я решил спросить сеть и написать прогу для теста NFT.
Нейронка выдала примерно это:
require('dotenv').config();
const axios = require('axios');
const { ethers, JsonRpcProvider } = require('ethers');
// Ensure the ALCHEMY_API_KEY is loaded properly
if (!process.env.ALCHEMY_API_KEY) {
throw new Error("Missing ALCHEMY_API_KEY environment variable");
}
const provider = new JsonRpcProvider(`https://eth-sepolia.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY}`);
const contractAddress = '0x084cc7deda8cd1dc0051362ed514d510a0e65225';
const abi = [
"function tokenURI(uint256 tokenId) external view returns (string memory)"
];
const contract = new ethers.Contract(contractAddress, abi, provider);
async function getTokenMetadata(tokenId) {
try {
const tokenURI = await contract.tokenURI(tokenId);
console.log("Token URI:", tokenURI);
const metadataResponse = await axios.get(tokenURI);
const metadata = metadataResponse.data;
console.log("Metadata:", metadata);
return metadata;
} catch (error) {
console.error("Error fetching token metadata:", error);
}
}
const tokenId = 4;
getTokenMetadata(tokenId);
ну и то, что нужно поставить:
npm install ethers
npm install dotс
npm install axios
mkdir nft-sepolia
cd nft-sepolia
npm init -y
touch fetchNFT.js
touch .env
Код выше я уже подредактировал на мой контракт и токен id 4. Для проверки текущего минта.
Еще были и другие попытки, но я выбрал эту так как нужен API ключ, а ключ Alchemy мне легко достался.
в файл .env нужно прописать ключ api “ALCHEMY_API_KEY=XXXXX” Полученный на из аккаунта https://www.alchemy.com
Теперь вроде все, можно проверять.
Запускаем...
node fetchNFT.js
![](https://gavrilov.info/pictures/node-nft-check1.png)
Класс, видно, что работает.. и цвет зеленый, значит json формат хороший.
Вот так я и нашел багу первую, у меня вывод был не зеленый. А у других NFT зеленый. Оказалось дело было в квотировании кавычками внутри текста. Пришлось убрать “ и заменить их просто дефисом.
Но почему не видно картинку на OpenSea все же?
А наше еще зайти на нее и нажать обновление метаданных тут:
![](https://gavrilov.info/pictures/refresh-nft-meta.png.jpg)
Жмем... ждем... иии....
Магия не происходит))) в этот раз я где то еще накосячил. ( контракт не тот указал блин 🙈🙈🙈, но когда это писал этого я еще не знал :) )
![](https://gavrilov.info/pictures/Error-this-time.png)
А прошлый лог оказался от другого токен id.
Вот, точно. BaseURI и TokenID совмещаются это есть в спецификации контракта и можно проверить через вызов контракта как на картинке:
![](https://gavrilov.info/pictures/nft-tokenid-error.png)
В общем кидаем еще один json чик с id 4 и должно заработать...
(base) yuriygavrilov@MBP-Yuriy build % ./gnfd-cmd object put anton.json gnfd://data/nft/anton.json4
Please enter the passphrase now:
object nft/anton.json4 created on chain
transaction hash: CB93C2CF1EF22DBAEF4A99F32893D2342BE2FD762EA7D832EC8C31BD74036E8A
uploading progress: 100.00% [ 878B / 878B ], rate: 1.01 KB/s
sealing...
upload nft/anton.json4 to gnfd://data/nft/anton.json4
Вот, теперь норм должно быть, проверяем:
Еще надо обновить мету на OpenSea...
И проверим наш текущий id через наш скрипт
node fetchNFT.js
![](https://gavrilov.info/pictures/Node-nft-check2.png)
Все! 🥳🥳🥳
![](https://gavrilov.info/pictures/nft-done.png.jpg)
Теперь можно продавать Антону :)
![](https://gavrilov.info/pictures/nft-sale.png)
🤑🤑🤑🤑🤑🤑
На что еще можно обратить внимание при выборе хранения:
www.arweave.org – The Arweave network is like Bitcoin, but for data: A permanent and decentralized web inside an open ledger. Можно тут попробовать: www.akord.com
nft.storage
storj.io
https://ucm-wiki.g8way.io/#/en/main – Universal Content Marketplace