{% hint style="warning" %} This documentation provides guidelines, best-practices and recommendations for running an sBTC Signer. Review it and adapt it to your infrastructure policy before deploying it. {% endhint %}
Below are the minimum required specs to be able to run a sBTC signer.
- 2 CPU
- 4GB memory
- 50GB storage
Note that these are in addition to the hardware requirements for running a Stacks node and Bitcoin node outlined in the How to Run a Signer doc.
You will need bitcoind
version 25 or higher.
Your Bitcoin node must include these settings for sBTC signer operation:
txindex=1
: Transaction indexing must be enabledserver=1
: RPC server must be enabledzmqpubhashblock=tcp://*:28332
: ZMQ block hash notificationszmqpubrawblock=tcp://*:28332
: ZMQ raw block notifications
The ZeroMQ configuration specified above enables real-time blockchain event notifications from Bitcoin Core to the sBTC signer.
The two required ZMQ endpoints serve distinct purposes:
zmqpubhashblock
: Broadcasts only block hashes for lightweight block detectionzmqpubrawblock
: Broadcasts complete block data for transaction processing
This notification system creates a direct event stream when:
- Bitcoin Core validates a new block
- Block data publishes via ZMQ
- Signer processes relevant sBTC transactions
bitcoind \
-server \
-datadir=${BITCOIN_DATA} \
-rpcbind=0.0.0.0 \
-rpcuser=${BITCOIN_RPC_USERNAME} \
-rpcpassword=${BITCOIN_RPC_PASSWORD} \
-rpcport=${BITCOIN_RPC_PORT} \
-rpcallowip=0.0.0.0/0 \
-rpcallowip=::/0 \
-txindex \
-zmqpubhashblock="tcp://*:${BITCOIN_ZMQ_PORT}" \
-zmqpubrawblock="tcp://*:${BITCOIN_ZMQ_PORT}"
Please ensure your Stacks version is up-to-date (using the latest release).
You will need to add a new event observer that relays information from the sBTC smart contracts to the sBTC signer:
[[events_observer]]
endpoint = "sbtc-signer:8801"
events_keys = [
"SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-registry::print",
]
See here.
The signer configuration file (signer-config.toml
) defines the signer's
operation parameters. The configuration sections include:
[blocklist_client]
endpoint = "http://blocklist-client:3032"
Defines how the signer connects to Bitcoin Core:
[bitcoin]
rpc_endpoints = ["http://user:pass@your-bitcoin-node:8332"]
block_hash_stream_endpoints = ["tcp://localhost:28332"]
Defines the signer's identity and network participation:
[signer]
private_key = "your-private-key" # 32 or 33-byte hex format
network = "mainnet"
deployer = "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4"
Controls how the signer communicates with other network participants:
[signer.p2p]
listen_on = ["tcp://0.0.0.0:4122"]
The signer operates on port 4122 by default and supports both TCP and QUIC protocols for peer communication. The signer will attempt QUIC connections first for improved performance, automatically falling back to TCP if QUIC is unavailable or blocked on the network.
See here.
See here for a Docker Compose including all the required components.
Monitoring Details TBD
Troubleshooting Guide TBD