Network Overview
AtomOne emerged in response to concerns raised by the community over Proposal 82 and furthered by Proposal 848 on the Cosmos Hub, which highlighted issues surrounding centralization, security and governance inefficiencies within the network.
https://rpc-atomone.sychonix.com
https://api-atomone.sychonix.com
a3c7481636f715464af61b5cb26de1cb7fd26f05@atomone-mainnet.sychonix.com:12956
PEERS="$(curl -sS https://rpc-atomone.sychonix.com/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr)"' | awk -F ':' '{print $1":"$(NF)}' | sed -z 's|\n|,|g;s|.$||')"
sed -i -e "s|^persistent_peers *=.*|persistent_peers = \"$PEERS\"|" $HOME/.atomone/config/config.toml
curl -L https://snapshot.sychonix.com/mainnet/atomone/genesis.json > $HOME/.atomone/config/genesis.json
curl -L https://snapshot.sychonix.com/mainnet/atomone/addrbook.json > $HOME/.atomone/config/addrbook.json
Installation
- Install Dependencies
sudo apt update && sudo apt upgrade -y
sudo apt install curl iptables build-essential git wget jq make gcc nano tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev aria2 -y
- Install Go
sudo rm -rf /usr/local/go
curl -Ls https://go.dev/dl/go1.21.13.linux-amd64.tar.gz | sudo tar -xzf - -C /usr/local
eval $(echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee /etc/profile.d/golang.sh)
eval $(echo 'export PATH=$PATH:$HOME/go/bin' | tee -a $HOME/.profile)
- Install binary
cd $HOME
git clone https://github.com/atomone-hub/atomone.git
cd atomone
git checkout v1.0.0
make install
- Initialize The Node
atomoned init $MONIKER --chain-id atomone-1
sed -i -e "s|^node *=.*|node = \"tcp://localhost:12957\"|" $HOME/.atomone/config/client.toml
sed -i -e "s|^keyring-backend *=.*|keyring-backend = \"os\"|" $HOME/.atomone/config/client.toml
sed -i -e "s|^chain-id *=.*|chain-id = \"atomone-1\"|" $HOME/.atomone/config/client.toml
- Download Genesis & Addrbook
curl -L https://snapshot.sychonix.com/mainnet/atomone/genesis.json > $HOME/.atomone/config/genesis.json
curl -L https://snapshot.sychonix.com/mainnet/atomone/addrbook.json > $HOME/.atomone/config/addrbook.json
- Configure Seeds and Peers
SEEDS="a3c7481636f715464af61b5cb26de1cb7fd26f05@atomone-mainnet.sychonix.com:12956"
PEERS="$(curl -sS https://rpc-atomone.sychonix.com/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr)"' | awk -F ':' '{print $1":"$(NF)}' | sed -z 's|\n|,|g;s|.$||')"
sed -i -e "s|^seeds *=.*|seeds = '"$SEEDS"'|; s|^persistent_peers *=.*|persistent_peers = '"$PEERS"'|" $HOME/.atomone/config/config.toml
- Update Port Configuration
sed -i -e "s%:1317%:12917%; s%:8080%:12980%; s%:9090%:12990%; s%:9091%:12991%; s%:8545%:12945%; s%:8546%:12946%; s%:6065%:12965%" $HOME/.atomone/config/app.toml
sed -i -e "s%:26658%:12958%; s%:26657%:12957%; s%:6060%:12960%; s%:26656%:12956%; s%:26660%:12961%" $HOME/.atomone/config/config.toml
- Customize Pruning
sed -i \
-e 's|^pruning *=.*|pruning = "custom"|' \
-e 's|^pruning-keep-recent *=.*|pruning-keep-recent = "100"|' \
-e 's|^pruning-interval *=.*|pruning-interval = "17"|' \
$HOME/.atomone/config/app.toml
- Set Minimum Gas Price, Enable Prometheus, and Disable the Indexer
sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \"0uatone\"|" $HOME/.atomone/config/app.toml
sed -i -e "s/prometheus = false/prometheus = true/" $HOME/.atomone/config/config.toml
sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $HOME/.atomone/config/config.toml
- Create Service File
sudo tee /etc/systemd/system/atomoned.service > /dev/null <<EOF
[Unit]
Description=atomoned node service
After=network-online.target
[Service]
User=$USER
ExecStart=$(which atomoned) start
Restart=always
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
- Download Current Snapshot
curl "https://snapshot.sychonix.com/mainnet/atomone/atomone-snapshot.tar.lz4" | lz4 -dc - | tar -xf - -C "$HOME/.atomone"
- Enable the Service and Start the Node
sudo systemctl daemon-reload
sudo systemctl enable atomoned.service
sudo systemctl restart atomoned.service && sudo journalctl -u atomoned.service -f --no-hostname -o cat
Upgrade
No chain upgrades scheduled yet.
Peers
PEERS="$(curl -sS https://rpc-atomone.sychonix.com/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr)"' | awk -F ':' '{print $1":"$(NF)}' | sed -z 's|\n|,|g;s|.$||')"
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.atomone/config/config.toml
Snapshot
Height: Loading... | Last updated: Loading... | Size: Loading...
- Install dependencies, if needed
sudo apt update && sudo apt install aria2
- Stop Service
sudo systemctl stop atomoned
- Back up priv_validator_state.json
cp $HOME/.atomone/data/priv_validator_state.json $HOME/.atomone/priv_validator_state.json.backup
- Reset the data
atomoned tendermint unsafe-reset-all --home $HOME/.atomone --keep-addr-book
- Download Snapshot
aria2c -x 16 -s 16 -o atomone-snapshot.tar.lz4 https://snapshot.sychonix.com/mainnet/atomone/atomone-snapshot.tar.lz4
lz4 -dc atomone-snapshot.tar.lz4 | tar -xf - -C $HOME/.atomone
rm -v atomone-snapshot.tar.lz4
- Restore Backup and Restart Service
mv $HOME/.atomone/priv_validator_state.json.backup $HOME/.atomone/data/priv_validator_state.json
sudo systemctl restart atomoned && sudo journalctl -u atomoned -f -o cat
Addrbook
curl -L https://snapshot.sychonix.com/mainnet/atomone/addrbook.json > $HOME/.atomone/config/addrbook.json
Genesis
curl -L https://snapshot.sychonix.com/mainnet/atomone/genesis.json > $HOME/.atomone/config/genesis.json
API
api-atomone.sychonix.com
RPC
rpc-atomone.sychonix.com
CLI Cheatsheet
Wallet Management
atomoned keys add
atomoned keys add --recover
atomoned keys list
atomoned keys delete
atomoned keys export
atomoned keys import .backup
atomoned q bank balances $(atomoned keys show -a)
Validator Management
Moniker
Identity
Details
Website
Security Contact
Amount
atomoned tx staking create-validator \ --amount=1000000uatone \ --pubkey=$(atomoned tendermint show-validator) \ --moniker="" \ --identity="" \ --details="" \ --website="" \ --security-contact= \ --chain-id=atomone-1 \ --commission-rate=0.05 \ --commission-max-rate=0.20 \ --commission-max-change-rate=0.01 \ --min-self-delegation=1 \ --gas-prices 0uatone \ --gas "auto" \ --gas-adjustment "1.5" \ --from wallet \ -y
atomoned tx staking edit-validator \
--new-moniker="" \
--identity="" \
--details="" \
--website="" \
--chain-id=atomone-1 \
--commission-rate=0.07 \
--from wallet \
--gas=auto \
--gas-prices 0uatone \
-y
atomoned tx slashing unjail --from wallet --chain-id atomone-1 --gas auto --gas-adjustment 1.5
atomoned query slashing signing-info $(atomoned tendermint show-validator)
atomoned q staking validator $(atomoned keys show wallet --bech val -a)
atomoned q bank denom-metadata -oj | jq
atomoned status 2>&1 | jq -r '.SyncInfo.catching_up // .sync_info.catching_up'
atomoned status 2>&1 | jq -r '.SyncInfo.latest_block_height // .sync_info.latest_block_height'
Token Management
atomoned tx distribution withdraw-all-rewards --from wallet --chain-id atomone-1 --gas auto --gas-adjustment 1.5 --gas-prices 0uatone -y
atomoned tx distribution withdraw-rewards $(atomoned keys show wallet --bech val -a) --commission --from wallet --chain-id atomone-1 --gas auto --gas-adjustment 1.5 --gas-prices 0uatone -y
atomoned tx staking delegate $(atomoned keys show wallet --bech val -a) 1000000uatone --from wallet --chain-id atomone-1 --gas auto --gas-adjustment 1.5 --gas-prices 0uatone -y
atomoned tx staking redelegate $(atomoned keys show wallet --bech val -a) 1000000uatone --from wallet --chain-id atomone-1 --gas auto --gas-adjustment 1.5 --gas-prices 0uatone -y
atomoned tx staking delegate 1000000uatone --from --chain-id atomone-1 --gas auto --gas-adjustment 1.5 --gas-prices 0uatone -y
atomoned tx staking unbond $(atomoned keys show wallet --bech val -a) 1000000uatone --from wallet --chain-id atomone-1 --gas auto --gas-adjustment 1.5 --gas-prices 0uatone -y
atomoned tx bank send wallet 1000000uatone --from wallet --chain-id atomone-1 --gas auto --gas-adjustment 1.5 --gas-prices 0uatone -y
Service Management
sudo systemctl daemon-reload
sudo systemctl enable atomoned
sudo systemctl disable atomoned
sudo systemctl start atomoned
sudo systemctl stop atomoned
sudo systemctl restart atomoned
sudo systemctl status atomoned
sudo journalctl -u atomoned -f --no-hostname -o cat
CUSTOM_PORT= sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:${CUSTOM_PORT}658\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:${CUSTOM_PORT}657\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:${CUSTOM_PORT}060\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:${CUSTOM_PORT}656\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":${CUSTOM_PORT}660\"%" $HOME/.atomone/config/config.toml sed -i.bak -e "s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:${CUSTOM_PORT}317\"%; s%^address = \":8080\"%address = \":${CUSTOM_PORT}080\"%; s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:${CUSTOM_PORT}090\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:${CUSTOM_PORT}091\"%" $HOME/.atomone/config/app.toml
cd $HOME && sudo systemctl stop atomoned && sudo systemctl disable atomoned && sudo rm /etc/systemd/system/atomoned .service && sudo systemctl daemon-reload && sudo rm -rf $(which atomoned ) && sudo rm -rf $HOME/.atomone && sudo rm -rf $(which atomoned )