Assuming a Linux x64 glibc machine, the commands to download and uncompress the signer binary look like this:
# Enter the signer directory
cd ~/stacks-signer
# Download the signer binary zip
wget https://github.com/stacks-network/stacks-core/releases/download/signer-3.1.0.0.5.0/linux-glibc-x64.zip
# Unzip the signer binary archive
unzip linux-glibc-x64.zip
Create the configuration file
Create the configuration file required to start the signer (be sure to replace <your_token> and <your_private_key> with your auth token and private key values):
# Set environment variables
AUTH_TOKEN=<your_token> # Used for signer-node authentication
PRIVATE_KEY=<your_private_key> # privateKey from Step 1, this is the signer's private key
# Create the signer's configuration file
cat <<EOF> ~/stacks-signer/signer-config.toml
node_host = "127.0.0.1:20443"
endpoint = "127.0.0.1:30000"
network = "mainnet"
db_path = "$HOME/stacks-signer/data/signer.sqlite"
auth_password = "$AUTH_TOKEN"
stacks_private_key = "$PRIVATE_KEY"
metrics_endpoint = "127.0.0.1:9154"
block_proposal_timeout_ms = 180000
tenure_idle_timeout_secs = 120
EOF
# Set environment variables
AUTH_TOKEN=<your_token> # Used for signer-node authentication
PRIVATE_KEY=<your_private_key> # privateKey from Step 1, this is the signer's private key
# Create the signer's configuration file
cat <<EOF> ~/stacks-signer/signer-config.toml
node_host = "127.0.0.1:20443"
endpoint = "127.0.0.1:30000"
network = "testnet"
db_path = "$HOME/stacks-signer/data/signer.sqlite"
auth_password = "$AUTH_TOKEN"
stacks_private_key = "$PRIVATE_KEY"
metrics_endpoint = "127.0.0.1:9154"
block_proposal_timeout_ms = 180000
EOF
Verify the setup
To ensure the signer has been set up correctly, you can run the following commands:
# Verify the signer's version
~/stacks-signer/stacks-signer --version
# Output:
stacks-signer stacks-signer signer-3.1.0.0.5.0 (release/signer-3.1.0.0.5.0:513dbc5, release build, linux [x86_64])
# Verify the config file
~/stacks-signer/stacks-signer check-config -c ~/stacks-signer/signer-config.toml
# Output:
Config:
Stacks node host: 127.0.0.1:20443
Signer endpoint: 127.0.0.1:30000
Stacks address: SP1G... # address from keychain file
Public key: 03a3... # publicKey from keychain file
Network: mainnet # or testnet
Chain ID: 0x1 # or 0x80000000 for testnet
Database path: /home/admin/stacks-signer/data/signer.sqlite
Metrics endpoint: 127.0.0.1:9154
Start the signer
If the outputs of the previous commands are correct, you can proceed and start the signer:
~/stacks-signer/stacks-signer run -c ~/stacks-signer/signer-config.toml
Step 3a - Set up a Bitcoin node (Optional but strongly recommended)
In order to optimize signer health and performance, we highly recommend setting up your own Bitcoin node rather than relying on a third-party node.
Step 3b - Set Up Your Stacks Node
Download the stacks-node binary
Assuming a Linux x64 glibc machine, the commands to download and uncompress the node binary look like this:
# Enter the node directory
cd ~/stacks-node
# Download the node binary zip
wget https://github.com/stacks-network/stacks-core/releases/download/3.1.0.0.5/linux-glibc-x64.zip
# Unzip the node binary archive
unzip linux-glibc-x64.zip
Create the configuration file
Create the configuration file required to start the node (be sure to replace <your_token> with your auth token value):
If you run your own bitcoin node, you'll have to update peer_host and optionally add rpc_port, peer_port, username and password fields under the [burnchain] section of the node's configuration file.
# Set environment variables
AUTH_TOKEN=<your_token> # Used for signer-node authentication, same token as the one set up in the signer configuration
# Create the node's configuration file
cat <<EOF> ~/stacks-node/node-config.toml
[node]
working_dir = "$HOME/stacks-node/data"
rpc_bind = "127.0.0.1:20443"
p2p_bind = "0.0.0.0:20444"
prometheus_bind = "127.0.0.1:9153"
bootstrap_node = "02196f005965cebe6ddc3901b7b1cc1aa7a88f305bb8c5893456b8f9a605923893@seed.mainnet.hiro.so:20444,02539449ad94e6e6392d8c1deb2b4e61f80ae2a18964349bc14336d8b903c46a8c@cet.stacksnodes.org:20444,02ececc8ce79b8adf813f13a0255f8ae58d4357309ba0cedd523d9f1a306fcfb79@sgt.stacksnodes.org:20444,0303144ba518fe7a0fb56a8a7d488f950307a4330f146e1e1458fc63fb33defe96@est.stacksnodes.org:20444"
stacker = true
[burnchain]
chain = "bitcoin"
mode = "mainnet"
peer_host = "bitcoin.mainnet.stacks.org"
[connection_options]
auth_token = "$AUTH_TOKEN"
[[events_observer]]
endpoint = "127.0.0.1:30000"
events_keys = ["stackerdb", "block_proposal", "burn_blocks"]
EOF
# Enter the node's datadir
cd ~/stacks-node/data
# Download the archive
wget https://archive.hiro.so/mainnet/stacks-blockchain/mainnet-stacks-blockchain-latest.tar.gz
# Decompress the archive
tar -xvf mainnet-stacks-blockchain-latest.tar.gz
# Remove the archive
rm mainnet-stacks-blockchain-latest.tar.gz
# Enter the node's datadir
cd ~/stacks-node/data
# Download the archive
wget https://archive.hiro.so/testnet/stacks-blockchain/testnet-stacks-blockchain-latest.tar.gz
# Decompress the archive
tar -xvf testnet-stacks-blockchain-latest.tar.gz
# Remove the archive
rm testnet-stacks-blockchain-latest.tar.gz
Verify the setup
To ensure the node has been set up correctly, you can run the following commands:
# Verify the node's version
~/stacks-node/stacks-node version
# Output:
INFO [1738695915.769633] [testnet/stacks-node/src/main.rs:278] [main] stacks-node 3.1.0.0.5 (release/3.1.0.0.5:513dbc5, release build, linux [x86_64])
stacks-node 3.1.0.0.5 (release/3.1.0.0.5:513dbc5, release build, linux [x86_64])
# Verify the node's config
~/stacks-node/stacks-node check-config --config ~/stacks-node/node-config.toml
# Output:
INFO [1738695915.769633] [testnet/stacks-node/src/main.rs:278] [main] stacks-node 3.1.0.0.5 (release/3.1.0.0.5:513dbc5, release build, linux [x86_64])
INFO [1729788064.913175] [testnet/stacks-node/src/main.rs:318] [main] Loading config at path /home/admin/stacks-node/node-config.toml
INFO [1729788064.969551] [testnet/stacks-node/src/main.rs:331] [main] Loaded config!
Start the node
If the outputs of the previous commands are correct, you can proceed and start the node:
Official binaries are available from the . Each release includes pre-built binaries. Download the for your server’s architecture and decompress it. Inside of that folder is a stacks-signer binary.
We have created guides for running both a and a you can follow.
Official binaries are available from the . Each release includes pre-built binaries. Download the for your server’s architecture and decompress it. Inside of that folder is a stacks-node binary.
For mainnet, we strongly recommended that you run your own bitcoin node (you can follow guides on how to run a or a ) in order to ensure you have no connection issues when downloading bitcoin blocks. A hosted bitcoin node may cause your stacks node to fall behind tip and remain unsynced.
You can in order to quickly sync your node, otherwise it will take a long time to get up-to-date with the other nodes.
In order to stack, you'll need your signer signature. The fields required are further explained in the guide.
The generated JSON can be then copy-pasted directly in the website mentioned in the next step.
The simplest route is to solo stack. You can do that by using . Click on the 'Stack Independently' button and follow the instructions there.
If you would like to learn more about solo stacking or running a pool operator, take a look at the guide.
If you would like to learn more about monitoring your signer and its corresponding node, you can check the guide.