Crypto news

22.01.2024
16:30

С чего начать разработку Web3-приложений в 2024 году ― рассказывает GetBlock

getblock_web3_Статья_GetBlock_о_разработке_приложений

В конце 2023 года венчурная компания Andreessen Horowitz опубликовала список «больших идей» в криптоиндустрии. Эксперты выделили рестарт UX при создании криптовалютных приложений, а также развитие модульного технологического стека в Web3-разработке.

Вместе с провайдером RPC-нод GetBlock рассказываем о том, что необходимо знать и уметь Web3-инженеру в 2024 году.

Технологический стек Web3-разработчика

Технологический стек ― набор технологий, инструментов и языков программирования для создания ПО. Например, MEAN (MongoDB, Express.js, AngularJS/Angular, Node.js) и MERN (MongoDB, Express.js, React, Node.js) ― популярные стеки веб-разработчиков.

В Web3 можно выделить четыре основных компонента:

  • библиотеки. С их помощью создают приложения, которые работают в блокчейне или обращаются к нему;
  • смарт-контракты. Неизменяемый код, работающий внутри сети;
  • кошельки. Адрес является идентификатором пользователя или смарт-контракта, а также хранилищем криптовалют и токенов;
  • ноды. Хранят копию блокчейна. Без нод Web3-библиотека не сможет взаимодействовать со смарт-контрактами.

Для работы с ними предназначены следующие инструменты:

  • GetBlock ― провайдер, предоставляющий связь с нодами; Remix ― IDE для тестирования, развертывания и исполнения смарт-контрактов в браузере;
  • Hardhat ― локальная среда разработки на Ethereum. Она позволяет развертывать приложения и смарт-контракты в тестнетах Mumbai и Goerli и основной сети Ethereum;
  • MetaMask ― браузерный Web3-кошелек. Разработчики используют его для тестирования и развертывания dapps, пользователи ― для хранения криптоактивов и взаимодействия с Web3;
  • Etherscan ― обозреватель Ethereum, показывающий статус транзакций и детали смарт-контракта.

Для создания Web3-приложений также понадобится знание языков JavaScript и Solidity.

«Изучив эти концепты и инструменты, начинающий разработчик поймет, как устроен, например, криптовалютный кошелек и что нужно сделать для создания похожего продукта», ― комментирует команда GetBlock.

Провайдеры нод

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

Например, чтобы Алиса отправила Бобу 1 ETH, кошелек должен проверить, сколько денег у обоих до отправки, удостовериться в авторизации транзакции Алисой и валидности кошелька Боба, а потом «сказать» блокчейну, что балансы изменились.

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

Это довольно трудоемкий процесс, требующий постоянной поддержки работоспособности инфраструктуры (мониторинг, установка, обновление). Поэтому часто Web3-разработчики обращаются к провайдерам RPC-нод. Последние предоставляют доступ к узлу через API. Адрес ноды (URL эндпоинта) вписывается в код приложения, которое и шлет на нее запросы.

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

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

«Первым популярным RPC-провайдером стала Infura, предоставляя доступ к нодам Ethereum и EVM-совместимым сетям. 

GetBlock ― платформа нового поколения. Мы поддерживаем более 50 блокчейнов. Если команда строит мультивалютный обменник, она может подключиться к биткоину, Ethereum, Tron и другим сетям через один сервис», ― комментирует команда проекта.

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

«GetBlock предоставляет доступ к общим (shared) и выделенным (dedicated) нодам. Последняя опция предполагает развертывание узла строго под задачи клиента, максимальную скорость и аптайм. Она ориентирована на проекты с солидным трафиком или перспективами масштабирования. Для быстрого ответа RPC-ноды мы используем серверы в Европе, Азии и США.  

Общие ноды ― решение для обычных пользователей. Они делят инфраструктуру с другими, но также получают высокоскоростной доступ. Можно выбрать как тарифы с лимитом запросов (от 5 млн запросов к блокчейну), так и безлимитные тарифы на месяц, полгода или год», ― утверждают в GetBlock.

Начинающим Web3-разработчикам GetBlock предлагает бесплатный доступ с лимитом в 40 000 запросов в сутки. Цены на платные тарифы начинаются с $29.

Web3-библиотеки

Библиотеки ― это наборы готовых функций, повышающие скорость разработки децентрализованных приложений. Их основная задача ― обеспечить взаимодействие со смарт-контрактами, развернутыми в Ethereum или других сетях. Большинство разработчиков для этих целей выбирают Web3.js и Ethers.js. 

Web3.js ― популярная библиотека для работы с Ethereum, созданная в 2015 году. Многие проекты используют ее для подключения смарт-контрактов к внешнему коду на JavaScript, выполнения транзакций и получения данных о блокчейне.

Библиотека состоит из нескольких модулей:

  • eth ― помогает установить соединение с тестнетами и мейннетом Ethereum, управлять транзакциями, конструировать контракты Solidity и взаимодействовать с ними;
  • shh ― выполняет обмен информацией между dapps;
  • utils ― форматирует и конвертирует данные;
  • bzz ― позволяет использовать Swarm в качестве децентрализованной системы хранения данных.

«Полный список функций Web3.js огромен. Она очень популярна благодаря совместимости практически со всеми существующим фреймворками», ― отмечает команда GetBlock.

Библиотеку можно загрузить с помощью менеджера пакетов вроде NPM или YARN, а затем интегрировать в различные консоли.

Ethers.js ― альтернатива Web3.js, выпущенная в 2016 году разработчиком Ричардом Муром. Она предлагает схожий набор функций, но может похвастаться дополнительными возможностями. Среди них:

  • встроенная поддержка системы доменных имен Ethereum Name Service;
  • лицензия MIT позволяет повторно использовать и перерабатывать код практически без ограничений;
  • небольшой размер пакетов предотвращает негативное влияние на производительность фронтенда;
  • использование языка TypeScript повышает безопасность и минимизирует вероятность ошибок и багов.

Библиотека регулярно обновляется и имеет процесс установки, аналогичный Web3.js. Однако, в отличие от последней, Ethers.js не требует полной загрузки пакетов. Это может быть полезно, если вы собираетесь использовать только отдельные модули.

Кошельки

Web3-кошельки нужны для взаимодействия с dapps. Они предоставляют интерфейс для управления криптоактивами с помощью приватных ключей (MetaMask, Phantom) или смарт-контрактов (Safe, Argent).

Как правило, при взаимодействии с блокчейнами некастодиальные кошельки полагаются на RPC-ноды. Так, MetaMask по умолчанию обращается к провайдеру Infura (оба продукта принадлежат компании ConsenSys).

«MetaMask отслеживает IP-адреса и кошельки пользователей, выбравших Infura в качестве RPC-провайдера. Так ConsenSys становится гораздо проще накладывать ограничения на кошелек, что не очень-то согласуется с принципом децентрализованности.

Вы можете в любой момент изменить RPC-провайдера, например на GetBlock. Мы не передаем данные/информацию третьим лицам и предоставляем 40 000 запросов ко всем блокчейнам после регистрации. Этого вполне достаточно для личного пользования», ― отмечают представители провайдера.

В следующем разделе мы рассмотрим, как изменить RPC-провайдера в настройках MetaMask.

Смарт-контракты

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

Для создания смарт-контрактов на базе Ethereum и других EVM-совместимых блокчейнов большинство разработчиков пользуются библиотекой OpenZeppelin и IDE Remix, а для доступа к данным блокчейна — услугами провайдеров RPC-нод вроде GetBlock.

Создадим токен стандарта ERC-721 (NFT) в блокчейне Ethereum. Для этого выполните следующие шаги:

  • откройте Contracts Wizard и выберите один из доступных вариантов (в нашем случае ERC-721), введите название токена и тикер;
  • заполните поле Base URI ссылкой на IPFS (хранит метаданные NFT) и укажите свойства актива;
  • нажмите кнопку Open in Remix для переноса контракта в среду разработки. В ней можно прописать дополнительные условия;
  • после внесения изменений в Remix нажмите кнопку Solidity Compiler в боковой панели, чтобы скомпилировать код.
Код ERC-721 в Remix. Данные: GetBlock.

Контракт готов к развертыванию. Протестировать его работу можно в тестнетах Sepolia или Goerli. Для этого:

  • установите GetBlock в качестве провайдера RPC-нод ― создайте аккаунт и получите бесплатный эндпоинт для Sepolia;
  • добавьте сеть в MetaMask, вставив RPC-ссылку.
Добавление RPC-ссылки в MetaMask. Данные: GetBlock.

После этого в боковой панели перейдите в раздел Deploy & Run Transactions и выберите Injected Provider ― MetaMask в поле Environment. Если сеть Sepolia активна в кошельке, она автоматически подключится к Remix.

Убедитесь, что у вас есть ETH на оплату газа. В Sepolia и других тестнетах его можно получить бесплатно с помощью кранов.

Развертывание смарт-контракта в Remix. Данные: GetBlock.

Наконец, нажмите Deploy и подтвердите транзакцию в появившемся расширении MetaMask.

При развертывании в мейннете созданный NFT будет отображаться в аккаунте testnets.opensea.io или на главном сайте OpenSea.

Выводы

Web3-разработка включает в себя технологический стек из нескольких взаимосвязанных компонентов. Важную роль в нем играют RPC-провайдеры вроде GetBlock: они упрощают разработку приложений и экономят ресурсы на их обслуживании.

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