Swisstronik

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

Swisstronik is a layer 1 solution built on the Cosmos SDK framework. It aims to combine the benefits of the Ethereum Virtual Machine (EVM) with the underlying infrastructure provided by the Cosmos SDK. This integration allows Swisstronik to offer Ethereum compatibility while providing additional features such as private EVM execution using Intel SGX.​


Binary: realio-networkd
Denom: ario
Symbol: RIO
Exponent: 18
Folder Chain: .realio-network
Key management
swisstronikd keys add swisstronikd keys add  --recoverswisstronikd keys listswisstronikd keys delete swisstronikd keys export swisstronikd keys import  .backup
Check balance
swisstronikd q bank balances $(swisstronikd keys show  -a)
Service
sudo journalctl -u swisstronikd -f --no-hostname -o catsudo systemctl start swisstronikdsudo systemctl stop swisstronikdsudo systemctl restart swisstronikdsudo systemctl status swisstronikdsudo systemctl daemon-reloadsudo systemctl enable swisstronikdsudo systemctl disable swisstronikdswisstronikd status 2>&1 | jq .SyncInfoecho $(swisstronikd tendermint show-node-id)'@'$(curl -s ifconfig.me)':'$(cat $HOME/.swisstronik/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
swisstronikd tx staking create-validator \
--amount=000000000000000000uswtr \
--moniker="" \
--pubkey=$(swisstronikd 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="1000000" \
--gas-prices="30000000000uswtr"
Edit Validator
swisstronikd tx staking edit-validator \
--new-moniker="" \
--chain-id= \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr" -y
swisstronikd tx staking edit-validator \
--identity="" \
--chain-id= \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr"
swisstronikd tx staking edit-validator \
--details="" \
--chain-id= \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr"
swisstronikd tx staking edit-validator \
--commission-rate=0. \
--chain-id= \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr"
swisstronikd tx staking edit-validator \
--new-moniker="" \
--identity="" \
--chain-id= \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr"
swisstronikd tx staking edit-validator \
--new-moniker="" \
--details="" \
--chain-id= \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr"
swisstronikd tx staking edit-validator \
--new-moniker="" \
--commission-rate=0. \
--chain-id= \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr"
swisstronikd tx staking edit-validator \
--identity="" \
--details="" \
--chain-id= \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr"
swisstronikd tx staking edit-validator \
--identity="" \
--commission-rate=0. \
--chain-id= \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr"
swisstronikd tx staking edit-validator \
--details="" \
--commission-rate=0. \
--chain-id= \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr"
swisstronikd tx staking edit-validator \
--new-moniker="" \
--identity="" \
--details="" \
--chain-id= \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr"
swisstronikd tx staking edit-validator \
--new-moniker="" \
--identity="" \
--commission-rate=0. \
--chain-id= \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr"
swisstronikd tx staking edit-validator \
--new-moniker="" \
--details="" \
--commission-rate=0. \
--chain-id= \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr"
swisstronikd tx staking edit-validator \
--identity="" \
--details="" \
--commission-rate=0. \
--chain-id= \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr"
swisstronikd tx staking edit-validator \
--new-moniker="" \
--identity="" \
--details="" \
--commission-rate=0. \
--chain-id= \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr"
swisstronikd tx staking edit-validator \
--new-moniker="" \
--identity="" \
--details="" \
--website="" \
--security-contact= \
--chain-id= \
--commission-rate=0. \
--from= \
--gas="1000000" \
--gas-prices="30000000000uswtr"




swisstronikd status 2>&1 | jq .ValidatorInfoswisstronikd q staking validator $(swisstronikd keys show  --bech val -a)swisstronikd q slashing signing-info $(swisstronikd tendermint show-validator)swisstronikd tx slashing unjail --broadcast-mode=block --from  --chain-id  --gas="1000000" --gas-prices="30000000000uswtr"swisstronikd 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[[ $(swisstronikd q staking validator $(swisstronikd keys show  --bech val -a) -oj | jq -r .consensus_pubkey.key) = $(swisstronikd status | jq -r .ValidatorInfo.PubKey.value) ]] && echo -e "Your key status is ok" || echo -e "Your key status is error"swisstronikd q slashing signing-info $(swisstronikd tendermint show-validator)
Token management
swisstronikd tx distribution withdraw-all-rewards --from  --chain-id  --gas="1000000" --gas-prices="30000000000uswtr"swisstronikd tx distribution withdraw-rewards $(swisstronikd keys show  --bech val -a) --commission --from  --chain-id  --gas="1000000" --gas-prices="30000000000uswtr"swisstronikd tx staking delegate $(swisstronikd keys show  --bech val -a) 000000000000000000uswtr --from  --chain-id  --gas="1000000" --gas-prices="30000000000uswtr"swisstronikd tx staking redelegate $(swisstronikd keys show  --bech val -a)  000000000000000000uswtr --from  --chain-id  --gas="1000000" --gas-prices="30000000000uswtr"swisstronikd tx staking delegate  000000000000000000uswtr --from  --chain-id  --gas="1000000" --gas-prices="30000000000uswtr"swisstronikd tx staking unbond $(swisstronikd keys show  --bech val -a) 000000000000000000uswtr --from  --chain-id  --gas="1000000" --gas-prices="30000000000uswtr"swisstronikd tx bank send   000000000000000000uswtr --from  --chain-id  --gas="1000000" --gas-prices="30000000000uswtr"
Governance
View Proposal
swisstronikd query gov proposal 
Vote
swisstronikd tx gov vote   --from  --chain-id  --gas="1000000" --gas-prices="30000000000uswtr"
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/.swisstronik/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/.swisstronik/config/app.toml
Enable Indexing usually enabled by default
sed -i -e 's|^indexer *=.*|indexer = "kv"|' $HOME/.swisstronik/config/config.toml
Disable Indexing
sed -i -e 's|^indexer *=.*|indexer = "null"|' $HOME/.swisstronik/config/config.toml
Reset Chain Data
swisstronikd tendermint unsafe-reset-all --home $HOME/.swisstronik --keep-addr-book
Delete Node
WARNING! This action will remove all files related to the swisstronikd chain! Make sure you have backed up your priv_validator_key.json
sudo systemctl stop swisstronikd && \
sudo systemctl disable swisstronikd && \
rm /etc/systemd/system/swisstronikd.service && \
sudo systemctl daemon-reload && \
cd $HOME && \
rm -rf .swisstronik && \
rm -rf $(which swisstronikd)
Genesis
wget -O $HOME/.swisstronik/config/genesis.json "https://snap.swisstronik.kynraze.com/genesis.json"
Addrbook
Update every 1h
wget -O $HOME/.swisstronik/config/addrbook.json "https://snap.swisstronik.kynraze.com/addrbook.json"
List Peers:
PEERS= 
sed -i -e "s|^persistent_peers *=.*|persistent_peers = "$PEERS"|" $HOME/.swisstronik/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




SWISSTRONIK_NODENAME=""

save and import variable

echo "export SWISSTRONIK_NODENAME=$SWISSTRONIK_NODENAME" >> $HOME/.bash_profile if [ ! $WALLET ]; then echo "export WALLET=wallet" >> $HOME/.bash_profile fi echo "export SWISSTRONIK_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 unzip 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
1. Install from .deb package

wget https://github.com/SigmaGmbH/swisstronik-chain/releases/download/v1.0.1/swisstronikd.deb.zip unzip swisstronikd.deb.zip sudo dpkg -i swisstronik_1.0.1-updated-binaries_amd64.deb swisstronikd version

2. Build from sources

git clone https://github.com/SigmaGmbH/swisstronik-chain.git cd swisstronik-chain git submodule update --init --recursive make build make install

Verify that Binary successfully installed

swisstronikd version --long

#If you got Error: Enclave failure: SGX_ERROR_ENCLAVE_FILE_ACCESS

sudo cp /usr/lib/enclave.signed.so $HOME/.swisstronik-enclave/enclave.signed.so

#In case you are installed as a user and not root

sudo chown -R $USER:$USER $HOME/.swisstronik-enclave

Configure Node
Obtain master key

swisstronikd enclave request-master-key rpc.testnet.swisstronik.com:46789

Set Gas Prices

sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \"7uswtr\"|" $HOME/.swisstronik/config/app.toml

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/.swisstronik/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/.swisstronik/config/app.toml

Set Config Binary

swisstronikd config chain-id $SWISSTRONIK_CHAIN_ID swisstronikd config keyring-backend file swisstronikd config node tcp://localhost:657

Initialize

swisstronikd init $SWISSTRONIK_NODENAME --chain-id $SWISSTRONIK_CHAIN_ID

Get Genesis and Addrbook
Download genesis
wget -O $HOME/.swisstronik/config/genesis.json "https://snap.swisstronik.kynraze.com/genesis.json"
Download Addrbook
wget -O $HOME/.swisstronik/config/addrbook.json "https://snap.swisstronik.kynraze.com/addrbook.json"
Set Seeds and Peers

PEERS="" sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.swisstronik/config/config.toml sed -i -e "s|^seeds *=.*|seeds = \"\"|" $HOME/.swisstronik/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/.swisstronik/config/app.toml sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.swisstronik/config/app.toml sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.swisstronik/config/app.toml sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.swisstronik/config/app.toml

Create service file and start node
Create Service

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

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

[Install] WantedBy=multi-user.target EOF

Download Snapshot (Optional)

curl -o - -L https://snap.swisstronik.kynraze.com/snapshot-latest.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.swisstronik

Start Service

sudo systemctl daemon-reload sudo systemctl enable swisstronikd sudo systemctl restart swisstronikd sudo journalctl -fu swisstronikd -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/.swisstronik/config/config.toml
sudo systemctl stop swisstronikd
cp $HOME/.swisstronik/data/priv_validator_state.json $HOME/.swisstronik/priv_validator_state.json.backup
rm -rf $HOME/.swisstronik/data

# Download Data Snapshot
curl -o - -L https://snap.swisstronik.kynraze.com/snapshot-latest.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.swisstronik
mv $HOME/.swisstronik/priv_validator_state.json.backup $HOME/.swisstronik/data/priv_validator_state.json

# Restart
sudo systemctl restart swisstronikd
sudo journalctl -fu swisstronikd -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 swisstronikd
swisstronikd tendermint unsafe-reset-all --home $HOME/.swisstronik --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/.swisstronik/config/config.toml

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

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