Self Chain

Explorer
Chain-ID:
Latest Node Version:
Latest Block Height:

Welcome to Self Chain, the revolutionary blockchain network empowering dApps and digital asset management. With a focus on decentralization, security, and user-centricity, Self Chain offers a secure infrastructure for keyless wallets, and ensures enhanced security and control through advanced technologies like Multi-Party Computation (MPC) and Threshold Signature Scheme (TSS), eliminating the need for the user to store private keys or recovery phrases.​


Binary: realio-networkd
Denom: ario
Symbol: RIO
Exponent: 18
Folder Chain: .realio-network
Key management
selfd keys add selfd keys add  --recoverselfd keys listselfd keys delete selfd keys export selfd keys import  .backup
Check balance
selfd q bank balances $(selfd keys show  -a)
Service
sudo journalctl -u selfd -f --no-hostname -o catsudo systemctl start selfdsudo systemctl stop selfdsudo systemctl restart selfdsudo systemctl status selfdsudo systemctl daemon-reloadsudo systemctl enable selfdsudo systemctl disable selfdselfd status 2>&1 | jq .SyncInfoecho $(selfd tendermint show-node-id)'@'$(curl -s ifconfig.me)':'$(cat $HOME/.selfchain/config/config.toml | sed -n '/Address to listen for incoming connection/{n;p;}' | sed 's/.*://; s/".*//')curl -sS http://localhost:657/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr)"' | awk -F ':' '{print $1":"$(NF)}'
Validator management















Create Validator
selfd tx staking create-validator \
--amount=000000uself \
--moniker="" \
--pubkey=$(selfd tendermint show-validator) \
--identity="" \
--details="" \
--website="" \
--security-contact= \
--chain-id= \
--commission-rate=0. \
--commission-max-rate=0.20 \
--commission-max-change-rate=0. \
--min-self-delegation=1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
Edit Validator
selfd tx staking edit-validator \
--new-moniker="" \
--chain-id= \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself" -y
selfd tx staking edit-validator \
--identity="" \
--chain-id= \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfd tx staking edit-validator \
--details="" \
--chain-id= \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfd tx staking edit-validator \
--commission-rate=0. \
--chain-id= \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfd tx staking edit-validator \
--new-moniker="" \
--identity="" \
--chain-id= \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfd tx staking edit-validator \
--new-moniker="" \
--details="" \
--chain-id= \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfd tx staking edit-validator \
--new-moniker="" \
--commission-rate=0. \
--chain-id= \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfd tx staking edit-validator \
--identity="" \
--details="" \
--chain-id= \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfd tx staking edit-validator \
--identity="" \
--commission-rate=0. \
--chain-id= \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfd tx staking edit-validator \
--details="" \
--commission-rate=0. \
--chain-id= \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfd tx staking edit-validator \
--new-moniker="" \
--identity="" \
--details="" \
--chain-id= \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfd tx staking edit-validator \
--new-moniker="" \
--identity="" \
--commission-rate=0. \
--chain-id= \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfd tx staking edit-validator \
--new-moniker="" \
--details="" \
--commission-rate=0. \
--chain-id= \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfd tx staking edit-validator \
--identity="" \
--details="" \
--commission-rate=0. \
--chain-id= \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfd tx staking edit-validator \
--new-moniker="" \
--identity="" \
--details="" \
--commission-rate=0. \
--chain-id= \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfd tx staking edit-validator \
--new-moniker="" \
--identity="" \
--details="" \
--website="" \
--security-contact= \
--chain-id= \
--commission-rate=0. \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"




selfd status 2>&1 | jq .ValidatorInfoselfd q staking validator $(selfd keys show  --bech val -a)selfd q slashing signing-info $(selfd tendermint show-validator)selfd tx slashing unjail --broadcast-mode=block --from  --chain-id  --gas-adjustment="1.4" --fees="5000uself"selfd q staking validators -oj --limit=2000 | jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' | jq -r '(.tokens|tonumber/pow(10; 6)|floor|tostring) + " 	 " + .description.moniker' | sort -gr | nl[[ $(selfd q staking validator $(selfd keys show  --bech val -a) -oj | jq -r .consensus_pubkey.key) = $(selfd status | jq -r .ValidatorInfo.PubKey.value) ]] && echo -e "Your key status is ok" || echo -e "Your key status is error"selfd q slashing signing-info $(selfd tendermint show-validator)
Token management
selfd tx distribution withdraw-all-rewards --from  --chain-id  --gas-adjustment="1.4" --fees="5000uself"selfd tx distribution withdraw-rewards $(selfd keys show  --bech val -a) --commission --from  --chain-id  --gas-adjustment="1.4" --fees="5000uself"selfd tx staking delegate $(selfd keys show  --bech val -a) 000000uself --from  --chain-id  --gas-adjustment="1.4" --fees="5000uself"selfd tx staking redelegate $(selfd keys show  --bech val -a)  000000uself --from  --chain-id  --gas-adjustment="1.4" --fees="5000uself"selfd tx staking delegate  000000uself --from  --chain-id  --gas-adjustment="1.4" --fees="5000uself"selfd tx staking unbond $(selfd keys show  --bech val -a) 000000uself --from  --chain-id  --gas-adjustment="1.4" --fees="5000uself"selfd tx bank send   000000uself --from  --chain-id  --gas-adjustment="1.4" --fees="5000uself"
Governance
View Proposal
selfd query gov proposal 
Vote
selfd tx gov vote   --from  --chain-id  --gas-adjustment="1.4" --fees="5000uself"
Utility
Set Custom Port




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/.selfchain/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\"%; s%^address = \"127.0.0.1:8545\"%address = \"0.0.0.0:${CUSTOM_PORT}545\"%; s%^ws-address = \"127.0.0.1:8546\"%ws-address = \"0.0.0.0:${CUSTOM_PORT}546\"%" $HOME/.selfchain/config/app.toml
Enable Indexing usually enabled by default
sed -i -e 's|^indexer *=.*|indexer = "kv"|' $HOME/.selfchain/config/config.toml
Disable Indexing
sed -i -e 's|^indexer *=.*|indexer = "null"|' $HOME/.selfchain/config/config.toml
Reset Chain Data
selfd tendermint unsafe-reset-all --home $HOME/.selfchain --keep-addr-book
Delete Node
WARNING! This action will remove all files related to the selfd chain! Make sure you have backed up your priv_validator_key.json
sudo systemctl stop selfd && \
sudo systemctl disable selfd && \
rm /etc/systemd/system/selfd.service && \
sudo systemctl daemon-reload && \
cd $HOME && \
rm -rf .selfchain && \
rm -rf $(which selfd)
Genesis
wget -O $HOME/.selfchain/config/genesis.json "https://raw.githubusercontent.com/kynraze/service/main/testnet/self/genesis.json"
Addrbook
Update every 1h
wget -O $HOME/.selfchain/config/addrbook.json "https://snap.kynraze.com/test/self/addrbook.json"
List Peers:
PEERS= 
sed -i -e "s|^persistent_peers *=.*|persistent_peers = "$PEERS"|" $HOME/.selfchain/config/config.toml
In case our endpoint experiences an issue, we use the Cosmos directory endpoint as a backup.
Api Endpoint
RPC Endpoint
gRPC Endpoint
Auto Installation
Script Info
Binary
:
FOLDER
:
Golang Version
:
Snapshot
:
From Stratch ||
Coming Soon
With StateSync
With Snapshot ||
Manual Installation
Setting vars




SELF_NODENAME=""

save and import variable

echo "export SELF_NODENAME=$SELF_NODENAME" >> $HOME/.bash_profile if [ ! $WALLET ]; then echo "export WALLET=wallet" >> $HOME/.bash_profile fi echo "export SELF_CHAIN_ID=" >> $HOME/.bash_profile source $HOME/.bash_profile

Install and update dependencies

sudo apt update && sudo apt upgrade -y && sudo apt install curl tar wget clang pkg-config libssl-dev jq build-essential bsdmainutils git make ncdu gcc git jq chrony liblz4-tool -y

Install Go

ver="1.20" cd $HOME 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" echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> ~/.bash_profile source ~/.bash_profile

Check golang

go version

Install Binary
Download Binary

wget https://snap.kynraze.com/test/self/selfchaind chmod +x selfd mv selfd $HOME/go/bin/

Verify that Binary successfully installed

selfd version --long

Custom Port (Optional)




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/.selfchain/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\"%; s%^address = \"127.0.0.1:8545\"%address = \"0.0.0.0:${CUSTOM_PORT}545\"%; s%^ws-address = \"127.0.0.1:8546\"%ws-address = \"0.0.0.0:${CUSTOM_PORT}546\"%" $HOME/.selfchain/config/app.toml

Set Config Binary

selfd config chain-id $SELF_CHAIN_ID selfd config keyring-backend file selfd config node tcp://localhost:657

Initialize

selfd init $SELF_NODENAME --chain-id $SELF_CHAIN_ID

Get Genesis and Addrbook
Download genesis
wget -O $HOME/.selfchain/config/genesis.json "https://raw.githubusercontent.com/kynraze/service/main/testnet/self/genesis.json"
Download Addrbook
wget -O $HOME/.selfchain/config/addrbook.json "https://snap.kynraze.com/test/self/addrbook.json"
Set Seeds and Peers

PEERS="" sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.selfchain/config/config.toml sed -i -e "s|^seeds *=.*|seeds = \"\"|" $HOME/.selfchain/config/config.toml

Config pruning

pruning="custom" pruning_keep_recent="100" pruning_keep_every="0" pruning_interval="10" sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.selfchain/config/app.toml sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.selfchain/config/app.toml sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.selfchain/config/app.toml sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.selfchain/config/app.toml

Create service file and start node
Create Service

sudo tee /etc/systemd/system/selfd.service > /dev/null << EOF [Unit] Description=selfd After=network-online.target

[Service] User=$USER ExecStart=$(which selfd) start --home $HOME/.selfchain Restart=on-failure RestartSec=3 LimitNOFILE=65535

[Install] WantedBy=multi-user.target EOF

Download Snapshot (Optional)

curl -o - -L | lz4 -c -d - | tar -x -C $HOME/.selfchain

Start Service

sudo systemctl daemon-reload sudo systemctl enable selfd sudo systemctl restart selfd sudo journalctl -fu selfd -o cat

Snapshots are taken automatically every 6 hours
Snapshot Info
Block Height
:
Size
:
Block Time
:
Indexer
:
Pruning
:
pruning-keep-recent
:
pruning-keep-every
: 0
pruning-interval
:
Currently, we do not provide snapshots
Instruction
# Update & install lz4(Required)
sudo apt install snapd lz4 -y

# Reset Chain Data
sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1false|" $HOME/.selfchain/config/config.toml
sudo systemctl stop selfd
cp $HOME/.selfchain/data/priv_validator_state.json $HOME/.selfchain/priv_validator_state.json.backup
rm -rf $HOME/.selfchain/data

# Download Data Snapshot
curl -o - -L | lz4 -c -d - | tar -x -C $HOME/.selfchain
mv $HOME/.selfchain/priv_validator_state.json.backup $HOME/.selfchain/data/priv_validator_state.json

# Restart
sudo systemctl restart selfd
sudo journalctl -fu selfd -o cat
About State Sync
With fast sync a node is downloading all of the data of an application from genesis and verifying it. With state sync your node will download data related to the head or near the head of the chain and verify the data. This leads to drastically shorter times for joining a network.
State Sync Configuration
Pruning
:
pruning-keep-recent
:
pruning-keep-every
: 0
pruning-interval
:
Instruction
systemctl stop selfd
selfd tendermint unsafe-reset-all --home $HOME/.selfchain --keep-addr-book

STATE_SYNC_RPC=""

LATEST_HEIGHT=$(curl -s $STATE_SYNC_RPC/block | jq -r .result.block.header.height) \
SYNC_BLOCK_HEIGHT=$(($LATEST_HEIGHT - 2000)) \
SYNC_BLOCK_HASH=$(curl -s "$STATE_SYNC_RPC/block?height=$SYNC_BLOCK_HEIGHT" | jq -r .result.block_id.hash)
echo $LATEST_HEIGHT $SYNC_BLOCK_HEIGHT $SYNC_BLOCK_HASH

PEERS=""
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.selfchain/config/config.toml

sed -i.bak -e "s|^enable *=.*|enable = true|" $HOME/.selfchain/config/config.toml
sed -i.bak -e "s|^rpc_servers *=.*|rpc_servers = \"$STATE_SYNC_RPC,$STATE_SYNC_RPC\"|" \
$HOME/.selfchain/config/config.toml
sed -i.bak -e "s|^trust_height *=.*|trust_height = $SYNC_BLOCK_HEIGHT|" \
$HOME/.selfchain/config/config.toml
sed -i.bak -e "s|^trust_hash *=.*|trust_hash = \"$SYNC_BLOCK_HASH\"|" \
$HOME/.selfchain/config/config.toml

systemctl restart selfd && journalctl -fu selfd -o cat