December 12, 2023

Autonity R5

Web Discord Leaderboard Github

Details

Round 5 is open!

  • Start Time: December 13th 2023 00:00:00 UTC
  • Duration: 7 weeks
  • Theme: Trading and markets

Основная информация и форма здесь - https://www.autonity.org/validators/#become-a-validator

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

# обновляем репозитории
apt update && apt upgrade -y

# устанавливаем необходимые утилиты
apt install curl iptables build-essential git wget jq make gcc nano tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip chrony libleveldb-dev liblz4-tool -y

File2Ban - подробнее здесь и здесь

# устанавливаем и копируем конфиг, который будет иметь больший приоритет
apt install fail2ban -y && \
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && \
nano /etc/fail2ban/jail.local
# раскомментировать и добавить свой IP: ignoreip = 127.0.0.1/8 ::1 <ip>
systemctl restart fail2ban

# проверяем status 
systemctl status fail2ban
# проверяем, какие jails активны (по умолчанию только sshd)
fail2ban-client status
# проверяем статистику по sshd
fail2ban-client status sshd
# смотрим логи
tail /var/log/fail2ban.log
# останавливаем работу и удаляем с автозагрузки
#systemctl stop fail2ban && systemctl disable fail2ban

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

ver="1.21.3" && \
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" >> $HOME/.bash_profile && \
source $HOME/.bash_profile && \
go version

Устанавливаем ethkey, который нам понадобиться дальше для вытаскивания приватника

git clone https://github.com/autonity/autonity.git autonity1
cd autonity1
make all
mv build/bin/ethkey /usr/local/bin
ethkey --version
#ethkey version 0.13.0-rc-8b4a17c1-20240210

Важно: при проблемах с установкой aut или других бинарных файлов добавьте следующие переменные и сделайте make clean перед повторной установкой

export CGO_CFLAGS="-O -D__BLST_PORTABLE__" 
export CGO_CFLAGS_ALLOW="-O -D__BLST_PORTABLE__"
make clean

1. Устанавливаем утилиту Autonity Utility (aut)

Рекомендуемый способ взаимодействия с сетью Autonity - через утилиту Autonity Utility Tool aut, которая предоставляет интерфейс командной строки для специфичных для Autonity запросов и операций, а также большую часть базовой функциональности Ethereum. Как правило, ее необходимо установить только на локальных компьютерах для подключения к конечной точке RPC клиента Autonity Go (либо вашего собственного узла, либо узла, предоставляющего общедоступный доступ RPC)

# Для ubuntu 20.04
cd
apt install python3-pip && \
apt install python3.8-venv && \
pip install pipx
# Для ubuntu 22.04
cd
apt install python3-pip && \
apt install python3.10-venv && \
pip install pipx
# если нужно установить определенную версию
#pipx install --force 'https://github.com/autonity/aut/releases/download/v0.4.0.dev0/aut-0.4.0.dev0-py3-none-any.whl'
#mv /root/.local/bin/aut /usr/local/bin/aut
# для установки или обновления
pipx install --force git+https://github.com/autonity/aut
mv /root/.local/bin/aut /usr/local/bin/aut
aut --version
#aut, version 0.4.0

Создаем .autrc файл, благодаря которому aut утилита будет искать определенную конфигурацию

tee <<EOF >/dev/null $HOME/.autrc
[aut]
rpc_endpoint= ws://127.0.0.1:8546
EOF

2. Устанавливаем Autonity node

Команда предполагает устанавливать Autonity Go на главном компьютере (VPS или другом хосте, который всегда включен и постоянно доступен), а отдельный локальный компьютер будет использоваться для создания транзакций и запросов, которые затем отправляются клиенту Autonity Go на главном компьютере через конечную точку RPC

В данном гайде мы запустим все на 1 сервере, но данные действия не рекомендуются!!!

Примечание. Это руководство предназначено для использования в тестовых сетях, для которых на карту не поставлено никакой реальной ценности. Производственная настройка, скорее всего, будет иметь требования, не описанные в этом руководстве, такие как доступность и безопасность ноды. Например, конфигурация, описанная здесь, предоставляет незашифрованную http конечную точку RPC

Входящий трафик должен быть разрешен на:

  • TCP, UDP 30303 для связи с узлом p2p (DEVp2p)

Вы также можете разрешить трафик по следующим портам:

  • TCP 8545 чтобы установить http RPC-соединения с узлом
  • TCP 8546 чтобы установить RPC-соединения WebSocket с узлом
  • TCP 6060 для экспорта показателей Autonity (рекомендуется, но не обязательно)

РЕКОМЕНДУЕМЫЕ ХАРАКТЕРИСТИКИ

Скачиваем бинарный файл. Актуальные версии можно найти здесь

cd
git clone https://github.com/autonity/autonity && cd autonity
git checkout tags/v0.13.0 -b v0.13.0
make autonity

mv $HOME/autonity/build/bin/autonity /usr/local/bin/
autonity version
#Version: 0.13.0

Создаем каталог autonity-chaindata для хранения рабочих данных autonity и создаем нужные нам ключи

cd
mkdir -p $HOME/autonity-chaindata/autonity

Начиная с версии 0.13.0 nodekey переименовали в autonitykeys. В данном руководстве мы будем генерировать nodekey самостоятельно. чтобы оставить старое название и добавлять флаг --autonitykeys $HOME/autonity-chaindata/autonity/nodekey в сервисный файл

Нам необходимо создать nodekey, tresure.key и oracle.key

nodekey является главным ключом ноды, от которого формируется адрес валидатора и enode

tresure.key будет являться нашей сокровищницей. С помощью данного ключа мы будем делать делегирование на валидатора и на этот ключ будем получать вознаграждения

oracle.key будет использоваться в качестве криптографического идентификатора сервера Oracle и будет использоваться для подписания транзакций отчета о ценах, отправляемых в Oracle Contract on-chain

Транзакционные издержки за отправку данных отчета о ценах в сети возмещаются, но необходимо предварительно пополнить счет oracle.key, чтобы предотвратить ошибку нехватки газа при первой транзакции.

!!!Обязательно пополните Oracle кошелек после запуска ноды!!!

Генерируем nodekey

autonity genAutonityKeys $HOME/autonity-chaindata/autonity/nodekey --writeaddress
#Node address: 0xac16454f6D7B5725F4221f86D935963C87Dae7F5
#Node public key: 0x1988dee846c92a7a95b5ddc62a808fb59f48206a34eb13f4c8761e4c470adc99da1c0f3963515c683c1cf02dd5248af784041ea0084cbb854942d1583173a089
#Consensus public key: 0x87f764f47664b635290ffaa567bcc9caf6ef7a51116cafc7c06c7e24710bf91ec5206a359592c037f6ed5c7f44742628

Создаем отдельный каталог для tresure.key и oracle.key

mkdir -p $HOME/.autonity/keystore

Создаем кошелек oracle и сохраняем созданный файл

aut account new -k $HOME/.autonity/keystore/oracle.key
#

Создаем кошелек tresure и сохраняем созданный файл

aut account new -k $HOME/.autonity/keystore/tresure.key
#

ВАЖНО: обязательно делайте резервные копии ваших ключей. Также запоминайте фразу-пароль, которую Вы использовали при его создании! Если Вы не помните пароль, то не сможете расшифровать этот файл закрытого ключа и можете потерять все средства, связанные с этой учетной записью!!!

Теперь добавляем в .autrc наш ключ tresure

nano $HOME/.autrc

Добавляется строка keyfile=/root/.autonity/keystore/tresure.key

Создаем сервисный файл

Нам не нужны, бутноды, так как все должно подтягиваться с помощью флага --piccadilly

tee <<EOF >/dev/null /etc/systemd/system/autonity.service
[Unit]
Description=autonity node
After=network.target

[Service]
User=$USER
Type=simple
ExecStart=$(which autonity) --datadir $HOME/autonity-chaindata --syncmode full --piccadilly --http --http.addr 0.0.0.0 --http.api aut,eth,net,txpool,web3,admin --http.vhosts \*  --ws     --ws.addr 127.0.0.1 --ws.api aut,eth,net,txpool,web3,admin --autonitykeys $HOME/autonity-chaindata/autonity/nodekey --nat extip:$(curl 2ip.ru)
Restart=on-failure
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable autonity
sudo systemctl restart autonity && journalctl -u autonity -f -o cat

Важно: если нода не может запуститься, то добавьте бутноды в сервисный файл

--bootnodes enode://48a10db920251436ee1d7989db6cbab734157d5bd3ec9d534021e4903fdab51407ba4fd936bd6af1d188e3f464374c437accefa40f0312eac9bc9ae6fc0a2782@34.105.239.129:30303,enode://9379179c8c0f7fec28dd3cca64da5d85f843e3b05ba24f6ae4f8d1bb688b4581f92c10e84e166328499987cf2da18668446dd7353724cf691ad2a931a0cbd88d@34.93.237.13:30303,enode://c7e8619c09c85c47a2bbda720ecec449ab1207574cc60d8ec451b109b407d7542cabc2683eedcf326009532e3aea2b748256bac1d50bf877c73eea4d633e8913@54.241.251.216:30303,enode://e7cea14b38d590066217b6639ee24f964b5ec3f5db127e460b695562495f5d04d2063b71a86baeaddbf318d204e4322dee2271c9dbcf462650f2547233fd2f67@178.205.102.224:30303,enode://219f542340d5f59e962f4a841b91825d098c61fee2751ec82c1440a4710b5c625d6c8fdc1bc3fc482369be83b23e59b3e983c8f463d39cb85f8d46665fca0bb4@217.66.20.45:30303,enode://d949e4858e2d3e06bd9f4b15de17b5bbdab111f9964b73cde40d78bc8af30cdf829072ad298cc744253aba74133b21eba214bc3b4cb42ead3f04c32c8b902656@92.255.196.146:30303

3. Install Oracle

Команда предполагает, что Autonity Oracle будет работать на отдельном устройстве (VPS или другом хосте, который всегда включен и постоянно доступен), и отдельный сервер будет использоваться для клиента Autonity Go, Подразумевается, что oracle будет работать через WSS

В данном гайде мы запустим все на 1 сервере, но данные действия не рекомендуются

Входящий трафик должен быть разрешен на:

  • TCP 8546 для подключения WebSocket RPC к узлу

РЕКОМЕНДУЕМЫЕ ХАРАКТЕРИСТИКИ

cd
git clone https://github.com/autonity/autonity-oracle && cd autonity-oracle
git fetch --all 
git checkout v0.1.6 
make autoracle
mv build/bin/autoracle /usr/local/bin
#cp e2e_test/plugins/simulator_plugins/sim_plugin build/bin/plugins/sim_plugin
autoracle version
#v0.1.6

Теперь нужно отредактировать

nano $HOME/autonity-oracle/build/bin/plugins-conf.yml

В plugins-conf.yml необходимо раскомментировать нижние строки, зарегистрироваться по ссылкам, получить апи ключи и добавить их ниже. Также обязательно добавьте время запроса refresh: 3600 как на скриншоте ниже, чтобы не сгорели быстро лимиты на API

Сайты:

Мой файл для примера выглядит следующим образом


ФОРМА 1 - РЕГИСТРАЦИЯ

ВАЖНО - регистрируйтесь, только если Вы не участвовали в раунде 4 (R4)

Самое время зарегистрировать свое участие в тестовой сети, чтобы получить тестовые токены. Для этого переходим на сайт и заполняем данные - https://game.autonity.org/getting-started/register.html

  • В поле autonity address вставьте адрес tresure
  • В поле Signature hash вставьте хеш подписанной транзакции после команды aut account sign-message "I have read and agree to comply with the Piccadilly Circus Games Competition Terms and Conditions published on IPFS with CID QmVghJVoWkFPtMBUcCiqs7Utydgkfe19wkLunhS5t57yEu"

После регистрации Вы получите электронное письмо с подтверждением и на баланс должны прийти токены. Проверить баланс можно в эксплорер или командой aut account info

Декодирование ключевого файла/получение закрытого ключа

ethkey inspect --private /root/.autonity/keystore/oracle.key
после команды вы увидите закрытый ключ от учетной записи oracle! Его необходимо использовать ниже в команде genOwnershipProof

РЕГИСТРАЦИЯ ВАЛИДАТОРА

После того, как на балансе появятся токены можно продолжать

Шаг 1. Создаем криптографическое подтверждение владения узлом

Замените <privatekey oracle> и <tresure account address> на свои значения

autonity genOwnershipProof --autonitykeys $HOME/autonity-chaindata/autonity/nodekey --oraclekeyhex <privatekey oracle> <tresure account address>

!!! после транзакции сохраняем Signature hex

Шаг 2. Определяем enode и адрес валидатора

# получаем enode
aut node info
# получаем адрес валидатора
aut validator compute-address <enode>

!!! после транзакций сохраните адрес валидатора и enode

Шаг 3. Получаем consensus public key

ethkey autinspect $HOME/autonity-chaindata/autonity/nodekey

Шаг 4. Отправляем транзакцию регистрации с кошелька tresure

# регистрируем валидатора
aut validator register <ENODE> <ORACLE_ADDRESS> <CONSENSUS_KEY> <PROOF> | aut tx sign - | aut tx send -

!!! после транзакции сохраняем хеш

Теперь мы можем попробовать найти свой адрес валидатора в списке

aut validator list

Проверить валидатора

aut validator info --validator <0x550454352B8e1EAD5F27Cce108EF59439B18E249>

Создаем сервисный файл для Oracle и запускаем его. Предварительно допишите пароль от кошелька в сервисный файл

tee <<EOF >/dev/null /etc/systemd/system/antoracle.service
[Unit]  
Description=Autonity Oracle Server  
After=syslog.target network.target  
[Service]  
Type=simple  
ExecStart=$(which autoracle) -key.file="/root/.autonity/keystore/oracle.key" -plugin.dir="/root/autonity-oracle/build/bin/plugins/" -plugin.conf="/root/autonity-oracle/build/bin/plugins-conf.yml" -key.password="" -ws="ws://127.0.0.1:8546"
Restart=on-failure  
RestartSec=5  
[Install]  
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable antoracle
systemctl restart antoracle && journalctl -u antoracle -f -o cat

Теперь нам необходимо забондить NTN на валидатора

Стейк появится к следующей эпохе

aut validator bond --validator <адрес_валидатора> 1 | aut tx sign - | aut tx send -

ФОРМА 2 - РЕГИСТРАЦИИ ВАЛИДАТОРА

Самое время зарегистрировать своего валидатор. Для этого переходим на сайт и заполняем данные - https://game.autonity.org/awards/register-validator.html

На ноде необходимо подписать сообщение aut account sign-message "validator onboarded" и вставлить хеш в графу SIGNATURE OF MESSAGE VALIDATOR ONBOARDED. Подписывать нужно кошельком nodekey. Поэтому сначала нам необходимо конвертировать nodekey в нужный формат

Шаг 1. Получаем ключ узла из файла nodekey (autonitykeys)

Данная операция покажет в терминале Ваш private node key

head -c 64 $HOME/autonity-chaindata/autonity/nodekey
#

Шаг 2. Из полученного privat создаем nodekey в домашнем каталоге и вписываем в него полученный из предыдущей команды privat key

nano $HOME/nodekey2

Шаг 3. Получаем ключ узла из файла nodekey (autonitykeys)

aut account import-private-key $HOME/nodekey2

Шаг 4. Переименовываем кошелек в удобно читаемый формат

mv $HOME/.autonity/keystore/UTC* $HOME/.autonity/keystore/nodekey.key

Шаг 5. Подписывает транзакцию

aut account sign-message "validator onboarded" -k $HOME/.autonity/keystore/nodekey.key

Как только валидатор будет выбран в комитет мы должны увидеть подобные логи на ноде

Перенос валидатора

Если нам необходимо перенести валидатора, то перед этим необходимо сохранить все наши ключи и nodekey (autonitykeys). Также запомните старый IP адрес сервера

1. Если Вы валидируете и находитесь в активном сете (комитет), то обязательно сначала остановите валидирование. При этом активное участие валидатора в комитете приостанавливается до повторной активации. Ставка не освобождается от привязки автоматически

aut validator pause --validator <VALIDATOR_IDENTIFIER_ADDRESS> | aut tx sign - | aut tx send -

2. Для того, чтобы убедиться что валидатор остановлен используем следующую команду, в которой значение "state": 1. Также проверьте какая эпоха идет в настоящее время. Запускать валидатора на новом сервере рекомендую после начала следующей эпохи

После того как убедились что "state": 1 можете останавливать ноду и оракла на старом сервере

aut validator info --validator <VALIDATOR_IDENTIFIER_ADDRESS>

3. Если Вы ранее не сохраняли nodekey и остальные ключи, то сейчас самое время сделать это. Нам необходимо будет подменить наши ключи на новом сервере

4. На новом сервере установите ноду и aut, но не запускайте!!!

5. Создайте каталог и подкаталог autonity-chaindata/autonity. После создания перенесите туда файл nodekey (autonitykeys)

mkdir -p autonity-chaindata/autonity

6. Теперь стандартно запускаем ноду для синхронизации, предварительно добавив к запуску ключ --nat extip:<IP of old server>. Я при пробном переносе использовал именно IP от старого сервера

7. Запускаем валидатора дождавшись смены эпохи

aut validator activate --validator <VALIDATOR_IDENTIFIER_ADDRESS> | aut tx sign - | aut tx send -

Торговля на CAX

CAX это централизованной автоматическая биржа. Если Вы уже регистрировали провайдера, то Ваша учетная запись на CAX автоматически создана и пополнена на 1 МЛН поддельных долларов США. Она связана с вашей зарегистрированной учетной записью участника, поэтому можно легко перемещать активы между внутренней и внешней сетями

Биржа использует ключи API для аутентификации, поэтому необходимо создать ключ API для своей учетной записи, прежде чем приступать к торговле

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

apt install snapd
sudo snap install httpie

Получаем API ключ

MESSAGE=$(jq -nc --arg nonce "$(date +%s%N)" '$ARGS.named')

Подписываем сообщение с помощью aut

aut account sign-message $MESSAGE message.sig -k $HOME/.autonity/keystore/tresure.key > message.sig

Отправляем сообщение с использованием HTTPie для получения нового ключа API. После выполнения команды запишите вывод!!!

echo -n $MESSAGE | https https://cax.piccadilly.autonity.org/api/apikeys api-sig:@message.sig
пример вывода

Теперь с помощью полученного API можно взаимодействовать с CAX

KEY=<ВАШ_API>

# просмотр баланса кошелька tresure
aut account info -k $HOME/.autonity/keystore/tresure.key

# Просмотр оффчейн баланса 
https GET https://cax.piccadilly.autonity.org/api/balances/ API-Key:$KEY

# просмотр книги заказов
https GET https://cax.piccadilly.autonity.org/api/orderbooks/ API-Key:$KEY

# получение текущих цен для пары NTN-USD
https GET https://cax.piccadilly.autonity.org/api/orderbooks/NTN-USD/quote API-Key:$KEY

# получение текущих цен для пары ATN-USD
https GET https://cax.piccadilly.autonity.org/api/orderbooks/ATN-USD/quote API-Key:$KEY

# покупка актива NTN (лимитный ордер)
https POST https://cax.piccadilly.autonity.org/api/orders/ API-Key:$KEY pair=NTN-USD side=bid price=10.04  amount=1000

# покупка актива ATN (лимитный ордер)
https POST https://cax.piccadilly.autonity.org/api/orders/ API-Key:$KEY pair=ATN-USD side=bid price=1.04  amount=100000

# просмотр статуса ордера (нужен номер "order_id" который вы получите в ответ на прошлый запрос)
https GET https://cax.piccadilly.autonity.org/api/orders/236655 API-Key:$KEY

# отменить открытый ордер
https DELETE https://cax.piccadilly.autonity.org/api/orders/313469 API-Key:$KEY

# вывод из офчейна
https POST https://cax.piccadilly.autonity.org/api/withdraws/ API-Key:$KEY symbol=NTN  amount=10

# депозит в офчейн 
aut tx make --to <RECIPIENT_ADDRESS> --value <AMOUNT> --ntn | aut tx sign - | aut tx send -

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

# посмотреть информацию о ноде
aut node info

# посмотреть баланс
aut account info
aut account info 0x7179cc425bd66F40DBE958afecb488F71eCCDB84

# посмотреть список валидаторов
aut validator list

# проверка информации о валиаторе
aut validator info --validator 0x27b196cc27aa3b873eb96B5283025A2c1D075747

curl -X GET 'https://rpc1.piccadilly.autonity.org/'  --header 'Content-Type: application/json' --data '{"jsonrpc":"2.0", "method":"aut_getValidator", "params":["0x27b196cc27aa3b873eb96B5283025A2c1D075747"], "id":1}'

# проверить нахождение в комитете
aut protocol get-committee 
aut protocol get-committee-enodes

# выйти из тюрьмы
aut validator activate --validator <VALIDATOR_IDENTIFIER_ADDRESS> | aut tx sign - | aut tx send -

Работа с ключами

# проверить информацию о кошельке
aut account info
aut account info 0x7179cc425bd66F40DBE958afecb488F71eCCDB84

# проверить баланс кошелька
aut account balance
aut account balance 0x7179cc425bd66F40DBE958afecb488F71eCCDB84

# перечислить все ключи в каталоге хранилища ключей
aut account list

# декодирование ключевого файла для получение private-key из файла .key
ethkey inspect --private /root/.autonity/keystore/tresure.key

# импортировать private-key в виде открытого текста (в шестнадцатеричном формате)
# предварительно создайте текстовый файл, содержащий закрытый ключ в шестнадцатеричном формате. Например, скопируйте свой закрытый ключ в файл с именем alice.priv
aut account import-private-key $HOME/alice.priv

# отправить транзакцию
aut tx make --to <0x1........> --value 1 --ntn | aut tx sign - | aut tx send -
aut tx make --to <0x1........> --value 0.1 | aut tx sign - | aut tx send -
aut tx make --to <0x1........> --value 0.1 -k $HOME/.autonity/keystore/tresure.key | aut tx sign -k $HOME/.autonity/keystore/tresure.key - | aut tx send -
# проверить текущую эпоху
aut protocol epoch-id --rpc-endpoint https://rpc1.piccadilly.autonity.org

Удаление ноды

systemctl stop autonity && \
systemctl disable autonity && \
rm /etc/systemd/system/autonity.service && \
systemctl daemon-reload && \
cd $HOME && \
rm -rf .autonity autonity-chaindata autonity

Удаление oracle

systemctl stop antoracle && \
systemctl disable antoracle && \
rm /etc/systemd/system/antoracle.service && \
systemctl daemon-reload && \
cd $HOME && \
rm -rf autonity-oracle

Выражаю огромную благодарность ZUKA (zuka_116) за его значительный вклад в написание данного гайда

Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq