Создание фронтенда для Web3-приложений - это не только дизайн, кнопки и React. Это мост между пользователем и блокчейном. И ты, как фронтенд-разработчик - тот, кто этот мост строит.
В этой статье ты узнаешь:
Что такое Web3 Frontend и чем он отличается от Web2
Какие инструменты тебе реально нужны
Как начать с нуля
Как использовать
wagmi
- главный инструмент Web3-интерфейсов
Стоит сразу оговорится - если ты ожидаешь увидеть в этой статье мои "философские" рассуждения на тему "интернета будушего", то эта статья не об этом. Термин Web3 уже давно закрепился за блокчейн технологиями, нравится тебе это или нет. И это легко проверить загуглив пару вакансий с префиксом web3 или парочки альтернативных статей. Я лишь делюсь своей экспретизой и опытом в этой сфере и не претендую на роль "новатара" или "философа".
Что такое Web3 Frontend?
Web3 Frontend — это интерфейс для децентрализованного приложения (dApp), который работает вместо сервера, напрямую общаясь с блокчейном и кошельком пользователя.
Если ты еще не знаешь что такое децентрализация, то обязательно прочитай об этом отдельно. Это целая концепция вокруг которой все web3 и построено.
Ты не отправляешь запросы на backend, как в Web2. Ты взаимодействуешь с сетью (Ethereum, Polygon, Base и т.п.) через смарт-контракты и подключённый кошелёк.
Что тебе нужно для старта?
1. Библиотеки Web3
Библиотека |
Назначение |
---|---|
|
Основной инструмент для Web3-интерфейса |
|
RPC-клиент для вызова контрактов (вместо ethers.js) |
|
Подключение кошельков с UI |
|
Старый, но популярный Web3-клиент |
2. Базовые понятия Web3 - кратко и по делу
Чтобы комфортно работать с wagmi
и любыми Web3-инструментами, нужно понимать, как устроен фундамент. Ниже представлены все ключевые термины, которые ты будешь встречать в dApp’ах снова и снова.
address → адрес кошелька или контракта
Это строка, которая представляет пользователя или контракт в сети. Она всегда начинается с 0x
, содержит 40 символов.
Пример:
0x1234567890abcdef1234567890abcdef12345678
Есть два вида:
EOA
(Externally Owned Account) — обычный кошелёк (например, MetaMask)Contract Account
— адрес, по которому развёрнут смарт-контракт
Чтобы отображать адрес красиво, используют ENS (например: vitalik.eth
)
token → цифровой актив на балансе
ERC-20 — взаимозаменяемые (USDC, DAI):
поддерживают balanceOf
, transfer
, approve
, decimals
Используй useBalance({ token })
в wagmi
для получения баланса
ERC-721 — NFT (уникальные ID):
функции ownerOf
, tokenURI
, transferFrom
Через tokenURI
получаешь метаданные с image
, name
decimals — количество знаков после запятой:
ETH = 18, USDC = 6
Используй parseUnits
/ formatUnits
из viem
для конвертации
approve + allowance — разрешение контракту тратить токены
Обязательно для свапов, стейкинга и NFT-маркетплейсов
chainId → идентификатор сети
Показывает, к какой сети подключён пользователь. Каждый блокчейн имеет уникальный chainId
.
Примеры:
Ethereum Mainnet →
1
Goerli Testnet →
5
Polygon →
137
Arbitrum →
42161
Optimism →
10
Ты используешь chainId
, чтобы:
определить активную сеть
переключать сеть (через
switchNetwork
)отображать правильные токены/цены
provider → канал связи с блокчейном
Это объект, через который ты читаешь данные из сети: балансы, блоки, события. Он не может подписывать транзакции.
→ В wagmi
и viem
провайдер создаётся через publicProvider()
или RPC-провайдеры вроде Alchemy, Infura и т. д.
→ Примеры возможностей:
Получить текущий блок
Прочитать состояние контракта
Подписаться на события
signer → тот, кто подписывает транзакции
Это расширение provider
с доступом к приватному ключу (который держит MetaMask).
С помощью signer
ты можешь:
отправить транзакцию (
sendTransaction
)подписать сообщение (
signMessage
)вызывать
contract.write()
(например,mint()
)
→ В wagmi
тебе не нужно напрямую работать с signer
, он используется внутри хуков типа useContractWrite
.
smart contract, ABI, read/write
Смарт-контракт — это программа на блокчейне.
ABI
(Application Binary Interface) — это инструкция для твоего фронтенда: какие функции у контракта, какие параметры, что возвращается.
Пример ABI-функции:
{
"name": "mint",
"type": "function",
"stateMutability": "payable",
"inputs": [],
"outputs": []
}
Есть два типа вызовов:
read
→ бесплатный, безопасный, не требует подписи (например,totalSupply()
,balanceOf()
)write
→ платный (gas), требует подписи (например,mint()
,transfer()
)
gas, fee, nonce
→ gas
→ топливо, которое тратится на выполнение кода
→ gasPrice
→ цена за одну единицу газа (в Gwei)
→ fee
= gas
× gasPrice
(тебе нужно заплатить в ETH или другой валюте)
→ nonce
→ счётчик количества транзакций от адреса (чтобы они шли по порядку)
Все write-функции тратят gas
, даже если они не срабатывают (например, revert’ятся)
network, chain, L2
→ network
= chain
= блокчейн-среда, в которой работает dApp
→ L1
→ основной уровень (Ethereum Mainnet)
→ L2
→ надстройка над L1 для ускорения и удешевления транзакций
Ты должен всегда:
проверять, в какой сети находится пользователь
уметь предлагать переключение сети (например, с mainnet на L2)
работать с несколькими
chainId
черезwagmi
-конфигурацию
tokens, decimals, balance
На блокчейне балансы измеряются в целых числах, без запятой
- ETH имеет 18 знаков после запятой
- USDC — 6
В wagmi
ты используешь useBalance({ address })
— и получаешь уже отформатированное значение
Краткая таблица для повторения
Термин |
Пояснение |
---|---|
|
Адрес пользователя или контракта ( |
|
ID блокчейна |
|
Канал к блокчейну (чтение) |
|
Подписант транзакций (MetaMask и т.д.) |
|
Программа на блокчейне |
|
Описание функций контракта |
|
Стоимость исполнения |
|
Чтение без газа |
|
Транзакции с подписью и оплатой |
|
Счётчик транзакций |
|
Подпись строки через кошелёк |
|
Авторизация без пароля через Ethereum |
|
цифровой актив |
wagmi — must-have для Web3 Frontend
Библиотека wagmi
— это набор React-хуков, которые позволяют:
Подключать кошелёк
читать/записывать в смарт-контракт
Получать баланс, ENS, chain info
Подписывать сообщения и транзакции
? Пример: минимальный dApp с wagmi
1. Установка:
npm install wagmi viem @rainbow-me/rainbowkit
2. Настройка WagmiConfig
// main.tsx
import { WagmiConfig, createConfig, configureChains } from 'wagmi'
import { publicProvider } from 'wagmi/providers/public'
import { mainnet, polygon, optimism } from 'wagmi/chains'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
const { publicClient, webSocketPublicClient } = configureChains(
[mainnet, polygon, optimism],
[publicProvider()]
)
const config = createConfig({
autoConnect: true,
publicClient,
webSocketPublicClient,
})
const queryClient = new QueryClient()
export function Web3Provider({ children }) {
return (
<WagmiConfig config={config}>
<QueryClientProvider client={queryClient}>
{children}
</QueryClientProvider>
</WagmiConfig>
)
}
3. Подключение кошелька
// ConnectWallet.tsx
import { useAccount, useConnect, useDisconnect } from 'wagmi'
import { InjectedConnector } from 'wagmi/connectors/injected'
export function ConnectWallet() {
const { connect } = useConnect({
connector: new InjectedConnector(),
})
const { disconnect } = useDisconnect()
const { isConnected, address } = useAccount()
return isConnected ? (
<div>
<p>Вы подключены: {address}</p>
<button onClick={() => disconnect()}>Отключиться</button>
</div>
) : (
<button onClick={() => connect()}>Подключить MetaMask</button>
)
}
4. Чтение баланса
// Balance.tsx
import { useBalance, useAccount } from 'wagmi'
export function Balance() {
const { address } = useAccount()
const { data, isLoading } = useBalance({ address })
if (isLoading) return <p>Загрузка...</p>
return <p>Баланс: {data?.formatted} {data?.symbol}</p>
}
5. Вызов функции смарт-контракта
// MintNFT.tsx
import { usePrepareContractWrite, useContractWrite } from 'wagmi'
import { parseEther } from 'viem'
const contractAddress = '0x123...' // твой контракт
const abi = [
{
name: 'mint',
type: 'function',
stateMutability: 'payable',
inputs: [],
outputs: [],
},
]
export function MintNFT() {
const { config } = usePrepareContractWrite({
address: contractAddress,
abi,
functionName: 'mint',
value: parseEther('0.01'),
})
const { write, isLoading, isSuccess } = useContractWrite(config)
return (
<button disabled={!write || isLoading} onClick={() => write?.()}>
{isLoading ? 'Минтим...' : 'Минт NFT'}
{isSuccess && <p>Успех!</p>}
</button>
)
}
Что по итогу?
Web3 Frontend - это не сложно, если начать с правильных инструментов.
Твоя цель - не перепридумать backend, а создать безопасный, быстрый и дружелюбный интерфейс поверх блокчейна. И в этом тебе максимально помогает wagmi
.
В следующих частях мы остановимся более подробно на живых примерах dapp приложений и разберем как это все работает под капотом.
Комментарии (20)
lhawick
26.07.2025 17:08Разве nonce это счётчик количества транзакцией для определения их порядка? Насколько я знаю это число, которое меняют чтобы менять хеш заголовка блока
svosin
26.07.2025 17:08В ethereum-образных сетях (и во многих остальных с аккаунтной моделью) nonce - это счетчик транзакций с конкретного адреса, который много для чего используется, кроме replay protection - например, в EVM-сетях nonce участвует в расчете адреса контракта, который деплоится с данного адреса. Плюс отмена/ускорение транзакции работает как отправка другой транзакции с тем же nonce, что и та транза, которую нужно отменить, но с бОльшей комиссией, чтобы был шанс заскочить вперёд отменяемой транзакции.
Lodin
26.07.2025 17:08Статья будто из 2017. А в итоге Web 3 так и не родился, криптовалюты оказались чем-то очень нишевым, NFT остались просто скамом, а блокчейн толком никуда и не впилили.
MyNameIsAlex33
26.07.2025 17:08Блокчейн впилили очень много куда. Блокчейн используется как один из видов защиты, блокчейн используется банками, цифровой рубль это тот же самый блокчейн. Технология гораздо более интересная, чем просто криптовалюта
themen2
26.07.2025 17:08А толку? Скам для крипианов и маминых инвесторов с деньгами сэкономленными с обедов
shendel
26.07.2025 17:08Ладно... Не ругайтесь... А зачем тяжёлый viem в примере? Для перевода этара в веи?
geek_george Автор
26.07.2025 17:08viem на данный момент самый оптимизированный и легковесный ethereum клиент, который также позволяет использовать его по модулям. С бенчмарками можете ознакомиться в доке
В статься он используется потому что благодаря абстракциям viem, даже не просвященный разработчик сможет быстро закрывать свои задачи по работе с evm сетями (на случай если в вашем проекте важен каждый кб)
NeiroNx
26.07.2025 17:08Так и не понял как через блокчейн передавать данные. Понял что только чтобы открыть страницу с тебя будет браться плата, микротранзакции за каждое движение мышкой.
geek_george Автор
26.07.2025 17:08В статье расcмотрены так называемые операции чтения и записи в блокчейне. Если запись может быть ограничена логикой определенной программы, то чтение доступно всем пользователям. В статье рассмотрен пример чтения баланса, также он может отличаться в зависимости от того какую логику заложил разработчик смарт-контрактов
ArtyomOchkin
26.07.2025 17:08Так вы про Web 3.0 или про блокчейн и его соединение на уровнях бэкенда и фронтенда?
geek_george Автор
26.07.2025 17:08Термин Web3 уже давно закрепился за работой с блокчейном, как среди разработчиков, так и среди работодателей
Terranz
А что, в этом ихнем будущем web3 кроме операций с кошельком больше ничего не предполагается? А мемы про котиков как смотреть?
Так эндпойнт в итоге где?
svosin
Вот тут:
Просто wagmi прячет непосредственно конфигурацию провайдера, в случае с ethers это было бы более явным.
А вообще, в большинстве случаев взаимодействие происходит не прямым дёрганьем эндпойнта, а через вызовы объекта, который инжектится плагином кошелька. Можно и напрямую (когда не надо отправлять транзакции) - тогда эндпойнт можно взять либо у специальных провайдеров по типу Infura, либо поднять свою ноду и ходить к ней.
skymal4ik
Я тоже этого не понял. Финансовые операции в текущем вебе - это какие-то доли процента времени. Основное - это поиск информации, потребление контента, новости, общение, игры. Что веб3 предлагает вместо гугла, ютуба, ленты, реддита и прочих лоров?
themen2
Ничего. Просто криптаны дуреют с этой прикормки
artptr86
Так в «интернете будущего» всё запрещено :)
forajump
Если я правильно понимаю, IPFS соответствует концепции Web3, и там можно смотреть мемы про котиков.
geek_george Автор
Термин Web3 уже давно закрепился за блокчейн технологиями, нравится тебе это или нет. И это легко проверить загуглив пару вакансий с префиксом web3 или загуглив. Я лишь делюсь своей экспретизой и опытом в этой сфере и не претендую на роль "новатара" или "философа".
А вот некоторые аналоги сервисов:
research, YaCy, Koii, Odysee, LBRY, Livepeer, PeerTube, Lemmy, Aether, Karma3, Farcaster, Lens Protocol, Bluesky, Deso, Orbit, Mirror.xyz, Paragraph.xyz, RSS3, Push Protocol, XMTP, CyberConnect.