Ноды / Nodes
September 2

Установка ноды Morph / Morph Node Guide

Революция потребительского блокчейна. Преодоление разрыва в Web3 путем перевода реальных приложений в onchain.

Содержание



Требования к серверу


4(2) CPU, 16(5) RAM, 1 TB (600 GB) SSD

в скобках указаны минимальные требования

Аренда серверов


Оплата российскими картами
play2go

Подготовка к установке


Новый кошелек


Заведи новый EVM-кошелек, и пополни его тестовыми токенами HolETH (Ethereum в сети Holesky). Достаточно 0.1 HolETH. В кране набирай на свой основной кошелек, потом переведи на новый.

Бридж Ethereum в сеть Morph Holesky


После того как получишь тестовые токены HolETH переведи их в сеть Morph Holesky, используй вот этот мост.

Получение RPC адреса


Переходи на Infura и добавь новый RPC адрес в Ethereum Holesky сети. Если у тебя до сих пор нет ключей на Infura, то переходи в гайд по ноде Farcaster, там есть подробная инструкция.

Нажми на свой ключ (1), на вкладке All Endpoints в сети Ethereum поставь галочку в клетке HOLESKY (2) и сохрани изменения (3). На вкладке Active Endpoints в сети Ethereum Holeskyскопируй в блокнот RPC адрес (5).

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


Подключайся к серверу по ssh пользователем root.

Обновляй компоненты операционной системы сервера и устанавливай необходимые компоненты

sudo apt-get update -y && sudo apt upgrade -y && sudo apt-get install make build-essential unzip lz4 gcc git jq ncdu tmux cmake clang pkg-config libssl-dev python3-pip protobuf-compiler bc -y
sudo apt install -y curl git jq lz4 build-essential unzip

Проверь установлен ли Go на твоем сервере. Если твоя версия отличается, то установи именно эту.

go version
#ответ - go version go1.22.2

Если установлен переходи к следующему шагу, если нет - давай установим.

sudo rm -rf /usr/local/go
curl -Ls https://go.dev/dl/go1.22.2.linux-amd64.tar.gz | sudo tar -xzf - -C /usr/local
eval $(echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee /etc/profile.d/golang.sh)
eval $(echo 'export PATH=$PATH:$HOME/go/bin' | tee -a $HOME/.profile)
go version
#ответ - go version go1.22.2

Установка ноды


Подготовка к установке


Сначала скачай текущую версию проекта из официального репозитория, собери ноду и Geth

Geth(аббревиатура от "Go Ethereum") — это клиент Ethereum, написанный на языке программирования Go. Это один из наиболее популярных и широко используемых клиентов Ethereum, предоставляющий пользователям возможность взаимодействовать с блокчейном Ethereum..
mkdir -p ~/.morph
cd ~/.morph
git clone https://github.com/morph-l2/morph.git
cd morph
git checkout v0.2.0-beta
make nccc_geth
cd ~/.morph/morph/node
make build

Теперь скачай и распакуй файлы конфигурации Genesis блока (первый блок в блокчейне)

cd ~/.morph
wget https://raw.githubusercontent.com/morph-l2/config-template/main/holesky/data.zip
unzip data.zip

Создание секретного ключа


Теперь создай секретный ключ связи с узлом

cd ~/.morph
openssl rand -hex 32 > jwt-secret.txt

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

Открой файл в редакторе, сотри ключ и вставь свой. Сохрани CTRL+S и выйди из редактора CTRL+X

nano jwt-secret.txt

Скачивание снепшота


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

wget -q --show-progress https://snapshot.morphl2.io/holesky/snapshot-20240805-1.tar.gz
tar -xzvf snapshot-20240805-1.tar.gz
mv snapshot-20240805-1/geth geth-data
mv snapshot-20240805-1/data node-data
rm -rf snapshot-20240805-1.tar.gz

Запуск ноды


Запусти скрипт создания сервисного файла для Geth

sudo tee /etc/systemd/system/gethm.service > /dev/null << EOF
[Unit]
Description=Geth 
After=network-online.target
[Service]
User=root
ExecStart=/root/.morph/morph/go-ethereum/build/bin/geth \
     --morph-holesky \
     --datadir "/root/.morph/geth-data" \
     --http --http.api=web3,debug,eth,txpool,net,engine \
     --http.port 8546 \
     --authrpc.addr localhost \
     --authrpc.vhosts="localhost" \
     --authrpc.port 8552 \
     --authrpc.jwtsecret=/root/.morph/jwt-secret.txt \
     --miner.gasprice="100000000" \
     --log.filename=/root/.morph/geth.log \
     --port 30363
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF

Запусти сервисную службу

sudo systemctl daemon-reload
sudo systemctl enable gethm.service
sudo systemctl start gethm.service

Проверь логи Geth используй следующую команду, сначала логи не будут идти

sudo journalctl -u gethm -f
для выхода из логов нажми CTRL+C

Открой новое окно терминала и подсоединись к серверу снова. Создай еще один сервисный файл с запуском самой ноды.

sudo tee /etc/systemd/system/morphm.service > /dev/null << EOF
[Unit]
Description=Morph Node 
After=network-online.target
[Service]
User=root
ExecStart=/root/.morph/morph/node/build/bin/morphnode \
     --home /root/.morph/node-data \
     --l2.jwt-secret /root/.morph/jwt-secret.txt \
     --l2.eth http://localhost:8546 \
     --l2.engine http://localhost:8552 \
     --log.filename /root/.morph/node.log
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF

Снова запусти сервисную службу

sudo systemctl daemon-reload
sudo systemctl enable morphm
sudo systemctl start morphm

Проверь логи ноды используй следующую команду

sudo journalctl -u morphm -f
для выхода из логов нажми CTRL+C

Увидишь примерно логи примерно как на первом скриншоте, переключись в первое окно терминала, в нем логи тоже пошли и будут выглядить примерно как на втором скриншоте

Проверь статус синхронизации, обрати внимание на последний блок, и статус catching_up значение true говорит о том что синхронизация еще не закончилась.

curl http://localhost:26657/status

Исправление возможных ошибок


Если на твоем серверре уже стоит нода использующая Geth, то скорее всего у тебя возникнет конфликт портов

Давай устраним его! Заходи в папку с конфигурациями и открой файлик

cd ~/.morph/node-data/config
nano config.toml 

В этом файле тебе нужно заменить в трех местах порты 26658, 26657, 26656 на 27658, 27657 и 27656 соответственно. Нажми CTRL+S для сохранения и CTRL+X для выхода из редактора

Теперь осталось перезапустить сервисную службу

cd ~/.morph
sudo systemctl daemon-reload
sudo systemctl restart morphm

Проверь логи ноды используй следующую команду

sudo journalctl -u morphm -f
для выхода из логов нажми CTRL+C

Запуск валидаторской ноды


Перед запуском валидаторской ноды стоит немного подождать, дать поработать полной ноде час-полтора.

Останови ранее созданные службы

sudo systemctl stop gethm
sudo systemctl stop morphm

Запусти скрипт и создай новый сервисный файл

sudo tee /etc/systemd/system/geth_morph.service > /dev/null << EOF
[Unit]
Description=Geth for Validator
After=network-online.target
[Service]
User=root
ExecStart=/root/.morph/morph/go-ethereum/build/bin/geth \
--datadir=/root/.morph/geth-data \
--port 30305 \
--verbosity=3 \
--http \
--http.corsdomain="*" \
--http.vhosts="*" \
--http.addr=0.0.0.0 \
--http.port=8547 \
--http.api=web3,eth,txpool,net,engine \
--ws \
--ws.addr=0.0.0.0 \
--ws.port=8546 \
--ws.origins="*" \
--ws.api=web3,eth,txpool,net,engine \
--networkid=2810 \
--authrpc.addr="0.0.0.0" \
--authrpc.port="8552" \
--authrpc.vhosts="*" \
--authrpc.jwtsecret=/root/.morph/jwt-secret.txt \
--gcmode=archive \
--metrics \
--metrics.addr=0.0.0.0 \
--metrics.port=6063 \
--miner.gasprice="100000000"
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF

Запусти новую службу

sudo systemctl daemon-reload
sudo systemctl enable geth_morph
sudo systemctl start geth_morph

Проверь логи

sudo journalctl -u geth_morph -f
для выхода из логов нажми CTRL+C

Задай переменные для сервера

export L1MessageQueueWithGasPriceOracle=0x778d1d9a4d8b6b9ade36d967a9ac19455ec3fd0b
export START_HEIGHT=1434640
export Rollup=0xd8c5c541d56f59d65cf775de928ccf4a47d4985c
export Ethereum_Holesky_beacon_chain_RPC=https://ethereum-holesky-beacon-api.publicnode.com

В следующих переменных нужно добавить свои данные.
Замени <Your_Ethereum_Holesky_RPC_from_Infura> своим RPC полученным на Infura

export Ethereum_Holesky_RPC=<Your_Holesky_RPC_from_Infura>

А здесь замени <Your_Validator_Privat_Key> на приватный ключ своего нового кошелька.

export Your_Validator_Key=<Your_Validator_Privat_Key>

Запусти последний скрипт который создаст сервисный файл для запуска ноды

sudo tee /etc/systemd/system/morph_validator.service > /dev/null << EOF
[Unit]
Description=Morph Validator Node 
After=network-online.target
[Service]
User=root
ExecStart=/root/.morph/morph/node/build/bin/morphnode --validator --home /root/.morph/node-data \
 --l2.jwt-secret /root/.morph/jwt-secret.txt \
 --l2.eth http://localhost:8547 \
 --l2.engine http://localhost:8552 \
 --l1.rpc $Ethereum_Holesky_RPC \
 --l1.beaconrpc $Ethereum_Holesky_beacon_chain_RPC \
 --l1.chain-id 17000 \
 --validator.privateKey $Your_Validator_Key \
 --sync.depositContractAddr $L1MessageQueueWithGasPriceOracle \
 --sync.startHeight $START_HEIGHT \
 --derivation.rollupAddress $Rollup \
 --derivation.startHeight $START_HEIGHT \
 --derivation.fetchBlockRange 200 \
 --log.filename /root/.morph/node.log
 --metrics-server-enable
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF

Запусти новую службу

sudo systemctl daemon-reload
sudo systemctl enable morph_validator
sudo systemctl start morph_validator

Проверь логи службы, в логах указан процесс синхронизации

sudo journalctl -u morph_validator -f
для выхода из логов нажми CTRL+C

Мониторинг состояния ноды


Открой журналы системных сообщений служб которые ты запустил, для выхода из логов нажми CTRL+C

sudo journalctl -u geth_morph -f
sudo journalctl -u morph_validator -f
для выхода из логов нажми CTRL+C

Логи службы geth_morph двигаются не очень активно, логи morph_validator после синхронизации выглядят примерно как на скриншоте

Обновление ноды до версии 0.2.0


Перейди в папку с нодой, и сохрани в блокнот свой секретный ключ

cat ~/.morph/jwt-secret.txt

Если ты запускал службу автоматического запуска скринов из нашего гайда, то останови ее и удали

sudo systemctl stop screen.service
sudo rm /etc/systemd/system/screen.service

Теперь нужно удалить созданные ранее скрины

screen -ls
screen -X -S geth quit
screen -X -S morph quit

Проверь командой что скринов не осталось

screen -ls

Теперь нужно удалить папку с нодой

rm -rf .morph

Теперь начни установку ноды с самого начала, на этапе создания секретного ключа я оставлю команды для тебя



Присоединяйся к Nodateke, устанавливай ноды вместе с нашей командой! Обнял!