Розгортання ноди Bitcoin
Власна нода Bitcoin потрібна коли вам потрібна незалежність від третіх сторін. Публічні API (Blockstream, BlockCypher) — зручні, але: ліміти, downtime, неможливість робити деякі RPC-вклики, privacy (усі ваші адреси видні провайдеру). Для production-системи приймання платежів або кастодіального сервісу — власна нода обов'язкова.
Вимоги до залізо
| Режим | Диск | 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.







