Документация API

RPCFlow предоставляет JSON-RPC эндпоинты для взаимодействия с блокчейнами Ethereum и Bitcoin. Все запросы проксируются к архивным нодам с автоматическим кэшированием и rate limiting.

Аутентификация

Для доступа к API используйте заголовок x-api-key или query параметр apikey для WebSocket.

# HTTP запрос (работает без ключа как anonymous)
curl -X POST https://eth.rpcflow.ru/ \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

# С API ключом (увеличенные лимиты)
curl -X POST https://eth.rpcflow.ru/ \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

# WebSocket
wscat -c "wss://eth.rpcflow.ru/ws"

Rate Limiting

Лимиты зависят от тарифа и применяются на уровне API ключа. Информация о лимитах возвращается в заголовках ответа.

Тариф req/сек req/день WebSocket
Anonymous 1 1,000 1
Free 5 10,000 5
Pro 100 1,000,000 50
Enterprise 1,000 100,000,000 500

Заголовки rate limit в ответе:

X-RateLimit-Remaining-Second: 4
X-RateLimit-Remaining-Day: 9998
X-Cache: HIT # или MISS

Кэширование

Иммутабельные данные автоматически кэшируются для снижения латентности. Заголовок X-Cache: HIT указывает на ответ из кэша.

Метод TTL Условие
eth_chainId 24 часа Всегда
eth_getBlockByHash 1 час Всегда (immutable)
eth_getBlockByNumber 1 час Только числовые блоки
eth_getTransactionByHash 1 час Всегда (immutable)
eth_blockNumber 3 сек Короткий TTL

Методы с latest, pending и мутирующие методы (eth_sendRawTransaction) не кэшируются.

Ethereum: Методы

Чтение состояния

eth_blockNumber cached 3s

Возвращает номер последнего блока.

// Запрос
{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}

// Ответ
{"jsonrpc":"2.0","id":1,"result":"0x134a5b8"}
eth_chainId cached 24h

Возвращает ID сети (1 для mainnet).

// Запрос
{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}

// Ответ
{"jsonrpc":"2.0","id":1,"result":"0x1"}
eth_getBalance

Возвращает баланс адреса в wei.

// Запрос
{"jsonrpc":"2.0","method":"eth_getBalance",
 "params":["0x742d35Cc6634C0532925a3b844Bc9e7595f...","latest"],"id":1}
eth_getBlockByNumber cached 1h

Возвращает информацию о блоке по номеру.

// Запрос (полный блок с транзакциями)
{"jsonrpc":"2.0","method":"eth_getBlockByNumber",
 "params":["0x134a5b8", true],"id":1}
eth_getBlockByHash cached 1h

Возвращает информацию о блоке по хэшу.

eth_getTransactionByHash cached 1h

Возвращает информацию о транзакции по хэшу.

eth_getTransactionReceipt cached 1h

Возвращает receipt транзакции (логи, газ, статус).

eth_call cached 5m

Выполняет вызов смарт-контракта без отправки транзакции.

eth_getLogs cached 30m

Возвращает логи событий по фильтру.

Отправка транзакций

eth_sendRawTransaction

Отправляет подписанную транзакцию в сеть.

// Запрос
{"jsonrpc":"2.0","method":"eth_sendRawTransaction",
 "params":["0xf86c..."],"id":1}
eth_estimateGas

Оценивает количество газа для транзакции.

eth_gasPrice cached 10s

Возвращает текущую цену газа.

Ethereum: WebSocket

WebSocket эндпоинт: wss://eth.rpcflow.ru/ws

eth_subscribe

newHeads

Подписка на новые блоки.

// Подписка
{"jsonrpc":"2.0","method":"eth_subscribe",
 "params":["newHeads"],"id":1}

// Уведомление
{"jsonrpc":"2.0","method":"eth_subscription",
 "params":{"subscription":"0x1","result":{"number":"0x134a5b9",...}}}
logs

Подписка на события (логи) смарт-контрактов.

// Подписка на Transfer события USDT
{"jsonrpc":"2.0","method":"eth_subscribe",
 "params":["logs",{"address":"0xdAC17F958D2ee523a2206206994597C13D831ec7"}],
 "id":1}
newPendingTransactions

Подписка на pending транзакции в мемпуле.

Bitcoin: Методы

getblockchaininfo

Информация о состоянии блокчейна.

// Запрос
{"jsonrpc":"1.0","method":"getblockchaininfo","params":[],"id":1}
getblock cached 1h

Возвращает данные блока по хэшу.

// Запрос
{"jsonrpc":"1.0","method":"getblock",
 "params":["000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"],"id":1}
getblockhash cached 1h

Возвращает хэш блока по высоте.

getrawtransaction cached 1h

Возвращает raw данные транзакции.

sendrawtransaction

Отправляет подписанную транзакцию.

Примеры: JavaScript

ethers.js

import { ethers } from 'ethers';

// Работает без API ключа (anonymous лимиты)
const provider = new ethers.JsonRpcProvider(
  'https://eth.rpcflow.ru/'
);

// Использование
const blockNumber = await provider.getBlockNumber();
console.log(`Block: ${blockNumber}`);

const block = await provider.getBlock(blockNumber);
console.log(`Hash: ${block.hash}`);

WebSocket с ethers.js

import { WebSocketProvider } from 'ethers';

const wsProvider = new WebSocketProvider(
  'wss://eth.rpcflow.ru/ws'
);

wsProvider.on('block', (blockNumber) => {
  console.log(`New block: ${blockNumber}`);
});

Примеры: Python

web3.py

from web3 import Web3

# Работает без API ключа
w3 = Web3(Web3.HTTPProvider('https://eth.rpcflow.ru/'))

# Использование
block = w3.eth.block_number
print(f'Current block: {block}')

balance = w3.eth.get_balance('0x742d35Cc6634C0532925a3b844Bc9e7595f...')
print(f'Balance: {w3.from_wei(balance, "ether")} ETH')

Прямой HTTP запрос

import requests

response = requests.post(
    'https://eth.rpcflow.ru/',
    json={
        'jsonrpc': '2.0',
        'method': 'eth_blockNumber',
        'params': [],
        'id': 1
    }
)

result = response.json()
print(f'Block: {int(result["result"], 16)}')