Установка ноды Morph / Morph Node Guide
Революция потребительского блокчейна. Преодоление разрыва в Web3 путем перевода реальных приложений в onchain.
Содержание
Требования к серверу
в скобках указаны минимальные требования
Аренда серверов
Оплата российскими картами
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, устанавливай ноды вместе с нашей командой! Обнял!