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.1
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)

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
mkdir stable && cd stable
wget https://stable-testnet-data.s3.us-east-1.amazonaws.com/stabled-1.1.1-linux-amd64-testnet.tar.gz
tar -xvzf stabled-1.1.1-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

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

Disable Indexer

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

Configure custom pruning

bash
sed -i -e "s/^pruning *=.*/pruning = \"custom\"/" $HOME/.0gchaind/0g-home/0gchaind-home/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"100\"/" $HOME/.0gchaind/0g-home/0gchaind-home/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"19\"/" $HOME/.0gchaind/0g-home/0gchaind-home/config/app.toml

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.