Интеграция с Infura API

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1306 услуг
Интеграция с Infura API
Простой
~2-3 часа
Часто задаваемые вопросы

Направления блокчейн-разработки

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1309
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1222
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    922
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1151
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    614
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    887

Интеграция с Infura API

Проблема, с которой сталкивается большинство проектов на старте: нода нужна уже сейчас, поднимать собственный Geth/Besu — это дни ожидания синхронизации и DevOps работа, которая не приносит бизнес-ценности на этапе MVP. Infura — управляемый RPC-провайдер с поддержкой Ethereum, Polygon, Arbitrum, Optimism, Base и ещё десятка сетей. Интеграция занимает час, но в ней есть несколько неочевидных моментов.

Что за сервис и чем отличается от других

Infura — один из старейших провайдеров (ConsenSys, 2016). Конкуренты: Alchemy, QuickNode, Chainstack, Ankr. Ключевые отличия Infura:

  • Websocket поддержка через отдельный WSS endpoint — важно для подписок на события
  • Ethereum Gas API — отдельный сервис с историческими данными по gas
  • IPFS gateway — тот же ключ работает для IPFS API, удобно для NFT-метаданных
  • Archive data — доступ к историческим состояниям через eth_getStorageAt на любом блоке (на Core плане ограничено, на Growth/Custom — без ограничений)

Для большинства проектов Infura и Alchemy взаимозаменяемы — оба реализуют стандартный Ethereum JSON-RPC. Миграция между ними — замена URL в конфиге.

Настройка и первый запрос

Регистрация → создание проекта → получение Project ID. Endpoint формируется так:

https://mainnet.infura.io/v3/{PROJECT_ID}
WSS: wss://mainnet.infura.io/ws/v3/{PROJECT_ID}

Сети: mainnet, sepolia, polygon-mainnet, arbitrum-mainnet, optimism-mainnet, base-mainnet и др.

Базовый запрос через viem:

import { createPublicClient, http } from 'viem';
import { mainnet } from 'viem/chains';

const client = createPublicClient({
  chain: mainnet,
  transport: http(`https://mainnet.infura.io/v3/${process.env.INFURA_KEY}`),
});

const blockNumber = await client.getBlockNumber();
const balance = await client.getBalance({ address: '0x...' });

Через ethers.js:

import { JsonRpcProvider } from 'ethers';

const provider = new JsonRpcProvider(
  `https://mainnet.infura.io/v3/${process.env.INFURA_KEY}`
);

Rate limits и работа с ними

Бесплатный план: 100,000 requests/day. Core: 3M requests/day. Лимиты по RPS зависят от плана.

Практические советы:

Батчинг запросов. JSON-RPC поддерживает batch — несколько методов в одном HTTP-запросе:

// Один HTTP запрос вместо трёх
const [block, balance, nonce] = await client.multicall({
  contracts: [...],
});

// Или через raw batch
const batch = [
  { jsonrpc: '2.0', method: 'eth_blockNumber', params: [], id: 1 },
  { jsonrpc: '2.0', method: 'eth_getBalance', params: ['0x...', 'latest'], id: 2 },
];
const response = await fetch(rpcUrl, {
  method: 'POST',
  body: JSON.stringify(batch),
});

Кэширование статичных данных. Результаты eth_getCode, eth_getTransactionByHash для подтверждённых транзакций — не изменятся никогда. Кэшируйте на Redis с TTL бесконечностью или до перезапуска.

Fallback на резервный провайдер. Infura иногда деградирует. Паттерн — fallback transport:

import { fallback, http } from 'viem';

const transport = fallback([
  http(`https://mainnet.infura.io/v3/${INFURA_KEY}`),
  http(`https://eth-mainnet.g.alchemy.com/v2/${ALCHEMY_KEY}`),
]);

WebSocket подписки

Для real-time событий — WebSocket endpoint:

import { createPublicClient, webSocket } from 'viem';

const wsClient = createPublicClient({
  chain: mainnet,
  transport: webSocket(`wss://mainnet.infura.io/ws/v3/${INFURA_KEY}`),
});

// Подписка на новые блоки
const unwatch = wsClient.watchBlockNumber({
  onBlockNumber: (blockNumber) => console.log(blockNumber),
});

// Подписка на события контракта
const unwatch = wsClient.watchContractEvent({
  address: '0x...',
  abi: erc20Abi,
  eventName: 'Transfer',
  onLogs: (logs) => processTransfers(logs),
});

Важно: WebSocket соединение нужно восстанавливать при обрывах. viem делает это автоматически, в ethers.js нужен WebSocketProvider с ручным reconnect-логикой.

Безопасность ключа

API ключ Infura — не секрет в полном смысле. Злоупотребление приведёт к исчерпанию лимитов, а не к компрометации средств. Тем не менее:

  • Не коммитить в git — .env + .gitignore
  • Настроить Allowlist by origin в Infura dashboard для фронтенд-использования
  • Настроить Allowlist by contract address если работаете только с конкретными контрактами
  • Отдельные ключи для dev/staging/production окружений

Для фронтенда: ключ в любом случае виден в браузере. Решение — либо принять этот риск с ограничениями по allowlist, либо проксировать запросы через собственный backend.

Что входит в работу

Настройка занимает 2-8 часов в зависимости от окружения: создание аккаунта и проекта, конфигурация endpoint для нужных сетей, интеграция в существующий код (замена hardcoded RPC или добавление первого провайдера), настройка fallback и кэширования, конфигурация allowlist в дашборде. Для проектов с WebSocket — настройка подписок и reconnect-логики.