🛠️
Stacks Documentation
  • Start Here
  • 🧠Concepts
    • Stacks 101
      • What Is Stacks?
      • Bitcoin Connection
      • Proof of Transfer
      • Stacks Among Other Layers
      • Financial Incentive and Security Budget
    • Network Fundamentals
      • Network Basics
      • Mainnet and Testnets
      • Accounts
      • Authentication
      • Bitcoin Name System
      • SIPs
      • Technical Specifications
    • Block Production
      • Mining
      • Signing
      • Bitcoin Finality
      • Bitcoin Reorgs
      • Stacking
    • Transactions
      • How Transactions Work
      • Post Conditions
    • Clarity
      • Overview
      • Decidability
    • sBTC
      • Core Features
      • sBTC Operations
        • Deposit
        • Withdrawal
        • Deposit vs Withdrawal Times
      • Emily API
      • Peg Wallet UTXO
      • Clarity Contracts
        • sBTC Registry
        • sBTC Token
        • sBTC Deposit
        • sBTC Withdrawal
      • Auxiliary Features
        • Transaction Fee Sponsorship
        • Signer Wallet Rotation
      • Walkthroughs
        • Signer Process Walkthrough
        • sBTC Transaction Walkthrough
      • sBTC FAQ
    • Gaia
      • Configuration
      • Deploy Gaia Hub
      • Amazon EC2
      • Linux
      • Mac OS
  • 🛠️Guides & Tutorials
    • Developer Quickstart
    • Clarity Crash Course
    • Build a Borrowing & Lending Protocol
    • Bitcoin Integration
      • Sending Bitcoin with Leather Wallet
      • Verifying a Bitcoin Transaction
      • Parsing a Bitcoin Transaction
    • Create Tokens
      • Creating a NFT
      • Creating a Fungible Token
    • Build a Frontend
      • Post Conditions with Stacks.js
      • Authentication with Stacks.js
      • Sending Transactions with Stacks.js
    • Testing Smart Contracts
      • Fuzz Testing
    • Run a Node
      • Run a Node with Docker
      • Run a Node with Digital Ocean
      • Run a Node with a Hosted Provider
      • Run a Node with Quicknode
      • Run a Bitcoin Node
      • Run a Pruned Bitcoin Node
    • Run a Miner
      • Miner Prerequisites
      • Miner Costs and Fees
      • Mine Testnet Stacks Tokens
      • Mine Mainnet Stacks Tokens
      • Verify Miner
    • Run a Signer
      • Signer Quickstart
      • How to Read Signer Logs
      • How to Monitor a Signer
      • Best practices for running a Signer
      • OpSec Best Practices
    • sBTC
      • How to Run an sBTC Signer
      • Best practices for running an sBTC Signer
      • How to Use the sBTC Bridge
      • Earn sBTC Rewards
    • Stack STX
      • Solo Stack
      • Operate a Pool
      • Stack with a Pool
      • Increase Stacked Position
      • Stop Stacking
    • Oracles
    • Community Tutorials
  • 📚Reference
    • API
    • Clarity Types
    • Clarity Functions
    • Clarity Keywords
    • Stacks Node Configuration
    • Signer Configuration
    • Stacks Tooling
  • 🏗️Example Contracts
    • Audited Starter Contracts
    • Stacking
    • BNS
    • Multi Send
  • 🧡Press & Top Links
    • 🔶2024
      • 🔸January 2024
      • 🔸February 2024
      • 🔸March 2024
      • 🔸April 2024
      • 🔸May 2024
      • 🔸June 2024
      • 🔸July 2024
      • 🔸August 2024
      • 🔸September 2024
      • 🔸October 2024
      • 🔸November 2024
      • 🔸December 2024
    • 🔶2025
      • 🔸January 2025
      • 🔸February 2025
      • 🔸March 2025
      • 🔸April 2025
      • 🔸May 2025
  • 🧡Bitcoin Theses and Reports
    • 🟠Bitcoin Theses
    • 📙Bitcoin Reports
  • Contribute
Powered by GitBook
On this page
  • How to Use This Guide
  • Background and High-Level Process
  • Knowledge Prerequisites
  • Minimum System Requirements
  • Preflight Setup
  • Create a Configuration File
  • Running the Signer
  • Set Up Your Bitcoin Node
  • Set Up Your Stacks Node
  • Setup Your Stacks Accounts

Was this helpful?

  1. Guides & Tutorials

Run a Signer

PreviousVerify MinerNextSigner Quickstart

Last updated 1 month ago

Was this helpful?

How to Use This Guide

If you are not familiar with the concept of signing and stacking, and how they work together, be sure to check out the .

This guide is a step-by-step walkthrough for actually setting up and running a signer. If you need to troubleshoot your signer setup, you can check out the Signer Troubleshooting section.

If you need to Stack your STX, or have questions about how that process works, check out the Stack STX guide.

Background and High-Level Process

In order to run a signer, you'll need to run a signer and a Stacks node side-by-side. Specifically, you'll want to run a follower node. Instructions for doing this are listed below in the "Running Your Stacks Node" section. The signer will monitor for events coming from the stacks node and is in charge of using the generated account (next section) to sign incoming Stacks blocks sent from the Stacks node.

This doc will provide instructions on how to set up both using either Docker or using the release binaries available in the repository.

It will also walk through how to set up the config files to get the signer and Stacks node communicating correctly.

Knowledge Prerequisites

  • Docker and basic knowledge of pulling and running images

  • Basic knowledge of

  • Basic knowledge of and the

Signer Checklist

Detailed steps for each of these are laid out below, but this checklist is being included as a way to quickly reference if you have taken all the appropriate actions to run a signer.

Pre-Launch Setup

Preflight Setup

Configuration Setup

Running the Signer

Verify Signer Operation

Setting Up the Stacks Node

Verify Stacks Node Operation

Setup Stacks Accounts

Minimum System Requirements

These are the minimum required specs to be able to run a node and signer, but it is recommended to have more than the minimum for optimal performance.

Signer, Stacks node and Bitcoin node

  • 4 vcpu

  • 8GB memory if running only a Stacks node and signer

  • 16GB memory if running Stacks + Bitcoin node + signer

  • 1.5+TB storage (1TB for Bitcoin node, 500GB for Stacks node, and 50 GB for signer)

Preflight Setup

Once you follow the instructions linked above, be sure to save the information in a secure location, you'll need it in a future step.

What should the networking setup look like?

Signers are intended to work with a local node. The node<->signer connection is not run over SSL, which means you can be exposed to a man-in-the-middle attack if your signer and node are hosted on separate machines. Be sure you are aware of your networking setup, especially making sure your signer isn't allowing requests from the public internet. We recommend setting up your infrastructure to either have the signer and node running locally on the same machine or use only internal networking between them.

Create a Configuration File

Running the Signer

Running the Signer with Docker

When running the Docker container, you’ll need to ensure a few things:

  • The port configured as the endpoint (in the above linked example, “30000”) must be exposed to your Stacks node. Note that this endpoint should not be public, but must be exposed to your Stacks node.

  • You’ll need a volume with at least a few GB of available storage that contains the folder your db_path is in. In the above example, that would be /var.

  • You’ll need to mount your signer-config.toml file as a volume, noted below with the first -v flag.

An example command for running the Docker image with docker run is shown below.

Be sure to replace the STX_SIGNER_PATH with the correct path to your config file and where you want to install and run the signer. In this example it will be done in the current directory.

IMG="blockstack/stacks-signer"
VER="3.1.0.0.5.0"
STX_SIGNER_PATH="./"
STX_SIGNER_DATA="$STX_SIGNER_PATH/data"
STX_SIGNER_CONFIG="$STX_SIGNER_PATH/signer-config.toml"

docker run -d \
    -v $STX_SIGNER_CONFIG:/config.toml \
    -v $STX_SIGNER_DATA:/var/stacks \
    -p 30000:30000 \
    -e RUST_BACKTRACE=full \
    -e BLOCKSTACK_DEBUG=0 \
    --name stacks-signer \
    $IMG:$VER \
    stacks-signer run \
    --config /config.toml

If you get an error saying that the manifest cannot be found or about the requested image platform not matching the host platform, you are probably running on system architecture other than x64 arch. Since you are using a PR release you'll need to specify your platform with the --platform flag.

For example, if you are running on M1 Mac, you would add --platform=linux/amd64 to the above command.

Or, with a custom Dockerfile:

FROM blockstack/stacks-signer:3.1.0.0.5.0
COPY signer-config.toml /config.toml
EXPOSE 30000
CMD ["stacks-signer", "run", "--config", "/config.toml"]

Running the Signer as a Binary

If you do not want to use Docker, you can alternatively run your stacks node as a binary.

You can run the signer with the following command (be sure to replace ../signer-config.toml with the actual path of your config file).

stacks-signer run --config ../signer-config.toml

Verify the Signer is Running

To make sure your signer is running successfully, run docker ps to list your running containers.

You should see something like this

Now check the logs of that container by running:

docker logs 877d478dfe7f

Be sure to replace the container ID at the end with your actual container ID.

You should see a message that says Signer spawned successfully. Waiting for messages to process....

You may also see a message indicating that your signer is not registered, like this:

WARN [1712003997.160121] [stacks-signer/src/runloop.rs:247] [signer_runloop] Signer is not registered for reward cycle 556. Waiting for confirmed registration...

Even after you Stack, you may still see a message that says:

Signer is not registered for the current reward cycle (557) or next reward cycle (558). Waiting for confirmed registration...

This is normal and means that you have stacked, but have not yet reach the prepare phase for your chosen reward cycle. Assuming you have met the stacking minimum, your signer will be picked up and registered during this prepare phase.

Set Up Your Bitcoin Node

While optional, we strongly recommend running your own Bitcoin node in order to optimize signer health and performance.

Set Up Your Stacks Node

Once your signer is running, the next step is to set up and run a Stacks node. It’s important to have the signer already running, because the node will not run unless it is able to send events to the signer.

Stacks Node Configuration

The important aspects that you’ll need to change are:

  • working_dir: a directory path where the node will persist data

  • auth_token: an authentication token that your signer uses to authenticate certain requests to your node. This must match the value you used as auth_password in the signer’s configuration.

  • events_observer.endpoint: This is the host (IP address and port) where your signer is configured to listen for events. An example string would be ”127.0.0.1:30000” or ”stacks-signer.local:30000”

Start with an archive

It will be much faster to start with an archive of the chain state rather than syncing from genesis.

You’ll want to download this on the same machine that will run the Stacks node. One way to do this is:

curl -# https://archive.hiro.so/mainnet/stacks-blockchain/mainnet-stacks-blockchain-latest.tar.gz -o stacks-snapshot.tar.gz
tar -zxvf stacks-snapshot.tar.gz

This will decompress the snapshot and create a mainnet folder in the same place that you downloaded the archive.

For the Stacks node to use this archive, you must specify working_dir in your config file to be the place where you can find the mainnet folder.

For example:

  • The snapshot is available at /Users/blah/mainnet

  • You will set working_dir to equal ”/Users/blah”

    • Note that the string does not include the mainnet part

Run a Stacks Node with Docker

  • The port configured for p2p_bind must be exposed to the internet

  • The port configured for rpc_bind must be accessible by your signer

  • working_dir needs to be on a volume with 500GB-1TB of available storage

  • You’ll need to include your node-config.toml file

An example for running the node’s Docker image with docker run is below. Be sure to run this from the same directory as your node-config.toml file or change the STX_NODE_CONFIG option.

IMG="blockstack/stacks-core"
VER="3.1.0.0.5"
STX_NODE_CONFIG="./node-config.toml"

docker run -d \
    -v $STX_NODE_CONFIG:/config.toml \
    -v /var/stacks \
    -p 20443:20443 \
    -p 20444:20444 \
    -e RUST_BACKTRACE=full \
    --name stacks-node \
    $IMG:$VER \
    stacks-node start \
    --config /config.toml

Or, using a custom Dockerfile:

FROM blockstack/stacks-core:3.1.0.0.5
COPY node-config.toml /config.toml
EXPOSE 20444
EXPOSE 20443
CMD ["stacks-node", "start", "--config", "/config.toml"]

If when running your node you get a connection refused error that looks like this, you may need to point your event_observer's endpoint field to the Docker signer container.

First, be sure that you have the proper entry point specified in your node-config.toml file.

If you are inside a Docker container with default bridging mode, then localhost is not available, and you'll need to point to the Docker host.

Run a Stacks Node with a Binary

If you do not want to use Docker, you can alternatively run your stacks node as a binary.

You can start the binary with the following command (be sure to replace node-config.toml with the actual path of your config file):

./stacks-node start --config node-config.toml

Verify Stacks Node is Running

Once you’ve started the Stacks node, you’ll see logs that start like this:

Mar  6 19:35:08.212848 INFO stacks-node 0.1.0
Mar  6 19:35:08.213084 INFO Loading config at path ./Stacks-config.toml
Mar  6 19:35:08.216674 INFO Registering event observer at: localhost:30000
Mar  6 19:35:08.221603 INFO Migrating sortition DB to the latest schema version
Mar  6 19:35:08.224082 INFO Migrating chainstate DB to the latest schema version
Mar  6 19:35:08.227404 INFO Start syncing Bitcoin headers, feel free to grab a cup of coffee, this can take a while

It’s important to ensure that you see the log message Registering event observer at XXX with your signer’s endpoint included. Once Bitcoin headers have been synced, you may also be able to send a GET request to /v2/info on your Stacks node’s RPC endpoint (port 20443 by default).

Setup Your Stacks Accounts

As a signer you’ll need to fund and manage two Stacks accounts:

  1. A “pool operator” wallet, which commits delegated STX to your signer

  2. Your signer’s wallet

Setup Your Pool Operator Wallet

Before you get your signer set up, you'll need to . The stacks-cli provides a mechanism for quickly generating a new account keychain via a simple CLI interface. The linked guide will show you how to create one of those accounts on testnet.

Create a new file called signer-config.toml. In that file, put the contents from the example signer config file from the page. Each field is described on that page.

There are two options for running the signer: Docker and running with a binary. The recommended option is to use Docker. If you want to run as a binary, you will need to either build stacks-core from source, or download a signer release binary from the . Instructions for how to do this are contained below in the relevant section.

You can run the signer as a Docker container using the image.

Official binaries are available from the . Each release includes pre-built binaries. Download the ZIP file for your server’s architecture and decompress it. Inside of that folder is a stacks-signer binary.

This means your signer is running successfully. Your next step is to begin stacking in order to get your signer registered. First, if you haven't yet, get your Stacks node up and running following the instructions below and then proceed to to get started stacking.

We have created guides for running both a and a you can follow.

Create a file called node-config.toml. On the page you'll find the full configuration file contents you'll need to add to this file.

Archives can be found at . For the Stacks node mainnet, the latest snapshot can be found at . You can also .

You can run the Stacks node as a Docker container using the blockstack/stacks-core image, currently on . When running the Docker container, you’ll need to ensure a few things:

Official binaries are available from the . Each release includes pre-built binaries. Download the ZIP file for your server’s architecture and decompress it. Inside of that folder is a stacks-node binary.

You may see a lot of messages while the node is syncing with Bitcoin blocks. You can check the section if any of these concern you, but in all likelihood you can ignore any messages until Bitcoin blocks are synced.

For more information on the relationship between stacking and signing and how stacking works, check out the guide.

For testing, make sure that you are using testnet, and not mainnet STX. You can change network settings within your wallet, and testnet STX can be .

You can set up your pool operator wallet using any Stacks wallet, such as or . You may choose to generate a new account or use an existing one. If you prefer to use a hardware wallet, Leather has support for the Ledger hardware wallet.

Once your wallet has been created, you’ll need to fund it with enough STX to cover transaction fees. For testnet, you can use a .

Finally, share this wallet’s STX address with the parties that will be delegating STX to you. For improved user experience, you might want to use the helper contract that allows to specify a btc address for stackers () and to add your pool to .

🛠️
generate a new private key
Sample Configuration Files
stacks core releases page
blockstack/stacks-signer:3.1.0.0.5.0
Stacks Core releases page on Github
How to Stack
full Bitcoin node
pruned Bitcoin node
Sample Configuration Files
https://archive.hiro.so
https://archive.hiro.so/mainnet/stacks-blockchain/mainnet-stacks-blockchain-latest.tar.gz
browse all mainnet snapshots
version 3.1.0.0.5
Stacks Core releases page on Github
How to Read the Signer Logs
Stack STX
requested from a faucet
Leather
Xverse
faucet exposed by the Stacks Explorer
pox4-pools
earn.leather.io
Stackers and Signing concept guide
stacks core
Stacks accounts
stacking
Stacking flow
minimum system requirements