May 31, 2022

penumbra testnet guide

Здравствуйте! Сегодня будем поднимать ноду проекта penumbra. Проект у нас на tendermint, реализован на Rust, соответственно нам необходимо предустановить Rust и Golang.

sudo apt update && sudo apt upgrade

Устанавливаем зависимости:

sudo apt-get install screen curl tar git make clang libssl-dev build-essential pkg-config jq -y

Устанавливаем GO

C
wget -O go1.18.1.linux-amd64.tar.gz https://golang.org/dl/go1.18.1.linux-amd64.tar.gz
rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.18.1.linux-amd64.tar.gz && rm go1.18.1.linux-amd64.tar.gz
echo 'export GOROOT=/usr/local/go' >> $HOME/.bash_profile
echo 'export GOPATH=$HOME/go' >> $HOME/.bash_profile
echo 'export GO111MODULE=on' >> $HOME/.bash_profile
echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' >> $HOME/.bash_profile && . $HOME/.bash_profile
go version

Устанавливаем Rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Видим это, выбираем 1

Current installation options:

   default host triple: x86_64-unknown-linux-gnu
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1
source ~/.cargo/env

Теперь скачиваем и устанавливаем бинарник:

git clone https://github.com/penumbra-zone/penumbra
cd penumbra && git fetch && git checkout 016-pandia && cargo update
cargo build --release --bin pcli
cargo build --release --bin pd

Это займет какое то время.

Восстановление/генерация кошелька

Если у вас уже есть кошелек, привязываем его таким образом:

cargo run --quiet --release --bin pcli wallet import xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
где x - seed вашего кошелька

Далее проверяем что все гладко:

cargo run --quiet --release --bin pcli addr list

Вывод должен быть таким

 Index  Label    Address
 0      Default  penumbrav01t1...

Если кошелька нет, то генерируем:

cargo run --quiet --release --bin pcli wallet generate

В выводе видим

Saving wallet to /home/$USER/.local/share/pcli/penumbra_wallet.json
Saving backup wallet to /home/$USER/.local/share/penumbra-testnet-archive/penumbra-euporie/.../penumbra_wallet.json

Это бекап вашего кошелька, сохраните в надежное место.

Далее идем в дискорд, и просим тестовой валюты раз в сутки в ветке #testnet-faucet, вводим туда адрес кошелька penumbrav0t1(...)

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

Устанавливаем Tendermint:

git clone https://github.com/tendermint/tendermint.git
cd tendermint
make install
tendermint init full

Подтягиваем конфиги tendermint:

curl -s http://testnet.penumbra.zone:26657/genesis | jq ".result.genesis" > $HOME/.tendermint/config/genesis.json
curl -s https://raw.githubusercontent.com/penumbra-zone/penumbra/main/testnets/tm_config_template.toml > $HOME/.tendermint/config/config.toml

Запрашиваем Node ID

curl -s http://testnet.penumbra.zone:26657/status | jq ".result.node_info.id"

В выводе видим что-то вроде этого:

"34124dd9c56ede72e1a2aa28ff47f8ba99fd7489"

Открываем конфиг:

nano $HOME/.tendermint/config/config.toml

Находим строку bootstrap-peers, и вписываем туда Node_ID из вывода выше в формате:

bootstrap-peers = "NODE_ID@testnet.penumbra.zone:26656"

Сохраняем конфиг Ctrl+S, Ctrl+C

Запускаем ноду

screen -dmS pclilogs log export RUST_LOG="warn,pd=debug,penumbra=debug,jmt=info" && cargo run --release --bin pd start --rocks-path $HOME/.rocksdb
tendermint start

Создаем шаблон конфига валидатора

cargo run --release --bin pcli — validator template-definition --file validator.json

В нём мы можем увидеть

сat validator.json

{
  "identity_key": "penumbravalid1g2huds8klwypzczfgx67j7zp6ntq2m5fxmctkf7ja96zn49d6s9qz72hu3",
  "consensus_key": "Fodjg0m1kF/6uzcAZpRcLJswGf3EeNShLP2A+UCz8lw=",
  "name": "",
  "website": "",
  "description": "",
  "enabled": false,
  "funding_streams": [
    {
      "address": "penumbrav1t1mw8270qtpgjy628fg97p2px45e860jtlw0nl3w5y7vq67qx697py9t8ppp3mhwfxv8kegg8wuny64nf60z966krx85cqznjpshqtngffpwnywtzqjklkg3qh7anxk368ywac9l",
      "rate_bps": 100
    }
  ],
  "sequence_number": 0
}

В нем нужно заменить soft-строки, вроде name, website и так далее

Строка enabled позволяет нам включать и выключать валидатора, как пишут разработчики, если вы знаете, что ваш валидатор будет какое-то время не активен, поставьте значение false, и он не попадет в тюрьму, соответственно включить его можно значением true.

Нам необходимо вписать актуальный consensus_key, найти мы его можем командой

grep -A3 pub_key ~/.tendermint/config/priv_validator_key.json | grep "value"

Вывод будет

"value": "xxxxxxxxxxxxxxxxxxxxxxx"

- где x нам нужно вписать в строку "consensus_key": "....."

Сохраняем validator.json

Выгружаем в chain нашего валидатора, затем проверяем список, ищем своего, и хорошенько запоминаем identity key:

cargo run --release --bin pcli — validator upload-definition --file validator.json
cargo run --release --bin pcli — stake list-validators -i

Делегируем токены, которые мы получили в дискорде на identity key своего валидатора

cargo run --release --bin pcli — stake delegate 99penumbra --to penumbravalid(...)

Кстати, проверим балланс нашего кошелька, ведь нам отдали в дискорде 100, а делегировали мы сейчас 99

cargo run --release --bin pcli — balance

Поздравляю, у вас должно было получиться!