Skip to content

thisislexar/NEAR-Stake-Wars-III

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 

Repository files navigation

NEAR Stake Wars III

NEAR Stake Wars III için Validatör Kurulum Rehberine hoşgeldiniz. Kuruluma geçmeden önce NEAR Stake Wars hakkında bilgi vermek istiyorum.

stakewars3-social

NEAR Stake Wars challenge'larını tamamlayarak 4.5 milyon NEAR'dan pay kazanma şansı yakalayabilirsiniz. Ayrıca, görevleri tamamlayan validatörlerin 1 yıl kilitli olmak üzere 50 bin adete kadar NEAR coin kazanma şansı var.

Takıldığınız yerler ya da sormak istediğiniz sorular için LossNode Chat Telegram'ımıza katılabilirsiniz.

NEAR Stake Wars, NEAR ağında güncel olarak bulunan 100 adet aktif validatör sayısını 300'den fazla validatör sayısına çıkarmak için oluşturulmuştur. Bu sayede NEAR ağının daha merkeziyetsiz ve daha güvenli olması hedeflenmektedir.

Daha fazla detay için NEAR Stake Wars websitesine göz atabilirsiniz. Ayrıca Discord kanallarına katılmanızı öneririm, kurulum sırasında takıldığınız yerlerde diğer validatörler size yardımcı olabilir.

NEAR-Protocol

Bu makalede bahsedeceğim NEAR Stake Wars III görevleri için son tarih 7 Eylül. Bunun için, makaleyi gördüğünüz andan itibaren en erken tarihte başlamanızı öneririm.

Bu dokümanı sağ üstten forklayıp yıldızlamayı unutmayın, GitHub hesabınızda bulunması yararınıza olur. Ayrıca kurulumu yaparken lütfen okuyup anlayarak yapmaya çalışın, gördüğünüz her kodu yapıştırarak ilerlemenizi tavsiye etmem. Ne yaptığınızı bilerek ilerlemeniz sizin açınızdan çok daha sağlıklı olacaktır.

Kurulumda 4 başlık altında ilerleyeceğiz. Bunlar;

    1. Shardnet cüzdanı oluşturma ve NEAR CLI'yi yükleme
    1. Sunucu kurulumunu yapma ve validatör node'u aktive etme
    1. Staking pool oluşturma ve delege/stake etme işlemleri
    1. Node durumunu görüntülemek için ayarlamalar

1) Shardnet cüzdanı oluşturma ve NEAR CLI'yi yükleme

Kaynak olarak GitHub'ı kullanacağım, göz atmak isterseniz: Stake Wars: Episode III. Challenge 001

Shardnet cüzdan oluşturma ile başlıyoruz. Öncelikle https://wallet.shardnet.near.org/ adresine gidiyoruz.

image

Hesap oluştur'a tıklıyoruz.

image

Burada hesap kimliğimizi oluşturuyoruz. Örneğin, "nearciyim" hesap kimliği kullanılabilir durumda. Hesap Kimliği Oluştur'a tıklıyoruz ve hesabımızı oluşturuyoruz. Makalenin geri kalanında nearciyim hesap kimliğiyle devam edeceğim. Siz orada ne yazdıysanız ona göre gerekli yerleri değiştirirsiniz.

image

Bu noktada güvenliği nasıl sağlayacağımızı soruyor. Ben genelde güvenlik için anahtar kelimeyi seçiyorum ve onu mutlaka bir yere not alıyorum. Eğer dilerseniz Ledger Donanım Cüzdanı, E-posta ya da Telefon numarası gibi farklı güvenlik önlemlerini de seçebilirsiniz. Anahtar Kelimeyi Güvene Al'ı seçiyoruz ve aşağıdaki mavi Devam Et butonuna tıklıyoruz.

image

Bu noktada bize verilen kelimeleri mutlaka bir yere kaydediyoruz ve Devam butonuna basıyoruz, bu sadece Shardnet için değil bütün cüzdanlarınız için geçerli. Herhangi bir şifre unutma, telefon bilgisayar kaybetme durumlarında bu kelimeler olmadan cüzdanınıza erişmeniz imkansız.

image

Burada size kenara not aldığınız kelimelerden rastgele bir tanesini soruyor, doğru cevabı yazıp Doğrula & Tamamla'ya tıklıyoruz.

image

Cüzdan kurulduğunda bizi böyle bir sayfa karşılıyor, buradaki coinler gerçek değil test coini para kazanmadınız :) Coinlerimizi 3. aşamada kendi validatörümüze stake ederken kullanacağız.

NEAR Shardnet cüzdanımızı oluşturduk, şimdi bir sunucu kiralayıp node'umuzu kurmaya başlayabiliriz.

image image

NEAR Stake Wars III için sistem gereksinimleri bu şekilde belirlenmiş. Fakat ilerleyen süreçte bu gereksinimler Stake Wars için yetersiz kalmaya başladı. Benim önerdiğim sistem gereksinimlerini ise aşağıya bırakıyorum. Biraz yüksek gereksinimler, kurup kurmamak size kalmış tabiki.

8 vCPU
32GB RAM
400GB SSD

Ben bu makale için Digital Ocean üzerinden sunucu kiralayacağım. 2 ay için 100$ ücretsiz sunucu kiralama hakkı veriyor. Linkini buraya bırakıyorum: https://try.digitalocean.com/freetrialoffer/

Yukarıda verdiğim linke gidiyoruz. Mail ve şifremizle kaydoluyoruz.

image

Kaydolduktan sonra bu noktada bizden kredi kartı ve adres bilgileri istiyor. Burayı doğru bir şekilde dolduruyoruz.

image

Bizi bu sayfa karşılıyor, Kontrol Panelimizi Keşfedin'e tıklıyoruz ve Kontrol Paneline gidiyoruz.

image image

Görselde görüldüğü gibi 100$ kredimiz aktive oluyor, create diyoruz ve droplet'e tıklıyoruz.

image

Görseldeki gibi işletim sistemi olarak Ubuntu 20.04 (LTS) x64 seçiyoruz. Aşağı doğru iniyoruz, sunucunun donanımını seçeceğiz.

180667303-7aed5f20-6ad6-48ea-abc0-698fab60df52

Üstteki görselde gördüğünüz gibi Regular with SSD'ye tıklıyoruz, 48$ olan sunucuyu seçiyoruz.

image

Bu kısımlar seçili olduğu şekilde kalabilir, değiştirmenize gerek yok. Dilerseniz sunucunuzun konumunu değiştirebilirsiniz tabi. Aşağı iniyoruz.

image

Bu noktada sunucumuza root olarak bağlanmak için bir şifre belirliyoruz. Bir şifre belirleyin ve kenara not edin. Makalenin ilerisinde sunucumuza WinSCP ile bağlanmamız gerekecek, bunun için root şifresi bize lazım.

Yine aşağı devam ediyoruz.

image

Bu noktada sunucumuza bir isim veriyoruz ve aşağıdaki mavi Create Droplet'e tıklıyoruz. Ardından açılan sayfada sunucumuzun oluşturulmasını bekliyoruz.

image image

Sunucumuz oluşturulduktan sonra üzerine tıklıyoruz, altta sunucumuzun özelliklerini gösteren bir kısım açılıyor. Sunucu ismine tekrar tıklıyoruz.

image

Açılan sayfada Console'a tıklıyoruz ve yeni bir pencerede Terminalimiz açılıyor. Terminalin yüklenmesini bekliyoruz.

image

Terminalimiz yüklendikten sonra artık node'umuzu kurmaya başlayabiliriz.

Kodları direkt buradan kopyaladıktan sonra terminalde sağ tıklayıp yapıştıra basarak yapıştırabilirsiniz. Sizin için daha kolay ve pratik olur. Bu noktada, ilk olarak NEAR-CLI kurulumu yapacağız. NEAR-CLI, NEAR blokzinciri ile uzaktan prosedür çağrıları (RPC) sayesinde iletişim kuran bir komut satırı arabirimidir.

Root yetkisi alalım:

sudo su

İlk kodumuz sunucumuzu güncellemek için:

sudo apt update && sudo apt upgrade -y

Node.js ve npm gibi geliştirici araçlarını yüklüyoruz:

curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -  
sudo apt install build-essential nodejs
PATH="$PATH"

Yüklediğimiz Node.js ve npm'nin versiyonlarını kontrol edelim, aldığınız çıktılar girdiğiniz kodun altındaki çıktı gibi olmalı:

node -v

v18.x.x

image

Örneğin, bu doğru bir çıktı.

npm -v

8.x.x

Eğer node -v kodunu denediğinizde aşağıdaki gibi bir çıktı alıyorsanız, apt install nodejs kodunu girip tekrar deneyin.

image

Şimdi NEAR-CLI'yi sunucumuza kurmamız gerekiyor. Dilerseniz NEAR-CLI için GitHub dokümanına şuradan ulaşabilirsiniz: https://github.com/near/near-cli

sudo npm install -g near-cli

Validatör Durumları

Şuan için NEAR-CLI'yi sunucumuza kurduk. Aşağıdaki 3 başlık validatör durumunu kontrol etmek için CLI'yi test eden komutlar. Sıra sıra bunları girerek inceleyebilirsiniz. Fakat bundan önce validatör için Environment düzenlemesi yapmamız gerekiyor.

Environment düzenlemesi için her bir kabuk başlangıcında doğru ağı seçmemiz gerekir.

NEAR ağı için geçerli ağlar şunlardır:

  • GuildNet
  • TestNet
  • MainNet
  • Shardnet (biz NEAR Stake Wars için Shardnet'i kullanıyor olacağız)

Başlıyoruz Environment düzenlemesine.

export NEAR_ENV=shardnet

NEAR testnet Environment'ını kalıcı olarak ayarlamak için bu komutu da kullanabilirsiniz:

echo 'export NEAR_ENV=shardnet' >> ~/.bashrc
echo 'export NEAR_ENV=shardnet' >> ~/.bash_profile
source $HOME/.bash_profile

Environment'ımızı ayarladık. Şimdi CLI'yi test edecek komutlara geçebiliriz.

1-Teklif

Validatör tarafından ağa katılım için bir teklif yapılır. Bu teklifin kabul edilmesi için stake edilen miktarın o ağ için geçerli olan minimum seat price'ın üzerinde olması gerekir. Shardnet için gerekli minimum seat price bilgisine buradan ulaşabilirsiniz. Ayrıca validatör listesinde en altlara indiğinizde ağa katılmak için bekleyen proposal (teklif) konumundaki validatörleri görebilirsiniz. Aynı verilere aşağıdaki komutu çalıştırarak da erişebilirsiniz.

near proposals

2-Güncel Validatörler

Aşağıdaki komut güncel dönemdeki ağdaki aktif validatörleri, üretilen toplam blok sayısını, beklenen blok sayısını ve çevrimiçi oranı göstermektedir. Bu komut, validatörlerin sorun yaşayıp yaşamadığını öğrenmek için kullanılır. Ayrıca yine explorer'a giderek de şuan ağdaki aktif görev yapan validatörlere göz atabilirsiniz.

near validators current

3- Next Validatörler

Bu komutla birlikte ağa katılmak için teklif yapmış ve teklifi onaylanmış validatörleri görebilirsiniz. Yine explorer'a giderek validatör durumu joining olanlara bakabilirsiniz.

near validators next

Şu ana kadar sunucumuzu güncelledik, bazı gerekli geliştirici ayarlarını yaptık, Shardnet ağındaki validatörümüz için Environment ayarlarını oluşturduk ve NEAR CLI içerisinde bulunan 3 tane görüntüleme komutuna göz attık. Buradan sonrasında node'umuzu kurmayla ve onu çalıştırmayla devam edeceğiz.

Sunucu kurulumunu yapma ve validatör node'u aktive etme

Kaynak olarak: Stake Wars: Episode III. Challenge 002

Sunucumuzun NEAR Stake Wars node kurulumu için yeterli olup olmadığına bakmak isterseniz bu kodu girebilirsiniz, girmenizi tavsiye ederim:

lscpu | grep -P '(?=.*avx )(?=.*sse4.2 )(?=.*cx16 )(?=.*popcnt )' > /dev/null \
  && echo "Supported" \
  || echo "Not supported"

image

Eğer "Supported" çıktısı alıyorsak sunucumuz yeterlidir, "Not Supported" alıyorsak daha yüksek özellikli bir sunucuya geçiş yapmalısınız.

Geliştirici araçlarını yükleme:

sudo apt install -y git binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev cmake gcc g++ python docker.io protobuf-compiler libssl-dev pkg-config clang llvm cargo

Python pip'i yükleme:

sudo apt install python3-pip

Konfigürasyon ayarları yapma:

USER_BASE_BIN=$(python3 -m site --user-base)/bin
export PATH="$USER_BASE_BIN:$PATH"

Building ve Environment yükleme:

sudo apt install clang build-essential make

Rust ve Cargo yükleme:

curl -sf -L https://static.rust-lang.org/rustup.sh | sh

image

Böyle bir kod çıkarsa y'ye basıp enter'a basıyoruz.

image

Burada karşınıza böyle bir şey çıkacak, 1 yazıp enter'a basıyoruz.

image

Bu yazıyı gördüyseniz olmuştur.

Kodları girmeye devam ediyoruz:

source $HOME/.cargo/env

Burada GitHub üzerinden nearcore'u klonlayacağız:

git clone https://github.com/near/nearcore
cd $HOME/nearcore
git fetch

Ardından bu kodla devam ediyoruz:

git checkout fe435d02c5ea497933c89d5e7d1703d9379b7e1f

Şimdi ise binary'yi çalıştırıyoruz:

cargo build -p neard --release --features shardnet

Bu kısımda eğer No such file tarzı bir uyarı veriyorsa yanlış klasördesinizdir, cd $HOME/nearcore yazarak tekrar deneyin.

Çalışma dizinini başlatıyoruz:

Node'un çalışması için bir çalışma dizini ve konfigürasyon dosyaları gerekir. Bunlar için aşağıdaki kodu çalıştırıyoruz.

./target/release/neard --home ~/.near init --chain-id shardnet --download-genesis

image

Burada bu tür bir çıktı ile karşılaşacaksınız, karşılaşmadıysanız sorun var demektir.

Yukarıdaki komutla config.json, genesis.json, ve node_key.json dosyalarını oluşturduk.

Bu dosyaların işlevlerini birkaç cümlede anlatmak istiyorum.

  • config.json dosyası düğümün ağ üzerinde nasıl çalışacağı, eşlerle nasıl iletişim kurulacağı ve fikir birliğine nasıl ulaşılacağı hakkında gerekli bilgileri içeren dosyadır.

  • genesis.json Ağın başlangıç aşamasında başlattığı verileri içeren dosyadır. Blokzincir üzerindeki ilk hesaplar, sözleşmeler, erişim anahtarları ve diğer kayıtlar bu dosyada depolanır.

  • node_key.json Node'umuz için public ve private key'leri içeren dosyadır. Bunun yanında, validatör node'unu çalıştırmak için gerekli olan account_id parametresini de içerir.

  • data/ NEAR node'unun güncel durumunun içine yazıldığı klasördür.

Bu noktada, oluşturduğumuz config.json dosyasını node'umuz için kullanılabilir hale getirmemiz gerekiyor. Bunun için şu 2 değişikliği yapmamız gerekiyor:

  • boot_nodes Eğer başlatma sırasında kullanılacak önyükleme node'larını belirtmediysek oluşturulan config.json boş bir dizi gösterir. Bu nedenle config.json'u önyükleme node'larını belirten dolu bir diziyle değiştirmemiz gerekiyor. Bunun için de alttaki komutu kullanacağız.

  • tracked_shards Oluşturduğumuz config.json dosyasında bu alan boş. Bunu "tracked_shards": [0] ile değiştirmemiz gerekecek. Yine bunun için de, alttaki komutu çalıştırmamız yeterli olacaktır.

rm ~/.near/config.json
wget -O ~/.near/config.json https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/config.json

Güncel snapshot(anlık görüntü)'ı alma

ÖNEMLİ! Bu komut, Shardnet üzerinde Hardfork 18/07/2022'de gerçekleştikten sonra zorunlu bir komut değil. Almasanız da olur. Ben yine de anlatacağım almak isteyenler için.

AWS Cli'yi yüklüyoruz:

sudo apt-get install awscli -y

Snapshot'u indiriyoruz genesis.json olarak:

cd ~/.near
wget https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/genesis.json

Yukarıdaki kod error verirse dağıtım havuzundaki AWS Cli'nin tarihi geçmiş olabilir. Alttaki komutu deneyip tekrar deneyebilirsiniz:

pip3 install awscli --upgrade

Şimdi node'umuzu çalıştırmaya geçiyoruz, buradan itibaren dikkatli ilerleyin WinSCP gibi uygulamalar kullanacağız. Komut üzerinden de yapılabiliyor fakat WinSCP üzerinden dosyaları görerek yapmanızı tavsiye ederim, bu sayede hata payını düşürmüş olursunuz.

Eğer bilgisayarınızda WinSCP yüklü değilse şuradan indirip kurabilirsiniz: https://winscp.net/

Node'u çalıştırma komutunu giriyoruz:

cd $HOME/nearcore
./target/release/neard --home ~/.near run

image

Burada altını çizdiğim Downloading headers kısmı %100 olana kadar bekleyin. %100 olduğuna emin olduktan sonra Ctrl+C ile akışı durdurup tekrar komut girmeye devam edebilirsiniz.

YUKARIDAKİ KOMUTU GİRDİKTEN SONRA AŞAĞIDAKİ GÖRSELDEKİ GİBİ RECEIVE BAD BLOCK: INVALID CHUNK STATE TARZI HATALAR ALIRSANIZ HARDFORK SONRASI GÜNCELLEMESİNİ YAPIP TEKRAR DENEMENİZİ ÖNERİRİM. LİNKİ BURADA: STAKE WARS GÜNCELLEME REHBERİ

image

Node'umuzu oluşturduğumuz Shardnet cüzdanına bağlayarak aktive ediyoruz:

near login

image

Böyle bir soru soruyor, "y" yazıp enter'a basıyoruz.

image

Burada https:// ile başlayan ve Please authorize'a kadar olan yeri ( Please authorize hariç) kopyalıyoruz ve Shardnet cüzdanını oluşturduğunuz tarayıcıya (örneğin Google Chrome) yapıştırıp adrese gidiyoruz.

image

Bizi böyle bir sayfa karşılıyor, mavi Sonraki butonuna tıklıyoruz.

image

Açılan sayfada Bağlan'a tıklıyoruz.

image

Hesap kimliğimizi istiyor, görseldeki gibi hesap kimliğimizi yazıyoruz ve Onayla'ya tıklıyoruz.

image image

Onayladıktan sonra böyle bir sayfa çıkıyor, merak etmeyin herhangi bir şeyi yanlış yapmadınız. Hemen bir altındaki görselde görüldüğü gibi hesap kimliğinizi sunucuda komut olarak yazın ve enter'a basın.

NOT: Komutu girip enter'a bastıktan sonra successfully yazması gerekiyor. Ben node'u kendim kurarken alttaki gibi bir hatayla karşılaştım arkadaşlar terminal ekranı dondu herhangi bir çıktı vermedi, eğer sizde de böyle olursa ilk olarak terminali kapatıp açıp near login kısmından itibaren tekrar deneyin eğer yine olmazsa farklı bir cüzdan açıp işlemleri tekrar yapın.

image

Birkaç denemeden sonra alttaki gibi bir çıktı aldım, başarıyla cüzdanı node'a bağladım.

image

Şimdi validator_key.json dosyamızı kontrol ediyoruz:

cat ~/.near/validator_key.json

Muhtemelen bu komutu girdikten sonra No such file or directory hatası alacaksınız, çünkü validator_key.json dosyamız daha oluşturulmadı. Şimdi onu oluşturalım. Aşağıdaki komutta <pool_id> kısmı sizin oluşturmak istediğiniz pool'un adını içeren xx.factory.shardnet.near oluyor. Buradaki xx, sizin oluşturmak istediğiniz pool'un adı. Burada pool adınızı cüzdan adınızla aynı yapmayı tavsiye ediyorum. Örneğin hesap adınız spiderman.shardnet.near ise <pool_id> kısmına spiderman.factory.shardnet.near yazın.

near generate-key <pool_id>

Şimdi WinSCP'yi kullanma zamanımız geldi. WinSCP'yi açıyoruz:

Screenshot_2

Bizi böyle bir sayfa karşılıyor.

image

Sunucu adına yukarıdaki Digital Ocean kontrol paneli'nde NEAR Stake Wars için oluşturduğumuz sunucunu IP'sini yazıyoruz.

image

Kullanıcı adı'na root, parola kısmına ise droplet'i oluştururken kenara not ettiğimiz root şifremizi yazıyoruz ve Oturum Aç'a tıklıyoruz.

image

Sağ tarafta böyle bir klasör göreceksiniz, eğer yazısı sönük olan dosyalar sizde görünmüyorsa Ctrl + Alt + H yaparak görünmesini sağlayın. Ve boş bir yere sağ tıklayıp Yenile'ye tıklayın.

image

.near-credentials bu dosyanın içine girin.

image

shardnet klasörüne girin.

image

Burada 2 farklı .json dosyası var. Bunlardan xx.factory.shardnet.near olana giriyoruz.

Screenshot_3

Bizi böyle bir dosya karşılıyor. Bu dosyanın içeriğinin tamamını kopyalıyoruz ve dosyayı kapatıyoruz.

image

Şimdi yukarıdaki root yazısına tıklayarak ana dizine geliyoruz.

image

Buradaki .near dosyasının içine giriyoruz.

image

Boş bir yere tıklayıp yeni dosya oluştur diyoruz.

image

Dosyamızın ismini validator_key.json yapıyoruz. Burası önemli dosya ismini doğru yazdığınızdan emin olun.

image

Ardından bu şekilde boş bir json dosyası karşımıza çıkıyor. Az önce xx.factory.shardnet.near dosyasından kopyaladığımız içeriği buraya yapıştırıyoruz.

Screenshot_4

Yapıştırdığımız içeriğin en sonuna gidip private_key olan kısmı secret_key olarak değiştiriyoruz. Sadece bu değişikliği yapın başka hiçbir şey değiştirmeyin ya da silmeyin, validatörünüz çalışmaz. Değişikliği yaptıktan sonra Ctrl + S yapıp kaydediyoruz ve dosyayı kapatıyoruz. WinSCP'yi kapatmayın tekrar lazım olacak.

Terminalimize geri dönüyoruz ve aşağıdaki komutu giriyoruz bu komutun sonuçlanması biraz uzun sürecektir:

target/release/neard run

image

Eğer yukarıdaki komutu girerken No such file or directory hatası alırsanız cd $HOME/nearcore komutunu girip tekrar deneyin.

image

Downloading blocks kısmı %100 olana dek bekliyoruz. %100 olduktan sonra Ctrl + C yapıyoruz.

YUKARIDAKİ KOMUTU GİRDİKTEN SONRA AŞAĞIDAKİ GÖRSELDEKİ GİBİ RECEIVE BAD BLOCK: INVALID CHUNK STATE TARZI HATALAR ALIRSANIZ HARDFORK SONRASI GÜNCELLEMESİNİ YAPIP TEKRAR DENEMENİZİ ÖNERİRİM. LİNKİ BURADA: STAKE WARS GÜNCELLEME REHBERİ

image

Servis dosyamızı oluşturacağız:

sudo nano /etc/systemd/system/neard.service

Burada bir pencere açılacak, aşağıdaki kodu olduğu gibi yapıştırıyoruz:

[Unit]
Description=NEARd Daemon Service

[Service]
Type=simple
User=root
#Group=near
WorkingDirectory=/root/.near
ExecStart=/root/nearcore/target/release/neard run
Restart=on-failure
RestartSec=30
KillSignal=SIGINT
TimeoutStopSec=45
KillMode=mixed

[Install]
WantedBy=multi-user.target

Ardından bu pencereden çıkmak için sırasıyla;

  • Ctrl + X
  • Y
  • Enter'a basıp kapatıyoruz.

Sistemi enable hale getiriyoruz:

sudo systemctl enable neard

Sistemi başlatıyoruz:

sudo systemctl start neard

Bir hatadan dolayı servis üzerinde değişiklikler yaparsanız, aşağıdaki komutla reload etmeniz gerekir:

sudo systemctl daemon-reload
sudo systemctl restart neard

Sistemimiz başlatıldı. Log çıktılarını izlemek isterseniz komut:

journalctl -n 100 -f -u neard

Eğer aşağıdaki gibi No journal files were found. hatası alırsanız, systemctl restart systemd-journald.service kodunu girip tekrar deneyin. Sisteme ufak bir restart atmanız hatayı çözecektir.

image

Logların görünümü için şu komutları girebilirsiniz. İlk komut logları düzenli ve renkli göstermek için gerekli aracı indirir, ikinci komut logları renkli yapar:

sudo apt install ccze
journalctl -n 100 -f -u neard | ccze -A

Bir validatörün oluşması için:

  • Node'umuzun tamamen senkronize olması,

  • validator_key.json dosyamızın oluşturulması,

  • validator_key.json dosyamızın içeriğindeki public_key ile sözleşmenin başlatılması,

  • Staking pool sözleşme ID'sinin account_id'miz ile aynı olması,

  • Minimum seat price'ın karşılanması, (Güncel seat price'a buradan bakabilirsiniz),

  • Sözleşmeye ping atılarak teklif sunulması (birazdan geleceğiz ping konusuna),

  • Teklif kabul edildikten sonra validatörün 2-3 epoch (dönem) bekleyip aktif validatör setine girmesi,

  • Aktif validatör setine girildikten sonra imzalanan blok sayısının %90'ın üzerinde olması gereklidir.

Bence kurulumun en zor kısmı olan bu kısımla birlikte özet olarak;

  • Sunucumuza gerekli geliştirici araçlarını yükledik (cargo, rust, python pip vb.),

  • Konfigürasyon ve Environment ayarlarını yaptık,

  • GitHub üzerinden node'umuzun çalışması için gerekli olan nearcore'u yükledik,

  • Yüklediğimiz nearcore'u çalıştırdık,

  • NEAR Shardnet ağındaki ilk verileri içeren genesis dosyasını indirip çalıştırdık,

  • config.json, genesis.json, ve node_key.json dosyalarımızı oluşturduk,

  • Gerekli olmasa da isteyenler için en güncel snapshot(genesis.json)'u indirdik,

  • Kurduğumuz node'umuzu çalıştırdık,

  • NEAR Shardnet cüzdanımızla node'umuzu eşleştirip validatör oluşturduk.

3) Staking pool oluşturma ve delege/stake etme işlemleri

Kaynak: Stake Wars: Episode III. Challenge 003

NEAR, delegatörlerin fonlarının güvende kalmasını sağlamak için whitelist'e alınmış bir stake sözleşmesine sahip stake havuzu kullanır.

NEAR üzerinde bir validatör çalıştırmak için bir NEAR hesabında stake havuzu dağıtılmalı ve NEAR validatör node'una entegre edilmelidir. Stake havuzu, NEAR hesabına dağıtılmış olan bir akıllı sözleşmedir.

Stake Havuzu Sözleşmesinin Dağıtımı

Aşağıdaki komut, stake havuzu factory'sini çağırır ve yeni bir stake havuzu oluşturur. Komutu doğrudan terminale YAPIŞTIRMAYIN. Değiştirmeniz gereken kısımları aşağıda belirttim, onları değiştirdikten sonra komutu çalıştırın.

near call factory.shardnet.near create_staking_pool '{"staking_pool_id": "<pool id>", "owner_id": "<accountId>", "stake_public_key": "<public key>", "reward_fee_fraction": {"numerator": 5, "denominator": 100}, "code_hash":"DD428g9eqLL8fWUxv8QSpVFzyHi1Qd16P8ephYCTmMSZ"}' --accountId="<accountId>" --amount=30 --gas=300000000000000

Burada değiştirmeniz gereken kısımlar:

  • <pool id>: Bu kısıma stake havuz adımızı giriyoruz. Örneğin, pool'umuzun adı spiderman.factory.shardnet.near ise bu komutu girerken <pool id> kısmına spiderman yazacağız.

  • <accountId>: Bu kısıma hesap kimliğimizi giriyoruz. Örneğin, spiderman.shardnet.near

  • <public key>: Bu kısım için WinSCP'yi tekrar açıyoruz. Nasıl bağlanacağınızı yukarıda anlatmıştım.

image

.near klasörüne giriyoruz.

image

validator_key.json dosyamızı buluyoruz ve açıyoruz. Eğer yukarıdaki adımları doğru bir şekilde takip etmenize rağmen bu dosyayı bulamazsanız klasör içerisinde boş bir yere sağ tıklayıp Yenile diyelim.

image

ed25519 ile başlayan public.key kısmını olduğu gibi kopyalıyoruz. Komut içerisindeki yerine yapıştırıyoruz.

  • Reward_fee_fraction olarak belirtilen kısım varsayılan olarak %5 olarak belirtilmiş burada. İsterseniz değiştirebilirsiniz ama değiştirmenize gerek yok. Pool'a stake edenlerden alınacak fee'yi temsil ediyor.

  • <accountId>: Bu kısıma yine hesap kimliğimizi giriyoruz. Örneğin, spiderman.shardnet.near

Biraz karışık olduğu için ben kendi örnek node'umu oluştururken girdiğim komutu buraya bırakıyorum, buna bakarak kendinizinkini düzenleyin lütfen. Doğrudan yapıştırırsanız çalışmaz.

near call factory.shardnet.near create_staking_pool '{"staking_pool_id": "nearstakewars", "owner_id": "nearstakewars.shardnet.near", "stake_public_key": "ed25519:6UfGtVfCVg1hjiyR8nrrwL7A8vbFxxxxxxxxxxxxx", "reward_fee_fraction": {"numerator": 5, "denominator": 100}, "code_hash":"DD428g9eqLL8fWUxv8QSpVFzyHi1Qd16P8ephYCTmMSZ"}' --accountId="nearstakewars.shardnet.near" --amount=200 --gas=300000000000000

image

Bu komutu girmeden önce Shardnet cüzdanınızda en az 30 NEAR olduğuna emin olun. 30 NEAR, stake havuzu oluşturabilmek için tek seferde stake etmeniz gereken minimum miktar.

Yukarıdaki komutla birlikte Staking Havuzumuzu oluşturmuş olduk. Havuzunuzu explorer üzerinden kontrol edebilirsiniz. Oluşturduğunuz an proposal kısmında bulunacaktır. Bir sonraki epoch'ta joining kısmında, eğer kickout olmazsanız da bir sonraki epoch'ta active kategorisine geçecektir.

Oluşturduğunuz havuzun parametrelerini değiştirmek isterseniz, örneğin stake fee değerini değiştirmek isterseniz aşağıda bıraktığım komutu kullanabilirsiniz:

near call <pool_name> update_reward_fee_fraction '{"reward_fee_fraction": {"numerator": 1, "denominator": 100}}' --accountId <account_id> --gas=300000000000000

image

Yukarıdaki gibi bir çıktı alırsanız değişmiş demektir.

Pool için İşlem Rehberi

NEAR'ları Deposit ve Stake Etme

Aşağıdaki komut ile NEAR'larınızı cüzdanınızdan havuzunuza aktarabilir ve stake edebilirsiniz:

near call <staking_pool_id> deposit_and_stake --amount <amount> --accountId <accountId> --gas=300000000000000
  • <staking_pool_id>: xx.factory.shardnet.near

  • <amount>: stake etmek istediğiniz NEAR miktarı

  • <accountId>: cüzdan hesap kimliğiniz, xx.shardnet.near

image

NEAR'ları Havuzdan Unstake Etme

Aşağıdaki komut ile NEAR'larınızı havuzunuzdan unstake edebilirsiniz. Fakat bu NEAR'ları doğrudan cüzdanınıza çekmez, bunun için aşağıda bahsettiğim withdraw başlığına göz atmalısınız:

near call <staking_pool_id> unstake '{"amount": "<amount yoctoNEAR>"}' --accountId <accountId> --gas=300000000000000
  • <staking_pool_id>: xx.factory.shardnet.near

  • <amount yoctoNEAR>: unstake etmek istediğiniz NEAR miktarı, yoctoNEAR cinsinden.

  • <accountId>: cüzdan hesap kimliğiniz, xx.shardnet.near

image

Eğer stake havuzundaki tüm NEAR'ları unstake etmek isterseniz de aşağıdaki komutu kullanın:

near call <staking_pool_id> unstake_all --accountId <accountId> --gas=300000000000000
  • <staking_pool_id>: xx.factory.shardnet.near

  • <accountId>: cüzdan hesap kimliğiniz, xx.shardnet.near

image

NEAR'ları Cüzdana Çekme

Bu işlemi yapabilmek için öncelikle yukarıdan unstake yapmanız gerekir. Unstake periyodu yaklaşık 2-3 epoch içerisinde tamamlanır. Unstake periyodunun ardından YoctoNEAR'larınızı havuzdan cüzdana çekebilirsiniz.

Cüzdana çekme için komut:

near call <staking_pool_id> withdraw '{"amount": "<amount yoctoNEAR>"}' --accountId <accountId> --gas=300000000000000
  • <staking_pool_id>: xx.factory.shardnet.near

  • <amount yoctoNEAR>: cüzdana çekmek istediğiniz NEAR miktarı, yoctoNEAR cinsinden.

  • <accountId>: cüzdan hesap kimliğiniz, xx.shardnet.near

Unstake edilmiş tüm NEAR'larınızı cüzdana çekmek isterseniz komut:

near call <staking_pool_id> withdraw_all --accountId <accountId> --gas=300000000000000
  • <staking_pool_id>: xx.factory.shardnet.near

  • <accountId>: cüzdan hesap kimliğiniz, xx.shardnet.near

Ping İşlemi

Ping işlemi, yeni bir teklif yayınlar ve delegatörleriniz için staking bakiyelerini günceller. Staking havuzu sayesinde kazandığınız ödülleri güncel tutmak için her epoch içerisinde en az bir ping gönderilmelidir.

Ping komutu:

near call <staking_pool_id> ping '{}' --accountId <accountId> --gas=300000000000000
  • <staking_pool_id>: xx.factory.shardnet.near

  • <accountId>: cüzdan hesap kimliğiniz, xx.shardnet.near

image

Toplam bakiyenizi görüntülemek için komut:

near view <staking_pool_id> get_account_total_balance '{"account_id": "<accountId>"}'
  • <staking_pool_id>: xx.factory.shardnet.near

  • <accountId>: cüzdan hesap kimliğiniz, xx.shardnet.near

image

Buradaki o uzun yeşil 2500000xxx şeklinde devam eden sayı 250 NEAR demek oluyor.

Stake Edilmiş Bakiye

Aşağıdaki komut sayesinde stake edilmiş toplam bakiyenizi öğrenebilirsiniz.

Komut:

near view <staking_pool_id> get_account_staked_balance '{"account_id": "<accountId>"}'
  • <staking_pool_id>: xx.factory.shardnet.near

  • <accountId>: cüzdan hesap kimliğiniz, xx.shardnet.near

image

Unstake Edilmiş Bakiye

Aşağıdaki komut sayesinde unstake edilmiş toplam bakiyenizi öğrenebilirsiniz.

Komut:

near view <staking_pool_id> get_account_unstaked_balance '{"account_id": "<accountId>"}'
  • <staking_pool_id>: xx.factory.shardnet.near

  • <accountId>: cüzdan hesap kimliğiniz, xx.shardnet.near

image

Cüzdana Geri Çekilebilir Durumda Olan Bakiye

Aşağıdaki komut sayesinde unstake edilmiş ve cüzdana geri çekebileceğiniz NEAR miktarını öğrenebilirsiniz. Unutmayın, sadece unlocked olmuş NEAR'ları cüzdanınıza geri çekebilirsiniz, unlocked olması için de unstake edildikten sonra 2-3 epoch beklemeniz gerekir.

Komut:

near view <staking_pool_id> is_account_unstaked_balance_available '{"account_id": "<accountId>"}'
  • <staking_pool_id>: xx.factory.shardnet.near

  • <accountId>: cüzdan hesap kimliğiniz, xx.shardnet.near

image

Burada NEAR'larımı yeni unstake ettiğim ve 2-3 epoch geçmediği için NEAR'larım Withdraw için hazır değil, bu yüzden false çıktısı verdi. True çıktısı verdiğinde NEAR'larımızı cüzdana çekebiliriz.

Staking'i Durdurmak / Tekrar Başlatmak

Aşağıdaki komut sayesinde staking işleminizi durdurabilirsiniz.

Durdurmak

Komut:

near call <staking_pool_id> pause_staking '{}' --accountId <accountId>
  • <staking_pool_id>: xx.factory.shardnet.near

  • <accountId>: cüzdan hesap kimliğiniz, xx.shardnet.near

Aşağıdaki komut sayesinde staking işleminizi tekrar başlatabilirsiniz.

Tekrar Başlatmak

Komut:

near call <staking_pool_id> resume_staking '{}' --accountId <accountId>
  • <staking_pool_id>: xx.factory.shardnet.near

  • <accountId>: cüzdan hesap kimliğiniz, xx.shardnet.near

Bu kısmın bitişiyle birlikte özet olarak;

  • NEAR Shardnet ağı üzerinde staking havuzu açtık,

  • Açtğımız staking havuzuna cüzdanımızdan NEAR deposit ettik ve bu NEAR'ları havuzumuza stake ettik,

  • Havuzumuza stake ettiğimiz NEAR'ları unstake ettik,

  • Unstake ettiğimiz NEAR'ları cüzdanımıza geri çektik (2-3 epoch bekledikten sonra),

  • NEAR Shardnet ağında delegator olarak ping gönderdik,

  • Staking havuzumuzdaki toplam NEAR bakiyemizi öğrendik,

  • Staking havuzumuzdaki toplam stake / unstake edilmiş NEAR bakiyemizi öğrendik,

  • Staking havuzumuzda stake işlemlerini durdurduk ve tekrar başlattık.

4) Node durumunu görüntülemek için ayarlamalar

Kaynak: Stake Wars: Episode III. Challenge 004

Bu bölümde kurduğumuz node'un durumunu gözlemlemek için kullanacağımız araçlara göz atacağız. Node'u çalışır durumda tutabilmek adına RPC'nin 3030 numaralı port noktasına kurulması ve kullanılması gerekir.

Log Dosyaları

Log dosyaları kurulumu nereye yaptığınıza bağlı olarak ~/.nearup/logs dizininde ya da systemd'de depolanır.

Systemd Komutu:

journalctl -n 100 -f -u neard | ccze -A

Bu komut sayesinde akan logların örneğine ve bu örneğin ne ifade ettiğine aşağıdan bakabilirsiniz.

INFO stats: # 1368392 JAH2UK8ahcAhW859jyMk7NNFVn6bqSAuYNtkcYrZj2o7 Validator | 100 validators 34 peers ⬇ 430 kB/s ⬆ 478 kB/s 0.19 bps 274 Tgas/s CPU: 148%, Mem: 4.88 GB
  • Validator: Bu kısım sizin aktif bir validatör olduğunuzu gösterir.

  • 100 Validators: Bu kısım ağdaki toplam validatör sayısını belirtir.

  • 34 peers: Bu kısım sizin bağlandığınız eşlerin sayısını gösterir. Consensus'a erişmek ve doğrulamaya başlayabilmek için en az 3 eşe ihtiyacınız vardır.

  • # 1368392: Bu kısım güncel bloğun nerede olduğunu gösterir.

RPC

Ağdaki node'lar, port'u güvenlik duvarında açık olduğu sürece 3030 portu üzerinde RPC hizmetleri sunar. NEAR-CLI, RPC çağrılarını kullanır. RPC'nin genel kullanım alanları validatör istatistiklerini, node versiyonunu, delegatör stake'ini kontrol etmektir. Ayrıca bunun yanında RPC; blokzincir, hesaplar ve sözleşmeler ile etkileşime girmek için de kulanılabilmektedir.

Aşağıda RPC servislerini nasıl kullanacağınızla ilgili birkaç komut bulunuyor, detaylı araştırmak isterseniz buraya göz atabilirsiniz: https://docs.near.org/docs/api/rpc

Bu komutumuz gerekli dosyaları indirir:

sudo apt install curl jq

image

Buradaki gibi devam etmeyi isteyip istemediğimizi soracaktır, Y yazıp enter'a basıyoruz.

Bu komut ile node'unuzun versiyonunu kontrol edebilirsiniz:

curl -s http://127.0.0.1:3030/status | jq .version

image

Bu tür bir çıktı gelecektir.

Bu komut sayesinde stake havuzundaki delegatörleri ve stake ettikleri miktari öğrenebilirsiniz:

near view <your pool>.factory.shardnet.near get_accounts '{"from_index": 0, "limit": 10}' --accountId <accountId>.shardnet.near
  • <your pool>: xx.factory.shardnet.near kısmındaki xx'i gireceksiniz

  • <accountId>: cüzdan hesap kimliğiniz, xx.shardnet.near

image

Bu tür bir çıktıya sahip olursunuz.

Bu komut eğer ağdan atıldıysak çalışır, ağdan neden atıldığımızı gösterir. Ayrıca bu komutu ağdan atıldıktan hemen bir sonraki epoch içerisinde girmemiz gerekir, diğer epoch'larda çalışmayacaktır:

curl -s -d '{"jsonrpc": "2.0", "method": "validators", "id": "dontcare", "params": [null]}' -H 'Content-Type: application/json' 127.0.0.1:3030 | jq -c '.result.prev_epoch_kickout[] | select(.account_id | contains ("<POOL_ID>"))' | jq .reason
  • <POOL_ID>: xx.factory.shardnet.near

Bu komut sayesinde ağ üzerinde kaç blok ürettiğinizi ve expected blok sayısını görebilirsiniz:

curl -s -d '{"jsonrpc": "2.0", "method": "validators", "id": "dontcare", "params": [null]}' -H 'Content-Type: application/json' 127.0.0.1:3030 | jq -c '.result.current_validators[] | select(.account_id | contains ("POOL_ID"))'
  • <POOL_ID>: xx.factory.shardnet.near

image

Stake havuzunu yeni açtıysanız ve daha henüz aktif validatör değilseniz herhangi bir çıktı almazsınız.

image

Aktif bir validatöre sahip iseniz bu tür bir çıktı alırsınız. Göründüğü gibi "num_produced_blocks" kısmı 0 görünüyor. Çünkü aktif sette olsanız bile sadece ilk 100 aktif validatör blok üretir. Diğer aktif validatörlerin ürettiği bloklar ise chunk-only olarak adlandırılıyor.

NORMAL ŞARTLARDA BURAYA KADAR OLAN KISMIN CHALLENGE 5 İÇİN YETERLİ OLMASI GEREKİYOR, ANCAK BEN CHALLENGE 6, 8 VE 9 İÇİN DE REHBER OLUŞTURMAYA KARAR VERDİM. BURAYA KADAR GELEN NEAR AĞI TOPLULUĞU ÜYELERİ 6,8 VE 9. CHALLENGE'LARININ ÖDÜLLERİNDEN GERİ KALMASIN İSTEDİM.

PEKİ CHALLENGE 7 NERDE DİYE SORACAK OLURSANIZ, CHALLENGE 7 İÇİN HERHANGİ BİR KOD KOMUT İŞLEMİ YOK. SİZİN KENDİ ÇABALARINIZLA YAPMANIZ GEREKEN BİR DATA SCIENCE GÖREVİ. BU YÜZDEN CHALLENGE 6-8 VE 9 İLE DEVAM EDECEĞİZ. CHALLENGE'LAR HAKKINDA DETAYLI BİLGİ İÇİN: https://github.com/near/stakewars-iii/tree/main/challenges

CHALLENGE 6: PİNG GÖREVİ

Kaynak: Stake Wars: Episode III. Challenge 006

Node validatöründe ağa otomatik olarak ping gönderen bir cron görevi oluşturacağız. Bu görev sayesinde, belirlediğimiz periyot süresiyle ağa otomatik olarak ping gönderilecektir. Gönderilen ping, NEAR ağı ve node'umuz arasındaki bağlantıyı güncellemeye yarar.

WinSCP'ye tekrar giriyoruz.

image

Root dizininde sağ tıklayıp yeni klasör oluştur diyoruz.

image

Klasörün adı logs olacak.

image

Oluşturduğumuz klasörün içine giriyoruz.

image

Boş bir klasör bizi karşılıyor, sağ tıklayıp bu sefer dosya oluştur diyoruz.

image

Dosyanın adı all.log olacak şekilde oluşturuyoruz.

image

Boş dosya karşımıza geliyor, rastgele herhangi bir şeyler yazıyoruz ki dosyayı oluşturabilelim. Ctrl + S yapıp kaydediyoruz ve all.log dosyasını kapatıyoruz.

image

Göründüğü gibi dosyamız burada oluştu, şimdi içine tekrar girip yazdığımız rastgele şeyi silip tekrar Ctrl + S yapıyoruz.

image

Son durumda oluşturduğumuz dosyanın var olması ve içinin boş olması gerekiyor, yazdığınız rastgele şeyin hala dosyada kayıtlı olmadığına emin olun ve öyle devam edin. all.log dosyamızı kapatıyoruz.

image

Buradaki root yazısına tıklayarak root dizinimize geri dönüyoruz.

image

nearcore dosyamızın içine giriyoruz.

image

nearcore klasörümüzün içinde scripts klasörünü bulup içine giriyoruz.

image

Klasörümüzün içinde boş bir yere sağ tıklayıp dosya oluştur diyoruz.

image

Dosya adını görseldeki gibi dikkatli bir şekilde ping.sh yapıp tamam diyoruz.

Açılan boş dosyanın içine aşağıdaki kodu olduğu gibi yapıştırıyoruz, fakat üzerinde değişiklik yapacağınız birkaç yer var onları kodun altına bırakıyorum.

#!/bin/sh
# Ping call to renew Proposal added to crontab

export NEAR_ENV=shardnet
export LOGS=/root/logs
export POOLID=<pool_id>
export ACCOUNTID=<account_id>

echo "---" >> $LOGS/all.log
date >> $LOGS/all.log
near call $POOLID.factory.shardnet.near ping '{}' --accountId $ACCOUNTID.shardnet.near --gas=300000000000000 >> $LOGS/all.log
near proposals | grep $POOLID >> $LOGS/all.log
near validators current | grep $POOLID >> $LOGS/all.log
near validators next | grep $POOLID >> $LOGS/all.log
  • <pool_id>: xx.factory.shardnet.near kısmındaki xx'i gireceksiniz. ÖRNEĞİN, benim havuzumun adı nearstakewars.factory.shardnet.near ve ben burada <pool_id> yerine SADECE nearstakewars yazmalıyım.

  • <account_id>: xx.shardnet.near kısmındaki xx'i gireceksiniz. ÖRNEĞİN, benim hesabımın adı nearstakewars.shardnet.near ve ben burada <account_id> yerine SADECE nearstakewars yazmalıyım.

Değişiklikleri yaptıktan sonra Ctrl + S yaparak dosyayı kaydediyoruz ve kapatıyoruz.

Şimdi terminalimize geri dönüyoruz ve aşağıdaki kodu yapıştırıyoruz:

crontab -e

image

Böyle bir ekran açılıyor, Shift + Enter yaparak yorum kısımlarını aşağıya ittiriyoruz ve aşağıdaki kodu buraya yapıştırıyoruz. Bu kod sayesinde node'umuz NEAR Shardnet Ağı'na her 2 saatte bir ping gönderecektir.

0 */2 * * * sh /root/nearcore/scripts/ping.sh

image

Bu şekilde göründüğüne emin olduktan sonra Ctrl + X yapıyoruz. Kaydetmek isteyip istemediğimizi soruyor, Y diyoruz. Dosya adını soruyor, Enter basıyoruz.

Ardından aşağıdaki kodu girip doğru şekilde kaydedip kaydetmediğimize bakabiliriz:

crontab -l

image

Böyle bir çıktı alırsanız doğru yapmışsınızdır, devam edebilirsiniz. Böyle bir çıktı almadıysanız crontab -e kodundan itibaren işlemleri tekrar yapın.

Loglarımızı kontrol etmek için aşağıdaki kodu giriyoruz:

cat /root/logs/all.log

image

İlk oluşturduğunuz zaman dosyanın için hala boşsa panik yapmayın, ping periyodunu 2 saat yaptığımız için veriler buraya 2 saatte bir düşecektir. Oluşturduktan en az 2 saat sonra üstteki komutu denediğinizde boş bir çıktı almayacaksınız.

Örneğin:

image

ÖNEMLİ!

BU GÖREVİ YAPTIKTAN SONRA YOLLAMANIZ GEREKEN BİR FORM VAR. DETAYLARINA https://github.com/thisislexar/stakewars-iii/blob/main/challenges/006.md LİNKİNE GİDEREK AŞAĞIDAKİ ACCEPTANCE CRITERIA'DAN ULAŞABİLİRSİNİZ. YAPMANIZ GEREKEN ŞEY EXPLORER 'A GİDEREK ARAMA KISMINA XX.FACTORY.SHARDNET.NEAR STAKING HAVUZ ID'NİZİ YAZMAK. BİRAZ AŞAĞI İNDİĞİNİZDE AŞAĞIDAKİ GİBİ TRANSACTION'LAR GÖRECEKSİNİZ.

image

BU PING TRANSACTION'LARINDAN 3-4 TANE OLDUKTAN SONRA FORM'A BURAYI SS ALIP SUBMITLİYORUZ. AYRICA EXPLORER LİNK'İMİZİ DE SUBMITLEMEMİZ GEREKİYOR. AŞAĞIYA FORM'U BIRAKIYORUM, GİRİP BAKTIĞINIZDA ANLARSINIZ ZATEN.

FORM: https://docs.google.com/forms/d/e/1FAIpQLScp9JEtpk1Fe2P9XMaS9Gl6kl9gcGVEp3A5vPdEgxkHx3ABjg/viewform

CHALLENGE 8: STAKING ÖDÜLLERİNİN FARKLI HESAPLARA DAĞITILMASI

Kaynak: Stake Wars: Episode III. Challenge 008

Bu bölümde staking havuzumuz sayesinde elde ettiğimiz gelirleri birden fazla hesaba bölüştürme görevini yapıyor olacağız. Bunun için isterseniz yeni hesaplar da açabilirsiniz ama ben rehberi hazırlarken ağda görev yapan diğer validatörlerin cüzdanlarına dağıtım yapacağım size de öyle yapmanızı tavsiye ederim. Çünkü Challenge 8'in resmi dokümanında şöyle bir ifade var: Would you like to contribute to other projects running a validator?

Aşağıda yapacak olduğumuz işlemlerle akıllı sözleşme oluşturacağız, bu sözleşme elde ettiğimiz staking havuz gelirlerini birden fazla hesaba bölmemize olanak tanıyacak.

Başlayalım:

İlk olarak cargo ve Rust'ı yükleyerek başlıyoruz. Rehberin buraya kadar olan kısmını yaptıysanız sizde zaten yüklü olacaktır.

curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

source $HOME/.cargo/env

Zaten yüklüyse aşağıdaki gibi bir uyarı alırsınız, sıkıntı yok bir sonraki komut ile devam edebilirsiniz.

image

wasm32-unknown-unknown araç zincirini ekleyelim:

rustup target add wasm32-unknown-unknown

Staking havuzuyla alakalı gerekli klonlamaları yapalım:

git clone https://github.com/zavodil/near-staking-pool-owner

Akıllı sözleşmemizi derleyelim:

cd near-staking-pool-owner/contract
cargo build --target wasm32-unknown-unknown --release

Burası biraz zaman alacaktır, aşağıdaki gibi finished yazısını gördükten sonra devam edebiliriz.

image

Akıllı sözleşmemizi kendi hesabımıza dağıtalım. <OWNER_ID> kısmını değiştirmeniz gerekiyor. Ne ile değiştireceğinizi komutun hemen aşağısına bıraktım:

NEAR_ENV=shardnet near deploy <OWNER_ID>.shardnet.near --wasmFile target/wasm32-unknown-unknown/release/contract.wasm

<OWNER_ID>: xx.shardnet.near kısmındaki SADECE xx'i girelim.

İşlem gerçekleştikten sonra aşağıdaki gibi bir çıktı alacaksınız. Emin olmak için https:// ile başlayan linki kopyalayıp Google'a yapıştıralım. Hemen bir alttaki görselde gördüğünüz gibi Status kısmında Succeeded yazıyorsa olmuştur.

image

image

Staking gelirlerini farklı hesaplara bölmek için akıllı sözleşmemize hesapları kaydedelim. Birkaç tane değiştirmeniz gereken şey var, yine komutların altına not olarak bırakıyorum:

CONTRACT_ID=<OWNER_ID>.shardnet.near

<OWNER_ID>: xx.shardnet.near kısmındaki SADECE xx'i girelim.

NEAR_ENV=shardnet near call $CONTRACT_ID new '{"staking_pool_account_id": "<STAKINGPOOL_ID>.factory.shardnet.near", "owner_id":"<OWNER_ID>.shardnet.near", "reward_receivers": [["<SPLITED_ACCOUNT_ID_1>.shardnet.near", {"numerator": 3, "denominator":10}], ["<SPLITED_ACCOUNT_ID_2>.shardnet.near", {"numerator": 70, "denominator":100}]]}' --accountId $CONTRACT_ID

<STAKINGPOOL_ID>: xx.factory.shardnet.near kısmındaki SADECE xx'i girelim.

<OWNER_ID>: xx.shardnet.near kısmındaki SADECE xx'i girelim.

<SPLITED_ACCOUNT_ID_1>: Staking gelirini böleceğiniz hesaplardan birisi. xx.shardnet.near kısmındaki SADECE xx'i girelim.

<SPLITED_ACCOUNT_ID_2>: Staking gelirini böleceğiniz hesaplardan diğeri. xx.shardnet.near kısmındaki SADECE xx'i girelim.

Yine uzun ve karmaşık olabileceği için örnek bir komutu aşağıya bırakıyorum. LÜTFEN doğrudan yapıştırmayın, bir işe yaramaz.

Fatih adında bir staking havuzumuz olduğunu varsayalım. Bu staking havuzunun gelirlerini Sultanve Terim arasında paylaştırıyor olalım. Girmeniz gereken komutlar aşağıdakiler gibi olacaktır:

CONTRACT_ID=Fatih.shardnet.near
NEAR_ENV=shardnet near call $CONTRACT_ID new '{"staking_pool_account_id": "Fatih.factory.shardnet.near", "owner_id":"Fatih.shardnet.near", "reward_receivers": [["Sultan.shardnet.near", {"numerator": 3, "denominator":10}], ["Terim.shardnet.near", {"numerator": 70, "denominator":100}]]}' --accountId $CONTRACT_ID

Bir süre bekledikten sonra alttaki gibi bir çıktı alırsınız. Yine teyit etme amacıyla https:// ile başlayan linki kopyalayalım ve Google'a yapıştıralım. Bir alt görselde gördüğünüz gibi Status kısmı Succeeded olmalıdır.

image

BU KOMUTU YAPMADAN ÖNCE BİR SÜRE BEKLEMENİZİ TAVSİYE EDERİM. STAKING HAVUZUNUZDAKİ GELİRLERİN BİRAZ BİRİKMESİ GEREKİYOR. Staking havuzumuzdaki gelirleri 2 farklı hesaba bölüştürmek için akıllı sözleşmemizi devreye soktuk, şimdi ise bu gelirleri withdraw metoduyla bu cüzdanlara dağıtacağız:

Bu komutu girelim.

CONTRACT_ID=<OWNER_ID>.shardnet.near

<OWNER_ID>: xx.shardnet.near kısmındaki SADECE xx'i girelim.

Ardından bu komutu girelim.

NEAR_ENV=shardnet near call $CONTRACT_ID withdraw '{}' --accountId $CONTRACT_ID --gas 200000000000000

Böylelikle staking havuzumuzda elde ettiğimiz gelirleri akıllı sözleşmemiz sayesinde 2 farklı hesaba dağıtmış olduk.

BURASI ÖNEMLİ FORM DOLDURMAYI YAPMAZSANIZ GÖREVİNİZ GEÇERLİ SAYILMAZ, en sonuncu komutu girdikten sonra yine bize aşağıdaki gibi https:// ile başlayan bir link verdi. Bu linki Google'a yapıştırıyoruz ve status kısmında Succeeeded yazdığından emin oluyoruz. Ayrıca bu komuttan aldığımız çıktıyı aşağıdaki gibi tamamı görünecek şekilde screenshot(ekran görüntüsü) alıp kaydediyoruz.

split-log

Ardından https://docs.google.com/forms/d/e/1FAIpQLScp9JEtpk1Fe2P9XMaS9Gl6kl9gcGVEp3A5vPdEgxkHx3ABjg/viewform buraya giderek withdraw kısmında verilen linki aşağıdaki görselde gördüğünüz Challenge URL kısmına yapıştırıyoruz.

image

Sonrasında, az önce withdraw işlemi için aldığımız screenshot'ı aşağıda gördüğünüz Challenge Image kısmına yüklüyoruz.

image

Ardından formun kalanını EKSİKSİZ VE TAMAMEN DOĞRU bir şekilde doldurup gönderiyoruz.

Challenge 8 için yapacaklarımız bu kadar, buraya kadar yaptıklarımızı basitçe özetleyecek olursak;

  • Daha önce cargo ve Rust yüklemediysek cargo ve Rust araçlarını yükledik.

  • wasm32-unknown-unknown araç zincirini ekledik.

  • Staking havuzumuz için gerekli dosyaları klonladık.

  • Akıllı sözleşmemizi derledik.

  • Akıllı sözleşmemizi kendi hesabımız için dağıttık.

  • Akıllı sözleşmemizi staking havuz gelirlerimizi dağıtacağımız iki farklı hesap için kullandık.

  • Akıllı sözleşmemiz sayesinde staking havuz gelirlerimizi başarıyla hesaplara dağıttık.

CHALLENGE 9: VALİDATÖR UPTIME (ÇALIŞMA SÜRESİ) YÖNETİMİ

Kaynak: Stake Wars: Episode III. Challenge 009

Rehberimizin bu bölümünde analiz ve raporlama için RPC 3030 port'unu açıyor olacağız. Ayrıca bu görevi tamamlamak için ShardNet ağında %70'in üzerinde Uptime yakalamamız gerekiyor.

‼️ Unutmayın, MainNet üzerinde çalışan bir validatöre sahipseniz uptime'ınızın %95'ten yüksek olması gerekir. Aksi taktirde, aktif setten 3 epoch'a kadar atılabilirsiniz ve staking ödüllerinizi alamazsınız.

----------------------------------------💡Bilgi Köşesi💡----------------------------------------

Bir validatör, tam olarak senkronize olmadan ağa ping gönderirse bunun ağa bir saldırı olarak kabul edilmekte olduğunu biliyor muydunuz?

-------------------------------------💡Bilgi Köşesi Bitti💡-------------------------------------

Yukarıda bahsettiğim gibi, bu görevin "uptime" kısmının geçerli sayılabilmesi için önemli başlıklar var. Bunlar:

Challenge 9'un geçerli sayılabilmesi için önemli olan diğer bir kısım ise " Teşhis raporlaması için 3030 port'unu açmak"

3030 port'unun açık olup olmadığını kontrol etmek için aşağıdaki komutu giriyoruz:

sudo iptables -L | grep 3030

Eğer aşağıdaki görseldeki gibi herhangi bir çıktı vermeden komut alma satırına geçiyorsa görselin hemen altındaki komutu girip 3030 port'umuzu açıyoruz:

image

sudo iptables -A INPUT -p tcp --dport 3030 -j ACCEPT

Açtıktan sonra sudo iptables -L | grep 3030 komutunu girdikten sonra aşağıdaki gibi bir çıktı gözükecektir.

image

Sunucu yeni başlatmaları için yapılandırma ayarlarını kaydediyoruz:

İlk olarak iptables-persistent'ı yüklüyoruz:

sudo apt install iptables-persistent

image

Bu kısıma 'Y' yazıp enter'lıyoruz.

Ardından aşağıdaki komutla devam ediyoruz:

sudo dpkg-reconfigure iptables-persistent

image

Bu kısımda da <Yes> kısmına gelip enter basıyoruz.

image

Burada da yine aynı şekilde <Yes> kısmına gelip enter basıyoruz.

Aşağıdaki linke gidip 3030 port'umuzu açtığımızı teyit ediyoruz, <YOUR IP> kısmına validatörü kurduğunuz sunucunun IP'sini yazacaksınız:

http://<YOUR IP>:3030/status

Ya da diğer bir çözüm olarak aşağıda bıraktığım siteye giderek 3030 port'unun açık olup olmadığını kontrol edebilirsiniz:

https://www.yougetsignal.com/tools/open-ports/

image

Burada gösterdiğim gibi open gözüküyorsa açıktır.

ÖNEMLİ! BU CHALLENGE İÇİN FORM'U TEKRAR SUBMITLİYORUZ.

  • Challenge URL: http://<YOUR IP>:3030/status

<YOUR IP> kısmını sunucu IP'nizle değiştireceksiniz tabiki.

  • Challenge image: Leaderboard'da validatörünüzün uptime'ının screenshot (ekran görüntüsü)'ı

FORM LİNKİ: https://docs.google.com/forms/d/e/1FAIpQLScp9JEtpk1Fe2P9XMaS9Gl6kl9gcGVEp3A5vPdEgxkHx3ABjg/viewform

Challenge 9 bu kadardı, nispeten diğer Challenge'lara göre daha kısa ve kolay. Challenge 9'da yaptıklarımızı özetlersek;

  • Leaderboard üzerinde validatörümüzün uptime'ına ve diğer metriklere göz attık.

  • 3030 port'unu açtık.

  • iptables-persistent'ı yükledik ve konfigürasyon ayarlamaları yaptık.

  • 3030 port'umuzu public olarak görüntüledik.

About

NEAR Stake Wars III için Validator Kurulum Rehberi

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published