Интеграция с Ankr API
Большинство Web3-проектов начинают с публичных RPC-эндпоинтов — и быстро упираются в rate limits, нестабильность и отсутствие архивных данных. Ankr решает несколько задач сразу: это мультичейн RPC-провайдер с поддержкой 50+ сетей, архивными нодами и набором специализированных API поверх сырых RPC-вызовов.
Что конкретно предоставляет Ankr
Premium RPC — стандартные JSON-RPC эндпоинты для EVM и не-EVM сетей. По сравнению с публичными: гарантированные rate limits, SLA uptime, поддержка архивных методов (eth_getBalance на любом историческом блоке).
Ankr Advanced API — высокоуровневые методы, которых нет в стандартном JSON-RPC:
-
ankr_getAccountBalance— мультичейн баланс аккаунта по всем токенам сразу -
ankr_getNFTsByOwner— все NFT владельца по всем сетям -
ankr_getTransactionsByAddress— история транзакций с пагинацией -
ankr_getTokenHolders— держатели токена
Без этих методов тот же результат требует десятков RPC-вызовов и собственного индексирования.
Практика интеграции
Ankr совместим со стандартными Web3-библиотеками — достаточно заменить RPC URL:
import { createPublicClient, http } from "viem";
import { mainnet, polygon, bsc } from "viem/chains";
const ankrKey = process.env.ANKR_API_KEY;
const ethClient = createPublicClient({
chain: mainnet,
transport: http(`https://rpc.ankr.com/eth/${ankrKey}`),
});
// Advanced API через отдельный SDK
import AnkrProvider from "@ankr.com/ankr.js";
const ankr = new AnkrProvider(`https://rpc.ankr.com/multichain/${ankrKey}`);
// Получить все токен-балансы адреса по всем сетям одним запросом
const { assets } = await ankr.getAccountBalance({
walletAddress: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
blockchain: ["eth", "polygon", "bsc", "arbitrum"],
});
Обработка ошибок и retry
Ankr возвращает стандартные JSON-RPC ошибки плюс специфические коды. Обязательный паттерн:
async function withRetry<T>(
fn: () => Promise<T>,
maxAttempts = 3,
baseDelayMs = 500
): Promise<T> {
for (let attempt = 0; attempt < maxAttempts; attempt++) {
try {
return await fn();
} catch (err: any) {
const isRateLimit = err?.code === 429 || err?.message?.includes("rate limit");
const isRetryable = isRateLimit || err?.code === -32603; // internal error
if (!isRetryable || attempt === maxAttempts - 1) throw err;
await delay(baseDelayMs * 2 ** attempt); // exponential backoff
}
}
throw new Error("unreachable");
}
Мультичейн балансы в продакшене
Advanced API особенно полезен для portfolio-трекеров и кошельков. Без него "показать все токены пользователя" требует: итерировать по всем сетям, по всем потенциально релевантным токенам, делать balanceOf вызовы — сотни запросов. С ankr_getAccountBalance — один запрос, ответ включает цены в USD.
Ограничения, которые нужно знать
Rate limits зависят от плана. Free tier: 30 req/s. Premium: 1500+ req/s. При высокой нагрузке — комбинировать Ankr с собственными нодами или другими провайдерами.
Advanced API покрывает не все сети. Стандартный RPC есть для 50+ сетей, Advanced API — для ~20 основных. Перед проектированием — проверить актуальный список в документации.
Данные Advanced API — не real-time. Индексер Ankr обновляется с небольшой задержкой (~30–60 сек). Для критичных финансовых данных по последнему блоку — использовать прямой RPC, не Advanced API.
Когда выбирать Ankr
Ankr оправдан если: нужен быстрый старт с мультичейн поддержкой, нужны архивные данные без своей ноды, нужны высокоуровневые методы (балансы, NFT, история транзакций) без написания собственного индексера. При нагрузке > 1M запросов/день — считать экономику: собственная нода окупается быстрее, чем кажется.







