AlignedLayer
Run node using systemd or cosmovisor
Website: https://alignedlayer.com
Telegram: https://t.me/aligned_layer
Twitter: https://twitter.com/alignedlayer
Faucet: https://faucet.alignedlayer.com
Explorer: https://explorer.alignedlayer.com/alignedlayer
Chain ID: alignedlayer
Recommended Hardware Requirements
SPEC | Recommend |
---|---|
CPU | 4 Cores |
RAM | 16 GB |
SSD | 200 GB |
NETWORK | 100 Mbps |
OS | Ubuntu 22.04 |
Port | 10056 |
Update and install packages for compiling
cd $HOME && source <(curl -s https://raw.githubusercontent.com/vnbnode/binaries/main/update-binary.sh)
- 🖼️ Systemd
- 🖼️ Cosmovisor
- 🖼️ Command
- 🖼️ Snapshot
- 🖼️ StateSync
Build binary
cd $HOME
rm -rf $HOME/aligned_layer_tendermint && wget https://github.com/yetanotherco/aligned_layer_tendermint/releases/download/v0.1.0/alignedlayerd && chmod +x alignedlayerd
mv alignedlayerd $HOME/go/bin/
alignedlayerd version
Initialize Node
Replace Name
with your own moniker
MONIKER="Name-VNBnode"
alignedlayerd init $MONIKER --chain-id alignedlayer
Download Genesis & Addrbook
curl -Ls https://raw.githubusercontent.com/vnbnode/binaries/main/Projects/AlignedLayer/genesis.json > $HOME/.alignedlayer/config/genesis.json
curl -Ls https://raw.githubusercontent.com/vnbnode/binaries/main/Projects/AlignedLayer/addrbook.json > $HOME/.alignedlayer/config/addrbook.json
Configure
sed -i -e "s|^seeds *=.*|seeds = \"[email protected]:24256\"|" $HOME/.alignedlayer/config/config.toml
peers=$(curl -s https://raw.githubusercontent.com/vnbnode/binaries/main/Projects/AlignedLayer/peers.txt)
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.alignedlayer/config/config.toml
sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \"0.0001stake\"|" $HOME/.alignedlayer/config/app.toml
sed -i \
-e 's|^pruning *=.*|pruning = "custom"|' \
-e 's|^pruning-keep-recent *=.*|pruning-keep-recent = "100"|' \
-e 's|^pruning-keep-every *=.*|pruning-keep-every = "0"|' \
-e 's|^pruning-interval *=.*|pruning-interval = "19"|' \
$HOME/.alignedlayer/config/app.toml
Custom Port
echo 'export aligned="100"' >> ~/.bash_profile
source $HOME/.bash_profile
sed -i -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://0.0.0.0:${aligned}58\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://0.0.0.0:${aligned}57\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:${aligned}60\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:${aligned}56\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":${aligned}60\"%" $HOME/.alignedlayer/config/config.toml
sed -i -e "s%^address = \"tcp://localhost:1317\"%address = \"tcp://0.0.0.0:${aligned}17\"%; s%^address = \":8080\"%address = \":${aligned}80\"%; s%^address = \"localhost:9090\"%address = \"0.0.0.0:${aligned}90\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:${aligned}91\"%; s%:8545%:${aligned}45%; s%:8546%:${aligned}46%; s%:6065%:${aligned}65%" $HOME/.alignedlayer/config/app.toml
sed -i \
-e 's|^chain-id *=.*|chain-id = "alignedlayer"|' \
-e 's|^keyring-backend *=.*|keyring-backend = "test"|' \
-e 's|^node *=.*|node = "tcp://localhost:10057"|' \
$HOME/.alignedlayer/config/client.toml
Create service
sudo tee /etc/systemd/system/alignedlayer.service > /dev/null <<EOF
[Unit]
Description=alignedlayer Daemon
After=network-online.target
[Service]
User=$USER
ExecStart=$(which alignedlayerd) start
Restart=always
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable alignedlayer
Snapshot
cp $HOME/.alignedlayer/data/priv_validator_state.json $HOME/.alignedlayer/priv_validator_state.json.backup
rm -rf $HOME/.alignedlayer/data && mkdir -p $HOME/.alignedlayer/data
curl -L https://snap.vnbnode.com/alignedlayer/alignedlayer_snapshot_latest.tar.lz4 | tar -I lz4 -xf - -C $HOME/.alignedlayer/data
mv $HOME/.alignedlayer/priv_validator_state.json.backup $HOME/.alignedlayer/data/priv_validator_state.json
Start Node
sudo systemctl start alignedlayer
journalctl -u alignedlayer -f
Backup Validator
mkdir -p $HOME/backup/alignedlayer
cp $HOME/.alignedlayer/config/priv_validator_key.json $HOME/backup/alignedlayer
Remove Node
cd $HOME
sudo systemctl stop alignedlayer
sudo systemctl disable alignedlayer
sudo rm /etc/systemd/system/alignedlayer.service
sudo systemctl daemon-reload
sudo rm $HOME/go/bin/alignedlayerd
sudo rm -f $(which alignedlayerd)
sudo rm -rf $HOME/.alignedlayer
Build binary
cd $HOME
rm -rf $HOME/aligned_layer_tendermint && wget https://github.com/yetanotherco/aligned_layer_tendermint/releases/download/v0.1.0/alignedlayerd && chmod +x alignedlayerd
mkdir -p $HOME/.alignedlayer/cosmovisor/genesis/bin
mv alignedlayerd $HOME/.alignedlayer/cosmovisor/genesis/bin/
sudo ln -s $HOME/.alignedlayer/cosmovisor/genesis $HOME/.alignedlayer/cosmovisor/current -f
sudo ln -s $HOME/.alignedlayer/cosmovisor/current/bin/alignedlayerd /usr/local/bin/alignedlayerd -f
Cosmovisor Setup
go install cosmossdk.io/tools/cosmovisor/cmd/[email protected]
sudo tee /etc/systemd/system/alignedlayer.service > /dev/null << EOF
[Unit]
Description=alignedlayer node service
After=network-online.target
[Service]
User=$USER
ExecStart=$(which cosmovisor) run start
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
Environment="DAEMON_HOME=$HOME/.alignedlayer"
Environment="DAEMON_NAME=alignedlayerd"
Environment="UNSAFE_SKIP_BACKUP=true"
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable alignedlayer
Initialize Node
Replace Name
with your own moniker
MONIKER="Name-VNBnode"
alignedlayerd init $MONIKER --chain-id alignedlayer
Download Genesis & Addrbook
curl -Ls https://raw.githubusercontent.com/vnbnode/binaries/main/Projects/AlignedLayer/genesis.json > $HOME/.alignedlayer/config/genesis.json
curl -Ls https://raw.githubusercontent.com/vnbnode/binaries/main/Projects/AlignedLayer/addrbook.json > $HOME/.alignedlayer/config/addrbook.json
Configure
sed -i -e "s|^seeds *=.*|seeds = \"[email protected]:24256\"|" $HOME/.alignedlayer/config/config.toml
peers=$(curl -s https://raw.githubusercontent.com/vnbnode/binaries/main/Projects/AlignedLayer/peers.txt)
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.alignedlayer/config/config.toml
sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \"0.0001stake\"|" $HOME/.alignedlayer/config/app.toml
sed -i \
-e 's|^pruning *=.*|pruning = "custom"|' \
-e 's|^pruning-keep-recent *=.*|pruning-keep-recent = "100"|' \
-e 's|^pruning-keep-every *=.*|pruning-keep-every = "0"|' \
-e 's|^pruning-interval *=.*|pruning-interval = "19"|' \
$HOME/.alignedlayer/config/app.toml
Custom Port
echo 'export aligned="100"' >> ~/.bash_profile
source $HOME/.bash_profile
sed -i -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://0.0.0.0:${aligned}58\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://0.0.0.0:${aligned}57\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:${aligned}60\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:${aligned}56\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":${aligned}60\"%" $HOME/.alignedlayer/config/config.toml
sed -i -e "s%^address = \"tcp://localhost:1317\"%address = \"tcp://0.0.0.0:${aligned}17\"%; s%^address = \":8080\"%address = \":${aligned}80\"%; s%^address = \"localhost:9090\"%address = \"0.0.0.0:${aligned}90\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:${aligned}91\"%; s%:8545%:${aligned}45%; s%:8546%:${aligned}46%; s%:6065%:${aligned}65%" $HOME/.alignedlayer/config/app.toml
sed -i \
-e 's|^chain-id *=.*|chain-id = "alignedlayer"|' \
-e 's|^keyring-backend *=.*|keyring-backend = "test"|' \
-e 's|^node *=.*|node = "tcp://localhost:10057"|' \
$HOME/.alignedlayer/config/client.toml
Snapshot
cp $HOME/.alignedlayer/data/priv_validator_state.json $HOME/.alignedlayer/priv_validator_state.json.backup
rm -rf $HOME/.alignedlayer/data && mkdir -p $HOME/.alignedlayer/data
curl -L https://snap.vnbnode.com/alignedlayer/alignedlayer_snapshot_latest.tar.lz4 | tar -I lz4 -xf - -C $HOME/.alignedlayer/data
mv $HOME/.alignedlayer/priv_validator_state.json.backup $HOME/.alignedlayer/data/priv_validator_state.json
Start Node
sudo systemctl start alignedlayer
journalctl -fu alignedlayer -o cat
Backup Validator
mkdir -p $HOME/backup/alignedlayer
cp $HOME/.alignedlayer/config/priv_validator_key.json $HOME/backup/alignedlayer
Remove Node
cd $HOME
sudo systemctl stop alignedlayer
sudo systemctl disable alignedlayer
sudo rm /etc/systemd/system/alignedlayer.service
sudo systemctl daemon-reload
sudo rm -f $(which alignedlayer)
sudo rm -rf $HOME/.alignedlayer
Managing keys
Generate new key
alignedlayerd keys add wallet
Recover key
alignedlayerd keys add wallet --recover
List all key
alignedlayerd keys list
Query wallet balances
alignedlayerd q bank balances $(alignedlayerd keys show wallet -a)
Managing validators
Create validator
cd $HOME
alignedlayerd tendermint show-validator
Please create validator.json
replace pubkey and key inside like below
nano $HOME/.alignedlayer/config/validator.json
{
"pubkey": {"@type":"/cosmos.crypto.ed25519.PubKey","key":"IkGeamll8JFsV5jqoT37JfI37Ey/viBTZJLvLv8hlF0="},
"amount": "1000000stake",
"moniker": "Name-VNBnode",
"identity": "06F5F34BD54AA6C7",
"website": "https://vnbnode.com",
"details": "VNBnode is a group of professional validators / researchers in blockchain",
"commission-rate": "0.1",
"commission-max-rate": "0.2",
"commission-max-change-rate": "0.01",
"min-self-delegation": "1"
}
Proceed to create validation
alignedlayerd tx staking create-validator $HOME/.alignedlayer/config/validator.json \
--from wallet --chain-id alignedlayer \
--gas-adjustment 1.4 \
--gas auto \
--gas-prices 0.0001stake
Edit validator
alignedlayerd tx staking edit-validator \
--new-moniker "NewName-VNBnode" \
--identity "06F5F34BD54AA6C7" \
--website "https://vnbnode.com" \
--details "VNBnode is a group of professional validators / researchers in blockchain" \
--security-contact "email" \
--chain-id alignedlayer \
--commission-rate 0.05 \
--from wallet \
--gas-adjustment 1.4 \
--gas auto \
--gas-prices 0.0001stake \
-y
Unjail
alignedlayerd tx slashing unjail --from wallet --chain-id alignedlayer --gas-adjustment 1.4 --gas auto --gas-prices 0.0001stake -y
View validator details
alignedlayerd keys show wallet --bech val -a
Query active validators
alignedlayerd q staking validators -o json --limit=1000 \
| jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nl
Query inactive validators
alignedlayerd q staking validators -o json --limit=1000 \
| jq '.validators[] | select(.status=="BOND_STATUS_UNBONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nl
Managing Tokens
Delegate tokens to your validator
alignedlayerd tx staking delegate $(alignedlayerd keys show wallet --bech val -a) 1000000stake --from wallet --chain-id alignedlayer --gas-adjustment 1.4 --gas auto --gas-prices 0.0001stake -y
Send token
alignedlayerd tx bank send <WALLET> <TO_WALLET> <AMOUNT>stake --gas=500000 --gas-prices=99999stake -y
Withdraw reward from all validator
alignedlayerd tx distribution withdraw-all-rewards --from wallet --chain-id alignedlayer --gas-adjustment 1.4 --gas auto --gas-prices=99999stake -y
Withdraw reward and commission
alignedlayerd tx distribution withdraw-rewards $(alignedlayerd keys show wallet --bech val -a) --commission --from wallet --chain-id alignedlayer --gas-adjustment 1.4 --gas auto --gas-prices=99999stake -y
Redelegate to another validator
alignedlayerd tx staking redelegate $(alignedlayerd keys show wallet --bech val -a) <to-valoper-address> 1000000stake --from wallet --chain-id alignedlayer --gas-adjustment 1.4 --gas auto --gas-prices=99999stake -y
Governance
Query list proposal
alignedlayerd query gov proposals
View proposal by ID
alignedlayerd query gov proposal 1
Vote yes
alignedlayerd tx gov vote 1 yes --from wallet --gas-prices=99999stake -y
Vote No
alignedlayerd tx gov vote 1 no --from wallet --gas-prices=99999stake -y
Vote option asbtain
alignedlayerd tx gov vote 1 abstain --from wallet --gas-prices=99999stake -y
Vote option NoWithVeto
alignedlayerd tx gov vote 1 NoWithVeto --from wallet --gas-prices=99999stake -y
Maintenance
Check sync
alignedlayerd status 2>&1 | jq .SyncInfo
Node status
alignedlayerd status | jq
Get validator information
alignedlayerd status 2>&1 | jq .ValidatorInfo
Get your p2p peer address
echo $(alignedlayerd tendermint show-node-id)'@'$(curl -s ifconfig.me)':'$(cat $HOME/.alignedlayer/config/config.toml | sed -n '/Address to listen for incoming connection/{n;p;}' | sed 's/.*://; s/".*//')
Get peers live
curl -sS http://localhost:${aligned}57/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr)"' | awk -F ':' '{print $1":"$(NF)}'
Snapshot (Updated daily)
Stop Node and Reset Date
sudo systemctl stop alignedlayer
cp $HOME/.alignedlayer/data/priv_validator_state.json $HOME/.alignedlayer/priv_validator_state.json.backup
rm -rf $HOME/.alignedlayer/data && mkdir -p $HOME/.alignedlayer/data
Download Snapshot
curl -L https://snap.vnbnode.com/alignedlayer/alignedlayer_snapshot_latest.tar.lz4 | tar -I lz4 -xf - -C $HOME/.alignedlayer/data
mv $HOME/.alignedlayer/priv_validator_state.json.backup $HOME/.alignedlayer/data/priv_validator_state.json
Restart Node
sudo systemctl restart alignedlayer && sudo journalctl -u alignedlayer -f --no-hostname -o cat
Reset blockchain data
Make sure backup your priv_validator_state.json before reset
sudo systemctl stop alignedlayer
cp $HOME/.alignedlayer/data/priv_validator_state.json $HOME/.alignedlayer/priv_validator_state.json.backup
alignedlayerd tendermint unsafe-reset-all --keep-addr-book --home $HOME/.alignedlayer
Configure State Sync
SNAP_RPC="http://109.199.118.239:24257"
LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 1000)); \
TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash)
echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH
sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC,$SNAP_RPC\"| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"|" ~/.alignedlayer/config/config.toml
more ~/.alignedlayer/config/config.toml | grep 'rpc_servers'
more ~/.alignedlayer/config/config.toml | grep 'trust_height'
more ~/.alignedlayer/config/config.toml | grep 'trust_hash'
Backup state data
Return state file to the previous location
mv $HOME/.alignedlayer/priv_validator_state.json.backup $HOME/.alignedlayer/data/priv_validator_state.json
Restart your nodes after perform a state sync
sudo systemctl start alignedlayer && sudo journalctl -fu alignedlayer -o cat