Repository: ruesandora/mangata-AVS
Branch: main
Commit: 49e5e5abe14b
Files: 7
Total size: 20.7 KB
Directory structure:
gitextract_dp4jfmdt/
├── README.md
├── auto-restart/
│ ├── README.MD
│ ├── README_en.md
│ ├── requirements.txt
│ └── restart_container_if_err.py
├── güncelleme.md
└── node taşıma.md
================================================
FILE CONTENTS
================================================
================================================
FILE: README.md
================================================
Mangata X - AVS
## Notlar:
> Selamlar, bir süredir mangata çalıştırıyorum lakin 30 kişi ile sınırlıydı ve artık sınır kalktı.
> Neden Mangata kuruyor Eigen AVS ekosistemine önem veriyorum [buradan](https://x.com/Ruesandora0/status/1754194993592275362?s=20) okuyabilirsiniz.
> Testnet ne kadar sürürecek bilinmiyor, rewards var evet - KYC olabilir.
> Ayrıca Mangatanın bir tokeni mevcut, yatırımcıları oldukça iyi ileride daha iyi hale gelecek bir protokol ve testnet önemli.
> Ricamdır notları ve satır aralarını okumanızda, bu repoyu paylaştıktan sonra uçakta olacağım her şeyi yazıyorum size.
> Son olarak, hocam şu node ile bu node yan yana olur mu diye sormayın [buraya](https://x.com/Ruesandora0/status/1744023547805061515?s=20) bakın arkadaşlar <3
> Topluluk kanalları: [Sohbet Kanalımız](https://t.me/RuesChat) - [Duyurular ve Gelişmeler](https://t.me/RuesAnnouncement) - [Whatsapp](https://whatsapp.com/channel/0029VaBcj7V1dAw1H2KhMk34) - [Mangata Discord](https://discord.gg/mangata)
#
Donanım
> Görseldekine benzer bir cihaz yeterli, bunun için [Hetzner](https://github.com/ruesandora/Hetzner) kullanıyorum
Kurulum
```console
# Güncelleme ve docker kurulumu, komutları sırasıyla girebilirsiniz
sudo apt update -y && sudo apt upgrade -y
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# bu komut satırını toplu girebilirsiniz
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# docker güncelleme ve run
sudo apt update -y && sudo apt upgrade -y
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world
# Go kurulumu
cd $HOME
ver="1.21.0"
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
```
EigenLayer CLI kurulumu
```console
# eigen klonlayalım
git clone https://github.com/Layr-Labs/eigenlayer-cli.git
cd eigenlayer-cli
mkdir -p build
go build -o build/eigenlayer cmd/eigenlayer/main.go
# Binary dosyamızı PATH yoluna gönderiyoruz
cd
sudo cp eigenlayer-cli/build/eigenlayer /usr/local/bin/
```
> Altta ki komutlar ile KEY oluşturuyoruz..
> `ecdsa` KEY bize bir `evm` adresi, `private key` ve dosya `path` (yolu) verecek
> `bls` KEY ise bir `private key` verecek. Hepsini kaydedin.
> Kapalı parantez dahil, `` değiştirin, <> parantezleri kaldırın..
> Her komuttan sonra şifre oluşturmanızı isteyecek, şifre karmaşık olmalı.
> Örnek şifre DenemeSifre123.,#%
```
eigenlayer operator keys create --key-type ecdsa
eigenlayer operator keys create --key-type bls
```
> Listeleyerek keyleri ve dosya yollarını kontrol edin
```
eigenlayer operator keys list
```
> Örnek ecdsa key create çıktısı

Operator kaydı
```console
# Bu komutun istediği verileri giriyoruz, veriler aşağıda yazdım.
eigenlayer operator config create
```
> Sırasıyla bunlarıda yazıyorum kolaylık için, en aşağıda görselide olcak:
> y diyoruz
> operator adresi olarak, `ecdsa key` oluşturduğumuzda verdiği `evm` adresini girin.
> earning operator adres yine aynı ecdsa-evm adresi girin, yukarıdaki ile aynı.
> goerli eth RPC isteyecek, [infuradan](https://app.infura.io/) aldım ben ücretsiz goerli RPC
> `ecdsa key` oluşturduğumuzda bize verdiği key pathi tam şekilde giriyoruz
> aynı şekilde `bls key` path giriyoruz - path ne olduğunu bilmeyenler için görsele bakabilir
> goerli seçiyoruz ve bitiyor.
> Bu bize operator.yaml ve metadata.json dosyalarını oluşturacak..

#
### peki metadata'da işlemlerimiz biraz farklı hemen anlatıyorum:
> `nano metadata.json` komutu ile içeriği kopyalıyoruz.
> metadata.json içeriğini kendinize göre düzenleyeceksiniz ve public erişilebilir bir yere upload edeceksiniz.
> Bunun için githubda bir repo oluşturup metadata.json içeriğinizi oraya yazın ve raw linkini kenarda tutabilirsiniz. Hem metadata.json içinde düzenleyeceksiniz hem de github reponuzda.
> Aşağıya görsel bırakıyorum:

#
### raw'ı hallettiysek kaydımıza devam edelim
```console
# Operator.yaml dosyasını nano ile açıyoruz
nano operator.yaml
```
> Burada yine değişiklik yapacağız
> `metadata_url` için `metadata.json` dosyamızın public `raw linki`
> `el_slasher_address` için: 0x3865B5F5297f86c5295c7f818BAD1fA5286b8Be6
> `bls_public_key_compendium_address` için: 0xc81d3963087Fe09316cd1E032457989C7aC91b19
> ctrl + x + y ile kaydedip çıkıyoruz.

```console
# operatoru kaydetmeden önce yukarıda aldığınız EVM cüzdanınıza biraz goerli ETH gönderin
# Operatörü kaydediyoruz
eigenlayer operator register operator.yaml
# Loglar aksın başarılı bir şekilde sonlanana kadar müsade edin
# Durumunu kontrol etmek için
eigenlayer operator status operator.yaml
# metadata herhangi bir değişiklik yaptığınızda güncellemek için
eigenlayer operator update operator.yaml
```
Eigen bitti şimdi Mangata AVS
> reth temini için [buradan](https://app.uniswap.org/swap??outputCurrency=0x178e141a0e3b34152f73ff610437a7bf9b83267a) swap
> steth temini için [buradan](https://app.uniswap.org/swap??outputCurrency=0x1643e812ae58766192cf7d2cf9567df2c37e9b7f
) swap
> Elimizdeki reth ve steth stake etmemiz gerekiyor.
> Elinizdeki `ecsda private keyi` Metamaska `import` edin ve swap ile temin ettiğiniz tokenleri bu cüzdana gönderin.
> Sonrasında [buradan](https://goerli.eigenlayer.xyz/) cüzdanı bağlıyoruz ve bu iki poola stake ediyoruz.

> Txler onaylandıktan sonra terminalimize dönüyoruz ve AVS operatörümüzü kuruluma geçiyoruz
```console
git clone https://github.com/mangata-finance/avs-operator-setup.git
cd avs-operator-setup
chmod +x run.sh
nano .env
```

```console
# Üst kısma dokunmuyorsunuz. SADECE: TODO yazan satırın altı bizi ilgilendiriyor.
ETH_RPC_URL= goerli eth rpc http linki
ETH_WS_URL= goerli eth wss linki
# bu linkleri infuradan almıştık, zorlanırsan rues chatten yardım talep edin.
# key yolundan kastım path, yukarıda öğrenmiştiniz.
ECDSA_KEY_FILE_HOST=/.eigenlayer/operator_keys/.ecdsa.key.json
BLS_KEY_FILE_HOST=/.eigenlayer/operator_keys/.bls.key.json
# yukarıda bir şifre belirlemiştik her yerde kullandığımız.
ECDSA_KEY_PASSWORD= eigen cli kurulumda belirlediğimiz karmaşık key şifresi
BLS_KEY_PASSWORD= eigen cli kurulumda belirlediğimiz karmaşık key şifresi
# ctrl + x + y yapıp kaydedip çıkıyoruz
# şimdi opt-in yapalım son hamleler..
./run.sh opt-in
# key yolunda, şifrede vs hata yoksa bu adımlardan sonra docker compose up yapıyoruz ve sona geliyoruz.
docker compose up -d
# bir sorun olup olmadığını kontrol etmek için docker ps ile container id alın
docker logs -f
# container id başta olur ve kurduğunuz node'un isminden hangi id olduğunu anlayabilirsiniz.
```
> Loglarınızı Mangata AVS kanalına atıp rolünüzüde alabilirsiniz.
> işlemler bu kadardı, sırf sorun var mı diye tekrar test edip kurdum sorun yok çünkü bu repoyu eskiden yazdım.
> İlla ki eksiğim vardır, PR atarsınız veya ben commitlerim, ben yolculuktayken siz öğrenmeye bakın bir şeyler.
================================================
FILE: auto-restart/README.MD
================================================
# Mangata-AVS Operatörü Otomatik Yeniden Başlatma
Bu komut dosyası, Mangata operatörü "err: connection is shut down" hatasını verdiğinde konteyneri yeniden başlatır. Bu komut dosyası kendi sunucumda çalışmaktadır ve herhangi bir sorun olmamıştır. Komut dosyasını çalıştırmadan önce varsayılan konteyner adını değiştirdiyseniz `container_name` değişkenini kontrol edin (konteyner adını kontrol etmek için `docker ps` kullanın).
**Not:**
* Bu komut dosyası, kullanıcının docker kullanıcı grubuna eklenmesini gerektirir.
* Gerekli izinlere sahip değilseniz komut dosyası başarısız olabilir.
## Kurulum
```bash
## Repoyu klonlama
git clone https://github.com/walter-s0bch4k/mangata-AVS-with-auto-restart.git
# İndirilen repoda doğru klasöre gidin
cd mangata-AVS-with-auto-restart/auto-restart
# Eğer repoyu farklı bir adresten indirdiyseniz, lütfen indirdiğiniz adresin dosya isimlerini kontrol ederek
# İçerisinde `requirements.txt` ve `restart_container_if_err.py` dosyaları olan klasöre gidin.
# Doğru yerde olduğunuzu kontrol etmek için
ls -al
# Komutunun çıktısında `requirements.txt` ve `restart_container_if_err.py` dosyalarını görmelisiniz.
## pip Kurulumu
# pip kurulum komut dosyasını indirin
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
# Komut dosyasını çalıştırın, python3'ü python ile değiştirmeniz gerekebilir
sudo python3 get-pip.py
## Docker Ayarları
# docker kullanıcı grubu oluşturun
sudo groupadd docker
# Mevcut kullanıcıyı docker grubuna ekleyin
sudo usermod -aG docker $USER
# Bu adımdan sonra hesabınızdan çıkıp tekrar giriş yapmanız gerekmektedir.
# Uzak bağlantı kullanıyorsanız bağlantıyı kapatıp tekrar bağlanmayı deneyebilirsiniz.
## Komut Dosyasını Çalıştırma
# Gerekli paketleri kurun
pip install -r requirements.txt
# Arka planda çalışması için nohup kullanın, bağlantınız kesilse bile çalışmaya devam eder
nohup python3 -u restart_container_if_err.py > logs.txt &
# Logları kontrol edin. İçeriği dikkatlice okuyun, hata olmamalıdır.
cat logs.txt
## !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
## Konteyneri manuel olarak yeniden başlattıysanız veya kapattıysanız işlemi sonlandırın!
# PID'yi alın
ps -aux | grep restart_container_if_err.py
# Ardından işlemi sonlandırın
kill -9
```
================================================
FILE: auto-restart/README_en.md
================================================
# Mangata-AVS Operator Auto Restart
This script restarts the container if the Mangata operator raises the `err: connection is shut down` error. Consequences are at your own responsibility. It is running on my server. Check the `container_name` variable if you changed the default name of the container before starting the script (`docker ps` to check container name).
**Note:**
* This script requires the user to be added to the `docker` user group.
* The script may fail if you don't have the required permissions.
## Installation
```bash
## Cloning repository
git clone https://github.com/walter-s0bch4k/mangata-AVS-with-auto-restart.git
# Change directory to downloaded repository
cd mangata-AVS-with-auto-restart
# If you downloaded the repo from a different location, please navigate to the folder containing the
# `requirements.txt` and `restart_container_if_err.py` files by checking the file names in the download location.
# To verify you are in the correct location, run the following command:
ls -al
# You should see the `requirements.txt` and `restart_container_if_err.py` files in the output of the command.
## Installing pip
# Get pip installation script
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
# Execute script to install, you might need to replace python3 to python etc.
sudo python3 get-pip.py
## Docker settings
# Create docker user group
sudo groupadd docker
# Add current user to docker group
sudo usermod -aG docker $USER
## Executing the script
# Install required packages
pip install -r requirements.txt
# Execute using nohup to make it run in background even if you disconnect
nohup python3 -u restart_container_if_err.py > logs.txt &
# Checking logs. Please read content carefully, there should be no errors.
cat logs.txt
## !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
## Kill the process if you manually restart container or close it!
# Get PID by
ps -aux | grep restart_container_if_err.py
# Then kill process
kill -9
```
================================================
FILE: auto-restart/requirements.txt
================================================
certifi==2024.2.2
charset-normalizer==3.3.2
docker==7.0.0
idna==3.6
packaging==23.2
requests==2.31.0
urllib3==2.2.0
================================================
FILE: auto-restart/restart_container_if_err.py
================================================
import json
import docker
from datetime import datetime
client = docker.from_env() # Connect to the local Docker daemon
if __name__ == "__main__":
# Replace with your actual container name
container_name = "mangata-finalizer-node"
container = client.containers.get(container_name)
print("Script started!")
print("Container State: ", container.attrs['State'])
while True:
# We assume that container is already up and running
# It is restarted if "connection is shut down" error is encountered in the logs
if container.attrs['State']['Restarting'] == True or container.attrs['State']['Status'] == "restarting":
pass # If state is restarting do nothing
else:
try:
script_initalized = datetime.now() # Required to filter logs by time
for line in container.logs(stream=True, follow=True, since=script_initalized):
decoded_line = line.decode('utf-8').strip().split("\t")
if len(decoded_line) > 1 and decoded_line[1] == "INFO":
try: # Required to suppress errors raised by json package
message = json.loads(decoded_line[-1])
if "err" in message:
if message["err"] == "connection is shut down":
print("Restart required!")
print(decoded_line[0], message)
container.restart()
break
else:
print(decoded_line[0], message)
except Exception as e:
pass
except Exception as e:
print(f"Error: {e}")
break # Terminate
================================================
FILE: güncelleme.md
================================================
// mevcut avs-operator-setup klasörü içindeki .env dosyasını yedek alın
```
cd avs-operator-setup
docker-compose down
git reset --hard
git pull
git checkout tags/v0.2 -b v0.2
```
//yedek aldığın .env dosyasını açıp (`nano .env`) yeni dosyadaki boşluk olan yerleri de değiştir. Eigende stETH min 1 olacak şekilde stake arttır
```
docker-compose pull
docker-compose up -d
docker logs -f avs-finalizer-node
```
## Readonly hatası alıyorsanız:
```
# operatörü durdur
docker-compose down
```
Docker config dosyasına giriyoruz
```
nano docker-compose.yml
```
Config dosyasının içindeki iki satırın sonunda `:readonly` ibaresini siliyoruz. Sonrası Ctrl + X -> y -> Enter
Operatörü yeniden başlatıyoruz:
```
docker-compose up -d
```
================================================
FILE: node taşıma.md
================================================
mangata-avs-node-tasima-
##
> cc: [ruesandora](https://github.com/ruesandora/mangata-AVS)
> Kendi node'umu taşırken size yardımcı olması için bir repo yaptım.
Başlayalım.( Önceki kurulumunuz başarılı değilse bu repo sizin için uygun değildir. )
```console
# Öncelikle eski sunucunuza bu komutları uygulayın.
cd avs-operator-setup
docker ps -a
docker stop ( tırnakları kaldırıp aldığımız iki adet container id'i ayrı ayrı komut olarak girelim. )
# Güncelleme ve docker kurulumu, komutları sırasıyla girebilirsiniz
sudo apt update -y && sudo apt upgrade -y
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# bu komut satırını toplu girebilirsiniz
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# docker güncelleme ve run
sudo apt update -y && sudo apt upgrade -y
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world
# Go kurulumu
cd $HOME
ver="1.20.2"
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
```
EigenLayer CLI kurulumu
```console
# eigen klonlayalım
git clone https://github.com/Layr-Labs/eigenlayer-cli.git
cd eigenlayer-cli
mkdir -p build
go build -o build/eigenlayer cmd/eigenlayer/main.go
# Binary dosyamızı PATH yoluna gönderiyoruz
cd
sudo cp eigenlayer-cli/build/eigenlayer /usr/local/bin/
mkdir -p /root/.eigenlayer/operator_keys
```
Simdi burada önemli bir kısım var. Burayı dikkatli yapalım.
```console
# keylerimizi yeni sunucumuza import edelim.(parantezler olmadan)
#ecdsa key için aşağıdaki komut.
eigenlayer operator keys import --key-type ecdsa
# bls key için aşağıdaki komut.
eigenlayer operator keys import --key-type bls [keyname] [privatekey]
# bu komut ile keylerimizi kontrol edelim.doğru ise devam.
eigenlayer operator keys list
# keylerimizi taşımış olduk.
```
Operator kaydı
```console
# Bu komutun istediği verileri giriyoruz, veriler aşağıda yazdım.
eigenlayer operator config create
```
> Sırasıyla bunlarıda yazıyorum kolaylık için, en aşağıda görselide olcak:
> y diyoruz
> operator adresi olarak, `ecdsa key` oluşturduğumuzda verdiği `evm` adresini girin.
> earning operator adres yine aynı ecdsa-evm adresi girin, yukarıdaki ile aynı.
> goerli eth RPC isteyecek, [infuradan](https://app.infura.io/) aldım ben ücretsiz goerli RPC
> `ecdsa key` oluşturduğumuzda bize verdiği key pathi tam şekilde giriyoruz
> aynı şekilde `bls key` path giriyoruz - path ne olduğunu bilmeyenler için görsele bakabilir
> goerli seçiyoruz ve bitiyor.
> Bu bize operator.yaml ve metadata.json dosyalarını oluşturacak..

#
```console
# Operator.yaml dosyasını nano ile açıyoruz
nano operator.yaml
```
> Burada yine değişiklik yapacağız
> `metadata_url` için `metadata.json` dosyamızın public `raw linki`
> `el_slasher_address` için: 0x3865B5F5297f86c5295c7f818BAD1fA5286b8Be6
> `bls_public_key_compendium_address` için: 0xc81d3963087Fe09316cd1E032457989C7aC91b19
> ctrl + x + y ile kaydedip çıkıyoruz.

```console
# daha önceden register ettiğimiz için tekrar etmemize gerek yok.
# Durumunu kontrol etmek için
eigenlayer operator status operator.yaml
# metadata herhangi bir değişiklik yaptığınızda güncellemek için
eigenlayer operator update operator.yaml
```
Eigen bitti şimdi Mangata AVS
```console
git clone https://github.com/mangata-finance/avs-operator-setup.git
cd avs-operator-setup
chmod +x run.sh
nano .env
```

```console
# Üst kısma dokunmuyorsunuz. SADECE: TODO yazan satırın altı bizi ilgilendiriyor.
ETH_RPC_URL= goerli eth rpc http linki
ETH_WS_URL= goerli eth wss linki
# bu linkleri infuradan almıştık, zorlanırsan rues chatten yardım talep edin.
# key yolundan kastım path, yukarıda öğrenmiştiniz.
ECDSA_KEY_FILE_HOST= eigen cli kurulumda aldığımız ecdsa key yolumuz
BLS_KEY_FILE_HOST= eigen cli kurulumda aldığımız bls key yolumuz
# yukarıda bir şifre belirlemiştik her yerde kullandığımız.
ECDSA_KEY_PASSWORD= eigen cli kurulumda belirlediğimiz karmaşık key şifresi
BLS_KEY_PASSWORD= eigen cli kurulumda belirlediğimiz karmaşık key şifresi
# ctrl + x + y yapıp kaydedip çıkıyoruz
# şimdi opt-in yapalım son hamleler..
./run.sh opt-in
# key yolunda, şifrede vs hata yoksa bu adımlardan sonra docker compose up yapıyoruz ve sona geliyoruz.
docker compose up -d
# bir sorun olup olmadığını kontrol etmek için docker ps ile container id alın
docker logs -f
# container id başta olur ve kurduğunuz node un isminden hangi id olduğunu anlayabilirsiniz.
```