Cryptoloss / NEAR-Stake-Wars-III

NEAR Stake Wars III için Validator Kurulum Rehberi

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.

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 11 Ağustos. 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ş. Bizim de buna göre bir sunucu kiralayıp işlemlerimizi bu sunucu üzerinde yapmamız gerekiyor. Ayrıca sunucu temin ettiğimiz şirketin de sağ tarafta listeli olanlardan olmasına dikkat edelim.

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.

image image

Soldaki görselde gördüğünüz gibi Regular with SSD'ye tıklıyoz, 48$ olan sunucuyu seçiyoruz ve sistem gereksinimlerinde bulunan 500 GB SSD'yi karşılayabilmek için Add Block Storage'a tıklıyoruz. Açılan kısımda 500 GB'yi 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.

İ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

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 --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | 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 nearcore
git fetch

Ardından bu kodla devam ediyoruz:

git checkout 0f81dca95a55f975b6e54fe6f311a71792e21698

Şimdi ise klonladığımız nearcore'u çalıştıracağız, bu kodun çalışması biraz uzun sürebilir:

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

Bu kısımda eğer No such file tarzı bir uyarı veriyorsa yanlış klasördesinizdir, cd 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 ~/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.

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 nearcore komutunu girip tekrar deneyin.

image

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

Systemd ayarlarını yapıyoruz:

sudo vi /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 Shift + Z + Z yapıyoruz. Shift'ten elimizi çekmeden iki kere arka arkaya Z'ye bası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 reload 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İ

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

  • <account_id>: xx.shardnet.near kısmındaki xx'i gireceksiniz

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

About

NEAR Stake Wars III için Validator Kurulum Rehberi