Skip to content

Stable Full Node ​

Stable is the first Stablechain β€” a dedicated payments Layer 1 where stablecoins like USDT are used natively for gas and settlement.

Chaind IDLast Version Tag
stabletestnet_2201-1v1.1.2
ServiceURL
RPChttps://stable-testnet-rpc.linknode.org
JSON-RPChttps://stable-testnet-evmrpc.linknode.org
APIhttps://stable-testnet-api.linknode.org
gRPChttps://stable-testnet-grpc.linknode.org
Resourcehttps://vault.astrostake.xyz/testnet/stable
Dashboardhttps://astrostake.xyz/networks/stable-testnet

Requirements ​

  • CPU: 8 Cores
  • Memory: 16GB RAM
  • Disk: 1 TB of storage (NVME)
  • Bandwidth: 100 Mbps (Download / Upload)

πŸ’‘ Need a reliable VPS to run this node? ​

We recommend Netcup β€” high performance and affordable.
Use this voucher to get a discount:

36nc1753448678036nc1754247115136nc17542471150

Get €5 Discount

Just a heads up: This is an affiliate link (no extra cost to you). Any support we get through it goes straight back into building free public infra β€” RPCs, APIs, snapshots, and more to support the community.


Binary Upgrade ​

Upgrade to v1.1.2

Target block: 34649300

Download & Extract Binary ​

bash
cd $HOME
rm -rf stable-build
mkdir -p stable-build
cd stable-build
wget https://stable-testnet-data.s3.us-east-1.amazonaws.com/stabled-1.1.2-linux-amd64-testnet.tar.gz
tar -xvzf stabled-1.1.2-linux-amd64-testnet.tar.gz

Start a new tmux session ​

bash
tmux new -s stable-upgrade

The upgrade bot requires a few command-line tools:

  • jq (JSON parser)
  • bc (math calculator)
  • curl (HTTP request)
  • websocat (WebSocket client β€” required for fast-mode)

Install them with:

bash
sudo apt update
sudo apt install -y jq bc curl

# Install websocat (WebSocket client)
wget https://github.com/vi/websocat/releases/download/v1.11.0/websocat.x86_64-unknown-linux-musl -O /usr/local/bin/websocat
chmod +x /usr/local/bin/websocat

# Verify installation
websocat --version

Run the auto-upgrade script. ​

⚠️ NOTE: Make sure you adjust the following according to your setup:

bash
UPGRADE_SCRIPT="https://raw.githubusercontent.com/astrostake/scripts/refs/heads/main/upgrade_binary_v2.sh"

curl -sL $UPGRADE_SCRIPT | bash -s -- \
-b "stabled" \
-t "34649300" \
-n "$HOME/stable-build/stabled" \
-p "/usr/local/bin" \
-r "http://localhost:13657" \
-a "http://localhost:13317" \
-d "https://discord.com/api/webhooks/xxx/yyy" \ # optional
--progress-interval 0
Flag explanation:
FlagNameDescription
-bbinary-nameName of the running daemon (e.g. stabled)
-ttarget-blockBlock height at which the upgrade should happen
-nnew-binary-pathFull path to the new binary
-pinstall-pathPath where the current binary is installed (default: $HOME/go/bin)
-rrpc-urlRPC endpoint used to monitor current block height
-iproposal-id(Optional) Proposal ID to validate governance status
-aapi-url(Optional) API endpoint used to fetch proposal status

Auto Installer ​

bash
bash <(curl -sL https://raw.githubusercontent.com/astrostake/scripts/refs/heads/main/stable-testnet/installer.sh)

Manual Installation ​

1. Install Dependencies ​

bash
sudo apt update && sudo apt upgrade -y
sudo apt install curl git wget htop tmux build-essential jq make lz4 gcc unzip -y

2. Install Go ​

bash
cd $HOME
VER="1.22.3"
wget "https://golang.org/dl/go$VER.linux-amd64.tar.gz"
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf "go$VER.linux-amd64.tar.gz"
rm "go$VER.linux-amd64.tar.gz"
[ ! -f ~/.bash_profile ] && touch ~/.bash_profile
echo "export PATH=$PATH:/usr/local/go/bin:~/go/bin" >> ~/.bash_profile
source $HOME/.bash_profile
[ ! -d ~/go/bin ] && mkdir -p ~/go/bin

3. Download and Extract ​

bash
cd $HOME
rm -rf stable-build
mkdir stable-build && cd stable-build
wget https://stable-testnet-data.s3.us-east-1.amazonaws.com/stabled-1.1.2-linux-amd64-testnet.tar.gz
tar -xvzf stabled-1.1.2-linux-amd64-testnet.tar.gz
chmod +x stabled
mv stabled /usr/local/bin/
stabled version

4. Set Vars ​

Configuration:

Generated Code:

Loading...

5. Initiliazie the Node ​

bash
stabled init $MONIKER --chain-id $STABLE_CHAIN_ID

6. Download Genesis and addrbook ​

bash
cp ~/.stabled/config/genesis.json ~/.stabled/config/genesis.json.backup
curl -Ls https://vault.astrostake.xyz/testnet/stable/genesis.json > $HOME/.stabled/config/genesis.json 
curl -Ls https://vault.astrostake.xyz/testnet/stable/addrbook.json > $HOME/.stabled/config/addrbook.json

7. Configure Node ​

app.toml

bash
CONFIG="$HOME/.stabled/config"

# Enable JSON-RPC
sed -i '/^\[json-rpc\]/,/^\[/{s/^enable *=.*/enable = true/}' $CONFIG/app.toml
# RPC HTTP (8545 β†’ 0.0.0.0:8545)
sed -i '/^\[json-rpc\]/,/^\[/{s/address = ".*/address = "0.0.0.0:8545"/}' $CONFIG/app.toml
# RPC WebSocket (8546 β†’ 0.0.0.0:8546)
sed -i '/^\[json-rpc\]/,/^\[/{s/ws-address = ".*/ws-address = "0.0.0.0:8546"/}' $CONFIG/app.toml
# Allow unprotected txs
sed -i '/^\[json-rpc\]/,/^\[/{s/^allow-unprotected-txs *=.*/allow-unprotected-txs = true/}' $CONFIG/app.toml

Set inter-block-cache to false

bash
sed -i 's/^inter-block-cache *=.*/inter-block-cache = false/' ~/.stabled/config/app.toml
Optional: Set Custom Port

app.toml

bash
sed -i.bak -e "s%:1317%:${STABLE_PORT}317%g;
s%:8080%:${STABLE_PORT}080%g;
s%:9090%:${STABLE_PORT}090%g;
s%:9091%:${STABLE_PORT}091%g;
s%:8545%:${STABLE_PORT}545%g;
s%:8546%:${STABLE_PORT}546%g;
s%:6065%:${STABLE_PORT}065%g" $HOME/.stabled/config/app.toml

config.toml

bash
sed -i.bak -e "s%:26658%:${STABLE_PORT}658%g;
s%:26657%:${STABLE_PORT}657%g;
s%:6060%:${STABLE_PORT}060%g;
s%:26656%:${STABLE_PORT}656%g;
s%^external_address = \"\"%external_address = \"$(wget -qO- eth0.me):${STABLE_PORT}656\"%;
s%:26660%:${STABLE_PORT}660%g" $HOME/.stabled/config/config.toml

Set peers

bash
SEEDS="5ed0f977a26ccf290e184e364fb04e268ef16430@37.187.147.27:26656,128accd3e8ee379bfdf54560c21345451c7048c7@37.187.147.22:26656"
PEERS="5ed0f977a26ccf290e184e364fb04e268ef16430@37.187.147.27:26656,128accd3e8ee379bfdf54560c21345451c7048c7@37.187.147.22:26656,9d1150d557fbf491ec5933140a06cdff40451dee@164.68.97.210:26656,e33988e27710ee1a7072f757b61c3b28c922eb59@185.232.68.94:11656,ff4ff638cee05df63d4a1a2d3721a31a70d0debc@141.94.138.48:26664"
sed -i -e "/^\[p2p\]/,/^\[/{s/^[[:space:]]*seeds *=.*/seeds = \"$SEEDS\"/}" \
       -e "/^\[p2p\]/,/^\[/{s/^[[:space:]]*persistent_peers *=.*/persistent_peers = \"$PEERS\"/}" $HOME/.stabled/config/config.toml

Optional: Disable Indexer

Disables the transaction indexer to reduce disk usage and I/O load. Use this if you don’t need transaction search (tx_search) or historical query support.

bash
sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $CONFIG/config.toml

Configure Pruning

Pruning Strategy
Select a strategy to manage your node's storage usage.
πŸ’‘Recommended for Validators to fine-tune storage.
Number of recent blocks/states to keep in disk.
blocks
Frequency of deletion. E.g., 10 means prune every 10 blocks.
blocks
Loading...

8. Install Snapshot ​

bash
cp $HOME/.stabled/data/priv_validator_state.json $HOME/.stabled/priv_validator_state.json.backup
rm -rf $HOME/.stabled/data
curl https://vault.astrostake.xyz/testnet/stable/stable-testnet_snapshot.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.stabled
mv $HOME/.stabled/priv_validator_state.json.backup $HOME/.stabled/data/priv_validator_state.json

9. Create Service ​

bash
sudo tee /etc/systemd/system/stabled.service > /dev/null <<EOF
[Unit]
Description=Stable Daemon Service
After=network-online.target

[Service]
User=$USER
ExecStart=/usr/local/bin/stabled start --chain-id stabletestnet_2201-1
Restart=always
RestartSec=3
LimitNOFILE=65535
StandardOutput=journal
StandardError=journal
SyslogIdentifier=stabled

[Install]
WantedBy=multi-user.target
EOF

10. Start Service ​

bash
sudo systemctl daemon-reload
sudo systemctl enable stabled
sudo systemctl restart stabled
sudo systemctl status stabled

Useful Commands ​

Check logs

bash
sudo journalctl -u stabled -fo cat

Check Sync

bash
curl -sL https://raw.githubusercontent.com/astrostake/scripts/refs/heads/main/cosmos_sync_monitor.sh | bash -s -- --directory $HOME/.stabled --public-rpc https://stable-testnet-rpc.linknode.org --interval 5

πŸ›‘οΈ Security ​

To apply a quick security baseline, you can configure your firewall like this:

bash
sudo ufw allow ${STABLE_PORT}656/tcp comment 'STABLE Node p2p Port'

πŸ” For a more secure and maintainable setup, check out our Essentials Guide, including SSH key setup, Fail2Ban protection, and a full VPS hardening checklist.

Delete Validator ​

⚠️ Critical: Backup Your Validator Key!

Make sure to backup priv_validator_key.json and priv_validator_state.json. Do not lose this key β€” it is required to run your validator.

File location: ~/.stabled/config/priv_validator_key.json ~/.stabled/data/priv_validator_state.json

bash
cd $HOME
sudo systemctl stop stabled
sudo systemctl disable stabled
sudo rm /etc/systemd/system/stabled.service
sudo systemctl daemon-reload
sudo rm -f $(which stabled)
sudo rm -rf $HOME/.stabled
sudo rm -rf $HOME/stable