Документация 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: Методы
Чтение состояния
Возвращает номер последнего блока.
// Запрос
{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}
// Ответ
{"jsonrpc":"2.0","id":1,"result":"0x134a5b8"}
Возвращает ID сети (1 для mainnet).
// Запрос
{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}
// Ответ
{"jsonrpc":"2.0","id":1,"result":"0x1"}
Возвращает баланс адреса в wei.
// Запрос
{"jsonrpc":"2.0","method":"eth_getBalance",
"params":["0x742d35Cc6634C0532925a3b844Bc9e7595f...","latest"],"id":1}
Возвращает информацию о блоке по номеру.
// Запрос (полный блок с транзакциями)
{"jsonrpc":"2.0","method":"eth_getBlockByNumber",
"params":["0x134a5b8", true],"id":1}
Возвращает информацию о блоке по хэшу.
Возвращает информацию о транзакции по хэшу.
Возвращает receipt транзакции (логи, газ, статус).
Выполняет вызов смарт-контракта без отправки транзакции.
Возвращает логи событий по фильтру.
Отправка транзакций
Отправляет подписанную транзакцию в сеть.
// Запрос
{"jsonrpc":"2.0","method":"eth_sendRawTransaction",
"params":["0xf86c..."],"id":1}
Оценивает количество газа для транзакции.
Возвращает текущую цену газа.
Ethereum: WebSocket
WebSocket эндпоинт: wss://eth.rpcflow.ru/ws
eth_subscribe
Подписка на новые блоки.
// Подписка
{"jsonrpc":"2.0","method":"eth_subscribe",
"params":["newHeads"],"id":1}
// Уведомление
{"jsonrpc":"2.0","method":"eth_subscription",
"params":{"subscription":"0x1","result":{"number":"0x134a5b9",...}}}
Подписка на события (логи) смарт-контрактов.
// Подписка на Transfer события USDT
{"jsonrpc":"2.0","method":"eth_subscribe",
"params":["logs",{"address":"0xdAC17F958D2ee523a2206206994597C13D831ec7"}],
"id":1}
Подписка на pending транзакции в мемпуле.
Bitcoin: Методы
Информация о состоянии блокчейна.
// Запрос
{"jsonrpc":"1.0","method":"getblockchaininfo","params":[],"id":1}
Возвращает данные блока по хэшу.
// Запрос
{"jsonrpc":"1.0","method":"getblock",
"params":["000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"],"id":1}
Возвращает хэш блока по высоте.
Возвращает raw данные транзакции.
Отправляет подписанную транзакцию.
Примеры: 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)}')