Інтеграція з 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 — окремий сервіс з історичними даними по газу
  • 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 запитів/день. Core: 3M запитів/день. Лімити по 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 ключа

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-логіки.