Развертывание ноды Bitcoin

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1306 услуг
Развертывание ноды Bitcoin
Простой
от 1 дня до 3 дней
Часто задаваемые вопросы

Направления блокчейн-разработки

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1308
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1220
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    921
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1148
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    611
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    886

Развёртывание ноды Bitcoin

Собственная нода Bitcoin нужна когда вам нужна независимость от третьих сторон. Публичные API (Blockstream, BlockCypher) — удобны, но: rate limits, downtime, невозможность делать некоторые RPC-вызовы, privacy (все ваши адреса видит провайдер). Для продакшн-системы приёма платежей или кастодиального сервиса — собственная нода обязательна.

Требования к железу

Режим Диск RAM CPU Описание
Pruned 10–15 GB 2 GB 2 cores Хранит только UTXO set + последние N блоков
Full 650+ GB 4 GB 4 cores Полная история транзакций
Full + Electrum (Fulcrum) 1 TB+ 8 GB 4+ cores Для кошельков и адресного поиска

SSD обязателен — HDD делает initial block download в 3–5 раз медленнее из-за случайных чтений при верификации UTXO set.

Установка Bitcoin Core

# Ubuntu 22.04
wget https://bitcoincore.org/bin/bitcoin-core-27.0/bitcoin-27.0-x86_64-linux-gnu.tar.gz
# Всегда верифицируйте подпись!
wget https://bitcoincore.org/bin/bitcoin-core-27.0/SHA256SUMS
wget https://bitcoincore.org/bin/bitcoin-core-27.0/SHA256SUMS.asc

gpg --recv-keys 152812300785C96444D3334D17565732E08E52E
gpg --verify SHA256SUMS.asc SHA256SUMS
sha256sum --check SHA256SUMS --ignore-missing

tar xzf bitcoin-27.0-x86_64-linux-gnu.tar.gz
sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-27.0/bin/*

Конфигурация ~/.bitcoin/bitcoin.conf:

# Основное
server=1
daemon=1
txindex=1          # Индекс всех транзакций (нужен для lookupByTxId)

# RPC
rpcuser=bitcoinrpc
rpcpassword=STRONG_RANDOM_PASSWORD_HERE
rpcbind=127.0.0.1
rpcallowip=127.0.0.1

# ZMQ — для real-time нотификаций
zmqpubrawblock=tcp://127.0.0.1:28332
zmqpubrawtx=tcp://127.0.0.1:28333
zmqpubhashblock=tcp://127.0.0.1:28334

# Производительность
dbcache=1000       # Кеш для initial sync, МБ
maxmempool=500     # Размер мемпула, МБ

# Для pruned mode (уберите txindex):
# prune=10000      # Хранить 10 GB блоков

txindex=1 — критичен если нужно искать транзакции по хешу. Без него — только текущие UTXO. Включение задним числом требует полного reindex (bitcoind -reindex).

Initial Block Download

IBD на mainnet занимает 1–5 дней на SSD в зависимости от железа. Ускорение:

# Запуск с увеличенным кешем для IBD
bitcoind -dbcache=4000 -daemon

# Мониторинг прогресса
bitcoin-cli getblockchaininfo | jq '.verificationprogress'
# 0.0 → 1.0 (100%)

# Сколько осталось
bitcoin-cli getnetworkinfo | jq '.connections'

ZMQ для реального времени

Polling через RPC каждые несколько секунд — примитивно. ZMQ даёт push-нотификации:

import * as zmq from 'zeromq';

const blockSocket = new zmq.Subscriber();
const txSocket = new zmq.Subscriber();

blockSocket.connect('tcp://127.0.0.1:28334');
blockSocket.subscribe('hashblock');

txSocket.connect('tcp://127.0.0.1:28333');
txSocket.subscribe('rawtx');

// Новый блок
for await (const [topic, message] of blockSocket) {
  const blockHash = message.toString('hex');
  console.log('New block:', blockHash);
  await processNewBlock(blockHash);
}

// Новая транзакция в мемпуле
for await (const [topic, rawTx] of txSocket) {
  const tx = bitcoin.Transaction.fromBuffer(rawTx);
  await processPendingTransaction(tx);
}

RPC основные вызовы

import * as Client from 'bitcoin-core';

const client = new Client({
  host: '127.0.0.1',
  port: 8332,
  username: 'bitcoinrpc',
  password: process.env.BITCOIN_RPC_PASSWORD!,
});

// Информация о транзакции
const tx = await client.getRawTransaction(txHash, true);

// Информация о UTXO
const utxo = await client.getTxOut(txHash, outputIndex);

// Создание нового адреса (для HD wallet лучше использовать bitcoinjs-lib)
const address = await client.getNewAddress('payment_label', 'bech32');

// Текущий fee rate (sat/vB для следующего блока)
const feeRate = await client.estimateSmartFee(1);
// feeRate.feerate в BTC/kB, переводим в sat/vB:
const satPerVbyte = Math.ceil(feeRate.feerate * 100_000);

Безопасность

RPC порт (8332) никогда не открывайте наружу. Доступ только через localhost или VPN:

# Firewall: закрыть RPC снаружи
ufw deny 8332
ufw allow 8333  # P2P порт — должен быть открыт для синхронизации

# Systemd unit для автозапуска
cat > /etc/systemd/system/bitcoind.service << EOF
[Unit]
Description=Bitcoin daemon
After=network.target

[Service]
User=bitcoin
ExecStart=/usr/local/bin/bitcoind -conf=/home/bitcoin/.bitcoin/bitcoin.conf
Restart=on-failure
TimeoutStartSec=infinity

[Install]
WantedBy=multi-user.target
EOF

systemctl enable bitcoind
systemctl start bitcoind

Отдельный системный пользователь bitcoin без sudo — стандартная практика. Файлы кошелька в /home/bitcoin/.bitcoin/wallets/ с резервной копией seed.