NEAR Stake Wars III için Validatör Kurulum Rehberine hoşgeldiniz. Kuruluma geçmeden önce NEAR Stake Wars hakkında bilgi vermek istiyorum.
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.
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.
-
- Shardnet cüzdanı oluşturma ve NEAR CLI'yi yükleme
-
- Sunucu kurulumunu yapma ve validatör node'u aktive etme
-
- Staking pool oluşturma ve delege/stake etme işlemleri
-
- Node durumunu görüntülemek için ayarlamalar
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.
Hesap oluştur'a tıklıyoruz.
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.
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.
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.
Burada size kenara not aldığınız kelimelerden rastgele bir tanesini soruyor, doğru cevabı yazıp Doğrula & Tamamla'ya tıklıyoruz.
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 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.
Kaydolduktan sonra bu noktada bizden kredi kartı ve adres bilgileri istiyor. Burayı doğru bir şekilde dolduruyoruz.
Bizi bu sayfa karşılıyor, Kontrol Panelimizi Keşfedin'e tıklıyoruz ve Kontrol Paneline gidiyoruz.
Görselde görüldüğü gibi 100$ kredimiz aktive oluyor, create diyoruz ve droplet'e tıklıyoruz.
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.
Üstteki görselde gördüğünüz gibi Regular with SSD'ye tıklıyoruz, 48$ olan sunucuyu seçiyoruz.
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.
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.
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.
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.
Açılan sayfada Console'a tıklıyoruz ve yeni bir pencerede Terminalimiz açılıyor. Terminalin yüklenmesini bekliyoruz.
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.
sudo su
sudo apt update && sudo apt upgrade -y
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
Ö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.
Ş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
Ş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)
export NEAR_ENV=shardnet
echo 'export NEAR_ENV=shardnet' >> ~/.bashrc
echo 'export NEAR_ENV=shardnet' >> ~/.bash_profile
source $HOME/.bash_profile
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
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
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.
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"
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.
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
sudo apt install python3-pip
USER_BASE_BIN=$(python3 -m site --user-base)/bin
export PATH="$USER_BASE_BIN:$PATH"
sudo apt install clang build-essential make
curl -sf -L https://static.rust-lang.org/rustup.sh | sh
Böyle bir kod çıkarsa y'ye basıp enter'a basıyoruz.
source $HOME/.cargo/env
git clone https://github.com/near/nearcore
cd $HOME/nearcore
git fetch
git checkout fe435d02c5ea497933c89d5e7d1703d9379b7e1f
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.
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
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şturulanconfig.json
boş bir dizi gösterir. Bu nedenleconfig.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ğumuzconfig.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
Ö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/
cd $HOME/nearcore
./target/release/neard --home ~/.near run
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İ
near login
Böyle bir soru soruyor, "y" yazıp enter'a basıyoruz.
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.
Bizi böyle bir sayfa karşılıyor, mavi Sonraki
butonuna tıklıyoruz.
Açılan sayfada Bağlan
'a tıklıyoruz.
Hesap kimliğimizi istiyor, görseldeki gibi hesap kimliğimizi yazıyoruz ve Onayla
'ya tıklıyoruz.
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.
Birkaç denemeden sonra alttaki gibi bir çıktı aldım, başarıyla cüzdanı node'a bağladım.
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>
Bizi böyle bir sayfa karşılıyor.
Sunucu adına yukarıdaki Digital Ocean kontrol paneli'nde NEAR Stake Wars için oluşturduğumuz sunucunu IP'sini yazıyoruz.
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.
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.
.near-credentials
bu dosyanın içine girin.
shardnet
klasörüne girin.
Burada 2 farklı .json
dosyası var. Bunlardan xx.factory.shardnet.near
olana giriyoruz.
Bizi böyle bir dosya karşılıyor. Bu dosyanın içeriğinin tamamını kopyalıyoruz ve dosyayı kapatıyoruz.
Şimdi yukarıdaki root yazısına tıklayarak ana dizine geliyoruz.
Buradaki .near
dosyasının içine giriyoruz.
Boş bir yere tıklayıp yeni dosya oluştur diyoruz.
Dosyamızın ismini validator_key.json
yapıyoruz. Burası önemli dosya ismini doğru yazdığınızdan emin olun.
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.
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
Eğer yukarıdaki komutu girerken No such file or directory
hatası alırsanız cd $HOME/nearcore
komutunu girip tekrar deneyin.
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İ
sudo nano /etc/systemd/system/neard.service
[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
- Ctrl + X
- Y
- Enter'a basıp kapatıyoruz.
sudo systemctl enable neard
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
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.
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
-
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.
-
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
, venode_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.
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.
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
-
<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ınaspiderman
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.
.near klasörüne giriyoruz.
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.
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
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
Yukarıdaki gibi bir çıktı alırsanız değişmiş demektir.
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
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
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
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 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
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
Buradaki o uzun yeşil 2500000xxx şeklinde devam eden sayı 250 NEAR demek oluyor.
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
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
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
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.
Aşağıdaki komut sayesinde staking işleminizi durdurabilirsiniz.
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.
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
-
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.
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ı 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.
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
sudo apt install curl jq
Buradaki gibi devam etmeyi isteyip istemediğimizi soracaktır, Y yazıp enter'a basıyoruz.
curl -s http://127.0.0.1:3030/status | jq .version
Bu tür bir çıktı gelecektir.
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
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
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
Stake havuzunu yeni açtıysanız ve daha henüz aktif validatör değilseniz herhangi bir çıktı almazsınız.
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
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.
Root dizininde sağ tıklayıp yeni klasör oluştur diyoruz.
Klasörün adı logs
olacak.
Oluşturduğumuz klasörün içine giriyoruz.
Boş bir klasör bizi karşılıyor, sağ tıklayıp bu sefer dosya oluştur diyoruz.
Dosyanın adı all.log
olacak şekilde oluşturuyoruz.
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.
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.
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.
Buradaki root
yazısına tıklayarak root dizinimize geri dönüyoruz.
nearcore
dosyamızın içine giriyoruz.
nearcore
klasörümüzün içinde scripts
klasörünü bulup içine giriyoruz.
Klasörümüzün içinde boş bir yere sağ tıklayıp dosya oluştur diyoruz.
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 SADECEnearstakewars
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 SADECEnearstakewars
yazmalıyım.
Değişiklikleri yaptıktan sonra Ctrl + S yaparak dosyayı kaydediyoruz ve kapatıyoruz.
crontab -e
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
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
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
İ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:
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.
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
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.
İ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.
rustup target add wasm32-unknown-unknown
git clone https://github.com/zavodil/near-staking-pool-owner
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.
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.
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 Sultan
ve 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.
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.
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.
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.
Ardından formun kalanını EKSİKSİZ VE TAMAMEN DOĞRU bir şekilde doldurup gönderiyoruz.
-
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.
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:
-
ShardNet üzerindeki uptime'ımızın %70'in üzerinde olması gerekiyor. Validatörümüzün uptime'ını ve diğer metriklerini öğrenmek için ShardNet Uptime Leaderboard'a gidiyoruz ve validatör ismimizi aratıyoruz.
-
Eğer %70'in altında bir değere sahipse buna neden olan "chunk üretme" sorunlarını ortadan kaldırmamız gerekiyor. Bunun için buraya bakmanızı öneririm: https://github.com/near/stakewars-iii/blob/main/challenges/troubleshooting.md
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"
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:
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.
sudo apt install iptables-persistent
Bu kısıma 'Y' yazıp enter'lıyoruz.
sudo dpkg-reconfigure iptables-persistent
Bu kısımda da <Yes>
kısmına gelip enter basıyoruz.
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/
Burada gösterdiğim gibi open
gözüküyorsa açıktır.
- 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.