С чего начать разработку Web3-приложений в 2024 году ― рассказывает 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 в боковой панели, чтобы скомпилировать код.
Контракт готов к развертыванию. Протестировать его работу можно в тестнетах Sepolia или Goerli. Для этого:
- установите GetBlock в качестве провайдера RPC-нод ― создайте аккаунт и получите бесплатный эндпоинт для Sepolia;
- добавьте сеть в MetaMask, вставив RPC-ссылку.
После этого в боковой панели перейдите в раздел Deploy & Run Transactions и выберите Injected Provider ― MetaMask в поле Environment. Если сеть Sepolia активна в кошельке, она автоматически подключится к Remix.
Убедитесь, что у вас есть ETH на оплату газа. В Sepolia и других тестнетах его можно получить бесплатно с помощью кранов.
Наконец, нажмите Deploy и подтвердите транзакцию в появившемся расширении MetaMask.
При развертывании в мейннете созданный NFT будет отображаться в аккаунте testnets.opensea.io или на главном сайте OpenSea.
Выводы
Web3-разработка включает в себя технологический стек из нескольких взаимосвязанных компонентов. Важную роль в нем играют RPC-провайдеры вроде GetBlock: они упрощают разработку приложений и экономят ресурсы на их обслуживании.
Даже если вы не планируете заниматься созданием децентрализованных приложений, понимание того, как работает та или иная технология, поможет лучше разобраться в сути разных криптовалютных проектов.
Рассылки ForkLog: держите руку на пульсе биткоин-индустрии!