Перейти к содержимому

Разработка Ethereum Dapp: концептуальные основы для новичков в Web3

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

7 мин чтения
Разработка Ethereum Dapp: концептуальные основы для новичков в Web3

Представьте мир, в котором онлайн-взаимодействия осуществляются через децентрализованную сеть, обеспечивающую прозрачность, безопасность и контроль пользователя — именно это обещает web3, работающий на основе технологии блокчейн. В этой статье мы рассмотрим основополагающие концепции и инструменты, необходимые для понимания разработки на блокчейне Ethereum.

Для объяснения принципа работы клиент-серверной архитектуры в web2 часто используют «аналогию с рестораном». В этой аналогии сервер — это кухня, а клиент (пользователь) отправляет запрос, подобно тому как делает заказ блюда. Сервер обрабатывает этот запрос и возвращает данные — как повар, подающий готовое блюдо. API выступает в роли официанта, который передаёт ваш заказ на кухню и приносит готовое блюдо, обеспечивая коммуникацию между клиентом и сервером, даже если они «говорят на разных языках».

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

Воспользуемся этими аналогиями, чтобы понять, что происходит за кулисами, когда пользователь взаимодействует с dapp. Аналогии несовершенны, но они помогают сформировать ментальную модель для начала вашего пути в разработке на Ethereum.

Децентрализованные узлы и смарт-контракты — множество кухонь

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

Что такое узлы в блокчейне?

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

Поскольку блокчейны работают без центрального органа управления, контроль распределён по сети узлов, которые совместно выполняют такие задачи, как валидация транзакций и исполнение протоколов управления. Все токены и смарт-контракты в блокчейне хранятся в узлах, что делает их неотъемлемой частью функциональности блокчейна. Без узлов базовая структура блокчейнов не могла бы существовать.

Что такое смарт-контракт?

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

Однако существенной проблемой в децентрализованной сети является обеспечение честного поведения узлов и корректной обработки запросов пользователей в условиях отсутствия централизованного органа управления. Именно здесь в игру вступает концепция «консенсуса».

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

Инструменты для управления жизненным циклом смарт-контрактов

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

  • Hardhat: Комплексная среда разработки, включающая компоненты для редактирования, компиляции, отладки и развёртывания смарт-контрактов и приложений. Идеально подходит, если вы хорошо владеете JavaScript и нуждаетесь в широкой интеграции с веб-технологиями.

  • Foundry: Быстрый и эффективный вариант, сохраняющий всё в экосистеме Solidity и повышающий продуктивность за счёт скорости и нативной поддержки Solidity.

Подробное сравнение Hardhat и Foundry можно найти в нашем руководстве Choosing the Right Ethereum Development Tool.

  • Remix: Онлайн-IDE с предустановленными плагинами для основных операций, идеально подходящая для быстрого тестирования кода без необходимости локальной установки.

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

  • Solidity: Известен синтаксисом, схожим с JavaScript, что делает его доступным для многих разработчиков.

  • Vyper: Разработан для повышенной безопасности и читаемости, с синтаксисом, похожим на Python.

Среди других языков — Yul, Cairo и Rust, предлагающие дополнительные варианты в зависимости от ваших потребностей в разработке.

JSON-RPC API — официанты

Как ваш заказ попадает от вашего столика на кухню и как готовый заказ возвращается к вам? Через официантов, конечно!

В web2 REST API выступают в роли «официантов», обеспечивая коммуникацию между вашим приложением и серверной частью, где находится бизнес-логика. Для взаимодействия с этой серверной частью вам нужны URL и конкретные эндпоинты для различных операций.

В web3 взаимодействие с узлом блокчейна происходит через JSON-RPC API. Этот API позволяет нескольким dapp взаимодействовать с одним URL, указывая контракт, содержащий бизнес-логику, в теле JSON-RPC вызова. Хотя JSON-RPC API может быть менее знаком вам, он функционирует аналогично обычным HTTP-запросам, как показано здесь:

curl  -X POST \\
  '<https://linea-goerli.infura.io/v3/2QBbceinBF3CvQvRwe9uaHLsOe>' \\
  --header 'Accept: */*' \\
  --header 'Content-Type: application/json' \\
  --data-raw '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
Копировать

Обратите внимание на содержимое объекта data в теле запроса:

{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}

Он включает версию JSON-RPC, метод для желаемого действия (например, получение номера последнего блока), необязательные параметры и ID для отслеживания запроса. Этот формат стандартизирует коммуникацию с узлами Ethereum — как для получения данных, так и для выполнения действий в блокчейне.

URL в запросе указывает на Infura — провайдера узлов, избавляющего нас от сложности и ресурсных затрат на настройку и обслуживание собственного узла Ethereum. Этот URL служит шлюзом к блокчейну.

Помните упомянутую ранее необходимость заплатить за приготовление заранее? В web3 выполнение транзакций сопряжено с затратами, известными как «Gas fee» (комиссия за газ), которая зависит от сложности транзакции и загруженности сети в данный момент. Однако чтение данных из блокчейна является бесплатным.

Чтобы ваша транзакция была правильно понята и выполнена, необходим стандартизированный способ её описания. Именно здесь на помощь приходит ABI (Application Binary Interface) — он действует как меню, определяя порядок взаимодействия с функциями смарт-контракта, указывая необходимые параметры и способ выполнения функции.

Итак, как ваш dapp взаимодействует с развёрнутыми смарт-контрактами? Как мы уже обсудили, для этого требуется использование JSON-RPC API, но для упрощения этого процесса существует ряд библиотек. В JavaScript доступны Ethers.js или Viem, а для фронтендов на основе React особенно полезен wagmi — библиотека React Hooks для Ethereum. Эти библиотеки оборачивают ваши JSON-RPC вызовы, делая взаимодействие с блокчейном и развёрнутыми контрактами более удобным.

Viem, а вместе с ним и Wagmi (использующий viem под капотом), предоставляет строго типизированные API, улучшая опыт разработчика благодаря автодополнению, выводу типов и статической валидации. Предоставляя ABI, viem предлагает автодополнение и обнаруживает ошибки типов до того, как они затронут пользователей.

Не уверены, что выбрать — ethers.js или viem? Ознакомьтесь с подробным сравнением для Web3-разработчиков.

Разработка фронтенда web3 dapp — обеденный зал

Существует несколько способов взаимодействия со смарт-контрактами, но давайте рассмотрим наиболее популярный: через dapp — децентрализованное веб- или мобильное приложение, предназначенное для взаимодействия с блокчейном.

Чем же dapp отличается от обычного веб-приложения? Визуально разница зачастую незначительна. Разработчики могут использовать привычные веб-фреймворки из web2 в web3, такие как React, Next.js или даже vanilla JavaScript, и развёртывать dapp практически так же. Однако в web3 широко применяются децентрализованные решения для хранения данных, такие как IPFS (InterPlanetary File System) или SWARM.

Отличительной особенностью большинства web3-приложений является функциональность «Connect Wallet» («Подключить кошелёк»). Нажимая «Connect Wallet» в dapp, вы авторизуете приложение для взаимодействия с вашим кошельком, позволяя ему считывать ваш публичный адрес и запрашивать транзакции от вашего имени. Транзакции должны быть аутентифицированы для подтверждения права пользователя на выполнение действия. Это достигается посредством подписи — процесса, использующего ваш приватный ключ, уникальный идентификатор, подтверждающий владение аккаунтом Ethereum и надёжно хранящийся в вашем кошельке.

Рассмотрим кошельки подробнее: они существуют в различных форматах, включая браузерные расширения, мобильные приложения и даже физические устройства, причём MetaMask является одним из наиболее популярных. Подобно тому как рестораны принимают различные способы оплаты, вам может потребоваться поддержка нескольких кошельков в вашем dapp.

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

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

Готовы погрузиться глубже в web3-разработку?

Web3-разработка меняет принцип работы приложений, используя смарт-контракты на блокчейне, делая их постоянными и перенося серверные задачи от централизованных серверов. Этот сдвиг требует от разработчиков освоения таких аспектов, как подписание транзакций, работа с gas fee и использование JSON-RPC API, что отличает её от традиционной web2-разработки. Это может быть непросто, но открывает новые и захватывающие возможности.

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

Переведено ИИ. Может содержать ошибки. Пожалуйста, всегда проверяйте информацию.

Оцените перевод

Автор статьи:

  • Kingsley Okonkwo

    Кингсли — сертифицированный разработчик блокчейна Ethereum, работающий техническим писателем в Consensys с особым акцентом на инструменты для разработчиков. До прихода в Consensys Кингсли работал фриланс-разработчиком бэкенда на нескольких платформах, включая Gigster и Braintrust. Имея за плечами 5 лет опыта в разработке программного обеспечения, он уверенно владеет такими инструментами, как JavaScript (Node.js и React), GoLang, SQL и Docker. Кингсли мастерски создаёт пошаговые руководства и практические гайды, используя новейшие технологии web3, чтобы помочь коллегам-разработчикам создавать более качественные dapps. В настоящее время проживая в Дубае, Кингсли в свободное время увлекается баскетболом и футболом.

    Читать все статьи