# SOURCE. validator setup

By [chaingon | web3topia](https://paragraph.com/@chaingon) · 2022-09-14

---

Подготовка
----------

Обновляем систему

    sudo apt update && sudo apt upgrade -y
    

Ставим зависимости

    sudo apt install curl build-essential git wget jq make gcc -y
    

    sudo curl https://get.ignite.com/cli! | sudo bash
    

Ставим GO

    ver="1.18.3" # set ver.
    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
    go version
    

Установка
---------

Клонируем репо

    cd $HOME
    rm source -rf
    git clone https://github.com/Source-Protocol-Cosmos/source.git --branch testnet
    

Собираем бинарники

    cd source
    ignite chain build
    

Настройка и запуск
------------------

Задаем имя ноды _придумываем и вставляем сами_

    NODENAME=ПРИДУМАЙ_САМ
    

Задаем переменные

    echo "export NODENAME=$NODENAME" >> $HOME/.bash_profile
    if [ ! $WALLET ]; then
        echo "export WALLET=wallet" >> $HOME/.bash_profile
    fi
    SOURCE_CHAIN_ID=sourcechain-testnet
    source $HOME/.bash_profile
    

Инициализируем ноду

    sourced init $NODENAME --chain-id=$SOURCE_CHAIN_ID
    

Скачиваем генезис

    wget -qO $HOME/.source/config/genesis.json "https://raw.githubusercontent.com/Source-Protocol-Cosmos/testnets/master/sourcechain-testnet/genesis.json"
    

### Конфиги

*   настраиваем минимальную цену за газ в app.toml
    

    sed -i -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0usource\"/" $HOME/.source/config/app.toml
    

*   настраиваем чейнid чтобы не вводить каждый раз
    

    sourced config chain-id $SOURCE_CHAIN_ID
    

*   настраиваем сиды и пиры
    

    SEEDS="6ca675f9d949d5c9afc8849adf7b39bc7fccf74f@164.92.98.17:26656"
    PEERS="6ca675f9d949d5c9afc8849adf7b39bc7fccf74f@164.92.98.17:26656,6721349b8a9846b730fdadb9ddf0b0596acf98e7@217.13.223.167:26656,7ccb6331c8f8aed3439fe2f88d01f8808564f9e2@164.92.98.14:26656,c293787dd1aeede1e1716196db4abb30d171710e@38.242.220.245:26656,ee528debedd6b1dca93fbb5774519ea67c0eeb9b@142.93.134.100:26656,dbba2131476082da8cdf6158931eeca72de6bfd3@62.171.181.47:26656,03873e48e419cee0830e64860c81552e3c8a2df5@188.166.38.18:26656,d9aac0b2753ef46858d03f8497431b99740e8abe@5.161.147.146:26656,b02e2bd359623aeee2d4fad94d37af8b064508f6@167.235.224.141:26656,3e2c92297b30263c726725eabb1e0927a7aff6cf@20.198.115.141:26656,3874444d8504dc31836c1e41ffe408bee6b80904@38.242.159.243:39656,f0a070fde1ed643021c45b3c439bb0a8346338e7@89.179.33.100:26656,094bd69cb65fd3b284283d7960e2fdc4989cc39c@167.235.142.71:2665"
    sed -i -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.source/config/config.toml
    

*   меняем порты (опционально)
    

_config.toml_

    sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:36658\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:36657\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6061\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:36656\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":36660\"%" $HOME/.source/config/config.toml
    

    external_address=$(wget -qO- eth0.me)
    sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:36656\"/" $HOME/.source/config/config.toml
    

_app.toml_

    sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9190\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9191\"%" $HOME/.source/config/app.toml
    

_client.toml_

    sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:36657\"%" $HOME/.source/config/client.toml
    

*   Настраиваем прунинг (опционально)
    

    pruning="custom" && \
    pruning_keep_recent="1000" && \
    pruning_keep_every="0" && \
    pruning_interval="50" && \
    sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.source/config/app.toml && \
    sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.source/config/app.toml && \
    sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.source/config/app.toml && \
    sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.source/config/app.toml
    

Включаем прометеус

    sed -i -e "s/prometheus = false/prometheus = true/" $HOME/.source/config/config.toml
    

Сбрасываем данные чейна

    sourced unsafe-reset-all
    

Создаем сервис

    sudo tee /etc/systemd/system/sourced.service > /dev/null <<EOF
    [Unit]
    Description=source
    After=network-online.target
    
    [Service]
    User=$USER
    ExecStart=$(which sourced) --home $HOME/.source start
    Restart=on-failure
    RestartSec=3
    LimitNOFILE=65535
    
    [Install]
    WantedBy=multi-user.target
    EOF
    

Запускаем сервис

    sudo systemctl daemon-reload
    sudo systemctl enable sourced
    sudo systemctl restart sourced && sudo journalctl -u sourced -f -o cat
    

**Запуск со СтейтСинк (опционально, быстро, просто)**

снапшот от [https://github.com/obajay](https://github.com/obajay) . Спасибо ему.

    sudo systemctl stop sourced
    rm -rf $HOME/.source/data/
    mkdir $HOME/.source/data/
    
    # download archive
    cd $HOME
    wget http://116.202.236.115:8000/sourcedata.tar.gz
    
    # unpack the archive
    tar -C $HOME/ -zxvf sourcedata.tar.gz --strip-components 1
    # !! IMPORTANT POINT. If the validator was created earlier. Need to reset priv_validator_state.json  !!
    wget -O $HOME/.source/data/priv_validator_state.json "https://raw.githubusercontent.com/obajay/StateSync-snapshots/main/priv_validator_state.json"
    cd && cat .source/data/priv_validator_state.json
    {
      "height": "0",
      "round": 0,
      "step": 0
    }
    
    # after unpacking, run the node
    # don't forget to delete the archive to save space
    cd $HOME
    rm sourcedata.tar.gz
    # start the node
    sudo systemctl restart sourced && journalctl -u sourced -f -o cat
    

### КОШЕЛЕКИ и ВАЛИДАТОР

создаем кошелек

    sourced keys add wallet
    

или восстанавливаем из сид

    sourced keys add wallet --recover
    

и экспортируем паблики в переменные

    SOURCE_WALLET_ADDRESS=$(sourced keys show $WALLET -a)
    

    SOURCE_VALOPER_ADDRESS=$(sourced keys show $WALLET --bech val -a)
    

    echo 'export SOURCE_WALLET_ADDRESS='${SOURCE_WALLET_ADDRESS} >> $HOME/.bash_profile echo 'export SOURCE_VALOPER_ADDRESS='${SOURCE_VALOPER_ADDRESS} >> $HOME/.bash_profile source $HOME/.bash_profile
    

идем в кран в [дискорде](https://discord.gg/xsRZraS87P) и просим монеты, затем проверяем баланс

    sourced query bank balances $SOURCE_WALLET_ADDRESS
    

Создаем валидатора

    sourced tx staking create-validator \
      --amount 1000000usource \
      --from $WALLET \
      --commission-max-change-rate "0.01" \
      --commission-max-rate "0.2" \
      --commission-rate "0.07" \
      --min-self-delegation "1" \
      --pubkey  $(sourced tendermint show-validator) \
      --moniker $NODENAME \
      --chain-id $SOURCE_CHAIN_ID
    

Редактировать информацию о валидаторе можно так

    sourced tx staking edit-validator \
      --moniker=$NODENAME \
      --identity=<your_keybase_id> \
      --website="<your_website>" \
      --details="<your_validator_description>" \
      --chain-id=$SOURCE_CHAIN_ID \
      --from=$WALLET
    

Снести ноду

    sudo systemctl stop sourced
    sudo systemctl disable sourced
    sudo rm /etc/systemd/system/source* -rf
    sudo rm $(which sourced) -rf
    sudo rm $HOME/.source* -rf
    sudo rm $HOME/source -rf
    

Логи

    journalctl -u sourced -f -o cat
    

collect://

---

*Originally published on [chaingon | web3topia](https://paragraph.com/@chaingon/source-validator-setup)*
