Self Chain

Explorer
Chain-ID: self-dev-1
Latest Node Version: v0.2.2
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
selfchaind keys add selfchaind keys add  --recoverselfchaind keys listselfchaind keys delete selfchaind keys export selfchaind keys import  .backup
Check balance
selfchaind q bank balances $(selfchaind keys show  -a)
Service
sudo journalctl -u selfchaind -f --no-hostname -o catsudo systemctl start selfchaindsudo systemctl stop selfchaindsudo systemctl restart selfchaindsudo systemctl status selfchaindsudo systemctl daemon-reloadsudo systemctl enable selfchaindsudo systemctl disable selfchaindselfchaind status 2>&1 | jq .SyncInfoecho $(selfchaind 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
selfchaind tx staking create-validator \
--amount=000000uself \
--moniker="" \
--pubkey=$(selfchaind tendermint show-validator) \
--identity="" \
--details="" \
--website="" \
--security-contact= \
--chain-id=self-dev-1 \
--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
selfchaind tx staking edit-validator \
--new-moniker="" \
--chain-id=self-dev-1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself" -y
selfchaind tx staking edit-validator \
--identity="" \
--chain-id=self-dev-1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfchaind tx staking edit-validator \
--details="" \
--chain-id=self-dev-1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfchaind tx staking edit-validator \
--commission-rate=0. \
--chain-id=self-dev-1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfchaind tx staking edit-validator \
--new-moniker="" \
--identity="" \
--chain-id=self-dev-1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfchaind tx staking edit-validator \
--new-moniker="" \
--details="" \
--chain-id=self-dev-1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfchaind tx staking edit-validator \
--new-moniker="" \
--commission-rate=0. \
--chain-id=self-dev-1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfchaind tx staking edit-validator \
--identity="" \
--details="" \
--chain-id=self-dev-1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfchaind tx staking edit-validator \
--identity="" \
--commission-rate=0. \
--chain-id=self-dev-1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfchaind tx staking edit-validator \
--details="" \
--commission-rate=0. \
--chain-id=self-dev-1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfchaind tx staking edit-validator \
--new-moniker="" \
--identity="" \
--details="" \
--chain-id=self-dev-1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfchaind tx staking edit-validator \
--new-moniker="" \
--identity="" \
--commission-rate=0. \
--chain-id=self-dev-1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfchaind tx staking edit-validator \
--new-moniker="" \
--details="" \
--commission-rate=0. \
--chain-id=self-dev-1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfchaind tx staking edit-validator \
--identity="" \
--details="" \
--commission-rate=0. \
--chain-id=self-dev-1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfchaind tx staking edit-validator \
--new-moniker="" \
--identity="" \
--details="" \
--commission-rate=0. \
--chain-id=self-dev-1 \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"
selfchaind tx staking edit-validator \
--new-moniker="" \
--identity="" \
--details="" \
--website="" \
--security-contact= \
--chain-id=self-dev-1 \
--commission-rate=0. \
--from= \
--gas-adjustment="1.4" \
--fees="5000uself"




selfchaind status 2>&1 | jq .ValidatorInfoselfchaind q staking validator $(selfchaind keys show  --bech val -a)selfchaind q slashing signing-info $(selfchaind tendermint show-validator)selfchaind tx slashing unjail --broadcast-mode=block --from  --chain-id self-dev-1 --gas-adjustment="1.4" --fees="5000uself"selfchaind 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[[ $(selfchaind q staking validator $(selfchaind keys show  --bech val -a) -oj | jq -r .consensus_pubkey.key) = $(selfchaind status | jq -r .ValidatorInfo.PubKey.value) ]] && echo -e "Your key status is ok" || echo -e "Your key status is error"selfchaind q slashing signing-info $(selfchaind tendermint show-validator)
Token management
selfchaind tx distribution withdraw-all-rewards --from  --chain-id self-dev-1 --gas-adjustment="1.4" --fees="5000uself"selfchaind tx distribution withdraw-rewards $(selfchaind keys show  --bech val -a) --commission --from  --chain-id self-dev-1 --gas-adjustment="1.4" --fees="5000uself"selfchaind tx staking delegate $(selfchaind keys show  --bech val -a) 000000uself --from  --chain-id self-dev-1 --gas-adjustment="1.4" --fees="5000uself"selfchaind tx staking redelegate $(selfchaind keys show  --bech val -a)  000000uself --from  --chain-id self-dev-1 --gas-adjustment="1.4" --fees="5000uself"selfchaind tx staking delegate  000000uself --from  --chain-id self-dev-1 --gas-adjustment="1.4" --fees="5000uself"selfchaind tx staking unbond $(selfchaind keys show  --bech val -a) 000000uself --from  --chain-id self-dev-1 --gas-adjustment="1.4" --fees="5000uself"selfchaind tx bank send   000000uself --from  --chain-id self-dev-1 --gas-adjustment="1.4" --fees="5000uself"
Governance
View Proposal
selfchaind query gov proposal 
Vote
selfchaind tx gov vote   --from  --chain-id self-dev-1 --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
selfchaind tendermint unsafe-reset-all --home $HOME/.selfchain --keep-addr-book
Delete Node
WARNING! This action will remove all files related to the selfchaind chain! Make sure you have backed up your priv_validator_key.json
sudo systemctl stop selfchaind && \
sudo systemctl disable selfchaind && \
rm /etc/systemd/system/selfchaind.service && \
sudo systemctl daemon-reload && \
cd $HOME && \
rm -rf .selfchain && \
rm -rf $(which selfchaind)
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=self-dev-1" >> $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 selfchaind mv selfchaind $HOME/go/bin/

Verify that Binary successfully installed

selfchaind 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

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

Initialize

selfchaind 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/selfchaind.service > /dev/null << EOF [Unit] Description=selfchaind After=network-online.target

[Service] User=$USER ExecStart=$(which selfchaind) 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 selfchaind sudo systemctl restart selfchaind sudo journalctl -fu selfchaind -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 selfchaind
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 selfchaind
sudo journalctl -fu selfchaind -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 selfchaind
selfchaind 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 selfchaind && journalctl -fu selfchaind -o cat