Guides
July 18, 2022

Penumbra: installation guide

Penumbra - это полностью приватная PoS сеть и децентрализованный обменник для экосистемы Cosmos. Команда проекта строит полностью защищенную зону в экосистеме Cosmos, которая позволит каждому безопасно совершать транзакции, не сообщая свою личную информацию. Подробную информацию о проекте можно почитать здесь.

В ноябре 2021 года привлекли $4.75M в сид раунде, лид инвестором стал Dragonfly Capital. Interchain Foundation, Lemniscap, Robot Ventures, Volt Capital, Figment, Strangelove Ventures, Informal Systems, ZKValidator также инвестировали в проект.

Обсуждение проекта, как обычно, в дискорде Nodera - https://discord.gg/TmnKznRqnv

Гайд актуален для версии v0.66.0

DYOR:

Website
Twitter
Discord

Оглавление


Подготовка сервера

Оглавление

На данном этапе минимальные требования к серверу не озвучены, у меня работает без проблем на Hetzner - CPX21.

Обновляем пакеты

sudo apt update && sudo apt upgrade -y

Устанавливаем инструменты разработчика и необходимые пакеты

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

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

# устанавливаем необходимые пакеты
sudo apt install curl build-essential gcc make -y
# загружаем установочный скрипт Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Выбираем пункт 1) продолжить установку (по умолчанию).

# активируем среду Rust для текущей оболочки
source ~/.profile
source ~/.cargo/env

Установка и запуск pcli

Оглавление

Клонируем репозиторий проекта с нодой

git clone https://github.com/penumbra-zone/penumbra

Переходим в папку с проектом, подтягиваем последнюю версию и переключаемся на версию v0.66.0

cd penumbra && git fetch && git checkout v0.66.0 && cargo update

Собираем бинарные файлы

cargo build --release --bin pcli
cp $HOME/penumbra/target/release/pcli /usr/local/bin

Проверяем версию

pcli --version

Создание кошелька

Оглавление

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

cargo run --quiet --release --bin pcli init soft-kms generate

Сохраняем бэкап кошелька и сид-фразу в надежном месте

$HOME/.local/share/pcli/config.json

Для импорта существующего кошелька используем команду

cargo run --quiet --release --bin pcli init soft-kms import-phrase

Узнаем свой адрес кошелька

cargo run --quiet --release --bin pcli view address 0

В канале #testnet-faucet запрашиваем тестовые токены, введя адрес своего кошелька.


Запуск pd и tendermint

Оглавление

Penumbra использует консенсус тендерминта, поэтому для запуска валидатора нам необходимо скачать

Устанавливаем go, версия 1.19.5

cd
wget https://go.dev/dl/go1.19.5.linux-amd64.tar.gz; \
rm -rv /usr/local/go; \
tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz && \
rm -v go1.19.5.linux-amd64.tar.gz && \
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> ~/.bash_profile && \
source ~/.bash_profile && \
go version

Собираем бинарные файлы pd

cd penumbra
cargo build --release --bin pd

Сбрасываем данные и присоединяемся к тестнету

cargo run --bin pd --release -- testnet unsafe-reset-all
cargo run --bin pd --release -- testnet join

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

cd $HOME 
git clone https://github.com/cometbft/cometbft.git 
cd cometbft 
git checkout v0.37.2 
make install 
cp $HOME/go/bin/cometbft /usr/local/bin/cometbft

Cоздаем скрин для запуска cometbft

screen -S cometbft

Запускаем tendermint

cometbft start --home ~/.penumbra/testnet_data/node0/cometbft

Не обращаем внимание на логи, выходим из скрина при помощи сочетания клавиш Ctrl+A+D (убедитесь, что выбрана английская раскладка клавиатуры)

Cоздаем скрин для запуска pd

screen -S pd

Запускаем pd

cd penumbra
cargo run --bin pd --release -- start --home ~/.penumbra/testnet_data/node0/pd

Если все сделано правильно, должна начаться синхронизация.

Ждем окончания синхронизации. Проверить актуальный блок можно командой

cargo run --quiet --release --bin pcli view sync

Важно! Проверку актуального блока лучше делать из основного терминала

Для выхода из скрина pd: Ctrl+A+D

Для возврата в скрин pd:

screen -x pd

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

Оглавление

Выполняем команду ниже и копируем данные, отмеченные в зеленном квадрате, в блокнот

 cargo run --release --bin pcli validator definition template

Копируем и записываем в блокнот значение value из файла priv_validator_key.json

grep -A3 pub_key ~/.penumbra/testnet_data/node0/cometbft/config/priv_validator_key.json

Удаляем старый и создаем новый файл валидатора

rm -rf validator.toml && nano validator.toml

Далее необходимо выполнить ряд действий:

  • Вставляем данные, указанные на скрине выше.
  • Изменяем значение value, скопированное из priv_validator_key.json.
  • Добавляем имя ноды в параметр "name"
  • Добавляем сайт и описание (опционально)
  • Параметр "enabled" меняем с false на true
  • Параметр "sequence_number" меняем с 0 на 1

Сохраняем изменения комбинацией клавиш Ctrl+X > y> Enter

Загружаем изменения в файл валидатора

cargo run --release --bin pcli -- validator definition upload --file validator.toml

Узнаем адреса кошелька и валидатора командами

#адрес кошелька
cargo run --quiet --release --bin pcli view address 0
#адрес валидатора 
cargo run --release --bin pcli -- validator identity

Создаем переменные с адресом кошелька и валидатора

PENUMBRA_WALLET=<адрес кошелька>
PENUMBRA_VALID=<адрес валидатора>

Сохраняем переменные, перезагружаем .bash_profile и проверяем значения переменных

echo "export PENUMBRA_WALLET="${PENUMBRA_WALLET}"" >> $HOME/.bash_profile 
echo "export PENUMBRA_VALID="${PENUMBRA_VALID}"" >> $HOME/.bash_profile 

source $HOME/.bash_profile 

echo -e "\npenumbra_wallet > ${PENUMBRA_WALLET}.\n" 
echo -e "\npenumbra_valid > ${PENUMBRA_VALID}.\n" 

Делегируем токены своему валидатору

cargo run --release --bin pcli -- tx delegate 1000penumbra --to $PENUMBRA_VALID

Проверяем своего валидатора в списке

cargo run --release --bin pcli -- query validator list -i

Важно! Если в дальнейшем вам будет необходимо внести изменения в файл validator.toml, алгоритм действий следующий:

1. Отключаем валидатора

cargo run --release --bin pcli -- validator definition fetch --file validator.toml

2. Вносим необходимые изменения

3. В файле validator.toml изменяем параметр "sequence_number" на n+1, где n - текущее значение (если было "sequence_number": 2, то ставим "sequence_number": 3)

4. Включаем валидатора

cargo run --release --bin pcli -- validator definition upload --file validator.tomln

Обновление

Оглавление

Отключаем валидатора

cd penumbra
cargo run --release --bin pcli -- validator definition fetch --file validator.toml

Переходим в папку, обновляем локальный репозиторий, переходим в ветку v0.66.0 и обновляем кошелек

git pull origin
git stash
git checkout v0.66.0
cargo build --release --bin pcli
cargo run --quiet --release --bin pcli view reset
cp $HOME/penumbra/target/release/pcli /usr/local/bin
pcli --version
#pcli 0.66.0

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

cd $HOME 
git clone https://github.com/cometbft/cometbft.git 
cd cometbft 
git checkout v0.37.2 
make install 
cp $HOME/go/bin/cometbft /usr/local/bin/cometbft

Сбрасываем данные и присоединяемся к тестнету

cd $HOME/penumbra
cargo run --bin pd --release -- testnet unsafe-reset-all
cargo run --bin pd --release -- testnet join

Переходим в скрины и перезапускаем pd и tendermint

screen -x pd

Запускаем pd

cd penumbra
cargo run --bin pd --release -- start --home ~/.penumbra/testnet_data/node0/pd

Выходим из скрина при помощи сочетания клавиш Ctrl+A+D

screen -x cometbft

Запускаем tendermint

cometbft start --home ~/.penumbra/testnet_data/node0/cometbft

Ждем окончания синхронизации и выходим из скрина при помощи сочетания клавиш Ctrl+A+D

Копируем и записываем в блокнот значение value из файла priv_validator_key.json

grep -A3 pub_key ~/.penumbra/testnet_data/node0/cometbft/config/priv_validator_key.json

Важно! Если вы не участвовали в 42-м и последующих тестнетах выполняем инструкции ниже

Сохраняем предыдущую версию файла валидатора

mkdir penumbra_backup && cp validator.json $HOME/penumbra/penumbra_backup/validator_backup.toml

Выполняем команду ниже и копируем данные, отмеченные в зеленном квадрате, в блокнот

 cargo run --release --bin pcli validator definition template

Удаляем старый и создаем новый файл валидатора

rm -rf validator.json && nano validator.toml

Далее необходимо выполнить ряд действий:

  • Вставляем данные, указанные на скрине выше.
  • Добавляем имя ноды в параметр "name"
  • Добавляем сайт и описание (опционально)
  • Параметр "enabled" меняем с false на true

Сохраняем изменения комбинацией клавиш Ctrl+X > y> Enter

Переходим в файл валидатора

nano validator.toml
  • Изменяем значение value, скопированное из priv_validator_key.json.
  • Параметр "sequence_number" меняем с 0 на 1

Загружаем изменения в файл валидатора

cargo run --release --bin pcli -- validator definition upload --file validator.toml

Делегируем токены своему валидатору

cargo run --release --bin pcli -- tx delegate 1000penumbra --to $PENUMBRA_VALID

Проверяем своего валидатора в списке

cargo run --release --bin pcli -- query validator list -i

Задания

Оглавление

Отправка транзакций

После получения токенов, начинаем тестировать отправку токенов на другие кошельки (можно взять адреса в канале #testnet-faucet) следующей командой

cargo run --quiet --release --bin pcli tx send <amount>penumbra --to <recipient address>

# например отправим 10 токенов на адрес penumbrav2t...
cargo run --quiet --release --bin pcli tx send 10penumbra --to penumbrav2t164kgxd6el8elnd9jqp7dz5qjn4qayh8aen46y02nhu559cq84q0m3nzncxf42lquk2mhkwunke3cqq6gz9cvd7nemxufccl8wczze8yfn3545juyt0t54rgttmfcfdylgs7uut

Полезные команды

Оглавление

Посмотреть свой адрес

cargo run --quiet --release --bin pcli view address

Посмотреть баланс

cargo run --quiet --release --bin pcli view balance

Проверить текущий блок

cargo run --quiet --release --bin pcli view sync

Nodera

Telegram | Discord | Twitter