Интеграция с QuickNode API
Публичные RPC-эндпоинты умирают в production в первые же дни нагрузки: rate limit на Infura бесплатного тарифа — 100k запросов в сутки, Alchemy — 300M compute units в месяц, публичный Ethereum RPC вообще не имеет SLA. QuickNode решает это иначе: dedicated endpoint, предсказуемый throughput, расширенные методы и marketplace надстроек. Интеграция занимает день, но есть нюансы которые стоит знать заранее.
Что даёт QuickNode по сравнению с публичным RPC
Dedicated endpoint — никакого соседства с чужим трафиком. Ваши запросы не конкурируют с тысячами других клиентов на одном IP.
Add-ons — готовые надстройки: NFT API, Token API, DeFi stats, Trace API. Вместо самостоятельной агрегации данных подключаете готовый endpoint.
Streams — push-уведомления о новых блоках, транзакциях, событиях. Вместо polling WebSocket с фильтрами — настраиваете поток прямо в интерфейсе QuickNode.
Multi-chain — один аккаунт, десятки сетей. Один и тот же SDK работает с Ethereum, Solana, Polygon, Arbitrum, Base без изменений кода.
Интеграция: практика
QuickNode выдаёт два эндпоинта на каждую ноду: HTTPS для JSON-RPC и WSS для WebSocket subscriptions. Работают стандартным образом через любой Web3 клиент:
import { createPublicClient, http, webSocket } from 'viem'
import { mainnet } from 'viem/chains'
// HTTP для запросов
const httpClient = createPublicClient({
chain: mainnet,
transport: http('https://your-endpoint.quiknode.pro/YOUR_KEY/'),
})
// WebSocket для subscriptions
const wsClient = createPublicClient({
chain: mainnet,
transport: webSocket('wss://your-endpoint.quiknode.pro/YOUR_KEY/'),
})
// Подписка на новые блоки
const unwatch = wsClient.watchBlocks({
onBlock: (block) => console.log('New block:', block.number),
})
Работа с Add-ons
NFT API, Token API и другие надстройки доступны через те же эндпоинты, но нестандартными JSON-RPC методами с префиксом qn_:
// Получение NFT-коллекции кошелька через QuickNode NFT API
const response = await httpClient.request({
method: 'qn_fetchNFTs' as any,
params: [{
wallet: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045',
page: 1,
perPage: 20,
}],
})
Streams: настройка push-уведомлений
Streams настраиваются в дашборде QuickNode. Выбираете тип потока (новые блоки, pending транзакции, конкретные события), destination (webhook, Kafka, S3) и фильтры. Это альтернатива самостоятельного WebSocket-сервера — меньше кода, но меньше контроля.
Для webhook-destination QuickNode шлёт POST с batch записями. Важно: настройте идемпотентность на своей стороне — при retry QuickNode может прислать дубликаты.
Управление лимитами
QuickNode считает не запросы, а credits. Простой eth_blockNumber — 20 credits, eth_getLogs с широким диапазоном — до 200+ credits. Дорогие методы: debug_traceTransaction (500 credits), trace_block (200+ credits).
Стратегия экономии credits:
- Кэшируйте статичные данные:
decimals(),symbol(), исторические блоки — они не меняются - Используйте
eth_getLogsс узкими фильтрами, не сканируйте весь диапазон - Для polling — WebSocket subscriptions дешевле серии
eth_getBlockByNumber - Батчинг запросов через JSON-RPC batch: несколько вызовов в одном HTTP-запросе
// JSON-RPC batch: один HTTP-запрос вместо трёх
const [block, balance, gasPrice] = await Promise.all([
httpClient.getBlock({ blockNumber: 20000000n }),
httpClient.getBalance({ address: '0x...' }),
httpClient.getGasPrice(),
])
// viem автоматически батчит при транспорте с опцией batch
Мониторинг и failover
QuickNode предоставляет метрики в дашборде, но для production нужен собственный мониторинг:
// Обёртка с метриками и failover
class RpcClient {
private endpoints: string[]
private currentIndex = 0
async request(method: string, params: any[]) {
for (let attempt = 0; attempt < this.endpoints.length; attempt++) {
try {
const result = await this.callEndpoint(
this.endpoints[this.currentIndex],
method, params
)
return result
} catch (err) {
// Ротируем на следующий эндпоинт при ошибке
this.currentIndex = (this.currentIndex + 1) % this.endpoints.length
if (attempt === this.endpoints.length - 1) throw err
}
}
}
}
Для серьёзного production: держите два эндпоинта — QuickNode primary + Alchemy/Infura fallback. Автоматический failover при превышении error rate или latency.







