Ethereum нода для получения блоков и транзакций: обзор решений
Если вам нужно оперативно получать новые блоки в сети Ethereum и отслеживать транзакции с суммами и адресами, но полная синхронизация full node занимает слишком много времени, существует несколько альтернатив. В этой статье разберём, какие типы нод и сервисов подойдут для вашей задачи, а также как избежать длительного ожидания.
Почему полная синхронизация full node медленная?
Full node загружает весь блокчейн Ethereum (более 1 ТБ данных) и проверяет каждую транзакцию с момента запуска сети. Это обеспечивает максимальную безопасность, но требует дней или недель на синхронизацию, особенно на HDD. Для разработчиков, которым нужны только свежие блоки, такой подход избыточен.
Какие типы нод подходят для быстрого получения блоков?
Вот основные варианты, которые позволяют получать блоки и транзакции без полной синхронизации:
1. Легкая нода (Light node)
Light node скачивает только заголовки блоков и запрашивает данные по необходимости. Она синхронизируется за минуты, но требует подключения к полным узлам. Вы сможете получать новые блоки, адреса отправителей и получателей, а также суммы транзакций. Примеры: Geth в режиме --syncmode light или Nethermind.
2. Snap-синхронизация (Geth)
Если вы готовы потратить несколько часов (но не недели), используйте Geth с флагом --syncmode snap. Он загружает только последнее состояние сети, а не всю историю. Это быстрее full node, но даёт доступ ко всем данным с момента запуска. Для получения блоков в реальном времени - отличный компромисс.
3. Удалённые RPC-провайдеры
Самый быстрый способ - использовать готовые API, такие как Infura, Alchemy или QuickNode. Они предоставляют доступ к полным и архивным узлам без синхронизации на вашей стороне. Вы можете подписаться на WebSocket-соединение и получать новые блоки и транзакции в реальном времени. Минус - зависимость от стороннего сервиса и возможные лимиты запросов.
4. Архивная нода (Archive node)
Если вам нужны исторические данные (например, балансы на определённый блок), архивная нода хранит все состояния. Но синхронизация ещё дольше, чем у full node. Для вашей задачи - не рекомендуется.
Как получить транзакции с суммами и адресами?
Независимо от выбранного типа ноды, для извлечения адресов и сумм используйте JSON-RPC методы:
- eth_getBlockByNumber - возвращает блок с полным списком транзакций;
- eth_getTransactionReceipt - для получения статуса, суммы и логов;
- eth_subscribe (newPendingTransactions) - для подписки на новые мемпульные транзакции.
Пример кода на JavaScript с WebSocket и Infura:
const Web3 = require('web3');
const web3 = new Web3('wss://mainnet.infura.io/ws/v3/YOUR_PROJECT_ID');
web3.eth.subscribe('newBlockHeaders', async (error, blockHeader) => {
if (!error) {
const block = await web3.eth.getBlock(blockHeader.number, true);
block.transactions.forEach(tx => {
console.log(`From: ${tx.from}, To: ${tx.to}, Value: ${tx.value}`);
});
}
});Сравнение вариантов: скорость, стоимость, безопасность
| Вариант | Время до первого блока | Стоимость | Безопасность |
|---|---|---|---|
| Light node | 1-5 минут | Бесплатно (свой сервер) | Средняя (доверие к полным узлам) |
| Snap sync (Geth) | 2-6 часов | Бесплатно (свой сервер) | Высокая |
| Infura / Alchemy | Мгновенно | Бесплатный лимит (до 100k запросов/день) | Средняя (доверие провайдеру) |
Рекомендация
Для вашей задачи (получение новых блоков и транзакций с суммами и адресами) оптимальный выбор - легкая нода (light node) или RPC-провайдер. Light node даёт полный контроль, а провайдер - максимальную скорость. Если нужен баланс между скоростью и независимостью, используйте Geth с snap-синхронизацией.