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

Представьте мир, в котором онлайн-взаимодействия осуществляются через децентрализованную сеть, обеспечивающую прозрачность, безопасность и контроль пользователя — именно это обещает 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, предлагающие дополнительные варианты в зависимости от ваших потребностей в разработке.
Как ваш заказ попадает от вашего столика на кухню и как готовый заказ возвращается к вам? Через официантов, конечно!
В web2 REST API выступают в роли «официантов», обеспечивая коммуникацию между вашим приложением и серверной частью, где находится бизнес-логика. Для взаимодействия с этой серверной частью вам нужны URL и конкретные эндпоинты для различных операций.
В web3 взаимодействие с узлом блокчейна происходит через JSON-RPC API. Этот API позволяет нескольким dapp взаимодействовать с одним URL, указывая контракт, содержащий бизнес-логику, в теле JSON-RPC вызова. Хотя JSON-RPC API может быть менее знаком вам, он функционирует аналогично обычным HTTP-запросам, как показано здесь:
Обратите внимание на содержимое объекта 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-разработчиков.
Существует несколько способов взаимодействия со смарт-контрактами, но давайте рассмотрим наиболее популярный: через 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-разработка меняет принцип работы приложений, используя смарт-контракты на блокчейне, делая их постоянными и перенося серверные задачи от централизованных серверов. Этот сдвиг требует от разработчиков освоения таких аспектов, как подписание транзакций, работа с gas fee и использование JSON-RPC API, что отличает её от традиционной web2-разработки. Это может быть непросто, но открывает новые и захватывающие возможности.
Чтобы узнать больше о web3-разработке и быть в курсе последних инструментов и лучших практик, посетите блог MetaMask для получения материалов и руководств, ориентированных на разработчиков.
Переведено ИИ. Может содержать ошибки. Пожалуйста, всегда проверяйте информацию.