bal-server
Installation
Docker
Build
Run
Docker environment variables
| Variable |
Description |
Default |
BAL_PUSHER_NETWORK |
Network to run pusher on (bitcoin, testnet, testnet4, signet, regtest). |
bitcoin |
BAL_PUSHER_REGTEST_ZMQ_HASHBLOCK |
ZMQ endpoint for regtest blocks. |
tcp://127.0.0.1:21332 |
BAL_PUSHER_REGTEST_COOKIE_FILE |
Absolute path to Bitcoin Core cookie file inside the container. |
- |
Note: The container runs as a non-root bal user (uid 1000) with tini as PID 1.
The /var/bal volume stores the database. Mount Bitcoin Core's cookie file as read-only.
When using --network host, ensure only 127.0.0.1 is used for internal services.
Configuration (bal-server)
The bal-server application can be configured using environment variables.
General
| Variable |
Description |
Default |
BAL_SERVER_DB_FILE |
Path to the SQLite3 database file. |
bal.db |
BAL_SERVER_BIND_ADDRESS |
Address to listen on. Never bind to 0.0.0.0 in production without a reverse proxy. |
127.0.0.1 |
BAL_SERVER_BIND_PORT |
Port to listen on. |
9137 |
BAL_SERVER_INFO |
Server info string returned by the / endpoint. |
- |
BAL_SERVER_PUB_KEY_PATH |
Ed25519 public key for signature verification. |
public_key.pem |
BAL_SERVER_URL |
Public URL of this server (used for stats reporting). |
- |
SSL_KEY_PATH |
Ed25519 private key for signing stats reports. |
private_key.pem |
RUST_LOG |
Log level (error, warn, info, debug, trace). |
info |
Per-network addresses and fees
| Variable |
Description |
Default |
BAL_SERVER_BITCOIN_ADDRESS |
xpub or address for mainnet. |
- |
BAL_SERVER_BITCOIN_FIXED_FEE |
Fixed fee (satoshis) for mainnet. |
50000 |
BAL_SERVER_REGTEST_ADDRESS |
xpub or address for regtest. |
- |
BAL_SERVER_REGTEST_FIXED_FEE |
Fixed fee (satoshis) for regtest. |
50000 |
BAL_SERVER_SIGNET_ADDRESS |
xpub or address for signet. |
- |
BAL_SERVER_SIGNET_FIXED_FEE |
Fixed fee (satoshis) for signet. |
50000 |
BAL_SERVER_TESTNET_ADDRESS |
xpub or address for testnet. |
- |
BAL_SERVER_TESTNET_FIXED_FEE |
Fixed fee (satoshis) for testnet. |
50000 |
BAL_SERVER_TESTNET4_ADDRESS |
xpub or address for testnet4. |
- |
BAL_SERVER_TESTNET4_FIXED_FEE |
Fixed fee (satoshis) for testnet4. |
50000 |
DoS protection (Actix Web)
| Variable |
Description |
Default |
BAL_SERVER_ACTIX_MAX_BODY_SIZE |
Maximum request body size in bytes. |
1048576 (1 MB) |
BAL_SERVER_ACTIX_TIMEOUT_SECS |
Request timeout in seconds. |
5 |
BAL_SERVER_ACTIX_PUSHTXS_PER_SEC |
Rate limit: push txs requests per second. |
1 |
BAL_SERVER_ACTIX_PUSHTXS_BURST |
Rate limit: push txs burst size. |
3 |
BAL_SERVER_ACTIX_SEARCHTX_PER_SEC |
Rate limit: search tx requests per second. |
5 |
BAL_SERVER_ACTIX_SEARCHTX_BURST |
Rate limit: search tx burst size. |
10 |
BAL_SERVER_ACTIX_INFO_PER_SEC |
Rate limit: info requests per second. |
20 |
BAL_SERVER_ACTIX_INFO_BURST |
Rate limit: info burst size. |
30 |
BAL_SERVER_ACTIX_DEFAULT_PER_SEC |
Rate limit: default requests per second. |
50 |
BAL_SERVER_ACTIX_DEFAULT_BURST |
Rate limit: default burst size. |
100 |
BAL_SERVER_ACTIX_WORKERS |
Number of Actix worker threads. |
4 |
BAL_SERVER_ACTIX_MAX_CONNECTIONS |
Maximum concurrent connections. |
100 |
bal-pusher
bal-pusher monitors Bitcoin blocks via ZMQ and pushes time-locked transactions from the database to the Bitcoin network when their locktime exceeds the median time past (MTP).
Prerequisites
- Bitcoin Core with ZMQ support enabled. Add to
bitcoin.conf:
- Rust and Cargo: Rust Installation
- Libraries:
libssl-dev, libsodium-dev, libzmq5-dev, libsqlite3-dev
Running
If no network is specified, defaults to bitcoin.
Configuration (bal-pusher)
General
| Variable |
Description |
Default |
BAL_PUSHER_DB_FILE |
Path to the SQLite3 database file. |
bal.db |
BAL_PUSHER_SEND_STATS |
Send stats to welist server. |
false |
BAL_SERVER_URL |
URL of bal-server (for stats reporting). |
- |
SSL_KEY_PATH |
Ed25519 private key for signing stats reports. |
private_key.pem |
WELIST_SERVER_URL |
Welist server URL. |
https://welist.bitcoin-after.life |
Per-network configuration
Each network (bitcoin, regtest, testnet, testnet4, signet) supports the following variables.
Replace {NETWORK} with the uppercase network name (e.g., REGTEST, BITCOIN).
| Variable |
Description |
Default |
BAL_PUSHER_{NETWORK}_ZMQ_HASHBLOCK |
ZMQ endpoint for block notifications. |
tcp://127.0.0.1:28332 (mainnet) |
BAL_PUSHER_{NETWORK}_COOKIE_FILE |
Absolute path to Bitcoin Core cookie file. |
$HOME/.bitcoin/{dir}/.cookie |
BAL_PUSHER_{NETWORK}_RPC_USER |
Bitcoin Core RPC username (alternative to cookie auth). |
- |
BAL_PUSHER_{NETWORK}_RPC_PASSWORD |
Bitcoin Core RPC password. |
- |
BAL_PUSHER_{NETWORK}_HOST |
Bitcoin Core RPC host. |
http://127.0.0.1 |
BAL_PUSHER_{NETWORK}_PORT |
Bitcoin Core RPC port. |
8332 (mainnet) |
BAL_PUSHER_{NETWORK}_DIR_PATH |
Bitcoin Core data directory subfolder. |
`` (mainnet) |
Default ZMQ ports per network:
| Network |
ZMQ Port |
RPC Port |
bitcoin |
28332 |
8332 |
regtest |
21332 |
18443 |
testnet |
23332 |
18332 |
testnet4 |
22332 |
48332 |
signet |
24332 |
38332 |